Inception v3
Rethinking the Inception Architecture for Computer Vision
Abstract
通过增加模型大小和增加参数数量可以提升模型性能,但是要考虑计算资源,模型轻量化,兼顾计算效率,提出了分解卷积和label smoothing。
通用设计原则
(作者推测的)
- 避免过度降维或者收缩特征bottleneck(瓶颈路段,我的理解是所有信息全部堵在一个地方降维,造成信息丢失),特别是在网络浅层,容易造成信息丢失。特征图size应当慢慢变小。
- 特征越多收敛越快,相互独立的特征越多输入的信息分解的越彻底,特征越分散有利于特征处理(例如,猫的部位区分清楚则更有利于后期,特征杂糅在一起8行)。
- 3* 3和5* 5大卷积之前可以用1* 1降维信息不会损失,作者假设原来feature map上感受野有部分重合,卷积后的像素也是高度相似的,通道上每个map都类似,1* 1卷积跨通道降维仍保持相关性。
- Balance the width and depth of the network,可以让计算量平均分配,并行提升w和d可以让计算效率提升。
分解卷积Factorizing Convolutions
大卷积分解成小卷积
5* 5分成两个3* 3我在VGG里先看到的,这里作者没引VGG?
5* 5卷积分解成2个3* 3卷积,7* 7分解成3个3* 3卷积,感受野不变,最后一层等效于fc(看作9对3,输出1的fc):
- 增加深度
- 减少了计算量,减少了网络参数,训练更快
- 增加非线性表示能力
1.相同卷积核个数和feature map尺寸情况下5* 5比3* 3高2.78倍计算量(25/9)
2.为什么不继续分成2*2卷积?
3* 3分解成2* 2卷积只能减少11%参数量,分解成n*1可以减少33%,后面写不对称卷积
Does this replacement result in any loss of expressiveness?
分解卷积是否会影响模型表达能力?(不会)
If our main goal is to factorize the linear part of the computation, would it not suggest to keep linear activations in the first layer?
是否保留第一层feature map的非线性激活函数(要保留relu)
(虚线去掉第一层relu,蓝色保留)根据实验结果来看,分解卷积第一层的relu可以提高模型的非线性表示能力(可学习空间增强了)
空间可分离卷积/不对称卷积
if 3* 3卷积继续分解成2* 2卷积,只能减少11%参数量,分解成n* 1可以减少33%,eg,n* n卷积拆成两个串联n* 1和1* n卷积。
用 1 个 1×3 卷积和 1 个 3×1 卷积替换 3×3 卷积
计算参数:
(1* 3* c )*c+(3 * 1 * c) *c=6c^2
(3* 3* c )*c=9c^2
文中指出n越大节省的运算量更大 (具体我没去运算),不对称卷积效果在网络浅层用不好,但在m*m(12<m<20) 大小的中等feature map上效果很好。
权值共享lenet5:
所谓权值共享就是说给定一张输入图片,用一个卷积核来卷积这张图,卷积核里的值叫做权重,这张图的每个位置是被同一个卷积核扫的,即卷积的时候所用的权重是一样的。其实权值共享这个词说全了就是整张图片在使用同一个卷积核内的参数,比如一个331的卷积核,这个卷积核内9个的参数被整张图共享,而不会因为图像内位置的不同而改变卷积核内的权系数。说的再直白一些,就是用一个卷积核不改变其内权系数的情况下卷积处理整张图片(当然CNN中每一层不会只有一个卷积核的,这样说只是为了方便解释而已)。
作用:大大减少网络训练参数的同时,还可以实现并行训练。
参考:https://blog.csdn.net/m0_37957160/article/details/114693985
基于以上提出的3种模块:
Module A
Module B we chose n = 7 for the 17 × 17 grid
Module C 扩展滤波器组(不对称卷积横向之后再把feature map叠起来,加宽网络,升维增加channel数量,promote high dimensional representations,only on the coarsest grid,只在最后channel比较多的地方使用 (最后几层))
下采样模块
池化前升维度,避免信息丢失
左边先pooling后升维容易造成信息丢失,右边先升维再池化计算量太大(因为升维之后channel变多,算的更多)
上图是v3论文提出的下采样模块,左边是从操作角度看的图,右边是从特征图大小角度看的图,这样并行的结构在下采样和升维(信息丢失少)的同时不增加计算量。
Label Smoothing regularization(LSR)正则化
cross entropy loss&softmax:
传统的one-hot编码的标签向量yi为:
y
i
=
{
1
,
i
=
target
0
,
i
≠
target
y_{i}=\left\{\begin{array}{ll} 1, & i=\text { target } \\ 0, & i \neq \text { target } \end{array}\right.
yi={1,0,i= target i= target
在训练网络时,最小化损失函数(交叉熵损失函数)的pi由由对模型倒数第二层输出的logits向量z应用Softmax函数计算得到。
传统one-hot编码标签学习过程中,鼓励模型预测为目标类别的概率趋近1,非目标类别的概率趋近0(softmax里采用exp进行非负处理,导致softmax的极端化),即最终预测的logits向量中目标类别zi的值会趋于无穷大,使得模型向预测正确与错误标签的logit差值无限增大的方向学习,而过大的logit差值会使模型缺乏适应性,对它的预测过于自信。在训练数据不足以覆盖所有情况下,这就会导致网络过拟合,泛化能力差 。
LSR:
思想:label smoothing结合了均匀分布思想,用更新的标签向量y^i来替换传统的ont-hot编码的标签向量yhot:
y
^
i
=
{
1
−
α
,
i
=
target
α
/
K
−
1
,
i
≠
target
\hat{y}_{i}=\left\{\begin{array}{ll} 1-\alpha, \quad i=\text { target } \\ \alpha / K-1, \quad i \neq \text { target } \end{array}\right.
y^i={1−α,i= target α/K−1,i= target
K为多分类的类别总个数,α是一个较小的超参数(一般取0.1)
标签平滑后的分布就相当于往真实分布中加入了噪声,避免模型对于正确标签过于自信,使得预测正负样本的输出值差别不那么大,从而避免过拟合,提高模型的泛化能力,正则化作用。
从确定类别到:像某个类别的程度。
lsr避免梯度爆炸/消失
不用lsr loss对参数求导之后的值会很小/大(因为输出的概率被极化了(cross entropy里loss最小化ln的值必须靠近1,导致softmax输出的概率要接近1)),导致梯度爆炸/消失。
使用lsr之后loss对参数求导的值不会过小/过大,梯度变得平缓(?),可以避免梯度爆炸/消失。
When Does Label Smoothing Help?用实验说明为什么LSR起效。(有空再看)
参考:https://www.cnblogs.com/irvingluo/p/13873699.html
Inceptionv3架构
ABC三个模块输入输出feature map size不变,之间通过采样模块连接。
We have marked the convolution with 0-padding, which is used to maintain the grid size. 0-padding is also used inside those Inception modules that do not reduce the grid size. logits are the scores of classes
Training Methodology
momentum [19] with a decay of 0.9
gradient clipping
learning rate of 0.045
My Conclusion
- 特征融合是个好东西
- 不对称卷积和分解卷积的减少计算量的轻量化思想很好
- smoothing均匀分布思想
- 在模型蒸馏中使用Label smoothing会导致性能下降