十岁的小男孩

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

Sparse Block Net

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

论文: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

Layer-level的快速算法的更多相关文章

  1. Op-level的快速算法

    十岁的小男孩 本文为终端移植的一个小章节. 目录 引言 FFT Conv2d (7x7, 9x9) Winograd Conv2d (3x3, 5x5) 引言 本节针对CNN进行加速计算的,主要有以下 ...

  2. MinFilter(MaxFilter)快速算法C++实现

    目录 1.算法简述 1.1.MinFilter(MaxFilter) 算法简述 1.2.MinFilter(MaxFilter) 快速算法简述 2.实现代码 2.1.MinFilterOneRow 单 ...

  3. 从大整数乘法的实现到 Karatsuba 快速算法

    Karatsuba 快速乘积算法是具有独特合并过程(combine/merge)的分治算法(Karatsuba 是俄罗斯人).此算法主要是对两个整数进行相乘,并不适用于低位数(如 int 的 32 位 ...

  4. 自动色彩均衡(ACE)快速算法

    ACE算法源自retinex算法,可以调整图像的对比度,实现人眼色彩恒常性和亮度恒常性,通过差分来计算目标点与周围像素点的相对明暗关系来校正最终像素值,有很好的增强效果.但是计算复杂度非常高,本文提出 ...

  5. 产生N个不重复的随机数的快速算法

    //seed array ,,,,,,,,,}; //随机数个数 ; //结果存放在里面 ]; ; i < N; i++) { //从剩下的随机数里生成 , startArray.length ...

  6. 多项式相乘快速算法原理及相应C代码实现---用到fft

    最近认真研究了一下算法导论里面的多项式乘法的快速计算问题,主要是用到了FFT,自己也实现了一下,总结如下. 1.多项式乘法 两个多项式相乘即为多项式乘法,例如:3*x^7+4*x^5+1*x^2+5与 ...

  7. layer插件loading快速应用示例

    1.页面引用<link rel="stylesheet" href="../Js/layer/skin/layer.css"  /><scri ...

  8. 求素数的一个快速算法 Python 快速输出素数算法

    思想 以100以内为例. 生成一个全是True的101大小的数组 2开始,遇到2的倍数(4,6,8,10...)都赋值为False 因为这些数字都有因子 2 3开始,遇到3的倍数(6,9,12...) ...

  9. 图像处理之基础---卷积及其快速算法的C++实现

    头文件: /* * Copyright (c) 2008-2011 Zhang Ming (M. Zhang), zmjerry@163.com * * This program is free so ...

随机推荐

  1. linux 查看文件夹大小

    参考链接:  http://www.cnblogs.com/iconfig/p/4863063.html

  2. Spring的aop操作

    1 在spring里面进行aop操作,使用aspectj实现(1)aspectj不是spring一部分,和spring一起使用进行aop操作(2)Spring2.0以后新增了对AspectJ支持2 使 ...

  3. HashSet、TreeSet和LinkedHashSet分别基于HashMap、TreeMap和LinkedHashMap

    1.如果你需要一个访问快速的Set,你应该使用HashSet: 当你需要一个排序的Set,你应该使用TreeSet: 当你需要记录下插入时的顺序时,你应该使用LinedHashSet. 2.因为Tre ...

  4. java.io.IOException: Server returned HTTP response code: 411 for URL

    今日调用一post方式提交的http接口,此接口在测试环境ip调用时无问题,但在生产环境通过域名调用时一直报如下错误: java.io.IOException: Server returned HTT ...

  5. Django中模板语音变量forloop

    forloop.counter   从1开始 forloop.counter0 从0开始 forloop.revcounter  倒序(表示循环中剩余项的整型变量.) forloop.revcount ...

  6. ping 丢包或不通时链路测试说明【转】

    转自:https://help.aliyun.com/knowledge_detail/40573.html?spm=5176.2020520165.121.d157.4fe170291Qdp4l#W ...

  7. BCG界面库

    之前用过BCG界面库中的表格控件,深感其强大,现在再来用一下其它的. 一.   关于BCGControlBar. BCGControlBar是一个基于MFC的扩展库,您可以通过完全的用户化操作构成一些 ...

  8. 解决:fatal error LNK1104: 无法打开文件“libc.lib”

    今天使用VS2017编译比较老的VC++项目,出现了[fatal error LNK1104: 无法打开文件“libc.lib”]的链接器问题,解决方法如下: 项目->属性中->配置属性- ...

  9. java使用RunTime调用windows命令行

    当Java需要调用windows系统进行交互时,可以使用Runtime进行操作. 例子: 1.调用window中获取关于java相关的进行信息 Runtime rt = Runtime.getRunt ...

  10. Android录制音频的三种方式

    对于录制音频,Android系统就都自带了一个小小的应用,可是使用起来可能不是特别的灵活.所以有提供了另外的俩种. 下边来介绍下这三种录制的方式; 1.通过Intent调用系统的录音器功能,然后在录制 ...