一、论文阅读与视频学习
1、ResNet
2015年,何恺明等人在实验时发现单纯地增加神经网络深度会导致神经网络退化,因此提出了残差网络(ResNet),即在神经网络中引入shortcut结构,将输入与经过卷积层的结果直接相加,可以更好地训练更深层的神经网络。ResNet斩获当年ImageNet竞赛中分类任务第一名,目标检测第一名。
残差网络(Residual Network,ResNet)是指具有多个串联残差结构的深层神经网络,其主要思想是神经网络中经过卷积层的特征信息应更直接地包含原始特征信息。
残差结构如下图所示,经过卷积和池化之后的函数值加上shortcut结构的identity也就是原始的输入,最后得到残差结构的输出。
1.1网络中的亮点
1.2网络解决的问题
1.3两种残差结构
需要注意的点:
- 主分支与shortcut的输出特征矩阵shape必须相同
- 1x1的卷积核用来降维和升维
- 右侧和左侧相比,可以大大节省模型参数,提高神经网络训练效率
1.4不同层数的网络结构
对于输入矩阵和输出矩阵channels不同的情况,如表中conv2.x和conv3.x之间的部分,以34-layer为例,此时输入层大小为[56,56,64],输出层大小为[28,28,128],此时采用下图中option B的残差结构,需要在shortcut上通过128个步长为2的1✖️1卷积核,进行减小特征图大小和增大channels的操作,最后得到的x,主分支通过128个步长为2的3✖️3的卷积核,进行减小特征图大小和增大channels的操作得到结果,最后两者相加在进行relu激活:
1.5Batch Normalization原理
我们在图像预处理过程中通常会对图像进行标准化处理,这样能够加速网络的收敛,如下图所示,对于Conv1来说输入的就是满足某一分布的特征矩阵,但对于Conv2而言输入的feature map就不一定满足某一分布规律了(注意这里所说满足某一分布规律并不是指某一个feature map的数据要满足分布规律,理论上是指整个训练样本集所对应feature map的数据要满足分布规律)。而我们Batch Normalization的目的就是使我们的feature map满足均值为0,方差为1的分布规律。
1.6迁移学习
2.ResNeXt
2.1.更新block
引入组卷积的概念
2.2减低错误率
2.3组卷积
降低参数量,提高效果
2.4不同block结构
以下三种block结构,在数学计算上完全等价
2.5两种网络对比
二、代码作业
1.LetNet
首先是先下载数据集,训练集所使用网上重新分类的数据集,样本数目较少,训练速度快一些,猫狗的数目各为2000
创建数据集,同时图像缩放为128✖️128,batch设置为256
设计的简单版letnet,五层卷积,四层池化,五层relu激活,两层全连接,最后使用softmax归一化。
训练60个epoch,最后loss稳定在0.35左右
生成res.csv文件,并提交结果
可以看到letnet效果一般
2.ResNet
挂载Google Drive,避免数据集重复下载
下载数据集,并将数据集分类,要将下载好的数据压缩包移到,创建好的cat_dog文件夹中,之后自动生成catdong和train,val文件夹。
载入数据集,并对数据进行处理 ,将batch调小到10
载入resnet152
模型训练,然后在这里colab限额了,暂时没法训练,等待一天之后继续实验,并由于训练速度实在太慢,接近十分钟一轮,将epochs调整为5
生成结果csv文件
将结果提交到猫狗大赛中
可以很明显的看到resnet很好的完成了图像分类任务准确率达到98.55%远高于letnet的75.05%
三、思考题
1、Residual learning 的基本原理?
在resnet部分已经阐述
2、Batch Normailization 的原理,思考 BN、LN、IN 的主要区别。
bn原理在1.5已经阐述
BatchNorm:batch方向做归一化,算NHW的均值,对小batchsize效果不好;BN主要缺点是对batchsize的大小比较敏感,由于每次计算均值和方差是在一个batch上,所以如果batchsize太小,则计算的均值、方差不足以代表整个数据分布
LayerNorm:channel方向做归一化,算CHW的均值,主要对RNN作用明显;
InstanceNorm:一个channel内做归一化,算H*W的均值,用在风格化迁移;因为在图像风格化中,生成结果主要依赖于某个图像实例,所以对整个batch归一化不适合图像风格化中,因而对HW做归一化。可以加速模型收敛,并且保持每个图像实例之间的独立。
3、为什么分组卷积可以提升准确率?即然分组卷积可以提升准确率,同时还能降低计算量,分数数量尽量多不行吗?
分组卷积能减少运算量和参数量,所以不容易过拟合,相同输入输出大小的情况下,减少为原来的1/group
分组数量并不是越多越好,当分组数目与输入图像channel相同,达到最大分组数,此时使用分组卷积会降低各个通道间的关联性,从而使得准确率降低。