近期,动态网络在加速推理这方面有很多研究,DGC(Dynamic Group Convolution)将动态网络的思想结合到分组卷积中,使得分组卷积在轻量化的同时能够加强表达能力,整体思路直接清晰,可作为网络设计时的一个不错的选择



来源:晓飞的算法工程笔记 公众号

论文: Dynamic Group Convolution for Accelerating Convolutional Neural Networks

Introduction


  分组卷积目前广泛应用于轻量级网络中,但论文分析发现分组卷积有两个致命的缺点:

  • 由于引入稀疏连接,减弱了卷积的表达能力,导致性能的降低,特别对于难样本。

  • 固定的连接模式,不会根据输入样本的特性而改变。而论文通过可视化DenseNet中间层的输入维度对输出维度的贡献发现,不同的输入维度对不同的输出的贡献是不一样的,而且这个贡献关系在不同的输入样本之间也存在差异。

  参考动态网络的思想,论文提出动态分组卷积(DGC, dynamic group convolution),为每个分组引入小型特征选择器,根据输入特征的强度动态决定连接哪些输入维度,而多个分组能捕获输入图片中不同的互补特征,学习到丰富的特征表达能力。为此,动态分组卷积能够在保持原网络的完整结构下,自适应地为每个分组的选择最相关输入维度。

Group-wise Dynamic Execution


  DGC的结构如图2所示,将输出维度分成多个分组,每组都配有辅助head,用来决定那些输入维度用于卷积计算。每个分组的逻辑如下:

  1. saliency generator生成输入维度的重要性分数。
  2. input channel selector采用gating策略根据重要性评分来动态决定输入维度最重要部分。
  3. 对选择的输入维度子集进行正常的卷积操作。

  最后,将所有head的输出concate并打乱,送入后续的BN层和激活层。

Saliency Generator

  saliency generator为每个输入维度指定一个分数用来表示其重要程度,每个head都有特定的saliency generator,用来引导不同的head使用不同的输入维度,从而增加特征的多样化表达。saliency generator遵循了SE block的设计,对于第\(i\)个head,重要性向量\(g^i\)的计算为:

  \(g^i\in \mathbb{R}^{1\times C}\)代表输入维度的重要性向量,\((z)_+\)代表ReLU激活,\(p\)将每个输入特征图缩小为单个标量,论文采用使用全局平均池化,\(\beta^{i}\)和\(W^{i}\)为可学习参数,\(\beta^{i}\)为偏置,\(W^{i}\)两部转换操作\(\mathbb{R}^{1\times C}\mapsto \mathbb{R}^{1\times C/d}\mapsto \mathbb{R}^{1\times C}\),其中d为压缩比。这里的\(x^{i}\)为全部输入维度,即在每个head中,所有的输入维度都是候选。

