图像分类:常用分类网络结构(一)

图像分类:常用分类网络结构(一)

声明:本篇文章首发于微信公众号:极市平台(微信号:extrememart)

原文链接:

图像分类:常用分类网络结构(附论文下载)mp.weixin.qq.com图标

今天整理下一般常用的图像特征提取网络,下图是笔者整理的近年来图像分类网络的论文以及所在期刊,稍后会放在百度网盘上,供大家下载!

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

网盘地址:

链接:

https://pan.baidu.com/s/1ccRcv7y4LV8jGLA5krWw5gpan.baidu.com

提取码:wnja

今天我们来介绍几种常用于分类问题的DNN,以及各自的特点,提取特征的新思路!对于以后做研究或者分类比赛有很大的用处!

VGG Net (ICLR2015)

在VGG Net中,作者探讨了7x7的卷积核和3x3的卷积核的区别?那么我们使用3x3的卷积核,得到了什么呢?第一,利用三个非线性的激活层来代替一个,可以增加网络的鉴别能力,第二,单个7x7卷积核的参数量为 7^2C^2=49C^2 ,而三个级联的3x3卷积核为 3(3^2C^2)=27C^2 ,参数量减少了大约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,然后将每个组的输出进行concate,这样可以增加卷积核之间的相关性,并防止过拟合。当然这个分组处理的方式还很多,不限于concate。

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

C\cdot(256\cdot d+3\cdot 3\cdot d\cdot d+d\cdot 256) 大约70k FLOPs

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

SE-Net (CVPR2018)

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

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

1. F_{tr} 操作:这个在与其他网络结合时就是一个标准卷积操作而已,公式定义如下,

u_c=v_c*X=\sum_{s=1 }^{c^*}{v_c^s*x^s} 其中X为原张量,U为 F_{tr} 后的输出, v_c 表示第c个卷积核。这就是一个单纯的卷积操作!

2. F_{sq} 操作:为了解决利用信道依赖性的问题,我们考虑输出特征的每一个通道,每个通道都有各自的局部感受野,但这些信息的相关性并不能被利用,为了解决这个问题,作者使用了一个global average pooling来生成每个通道的统计信息,公式如下:

经过这个操作后,一个 H*W*C 的张量就变成了 1*1*C

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

其中 \delta 为ReLU函数, \sigma 为sigmoid函数。为了进行模型的复杂度,将第一个FC输出维度降为 \frac{C}{r} ,然后经过第二个FC后变成原来的维度。

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

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

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

编辑于 2019-04-09

文章被以下专栏收录