文章目录
1. LeNet
Highlight
- LeNet5通过巧妙的设计,利用卷积、参数共享、池化等操作提取特征,避免了大量的计算成本,最后再使用全连接神经网络进行分类识别,这个网络也是最近大量神经网络架构的起点。
- 由7层CNN(不包含输入层)组成,输入的原始图像大小是32×32像素
- 提出并成功运用权值共享
- 局部感受野
下采样(池化)
缺点:
- 图像的局部相关性
- 图像的形变会引起图像特征位置变化
- 图像数据量较大,单独像素独立输入神经元中,需要很大的网络结构,训练参数过多
参考文档:
CNN模型合集
2. AlexNet
Highlight
- 提出数据增强、Dropout 防止过拟合
- 数据增强一:将输入 256256的图片进行224224的随机截取,这样每个图片就可以生成很多类似的图片
- 数据增强二:改变训练图像总RGB通道的强度。在整幅图中对RGB像素值集执行PCA进行降维,通过改变主要颜色的亮度生成更多图片
- Dropout:作为训练深度神经网络的一种选择,避免过拟合同时增强神经网络的泛化能力
- 在多个GPU上训练,降低训练时间
- 使用Relu替换之前的sigmoid激活函数,加快训练
- 局部响应正规化也在googlenet被证明没啥效果
- 使用层叠的卷积层,即卷积层+卷积层+池化层来提取图像特征
- 层叠池化,在一定程度抑制过拟合
图片引用自仙道菜
参考文档:卷积神经网络之AlexNet
AlexNet网络结构详解与模型的搭建
3. VGG
Highlight
- 结构简单,使用同样大小的卷积核尺寸(33)和最大池化尺寸(22)
- 连续使用多个卷积层的作用是扩大感受野,即用2个33的卷积层达到一个55卷积层的感受野,3个33的卷积层达到一个77卷积层的感受野
- 小尺寸卷积核(33)的组合比一个大卷积核(55或7*7)更好,增加非线性函数的个数,增加了函数的判别能力;减少了参数量
- 验证了通过不断加深网络结构可以提升性能
- 使用1*1卷积核,添加了非线性激活函数的个数,而且不影响卷积层的感受野
- 没有使用局部归一化,发现并不能提高网络的性能
- 多尺度估计,证明多尺度抖动的训练图像精度好于固定尺寸的训练集
- 稠密和多裁剪图像评估(Dense 和 multi-crop),稠密即指全连接层替换为卷积层(第一FC层转换到7×7卷积层,最后两个FC层转换到1×1卷积层),最后得出一个预测的score map,再对结果求平均。
即对图像进行多样本的随机裁剪,将得到多张裁剪得到的图像输入到网络中,最终对所有结果平均
缺点
- 耗费计算资源较多,训练时间较长
- 参数量较大,其中绝大多数参数都来自于第一个全连接层,且VGG有三个全连接层
参考文档:
卷积神经网络之VGG
VGG网络结构详解与模型的搭建
4. GoogLeNet
GoogLeNet中的 L 大写是为了致敬LeNet。
Highlight
- 引入 Inception 结构(融合不同尺度的特征信息)
- 使用1*1的卷积核进行降维及映射处理(相比VGG,给出了更详细的介绍)
- 添加两个辅助分类器帮助训练
- 丢弃全连接层,使用平均池化层(大大减少参数量)
参考文档:
GoogLeNet论文详解
6. ResNet
Highlight
- 超深的网络结构(突破1000层)
- 提出residual模块
- 使用Batch Normalization加速训练(丢弃dropout)
使用BN时注意的问题:
① 训练时要将 training参数设置为True,在验证时要将training参数设置为False。在pytorch中可通过创建模型的model.train()和model.eval()方法控制。
② batch size 尽可能设置大一点,设置小后表现可能很糟糕,设置的越大,求的均值和方差越接近整个训练集的均值和方差。
③ 建议将bn层放在卷积层(Conv)和激活层(例如Relu)之间,且卷积层不要使用偏执bias,因为没有用。
参考文档:
Group Normalization详解
MobileNet-V2
Highlight
- Inverted Residuals (倒残差结构)
- Linear Bottlenecks
Inverted Residuals (倒残差结构)
-
普通的残差结构
先通过1x1卷积进行降维
,最后通过1x1卷积升维
;倒残差结构
刚好相反,首先通过1x1卷积进行升维
,最后通过1x1卷积进行降维
,所以它和我们普通的残差结构正好是相反的,因此取名(Inverted residual block)倒残差结构。
-
普通残差结构
使用的激活函数是relu
,但倒残差结构
使用的是relu6
激活函数
Linear Bottlenecks
- 线性激活函数
倒残差的最后1x1卷积层,它使用了线性激活函数, 文中实验可以了解ReLU激活函数对低纬特征造成大量损失, 由于我们倒残差结构是两头细中间粗的结构,所以输出的时候是一个低纬的特征。为了避免信息的丢失我们就需要使用一个线性的激活函数替代ReLU激活函数。
- 倒残差结构,并不是每个倒残差结构都有
shortcut
分支(捷径分支),只有当stride=1
且输入特征矩阵
与输出特征矩阵
的shape相同时
才有shortcut分支。
类别数K
最后一层是一个卷积层1x1x1280
, 即一个全连接层。这里的k
对应的是分类的类别数