1.前言
卷积网络是一种经典的深度学习架构,在图像处理领域发挥着巨大作用。第二部分介绍了5个经典的CNN模型,第三部分是我对其的代码复现
2.介绍
2.1 CNN的基本组件
虽然CNN的模型有很多种,但相似之处在于都是把原始数据作为算法输入, 通过卷积、池化和非线性激活函数映射等一系列操作, 将原始数据逐层抽象为自身任务所需的最终特征表示, 最后以特征到任务目标的映射作为结束。例如图1的LeNet网络,由输入层,卷积层,池化层,全连接层,输出层组成。
卷积层用来提取特征,池化层用来下采样、降维,全连接层用来产生全局语义信息,获得全部的特征,忽略位置关系,输出层用来输出最后信息,分类问题,常用softmax返回某类的概率,回归问题,返回一个值。
2.2 LeNet
Lenet是一个 7 层的神经网络,包含 3 个卷积层,2 个池化层,1 个全连接层。其中所有卷积层的所有卷积核都为 5x5,步长 strid=1,池化方法都为全局 pooling,激活函数为 Sigmoid。可以说是卷积网络中的HelloWorld。结构如图一所示。
特点:
-
相比MLP,LeNet使用了相对更少的参数,获得了更好的结果。
-
设计了maxpool来提取特征
2.3 AlexNet
AlexNet是最早的现代神经网络,证明了”深度卷积神经网络“在复杂模型的有效性。使用了GPU训练,可以得到一个让人接受的训练时间。
Alexnet模型由5个卷积层和3个池化Pooling 层 ,其中还有3个全连接层构成。AlexNet 跟 LeNet 结构类似,但使⽤了更多的卷积层和更⼤的参数空间来拟合⼤规模数据集 ImageNet。它是浅层神经⽹络和深度神经⽹络的分界线。结构如图二所示。
特点:
- 使用了relu作为激活函数,替代了sigmod,解决了梯度消失问题,网络收敛的更快
- 使用了dropout,提高了网络的鲁棒性,后期被人理解等效为正则项。
- 使用了LRN,局部归一化,提高了准确率。
2.4 VGG
VGG可以看成是加深版本的AlexNet.加深了层数,为了解决初始权重的问题,提出先训练浅层网络,再训练深层网络的方式。如图3所示。
特点:
-
严格使用了3×3大小的卷积,用两个3×3卷积来替代5×5卷积,三个3×3卷积替代7×7卷积,达到了同样的感受野,但减少了参数,增强了网络的性能。
-
使用1×1的卷积来改变通道数,增加网络的表达能力,降低计算量。
2.5 GoogLeNet
GoogLeNet是一个22层的卷积神经网络, 由Inception 结构作为基本模块级联而成。每个Inception模块使用了不同的卷积核并行级联而成。
特点:
- 提出了Inception 结构
- 使用1×1的卷积来改变通道数
- 删除了全连接层,大大减少了网络参数
- 在保证网络性能的情况下极大幅度的节约计算成本
2.6 ResNet
深度网络面临的挑战之一是训练过程中会出现梯度消失问题。ResNet通过引入残差模块,学习残差映射F (x) =H (x) -x, 而不是学习卷积层F (x) 的函数, 解决网络退化的问题,使得可以训练更深的网络。
特点:
- 提出了残差块这个概念,对原有的网络改动很小,但可以加深层数,可以利用到更多的信息,提高网络的准确率。
- 残差结构是为了解决网络退化的问题提出的。
2.7 模型比较
从LeNet开始,网络的规模不断变大,本质上LeNet,AlexNet,VGG,GoogLeNet都是对之前网络的修补改进,通过改变小的结构来提升性能。在这个过程了,激活函数从一开始的sigmod变为rulu,卷积核大小也变为常见的3×3,5×5,同时提出1×1的卷积在不改变图片大小的情况下,改变通道数,通过权值预初始化的方式,提高网络的性能,梯度消失/爆炸通过 BN 等方式得到解决。
ResNet则是提出了一种新的结构,使得可能训练更深的网络,解决了网络退化的问题,简化了学习的目标和难度,我认为有跨越度的提升。
3.实验
3.1 网络结构
LeNet
class LeNet(torch.nn.Module):
def __init__(self):
super(LeNet