一、背景知识
卷积神经网络的一般结构
1.卷积层+激活层和池化层的组合多次出现—>提取特征
2.多个全连接或特殊的CNN结构作为输出层—>作分类器/检测器/分割器
四种主要的计算机视觉任务(由粗粒度到精细粒度)
1.图像分类(Image classification)
为图像赋予一个或多个语义标签
2.目标检测(Object localization)
找到图像中物体的类别及所在位置
3.图像语义分割(Sementic segmentation)
找到图像中物体的类别并精确勾勒出其所在的位置
4.图像实例分割(Instance segmentation)
多个同类物体存在时,将它们一一区分出来
二、经典卷积神经网络
1.AlexNet
Data Augmentation
拟合自然界中常见的噪声。
主要用于数据集较小的时候,可以丰富图像训练集、防止过拟合。
常用的数据增强方式有:
对颜色的数据增强:色彩的饱和度、亮度、对比度
加噪声(高斯噪声)
水平翻转、垂直翻转
随机旋转、随机裁剪(crop)
2.VGG
深度增加&小卷积核–>对网络最后的分类识别效果有很大作用
小卷积核:3×3:表示上下、左右、中心这些概念的最小概念的最小卷积核尺寸
深度:AlexNet8层–>VGG最深19层
Small Convolution filter:
最早用于VGG,Inception2中明确指出该设计准则
AlexNet用到一些非常大的卷积核,比如11×11,5×5.
Intution:感受视野大、看到的图片信息就越多,获得的特征会越好
Methods:使用2个3×3的卷积核的组合比用1个5×5的卷积核效果更佳&参数量降低。
参数量的评估:
以256通道的隐层数据为例:
2个3×3的卷积核 ==1个5×5的卷积核
2×3×3×256params 5×5×256params
3个3×3的卷积核 ==1个7×7的卷积核
3×3×3×256params 7×7×256params
3.GoogLeNet/Inception
Google提出的神经网络,一共有V1-V4共4个不同的模型
使用了Inception模块
可以并行执行多个具有不同尺度的卷积运算或池化操作
将多个卷积核卷积的结果拼接成一个非常深的特征图
使用了大量的trick提高网络性能
Bottleneck(瓶颈):1×1的卷积核,借鉴NIN
使用全局平均池化GAP代替全连接
在v2中,采用Batch Normalization(批归一化)
在v3中,采用非对称卷积降低运算量
在v4中,结合了ResNet中的思想,发现Residual Connections貌似只能加快网络收敛速度,使更大的网络规模提高了精度。
Multi-size filters in one layer(Inception Block):
传统的堆叠式网络,每层仅用一个尺寸的卷积核。
VGG每层只使用3*3的卷积核。
Intuition:信息位置的巨大差异,使得不同尺度的特征结合起来可以得到更好的特征表示
Methods:卷积核设为1,3,5,stride设为1可以使用pad = 0, 1, 2 很方便的对齐结合的方式:在depth维度上Concatenation(拼接)
Bottleneck
最早出现于Network in Network
在同一层使用多个不同尺寸的卷积核会导致参数过多
Intuition:Network in Network中1×1的卷积核的启发
在原来的Inception结构中加入1×1的卷积核
Bottleneck参数量评估
Input channel = 256,Output channel = 256
卷积核= 3×3×256
参数量:256×3×3×256 = 589,824
卷积核:1×1×32,3×3×256
参数量:256×1×1×32+32×3×3×256=81,920
使用全局平均池化GAP代替全连接
多设计几个全连接层可以提升神经网络的分类性能,全连接层一度成为标配
Intuition:全连接层参数量巨大,
特别是与最后一个卷积层相连接的全连接层
Methods:全局平均池化Global Average Pooling 代替全连接
Advantage:可以实现任意图像大小的输入
InceptionV3 参数量:23.6MB,推理内存消耗:35.5MB
4.ResNet
使用了恒等映射
传统神经网络训练的函数为F(x)
添加恒等映射后,神经网络训练的函数变为F(x)+x
这样训练出来的网络,相当于是在对x作修正,修正的幅度就是F(x),F(x)在数学上称为残差所以作者提出的网络称为残差网络
tips
平凡网络中,为什么深度增加到一定程度后,训练的效果反而下降了?
梯度下降算法本身的缺陷
深度增加后,相比浅一些的网络来说梯度减小。误差传播过程变慢,网络的优化速度就慢残差网络中,为什么能够避免这种现象?恒等映射下,虽然网络的深度加深,但是每层中都会有足够多的由梯度承载的信息量,梯度不会太小加快了深层网络的收敛速度。