首发于极市平台微信号:图像分类:常用分类网络结构(附论文下载)
作者:TeddyZhang
如有兴趣可以**点击加入极市CV专业微信群**,获取更多高质量干货

本文整理了一般常用的图像特征提取网络,下图是笔者整理的近年来图像分类网络的论文以及所在期刊,在极市平台公众号(id:extrememart)后台回复“图像分类”即可获取下载链接。

下面来介绍几种常用于分类问题的DNN,以及各自的特点,提取特征的新思路!对于以后做研究或者分类任务有很大的用处!本文篇幅较长,建议收藏阅读~

(一)VGG Net、ResNet、ResNeXt、DenseNET、SE-Net

VGG Net (ICLR2015)


在VGG Net中,作者探讨了7x7的卷积核和3x3的卷积核的区别?那么我们使用3x3的卷积核,得到了什么呢?第一,利用三个非线性的激活层来代替一个,可以增加网络的鉴别能力,第二,单个7x7卷积核的参数量为,而三个级联的3x3卷积核参数量为, 参数量减少了大约81%。Model C中的1x1的卷积核也是一种增加非线性而不改变感受野的方法,额外增加非线性的方法就是激活函数,由于VGG有16层和19层,已经属于深层神经网络了,所以其参数量很大,130多兆了!

ResNet (CVPR2016)

ResNet由何凯明等人提出,为了去构建更加深的网络而提出的。从历届ImageNet冠军看出,神经网络的层数是越来越多,那么更深的网络其性能就更好么?实验发现并不是这样,当网络层数过多后,会出现梯度消失的问题,从而网络会饱和导致精度下降。

所以作者提出了一种跳过连接的方式来解决这个问题,也就是我们把输入跨层连接到下一层,通过网络的训练让其更加关注网络之间的变化,即残差。

对于输入输出维度一致的,我们可以直接使用H(x)=f(x)+x来进行连接,如果维度不一致,也就是进行降采样的时候,会使用1x1的卷积核去调整维度以及feature map的大小!

最后的resnet的效果图,非常的漂亮!

ResNeXt (CVPR2017)

之前的ResNet关注的更多的是网络的深度,而同一时期的Inception系列关注更多的是网络的宽度,所以ResNeXt也开始在网络宽度上进行探索,并引入了一个cardinality的概念,主要利用的是分组卷积,什么是分组卷积呢?我们通过两张图片来感受一下:

我们可以明显的看出,经过分组卷积后,参数量减少了,举一个例子,假如一个卷积层输入通道为256,输出通道也为256,正常卷积的话,参数量为256x3x3x256。但是如果进行分组卷积且组数为8的话,那么每个组卷积的输入和输出通道均为32,共8组,那么参数量为8x32x3x3x32,参数量降低了8倍。然后将每个组的输出进行concate,这样可以增加卷积核之间的相关性,并防止过拟合。当然这个分组处理的方式还很多,不限于concate。

如上图,最后一种为分组卷积的方式,前面两种也是作者尝试的两种结构。一般我们设置cardinality C=32, d=4,那么参数量为:

大约70k FLOPs

我们经常见的ResNeXt-101(32x4d)就是深度为101的上面的网络结构。

DenseNet(CVPR 2017)


本篇论文从图中可以看出,是对ResNet进行了改进,作者总结了一下近几年的文章,在提高网络性能方面要么网络越深,要么网络越宽,但作者使用了一个更为激进的特征重用策略,把ResNet的单层特征重用扩展到多层,但参数量更少。相比于ResNet,其有很多优点,比如多层直接连接加强了特征的传递,减轻了梯度消失的现象,减少了参数量!正是因为参数量的减少,其具有一定的防止过拟合的能力!

在ResNet中,一层的输出直接与其输入相加:


而,在DenseNet中,用concat的方式来替代相加的方式:

作者认为直接相加的方式会阻碍信息在网络的流动,所以很简单的实现就是将所有的feature map直接拼接。但这种直接的拼接方式会使得最后得到的featuremap通道数急剧增加,因此作者并没有将这种方式应用到整个网络,而是设计成Dense Block,整个网络方式如下图:

第一个图中的growth rate也就是k,是指每个函数产生k个featuremap, 所以第 L 层就会有个feature map,所以相比于其他网络,DenseNet可以拥有很窄的层,也就是说k可以很小,如12或者32。虽然每个卷积层只产生k个feature map, 但是由于多支路的跳过连接,因此输入还是很多通道,如何解决呢?

