之前又重新温习了一遍识别算法,这里写写笔记总结一下,不要求什么格式了,能看就行(小声BB)
深度学习比较依靠实验方法,现在有的东西很难用理论来解释为什么效果会更好。
cnn两个最重要的特征:
权值共享(w),就是filter对于不同位置的特征都敏感
稀疏链接,避免过拟合(因为只有在局部感受野的上层输入才对下层对应位置的输出负责)只有局部感受野那一块对输出的feature map那一个grid相连接
Alexnet:
1.Relu解决了网络深的时候出现的梯度消失/爆炸
2.dropout应用于全链接层,避免模型过拟合
3.LRN(没啥用)
4.maxpooling之前都是avgpooling,避免了平均池化的模糊化效果,(相对应的会丢失部分特征)并且当stride小于kernal大小时会出现叠加,使特征更加丰富
5.数据增强来防止过拟合,提高范化能力。在训练时采用的是random crop,预测时对于一张图片采用四个角+中间进行crop,并左右镜像,一共获得10张图片。对这10张图片进行预测并对10次结果求解平均值作为最后的输出结果
6.2012提出,使CV领域应用深度学习
VGG
数据泛化能力强,可以用做fine tune,图像特征提取
fine tune效果最明显的就是在数据集不是很大时候,采用fine tune可以避免过拟合问题。(VOC)
1.卷积都是3 * 3,池化都是2 * 2 简单暴力堆积,卷积都是same不改变size,池化都是尺寸size减半
2.2个3 * 3的filter串联相当于1个5 * 5,3个3 * 3等于1个7 * 7。这样减少参数计算量,并且又多了几层的特征变换(w)和非线性变换(relu)降低参数并且避免过拟合(避免过拟合因为神经元链接密度下降)
3.利用scale+crop进行数据增强
4.发现网络的深度广度加深可以提升性能(但是这种网络实际训练起来比较困难,可能还没有浅层的好用)
5.小的卷积核更好用
Resnet
极快加速超深神经网络的训练,模型的准确率也大大提升
1.采用skip跳跃式链接(shortcut)
以block作为基本单位,输入引出来(x),经过block的输出(F(x))
整体x+F(x)经过relu传递到下一个block中,这里的F(x)就是residual残差
参考highway 网络
传统的cnn在信息传递的时候或多或少会存在信息丢失问题,resnet某种程度上解决了这个问题。输入信息x直接传递给输出,保护信息的完整性,整个网络只需要学习F(X)部分就可以。
2.两种block结构,一种简单的3 * 3+3 * 3,另一种复杂的bottleneck的1 * 1+3 * 3+ 1* 1(先降维再升维,目的是降低channel减小参数数目)
不同层数的resnet差异就在block重复的次数,例如[2,2,2,2].[3,4,6,3]…
3.会存在x和F(X)size,channel不相同,这时候就采用对x进行变化了:1 * 1改变channel,然后p = 0, s = 2进行size的对半收缩
一般来说都是size下降,channel提高,size下降是为了抽象特征
inception V1-V4
轻量
本身如同大网络中的小网络,结构可以反复堆叠在一起形成大网络
首先引入1 * 1filter。成本很低!!! 增加了一个非线性过程+w特征变换(用很少的计算量就可以实现特征变换+非线性化),可以改变channel数,从而实现压缩通道,参数减少。可以跨通道组织信息,提高网络的表达能力,并且实现输出channel的升维降维
控制计算量和参数量
1.虽然层数多,但是网络的参数数目少,参数越多网络越复杂,为了避免过拟合需要的数据越多,并且计算代价越大
2.去掉了最后的全链接层,用全局avgpooling来进行替代(将图片尺寸变成11)后面会发现全链接层没啥好的,这样模型更快并且不容易过拟合
因为CNN的大部分参数都集中在FC层中了
3.一层conv可以有不同size的kernal,以前都是只有一种size,同一个滤波器只能提取一类特征,一个输出通道只能做一种特征处理。现在允许对叠
4.基本结构:1 * 1 + 1 * 1&3 * 3 + 1 * 1&5 * 5 + 3 * 3(maxpooling)&11
这四个部分输出进行channel维度聚合(借鉴multi-scale)
5.针对与人脑神经元思考(稀疏设计)
11卷积很自然地把这些相关性很高(一张图像相近的像素相关度必然很高),在同一空间位置但是不同通道的特征链接在一起,**这样11卷积所链接的节点相关性是最高的**
6.整个网络会采用基本结构,越往后面,特征越要高度抽象,卷积空间集中度应该降低,这样可以捕获更大面积的特征,即越往后面3 * 3,5 * 5卷积核占比应当更大,增大局部感受野
7.辅助分类节点。中间某层输出用作分类,以一个较小的权重加到最后的分类结果中,相当于模型融合
8.v2学习了VGG 用两个串联的3 * 3替代5 * 5, 并且提出了BN层
9.BN属于正则化方法(可以去掉dropout了),使输出规范化(0-1的高斯分布)。提升训练速度,收敛更快(因为不用每层都重新学习图像的分布特征了)
10.采用shuffle对输入进行随机
V3主要改进了两个方面:
1.将较大的二维卷积拆成一维卷积
一维卷积通常用来处理序列模型
例如13 * 13->13 * 1& 1 * 13,这样一方面节约了大量参数,加速运算,同时增加了一层非线性扩展模型表达能力
这种非对称的卷积结构拆分比对称拆成几个小的卷积kernal效果更好,可以处理更多更丰富的空间特征,增加特征多样性,节约参数
2.优化了原来的基本结构,变成35 *35 ,17 *17, 8 *8三种filter ,这些filter只在后面出现
3.v3中最后部分的module是并行1 * 3和 3 * 1,最后再进行两个分支的合并contract(因为卷积大多采用same方法,因此就输入输出同尺寸)
V4结合了ResNet
总结:
卷积网络从输入到输出,应该让feature map的size逐渐降低,通道数逐渐提升。即空间结构简化(更加抽象出重要的特征),将空间信息转化为高阶抽象的特征信息