Gating Strategy

  在获得重要性向量后,下一步是决定当前head选择哪些输入维度参与后续的卷积操作,可以用head-wise阈值或network-wise阈值来过滤分数较低的输入特征。论文使用的是head-wise阈值,给定目标裁剪比例\(\zeta\),第\(i\)个head的阈值\(\tau^{i}\)满足:

  重要性分数有两个作用:1) 重要性分数小于阈值的将被去除 2) 剩余的维度会使用对应的重要性分数进行加权,得到加权特征\(y^{i}\in \mathbb{R}^{(1-\zeta)C\times H\times W}\)。假设head数量为\(\mathcal{H}\),第\(i\)个head的卷积核为\(w^{i}\subset \theta^{i}, \theta^{i} \in \mathbb{R}^{k\times k\times C\times \frac{C^{'}}{\mathcal{H}}}\),则对应的卷积计算为:

  公式7其实就是将选择的特征和对应的权值选出来进行常规卷积计算,\(\mathcal{I}_{top} \lceil k\rceil (z)\)返回\(z\)中最大的\(k\)个元素的下标,输出\(x^{'i}\in \mathbb{R}^{\frac{C^{'}}{\mathcal{H}}\times H^{'}\times W^{'}}\),\(\otimes\)为常规卷积。在DGC的最后,各输出会合并然后打乱,输出\(x^{'}\)。

  为了让重要性分数尽量稀疏,引入lasso损失:

  \(\mathcal{L}\)为DGC层数,\(\lambda\)为预设的超参数。

Computation Cost

  卷积核大小为\(k\)的常规卷积MAC为\(k^2C^{'}CH^{'}W^{'}\),而DGC中,每个head的saliency generator和卷积的MAC为\(\frac{2C^2}{d}\)和\(k^2(1-\zeta)C\frac{C^{'}}{\mathcal{H}}H^{'}W^{'}\)。所以DGC层的MAC相对于常规卷积的节省比例为:

  head的数量\(\mathcal{H}\)几乎对整体的计算消耗没有影响。

Invariant to Scaling

  DGC方法整体思想与动态剪枝算法FBS有点类似,FBS算法的流程如上图所示,计算的是输出维度的重要性分数,在最后的特征输出时使用重要性分数进行了加权,没有采用BN。这种加权方式会导致每个样本的特征分布差异较大,造成internal covariate shift问题。

  而DGC虽然也使用重要性分数进行特征加权,但其对最后的卷积结果进行BN+ReLU归一化来避免这个问题:

Training DGC Networks

  DGC网络从零开始训练,不需要预训练模型。在反向传播阶段,仅计算推理时选择的维度的相关权值的梯度,其它设为零。为了防止剪枝导致训练损失变化过大,在训练过程逐步增加裁剪比例\(\zeta\)。整体训练分为3个阶段,第一阶段(前1/12 epochs)用于warm up,第二阶段逐步提升剪裁比例进行训练,第三阶段(后1/4 epochs)用于fine-tune稀疏网络,学习率下降采用余弦退火下降方法。

Experiments


  与剪枝方法和动态维度选择方法对比,DGC-G使用network-wise阈值进行维度选择,这个阈值是在训练中学习来的。

  与其它轻量级网络对比。

  不同参数设置的性能对比。

  可视化浅层和深层的重要性分数和过滤情况。

  DGC网络某层的其中一个head对于各输入维度的裁剪概率。

Conclustion


  DGC(Dynamic Group Convolution)将动态网络的思想结合到分组卷积中,使得分组卷积在轻量化的同时能够加强表达能力,整体思路直接清晰,可作为网络设计时的一个不错的选择。





如果本文对你有帮助,麻烦点个赞或在看呗~

更多内容请关注 微信公众号【晓飞的算法工程笔记】

DGC:真动态分组卷积,可能是解决分组特征阻塞的最好方案 | ECCV 2020 Spotlight的更多相关文章

  1. CondenseNet:可学习分组卷积,原作对DenseNet的轻量化改造 | CVPR 2018

    CondenseNet特点在于可学习分组卷积的提出,结合训练过程进行剪枝,不仅能准确地剪枝,还能继续训练,使网络权重更平滑,是个很不错的工作   来源:晓飞的算法工程笔记 公众号 论文:Neural ...

  2. Java_java动态编译整个项目,解决jar包找不到问题

    java动态编译整个项目,解决jar包找不到问题原文:http://itzyx.com/index.php/javac/ 动态将java文件编译为class文件解决方案:将temp\sdl\src目录 ...

  3. 使用jquery的load方法设计动态加载,并解决浏览器前进、后退、刷新等问题

    继上一篇 使用jquery的load方法设计动态加载,并解决被加载页面JavaScript失效问题 解决了后台业务系统的部分动态加载问题,然而该框架离正常的用户体验还存在一些问题,如:浏览器的前进.后 ...

  4. Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution

    目录 写在前面 Convolution VS Group Convolution Group Convolution的用途 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在 ...

  5. 分组卷积+squeezenet+mobilenet+shufflenet的参数及运算量计算

    来一发普通的二维卷积 1.输入feature map的格式为:m * m * h1 2.卷积核为 k * k 3.输出feature map的格式为: n * n * h2 参数量:k * k * h ...

  6. php面试题二--解决网站大流量高并发方案(从url到硬盘来解决高并发方案总结)

    php面试题二--解决网站大流量高并发方案(从url到硬盘来解决高并发方案总结) 一.总结 从外到内解决网站大流量高并发问题---从提交一个url开始(从用户按下搜索栏回车键开始) url最开始会到d ...

  7. SEPC:使用3D卷积从FPN中提取尺度不变特征,涨点神器 | CVPR 2020

    论文提出PConv为对特征金字塔进行3D卷积,配合特定的iBN进行正则化,能够有效地融合尺度间的内在关系,另外,论文提出SEPC,使用可变形卷积来适应实际特征间对应的不规律性,保持尺度均衡.PConv ...

  8. 微信分组群发45028,微信分组群发has no masssend quota hint

    微信分组群发45028,微信分组群发has no masssend quota hint >>>>>>>>>>>>>> ...

  9. echarts解决一些大屏图形配置方案汇总

    本文主要记录使用echarts解决各种大屏图形配置方案. 1.说在前面 去年经常使用echarts解决一些可视化大屏项目,一直想记录下使用经验,便于日后快速实现.正好最近在整理文档,顺道一起记录在博客 ...

  10. Python中正则匹配使用findall,捕获分组(xxx)和非捕获分组(?:xxx)的差异

    转自:https://blog.csdn.net/qq_42739440/article/details/81117919 下面是我在用findall匹配字符串时遇到的一个坑,分享出来供大家跳坑. 例 ...

随机推荐

  1. U盘安装win7提示缺少所需的CD/DVD驱动器设备驱动程序

    问题: 最近使用U盘启动盘安装win7,系统弹出提示框: 解决方法: U盘别插在usb3.0的口(蓝色),换成一个usb2.0的口就可以了

  2. WinRT: 可能是 Windows 上最好用的 Native ABI 和远程调用方案

    前言 Windows 自从很久以来就有一个叫做 COM 的 Native ABI.这是一套面向对象的 ABI,在此之上 Windows 基于 COM ABI 暴露了各种各样的 API,例如 Manag ...

  3. 在Windows10中安装解压版MySQL 8.X

    在Windows 10中安装解压版的MySQL 8.X实现步骤: 1.下载MySQL安装包:https://dev.mysql.com/downloads/mysql/ 解压到指定目录,比如:D:\o ...

  4. xadmin后台的安装及配置使用

    安装 pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2 在settings.py中注册如下应用 INSTALLED_ ...

  5. 记一个 Duplicate class kotlin-stblib vs kotlin-stdlib-jdk7/8 编译问题引发的案例

    某天将项目 kotlin 版本升级到了 1.8.0 ,然后编译报错了, Duplicate class kotlin-stblib vs kotlin-stdlib-jdk7/8 然后开始寻求解决方案 ...

  6. 2.Go 的指针

    Go的指针 1. 变量内存地址 var age = 18 // & + 变量 = 变量内存地址 fmt.Println("age:",&age) 2. 指针变量 / ...

  7. 【Azure Logic App】在Logic App中使用 Transfer XML组件遇见错误 undefined

    问题描述 在Azure Logic App中,使用Transform XML组件进行XML内容的转换,但是最近这个组件运行始终失败. 问题解答 点击Transform XML组件上的错误案例,并不能查 ...

  8. 【Azure 应用服务】App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢?

    问题描述 App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢? 问题解答 答案是可以的,Azure App Service .NE ...

  9. 【Azure Redis 缓存】Redis导出数据文件变小 / 在新的Redis复原后数据大小压缩近一倍问题分析

    问题描述 使用 Azure Cache for Redis 服务,在两个Redis服务之间进行数据导入和导出测试.在Redis中原本有7G的数据值,但是导出时候发现文件大小仅仅只有30MB左右,这个压 ...

  10. consul 的 HTTP API 和使用方法

    目录 搭建起 consul Consul 的 HTTP API Service API 简单地注册服务 健康检查的配置和查询 建议读者先学习笔者的另一篇文章 学习搭建 Consul 服务发现与服务网格 ...