1. Bottleneck Layers, 把每个卷积层设计成效率更高的形式,也就是先使用1x1的卷积核进行降维到4k的feature map,然后再送进3x3的卷积中,即BN-ReLU-Conv1x1-BN-ReLU-Conv3x3的结构,注意这是在DenseBlock内进行参数缩减,称为DenseNet-B
2. Compression,在每个DenseBlock相连接的地方,即transition layers,加入一个DenseBlock输出m个feature map,那么我们使用transition中的1x1卷积使其输出为, 论文中,称为DenseNet-C
3. DenseNet-BC为两者操作均有的DenseNet

SE-Net (CVPR2018)

SE的全称为Sequeeze-and-Excitation,SE block并不是一个完整的网络结构,而是一个子模块,可以嵌入到其他的分类或者检测模型,其思想核心是通过网络根据loss函数去学习特征权重,使得有效的feature map权重大,而无效的小一些,从而使得模型精度更高。

那么SE block是怎么去衡量featuremap的权重呢?其主要包括Squeeze和Excitation两个部分,下面是其结构图:

  1. 操作:这个在与其他网络结合时就是一个标准卷积操作而已,公式定义如下, 其中X为原张量,U为后的输出,表示第c个卷积核。这就是一个单纯的卷积操作!
  1. 操作:为了解决利用信道依赖性的问题,我们考虑输出特征的每一个通道,每个通道都有各自的局部感受野,但这些信息的相关性并不能被利用,为了解决这个问题,作者使用了一个global average pooling来生成每个通道的统计信息,公式如下:

经过这个操作后,一个的张量就变成了

  1. 操作:为了更好的利用上面操作产生的全局信息,我们必须遵守两个标准,第一,他必须灵活,即在通道之间增加非线性。第二,要保证通道间的互斥关系,卷积核不可以重复了,因此进行两次激活函数。


  1. 操作:经过上一个操作后张量尺度为1x1xC,但原图的尺寸为HxWxC,所以我们需要一个变换尺度的操作,作者的操作也很简单,如下:


可以看到,SE block还是十分强力的,厉害~~

下图为SE-resnet的结构示意图:

(二)轻量级网络

MobileNet (2017)

本篇文章是关于网络加速的问题,如何在保持精度的同时,使网络的速度大大提升,从而可以达到速度和精度的tradeoff,其论文主要提出了一个深度可分离卷积的方式(Depthwise Separable Convolutions),可以大大降低参数量!

假设我们使用的卷积核,输入为的图片,且输出为,那么对于传统卷积来说,其参数量为

而对于可分离卷积来说,首先进行一个depthwise conv(逐通道)的操作,即分别对输入图像的每一个通道进行卷积,每个卷积核的输出也是单通道,所以需要 M个 的卷积核,接着使用一个pointwise conv(逐像素)的操作,进行M通道的特征融合,并将通道数从M变为N,这个过程就需要N个的卷积核,其参数量为

这样的话,其参数量由原来的相乘变为相加,即降低参数量百分比为

depthwise操作其实质就是一种G=输入通道数的特殊分组卷积!!!

对比传统卷积,其网络结构的变化为:

MobileNet的网络框架为:

MobileNet V2 (CVPR2018)

通过上面的讲解,我们都知道了使用深度可分离卷积可以使得参数量大大降低,加入Kernel的大小为3x3,那么相比传统卷积可以降低8到9倍的参数量!

但是MobileNetV1的结构设计过于简单,后续的很多网络证明了复用特征的有效性,如ResNet和DenseNet, 所以在网络结构上面有很大的改进性!1. 因此作者重新设计了一个Inverted Residual block并加入了跳过连接的方式。2. 使用了Linear Bottlenecks,作者在实验中发现非线性激活层在低维空间容易改变输入的数据结构,但Depthwise的操作正是低维空间,所以要去掉最后的非线性激活层,并在Depthwise前加入一个线性结构,保持模型的表达能力。

下图为ReLU函数在不同维度下的输入,可以看到dim=2或3时变形很厉害。


总的来说:如果manifold of interest经过ReLU激活后仍然非零,那么这就相当于一个线性操作,ReLU也是有能力保留全部的输入空间的信息,但仅仅是输入空间的低维子空间。

根据上面的原因,作者建议通过插入Linear Block到卷积层,从而保留非线性的同时避免丢失太多的信息。因此MobileNet V2中的Block在卷积层中加入了Linear Block,然后还有跳过连接的方式。接着作者又探讨了上图C和D两种结构的优劣性,也就是Linear Block放在那里的问题!下图为实验结果:

实验证明,加入Linear Block的有效性,并且C图的结构形式优于D图的结构形式,即

