Imagenet Classification With Deep Convolutional Neural Networks.
paper: http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf作者:Alex Krizhevskyconv1 阶段 输入数据:227×227×3 卷积核:11×11×3;步长:4;数量(也就是输出个数):96 (向下取整) 卷积后数据:55×55×96 (原图N×N,卷积核大小n×n,卷积步长大于1为k,输出维度是(N-n+2p)/k+1) relu1后的数据:55×55×96 Max pool1的核:3×3,步长:2 ((N-k) / s + 1 ) pool1后的数据:27×27×96 norm1:local_size=5 (LRN(Local Response Normalization) 局部响应归一化) 最后的输出:27×27×96
conv2 阶段 输入数据:27×27×96卷积核:5×5;步长:1;数量:256 卷积后数据:27×27×256 (做了Same padding(相同补白),使得卷积后图像大小不变。) relu2后的数据:27×27×256 Max pool2的核:3×3,步长:2 Max pool2后的数据:13×13×256 ((27-3)/2+1=13 ) norm2:local_size=5 (LRN(Local Response Normalization) 局部响应归一化) 最后的输出:13×13×256
conv2中使用了same padding,保持了卷积后图像的宽高不缩小。
conv3 阶段 输入数据:13×13×256卷积核:3×3;步长:1;数量(也就是输出个数):384 卷积后数据:13×13×384 (做了Same padding(相同补白),使得卷积后图像大小不变。) relu3后的数据:13×13×384 最后的输出:13×13×384
conv3层没有Max pool层和norm层
conv4 阶段 输入数据:13×13×384 卷积核:3×3;步长:1;数量(也就是输出个数):384 卷积后数据:13×13×384 (做了Same padding(相同补白),使得卷积后图像大小不变。) relu4后的数据:13×13×384 最后的输出:13×13×384
conv4层也没有Max pool层和norm层
conv5 阶段 输入数据:13×13×384 卷积核:3×3;步长:1;数量(也就是输出个数):256 卷积后数据:13×13×256 (做了Same padding(相同补白),使得卷积后图像大小不变。) relu5后的数据:13×13×256 Max pool5的核:3×3,步长:2 Max pool2后的数据:6×6×256 ((13-3)/2+1=6 ) 最后的输出:6×6×256
conv5层有Max pool,没有norm层
fc6 阶段 输入数据:6×6×256 全连接输出:4096×1 relu6后的数据:4096×1 drop out6后数据:4096×1 最后的输出:4096×1
fc7 阶段 输入数据:4096×1 全连接输出:4096×1 relu7后的数据:4096×1 drop out7后数据:4096×1 最后的输出:4096×1
fc8阶段 输入数据:4096×1 全连接输出:1000 fc8输出一千种分类的概率。
创新点如下:
采用了ReLU作为激活函数:ReLU(x) = max(x, 0)LRN: 局部相应归一化。只对数据相邻区域做归一化处理,不改变数据的大小和维度。Overlappng(重叠池化):在做池化的时候,池化核的大小为n*n时,步长为k,如果K==n的时候是正常池化,k<n的时候池化会有重叠的部分。有过拟合的作用。Dropout: 在FC6,FC7引入Dropout,以一定的概率(50%)丢弃某个神经元,不进行前向和反向的传播(保留权值)。数据增强Very Deep Convolutional Networks for Large-Scale Image Recognition.
pdf: https://arxiv.org/abs/1409.1556作者:Karen SimonyanGoing Deeper with Convolutions
pdf: https://arxiv.org/abs/1409.4842对于同一个输入图,有四个分支,分别用不用尺寸的卷积进行卷积和池化,最后在特征维度上拼接到一起。
在多个尺度上同时进行卷积,能够提取到不同尺度的特征。利用稀疏矩阵分解成密集矩阵计算的原理来加快收敛速度。用多个尺寸进行特征特区,然后将相关性强的特征聚集到一起,这样效果会更好。Rethinking the Inception Architecture for Computer Vision
pdf: https://arxiv.org/abs/1512.00567Deep Residual Learning for Image Recognition
pdf: https://arxiv.org/abs/1512.03385网络加深后会有什么问题:
梯度消失和梯度爆炸(利用BN可以解决)准确率下降问题(degradation problem):层级大到一定的程度,准确率就会饱和,然后迅速下降,这是由于网络过于复杂,并且训练方式难以达到收敛导致的。更深的网络一定比浅的网络效果好,因为多余的层可以看成是恒等变换。网络的基础在VGG-19上进行加深,并保持几个原则:
特征图大小相同的层, 卷积核的个数应该相同特征图的大小如果减半,卷积核的个数应该双倍,保证复杂性使用s=2的卷积进行下采样残差模块: 当输入输出的有相同的维度的时候,可以直接进行相加。 上图虚线中,输入和输出的不一样时,采用两种方法升维:
少的通道用0补齐(不添加新的参数)用1 * 1的卷积升维Densely Connected Convolutional Networks
pdf: https://arxiv.org/abs/1608.06993 ResNet当中卷积的输出和输入相加组合在一起,会阻碍信息流在网络中的传播每一层输入的特征图都连接到后面的输入中,对于一个L层的网络共有 L ∗ ( L + 1 ) / 2 L*(L+1)/2 L∗(L+1)/2条连线DenseNet中某层的多个输入源不是直接算术相加,而是在特征维度上进行拼接(concatenate)层与层间的直连只限于有相同尺寸的特征映射的层间,特征图尺度不同的部分不进行连接,通过卷积和Pooling改变尺寸。 如果在DenseNet模块中每一层的输入前都用1X1卷积降维,来减少计算量,这种结构作者取名叫DenseNet-BDenseNet模块中每一个卷积层前(包括1X1卷积)都会有BN,形成BN-Relu-1X1卷积-BN-Relu-3X3卷积的结构不同的DenseNet模块间如果也用1X1 卷积来降维,这种结构作者取名叫DenseNet-C;Squeeze-and-Excitation Networks
pdf: https://arxiv.org/abs/1709.01507核心想法:关注通道之间的关系,通过额外一个小网络,学习到不同通道特征之间的重要程度。
F t r F_{tr} Ftr, 普通卷积,输入一个通道上的特征(大小为卷积核的大小),学习特征的空间关系,但是由于对各个通道的卷积结果做了sum,所以channel特征关系与卷积核学习到的空间关系混合在一起。 SE模块就是为了抽离这种混杂在一起的关系,使模型直接学习到Channel间的关系。
ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
pdf: https://arxiv.org/abs/1707.01083分组卷积对于输入的feature map进行分组,每组分别卷积。
对于常规卷积(Convolution):
假如输入的feature map 尺寸为 C ∗ H ∗ W C * H * W C∗H∗W, feature map的个数为 N N N卷积核的尺寸为 C ∗ K ∗ K C*K*K C∗K∗K,假设卷积输出的维度也是 N N N的话,此时参数量为 N ∗ ( C ∗ K ∗ K ) N * (C*K*K) N∗(C∗K∗K)对于分组卷积(Group Convolution):
假如输入的feature map 尺寸为 C ∗ H ∗ W C * H * W C∗H∗W,输出feature map的个数为 N N N设定要分成 G G G个group,则每组输入的feature map的数量为 C G \frac{C}{G} GC,每组输出feature map数量为 N G \frac{N}{G} GN每个卷积核的尺寸为 C G ∗ K ∗ K \frac{C}{G} * K * K GC∗K∗K,卷积核的总数仍为 N N N个,每组的卷积核的数量为 N G \frac{N}{G} GN,卷积核只与同组的输入map进行卷积,卷积核的总参数量为 N ∗ C G ∗ K ∗ K N * \frac{C}{G} * K * K N∗GC∗K∗K。总参数量减少为原来的 1 G \frac{1}{G} G1分组卷积(Group Convolution)的作用:
减少参数量:分成G组,该层的参数量比普通卷积减少为原来的 1 G \frac{1}{G} G1Group Convolution可以看成是Structured Sparse:每个卷积核的尺寸由 C ∗ K ∗ K C*K*K C∗K∗K变为了 C G ∗ K ∗ K \frac{C}{G} * K * K GC∗K∗K,省去的部分可以视为参数为0,在减少参数量的同时可以获得更好的效果(相当于正则化)当分组数G等于输入feature map的数量的时候,输出map数量也等于出入map数量时,即 G = N = C G=N=C G=N=C时,N个卷积核每个尺寸变为 1 ∗ K ∗ K 1*K*K 1∗K∗K,相当于变成了Depthwise Convolution,参数量进一步减少。4. 更进一步,如果 G = N = C G=N=C G=N=C时,同时卷积核的尺寸与输入map的尺寸相同,即 K = H = W K=H=W K=H=W,则输出的map为 C ∗ 1 ∗ 1 C*1*1 C∗1∗1的向量,此时称之为 Global Depthwise Convolution(GDC)。可以看成是全局加权池化,与 Global Average Pooling(GAP) 的不同之处在于,GDC 给每个位置赋予了可学习的权重(对于已对齐的图像这很有效,比如人脸,中心位置和边界位置的权重自然应该不同),而GAP每个位置的权重相同,全局取个平均,如下图所示:
整体的结构如下:
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
pdf: https://arxiv.org/pdf/1905.11946.pdfarxiv.org