CV--baseline
AlexNet(基于深度卷积神经网络的图像分类)
网络结构图:
AlexNet特点:
- RELU激活函数
relu(x) = max(0, x).relu可以使网络训练更快、防止梯度消失,使网络具有稀疏性。 - 多GPU训练
- LRN(local response normalization)
局部响应标准化:提高网络的泛化能力,受神经元侧抑制启发,即细胞分化变为不同时,会对周围细胞产生拟制信号,阻止他们向相同方向分化,最终表现为细胞命运的不同。
- Overlapping pooling(重叠池化)
训练技巧: - 数据增强。(针对位置、针对颜色)
- dropout
VGG
网络结构
VGG特点:
-
堆叠33卷积核 可以增大感受视野(2个33堆叠等价于1个55;3个33堆叠等价于1个7*7);增加非线性激活函数,增加特征抽象能力;减少训练参数;
-
数据增强:两种(针对位置、针对颜色)
针对位置:在训练阶段,按比例缩放图片至最小边S,随机位置裁剪出224*224区域,随机进行水平翻转。
S设置方法:固定值(256或384);随机值,即每个batch的S在[256,512],实现尺度扰动。
针对颜色:修改RGB通道的像素值,实现颜色扰动。 -
预训练模型初始化,即模型加深时,可以利用浅层模型初始化;multi-scale训练时,用小尺度初始化。
-
多尺度测试,图片等比例缩放至最短边Q。设置三个Q,对图片进行预测取平均。
当S为固定值时,Q=[S-32,S,S+32]
当S为随机值时,Q=[S_min,0.5*(S_min+S_max),S_max]
-
稠密测试,将FC层转换为卷积操作,变为全卷积网络,可实现任意尺寸图片输入。
GoogleNet
- 三阶段:conv-pool-conv-pool 快速降低分辨率;堆叠inception module;FC层分类输出。
- 堆叠使用inception module,达到22层
- 增加两个辅助损失,缓解梯度消失(中间层特征具有分类能力)
inception module
特点:
- 多尺度卷积操作提取特征
- 1*1卷积降维(压缩厚度),信息融合
- 3*3 max pooling 保留了特征图数量
训练技巧
-
辅助损失:增加loss回传;充当正则约束,迫使中间层特征也能具备分类能力
-
学习率下降策略:每8个epoch下降4%
-
数据增强:图像尺寸均匀分布在8%-100%之间;长宽比在[3/4,4/3]之间;photometric distortions有效(亮度、饱和度和对比度)
测试技巧: -
multi crop
-
model fusion(模型融合)
稀疏结构
BN(batch normalization)
BN:批次归一化。
存在问题:使神经元输出值在sigmoid线性区。
解决办法:引入可学习参数
γ
\gamma
γ和
β
\beta
β,增加线性变换,提高网络表达能力。即:
y
(
k
)
=
γ
(
k
)
x
^
(
k
)
+
β
(
k
)
y^{(k)}=\gamma^{(k)}\widehat{x}^{(k)}+\beta^{(k)}
y(k)=γ(k)x
(k)+β(k)
存在问题:mini-batch的统计信息充当总体是不准确的。
解决办法:采用指数滑动平均
m
v
1
=
(
1
−
d
e
c
a
y
)
∗
a
t
mv_1=(1-decay)*a_t
mv1=(1−decay)∗at
a
t
a_t
at:当前值
m
v
t
mv_t
mvt:指数滑动平均值
当
t
−
i
>
C
t-i>C
t−i>C,
C
C
C无穷大时:
d
e
c
a
y
t
−
i
∗
(
1
−
d
e
c
a
y
)
∗
a
t
≈
0
m
v
t
≈
∑
i
=
t
−
C
t
d
e
c
a
y
t
−
i
∗
(
1
−
d
e
c
a
y
)
∗
a
t
decay^{t-i}*(1-decay)*a_t\approx0 \\ mv_t\approx\sum_{i=t-C}^t decay^{t-i}*(1-decay)*a_t
decayt−i∗(1−decay)∗at≈0mvt≈i=t−C∑tdecayt−i∗(1−decay)∗at
即
m
v
t
mv_t
mvt只和
a
t
−
C
,
a
2
,
…
,
a
t
a_{t-C},a_2,\dots,a_t
at−C,a2,…,at有关。
batch normalization实现
BN优点:
- 可采用较大学习率
- 充当正则,可顶替dropout
卷积分解、标签平滑、辅助分类中加BN
网络设计准则
-
尽量避免信息瓶颈,通常发生在池化层,即特征图变小,信息量减少
-
采用更高维的表示方法能够更容易地处理网络地局部信息
-
大的卷积核可以分解为数个小卷积核,且不会降低网络能力
-
把握好深度和宽度的平衡。
卷积分解 -
1个55卷积可分解为2个33卷积,参数减少 1 − ( 9 + 9 ) / 25 = 28 % 1-(9+9)/25=28\% 1−(9+9)/25=28%
-
1个nn卷积可分解为1n卷积和n*1卷积堆叠
辅助分类层
用于缓解梯度消失,提升底层的特征提取能力。 -
辅助分类层在初期起不到作用,在后期才能提升网络性能
-
移除第一个辅助分类层不影响精度
-
辅助分类层可辅助底层提取特征是不正确的
-
辅助分类层对模型起到正则作用
特征图下降策略
传统池化方法存在信息表征瓶颈,即特征图信息变少了。
简单解决方法:先用卷积将特征图通道数翻倍,再用池化。(问题:计算量过大)
解决方法:用卷积得到一半特征图,用池化得到一半特征图。用较少的计算量获得较多的信息,避免信息表征瓶颈。
标签平滑(label smoothing)
传统的one-hot编码存在问题:过度自信,导致过拟合。
标签平滑:把one-hot中概率为1的哪一项进行衰减,避免过度自信,衰减的那部分confience平均分到每一个类别中。
标签平滑公式:
交叉熵: H ( q , p ) = − ∑ k = 1 k l o g ( p k ) q k H(q,p)=-\sum_{k=1}^klog(p_k)q_k H(q,p)=−∑k=1klog(pk)qk
将q进行标签平滑变为q,让模型输出的p分布去逼近q,即 q ′ ( k ∣ x ) = ( 1 − ϵ ) δ k , y + ϵ u ( k ) q'(k|x)=(1-\epsilon)\delta_{k,y}+\epsilon u(k) q′(k∣x)=(1−ϵ)δk,y+ϵu(k),其中 u ( k ) u(k) u(k)为一个概率分布
标签平滑后的交叉熵损失函数为:
H ( q ′ , p ) = − ∑ k = 1 k l o g ( p k ) q k ′ = ( 1 − ϵ ) H ( q , p ) + ϵ H ( u , p ) H(q',p)=-\sum_{k=1}^klog(p_k)q'_k=(1-\epsilon)H(q,p)+\epsilon H(u,p) H(q′,p)=−∑k=1klog(pk)qk′=(1−ϵ)H(q,p)+ϵH(u,p)
ResNet
残差结构
残差结构:拟合F(x)使网络层更容易学习到恒等映射的可能,恒等映射使深层网络不至于比浅层网络差,避免网络退化问题。同时有利于梯度传播,避免梯度消失。
网络退化:越深的网络拟合能力越强,理论上越深的网络训练误差应该越低,但实际效果相反。
网络退化原因:网络优化困难。
ResNeXt
聚合变换
splitting:X分解为D个元素,可理解为地位嵌入
transforming:每个元素进行变换(乘法)
aggregating:对D个变换后的结果进行聚合。
ResNeXt中的聚合变换block
-
splitting:通过1*1卷积实现低维嵌入,256通道变为4个通道,总共32个分支
-
transforming:每个分支进行变换
-
aggregating:对32个分支得到的变换结果–特征图进行聚合
block的三种等效形式 -
splitting-transforming-aggregating
-
将各分支的最后一个1*1卷积融合成一个卷积
-
将各分支的第一个11卷积融合称一个卷积,33卷积采用分组卷积的形式,分组数等于基数
分组卷积
分组卷积用更少的参数得到相同的特征图。
ResNeXt结构
- 头部迅速降低分辨率
- 4阶段残差结构堆叠
- 池化+FC层输出
与ResNet的唯一不同:加入分组卷积,节省参数量。
DenseNet
short paths
深度神经网络中存在信息流通不畅问题:输入数据消失以及梯度消失。
- Highway Net:
y
=
H
(
x
,
W
H
)
⋅
T
(
x
,
W
T
)
+
x
⋅
C
(
x
,
W
C
)
y=H(x,W_H)·T(x,W_T)+x·C(x,W_C)
y=H(x,WH)⋅T(x,WT)+x⋅C(x,WC)
T和C为门控单元 - ResNet
- Fractalnet
多级特征复用
多级特征复用可增强模型表征能力。
稠密链接
在每一个block中,每一层的输入来自它前面所有层的特征图,每一层的输出均会直接连接到它后面所有层的输入。
L层网络中,有 L ∗ ( L + 1 ) / 2 L*(L+1)/2 L∗(L+1)/2。
优点: - 用较少参数获得更多特征,减少了参数
- 低级特征得以复用,特征更加丰富
- 更强的梯度流动,跳层连接更多,梯度可更容易向前传播。
transition layer
池化层用于降低特征图分辨率,DenseNet将特征图分辨率下降操作称为transition layer,由BN、11卷积、22池化构成。
Growth rate
bottleneck layers
瓶颈层用于降低特征图通道数,减少后续卷积的计算量。
DenseNet
整体分为三大块:头部卷积、Dense Block堆叠、全连接输出分类概率。
头部卷积:
SENet
squeeze and excitation
-
squeeze:global information embedding
采用全局池化,即压缩H和W至1*1,利用1个像素来表示一个通道,实现低维嵌入。 -
excitation:adaptive recalibration
SE Block
- squeeze 压缩特征图至向量形式
- excitation 两个全连接层对特征向量进行映射变换
- scale 将得到的权重向量与通道的乘法。