ShuffleNet (2017)

在讲解这篇文章之前,我们首先回顾一下group convolution,它最早由AlexNet提出,当时是由于计算能力不足,然后在ResNeXt中,作者也使用了分组卷积的方式来降低参数量,并增加网络的宽度,效果也很不错!接着我们在说下depthwise convolution, 其在MoblileNet中得到了使用,作者想讲这两种操作相结合,以达到更低参数量的同时精度也能保持的目的。

作者分析了下ResNeXt网络,发现其GP Conv只用在了3x3的layer中,这样就导致了一个残差模块中93.4%的计算量都在pointwise convolution, 对于一个比较小的网络,为了降低这种操作的运算量,只能减少通道数,但有可能会导致精度下降,因此,作者提出:

把GP Conv也应用到pointwise convolution, 也就是分组后的卷积核为单通道的卷积核!

但这是就会出现一个问题,就是通道之间**某个通道输出仅从一小部分输入通道中导出,我们都知道MobileNet中的Pointwise就是为了融合通道间的信息的,**如下图所示,这样的属性降低了通道组之间的信息流通,降低了信息表示能力。所以作者又设计了一个channel shuffle的结构,用于交换通道组之间的信息!

channel shuffle具体实现:假设有gxn个通道,首先将其reshape成(g, n),然后再转置为(n, g), 进行flatten操作,再分为g组作为下一层的输入!

但是有个问题,就是GP Conv的pointwise的操作是无法改变通道数的,那shufflenet的通道数在不同的Stage是如何增加的呢? 很简单,Concat~~

我们可以看到,ShuffleNet在每个Block也都是用了LinearBlock,即最后的输出没有ReLU, 然后利用了分组卷积,在Stride=2时,使用Concat操作将通道数增加为原来的2倍!

网络结构:

模型参数量和精度比较:

ShuffleNet V2(2018)

这篇论文十分的精彩,基本上没有任何的理论推导和解释,而是通过大量实验进而总结得到的结论,都是立足于实际,用实验结果来说话!

最终得到了设计轻量化网络结构的四个准则:

G1 : 当输入、输出channels数目相同时,conv计算所需的MAC(memory access cost)最为节省

下面公式为MAC和FLOPS,也就是B之间的公式关系,其中

从而其联系为


G2 : 过多的分组卷积会增加MAC

对于1x1的分组卷积,其MAC和FLOPS的关系为:

G3 : 网络结构整体的碎片化会减少其可并行计算时间,但在ARM中效果并没有那么好

可以看出碎片化对GPU下的提升还是较为明显的,而CPU并没有明显的提升

G4 : Element-wise操作会消耗较多的时间, 也就是逐元素操作

从表中第一行数据看出,当移除了ReLU和short-cut,大约提升了20%的速度!

我们来回顾下ShuffleNet V1:

在第一版中,应用了两种技术:pointwise group convolution和bottlenect-like,接着使用了一个channel shuffle的模块用来增加通道之间的交流性同时提高精度。那么根据我们上面提出的四个CNN高效化设计的准则,第一版有什么不足呢?

首先它使用了bottleneck 1x1 group conv与module最后的1x1 group conv pointwise模块,使得input channels数目与output channels数目差别较大,违反了G1和G2。其次由于它整体网络结构中过多的group conv操作的使用从而违反了G3。最后类似于Residual模块中的大量Element-wise sum的使用则进而违反了G4。因此作者在ShuffleNet V2中避免了这种操作!

上图就是ShuffleNet V1和V2的比较,前面两个为第一版的结构图,可以看出,第二版为了效率舍弃了原来的pointwise的分组卷积形式,改成普通卷积。为了避免BasicBlock中最后element-wise sum的操作,引入了channel split首先将通道分成两半,进入两个支路,最后使用Concat操作来代替原来的sum操作,既保持了通道数量的不变性又避免了element-wise的操作!太厉害了!进行Concat操作后,接着跟着一个channel shuffle的模块,用于通道间的信息交流!

在这里面3x3 Depthwise操作相当于线性操作,没有加ReLU,这不同于MobileNet V2,其是1x1的pointwise操作中没有ReLU,充当线性层!

网络结构

在大模型上面的对比:

以上为笔者整理的常用分类网络结构,也欢迎大家留言补充,一起学习交流~~

