zoukankan      html  css  js  c++  java
  • Layer-level的快速算法

    十岁的小男孩

      本文为终端移植的一个小章节。

    Sparse Block Net

      本节为优化加速的第二章节,主要介绍Sparse-block net。上章节为OP算子层的加速,本节为层级间的加速,主要针对CNN的加速。首先通过看一篇大佬的博客,之后通过一篇论文实际应用在网络层级结构。

    论文:SBNet: Sparse Blocks Network for Fast Inference

      论文地址  GitHub源码  论文解读

      稀疏块网络(SBNet),这是一种用于TensorFlow的开源算法,通过利用CNN激活中的稀疏性来加速推理。SBNet允许通过更深和更宽的网络配置进行实时推断,从而在减少的计算预算内实现精度增益。

      出于我们的算法的目的,我们从掩码中定义块稀疏性,该掩码表示激活非零的位置。这个掩码可以来自问题的先验知识,或者仅仅来自阈值平均激活。为了利用高度优化的密集卷积运算符,我们定义了两个运算,将稀疏激活转换为仅包含非零元素的较小特征映射。

      SBNet 通过首先使用来自输入张量的重叠块对注意掩码执行池化操作并将其转换为传递给块收集操作的索引列表来实现此目的,如下面的图1所示:


      图1.为了利用CNN激活中的稀疏性,SBNet首先将计算掩码转换为瓦片索引列表。

      然后, 收集操作获取切片并将它们沿批量维度堆叠在一起形成新的张量。然后使用现有的密集卷积的优化实现,然后定制的散布操作执行逆操作,将结果写在原始密集输入张量之上。下面的图2显示了我们提出的使用稀疏聚集/分散操作的稀疏卷积机制:

      图2.我们提出的稀疏卷积层利用稀疏分散/聚集操作来加速推理。

      当我们为SBNet设计稀疏操作API时,我们希望能够轻松地集成到流行的CNN架构中,例如 ResNetInception,以及其他定制的CNN构建块。为实现这一目标,我们为我们引入的三个基本操作发布了CUDA实现和TensorFlow包装器:reduce_mask sparse_gather sparse_scatter 使用这些低级操作,可以将块稀疏性添加到不同的CNN架构和配置。

    知识应该是开源的,欢迎斧正。929994365@qq.com

  • 相关阅读:
    TCP并发服务器(一)——每个客户一个子进程
    TCP并发服务器(六)——创建线程池,每个线程accept,accept使用互斥锁保护——基于UNP代码
    TCP并发服务器(七)——可动态增减的线程池,主线程accept——基于UNP代码修改
    STL源码之vector
    coffee-script安装
    Python模块包中__init__.py文件的作用
    原型模式
    facade模式
    类继承模式
    备忘模式
  • 原文地址:https://www.cnblogs.com/missidiot/p/9934071.html
Copyright © 2011-2022 走看看