图像分类:常用分类网络结构(附论文下载)相关推荐

  1. WACV 2021 开幕,更偏重技术应用,附论文下载

    2021年第一个CV国际会议来了,请点击: WACV 2021 开幕,更偏重技术应用,附论文下载 查看详情.

  2. CVPR21小目标检测:上下文和注意力机制提升小目标检测(附论文下载)

    计算机视觉研究院专栏 作者:Edison_G CVPR21文章我们也分享了很多最佳的框架,在现实场景中,目标检测依然是最基础最热门的研究课题,尤其目前针对小目标的检测,更加吸引了更多的研究员和企业去研 ...

  3. Neurons字幕组 | 2分钟带你看懂李飞飞论文:神经网络是怎样给一幅图增加文字描述,实现“看图说话”的?(附论文下载)

    Neurons字幕组出品 翻译|智博校对|龙牧雪 时间轴|虫2后期| Halo 项目管理|大力 Neurons字幕组 第四期作品震撼来袭! Neurons字幕组源自英文单词Neuron,一个个独立的神 ...

  4. 【华为推荐论文】如何学习未知样本?基于反事实学习的推荐系统技术研究(附论文下载链接)...

    华为诺亚方舟实验室发布了最新研究成果<Improving Ad Click Prediction by Considering Non-displayed Events>,提出了一种基于反 ...

  5. 目标检测新方式 | class-agnostic检测器用于目标检测(附论文下载链接)

    计算机视觉研究院专栏 作者:Edison_G 目标检测模型在定位和分类训练期间显示目标时表现良好,然而,由于创建和注释检测数据集的难度和成本,训练过的模型检测到数量有限的目标类型,未知目标被视为背景内 ...

  6. 【干货】31篇关于深度学习必读论文汇总(附论文下载地址)

    Kloud Strife在其博客上盘点了最值得关注的有关深度学习的论文,包括架构/模型.生成模型.强化学习.SGD & 优化及理论等各个方面,有些论文名扬四海,有些论文则非常低调.可以根据个人 ...

  7. 2017年深度学习必读31篇论文(附论文下载地址)

      新智元报道   来源:kloudstrifeblog.wordpress.com 作者:Kloud Strife 译者:刘光明,费欣欣 2017年即将擦肩而过,Kloud Strife在其博客上盘 ...

  8. 【经典回顾】YouTube 深度学习推荐系统的十大工程问题(附论文下载链接)

    这篇文章主要介绍了 YouTube 深度学习系统论文中的十个工程问题,为了方便进行问题定位,我们还是简单介绍一下背景知识,简单回顾一下 Deep Neural Networks for YouTube ...

  9. 基于多视角学习和个性化注意力机制的新闻推荐(附论文下载链接)

    编者按:个性化新闻推荐是新闻行业必然的发展方向,在其实现过程中面临着三个关键问题,即分析用户兴趣.根据新闻内容建模和新闻排序.本文将这三个问题划归为新闻信息与用户兴趣的多样性问题,并由此出发,提出了基 ...

最新文章

  1. 好程序员web前端分享值得参考的css理论:OOCSS、SMACSS与BEM
  2. C#网页数据采集(一)HtmlAgilityPack
  3. axure 小程序 lib_详细揭秘微信小程序框架技术——Mpx
  4. 安卓应用安全指南 5.2.3 权限和保护级别 高级话题
  5. 干货:基于 Git Flow 的 Git 最佳实践(附加解决大家经常碰到的问题)
  6. CPU 用户时间 系统时间
  7. VSS2005源代码管理
  8. java digit_EditText在java代码中设置digits属性
  9. 数据平台作业调度系统详解-理论篇
  10. 一个前端写的php博客系统--支持markdown哦
  11. 计算机修改WINDOWS版本,Windows OEM修改器
  12. 【存档】双向可控硅的工作原理
  13. 常用的免费好用的DNS有哪些?
  14. Aloha (世界上最早的无线电计算机通信网)
  15. winsxs探索之组件的本质:文件与注册表
  16. 关于Maxon上位机EPOS Studio的配置
  17. K-means 算法实现二维数据聚类
  18. java基础之异常_繁星漫天_新浪博客
  19. 微信可上线类型与封杀理由
  20. Substance风格无法设置水印效果的处理

热门文章

  1. unbuntu server (linux系统)下面安装 lamp
  2. MySQL中in(常量列表)的执行计划
  3. 版本管理工具 (git 或者 svn)
  4. Mono.Android 基础
  5. Linux常用命令(第二版) --压缩解压缩命令
  6. Quartz.net官方开发指南 第九课: JobStore
  7. 如何在GraphPad Prism 9图表上添加图片或其他对象
  8. 2021年8月最新sci-hub可用网址,高速稳定
  9. EndNote批量实现文献标题首字母大写 附最新版endnote下载
  10. 继承复习-发均分红包案例