网站首页 > 技术文章 正文
简 介
AlexNet在2012年发表后,研究界在此基础上做了很多改进工作,使得模型的效果不断提高,特别是在ImageNet上的精度获得了显著的提升。针对AlexNet的改进有两个方向,其中一个以VGG为代表,通过堆叠小核卷积增加模型深度来提高模型的特征提取能力。其在各方面的性能(2014年ImageNet上取得图像分类第二名,图像定位第一名)都证明了加深深度可以获取更高的精度。本篇文章将对VGG研究内容与工作进行介绍。
01 基本结构
在AlexNet基础上,VGG开发人员使用连续的小核卷积(3×3,这是捕获左/右,上/下,中心概念的最小尺寸)来代替原模型中的大核卷积(11×11,7×7等),该操作在确保感受野不变(见名词解释a)的情况下不仅可以减少模型参数(7×7C→3×3×3C),也可以通过更多的非线性层保证模型学习更复杂的模式;再通过反复堆叠3×3的小核卷积和2×2的最大池化层,成功地将模型构筑到了19层的深度(含全连接层)。在实现时,VGG基本上抛弃了AlexNet中的“局部响应归一化”(LRN)技术,作者实验认为这种标准化会导致更多的内存消耗和计算时间。
VGGNet有A-E六种深度,在结构上并没有改变,只是增加了卷积层数量,详细的结构见下表:
表中所有的卷积层与池化层都使用相同的配置,卷积层(conv3)使用3×3尺寸的卷积核,其步长(stride)和填充(padding,用0填充)都是1像素。Conv3-256,代表该卷积层输出通道数为256。部分结构中采用的conv1为核尺寸和步长均为1的卷积层,且所有卷积层后都使用Relu作为激活函数。池化层(maxpool)使用2×2的核尺寸,步长设置为2,经过池化层后特征图的大小衰减为原来的1/4(同时也减小计了算量)。卷积层之后是三个DropOut概率为0.5的全连接(FC)层:前两个每个都有4096个通道,第三个执行1000维分类,因此包含1000个通道,最后一层是soft-max层。
02 PyTorch实现
常说的VGG模型为VGG-D(VGG-16)和VGG-E(VGG-19),这里我用Pytorch框架来实现VGG模型:
03 特殊技巧
预训练初始化
由于深度网络中梯度的不稳定,不好的初始化可能会阻碍学习。为了避免这个问题,原作者从最小的结构(VGG-A)开始训练。训练更深的模型时,使用VGG-A来初始化模型的前4个卷积层和最后三个全连接层,并以符合正态分布的随机值来初始化中间层的参数。这样的初始化训练会比完全随机初始化的方式更加稳定。作者也实验了,使用ImageNet上训练得到的模型,在其他小数据集上有着优秀的泛化性能,且在训练时不容易过拟合。
多尺度训练与数据增强
为了防止模型的过拟合,在训练时采用了水平翻转和RGB色差的数据增强方案,并采用多尺度(Multi-Scale)的方法来训练模型。即将原始图像随机缩放到不同尺度S,然后再裁剪为224×224的图片,而且针对缩放裁剪过程中出现的尺度过小,裁剪无意义;尺度过大,裁剪太片面的问题,提出了两种解决办法:一种是固定最小边为256;另一种是随机从[256,512]中抽样,可以保证原始图片的尺寸不一致。
全卷积网络推理
由于全连接层只能接受固定的输入维度,为了拓展,原作者在推理测试时将第一个全连接层转换为7x7的卷积层,最后两个全连接层转换为1x1的卷积层。示意图如下:
测试时增强
最后,在实验时也测试了多尺度测试(TTA,test time Augmentation)对能够提高结果的精度。
04 总 结
VGG的简洁得益于使用过程中,所有卷积核与最大池化层尺寸的统一,实验结果证明了几个小核卷积层的组合比较大单一卷积层好,验证了加深网络可以提升性能。不过VGGNet减少了卷积层参数,但实际上其内存占用比AlexNet大,其中绝大多数的参数都是来自于第一个全连接层,耗费更多计算资源,而且其采用Pre-trained方法训练的VGG model(主要是 D 和 E),训练一个VGG模型通常要花费更长的时间。
附:
名词解释
感受野
在卷积神经网络中,感受野(Receptive Field)通俗的解释就是特征图上的一个点对应输入图上区域的大小。如下图,5×5卷积将5×5范围内的像素值聚合成一个特征点。两个3×3的卷积在第一个卷积时,会将3×3范围的像素聚合成一个特征点(红色框范围)以1为步长顺次遍历(范围为5×5),可以得到3×3的特征图;第二个卷积将特征图的信息继续聚合成一个特征点(绿色框范围),该点的形成聚合了原图5×5范围的像素,因此可以确保感受野的不变。
实际中并不需要一层层倒推计数,可以使用如下公式来计算某一层的感受野大小。RFi为第i层卷积层的感受野,RFi-1为上一层感受野,stride是卷积的步长,Ksize是本层卷积核的大小。
参考资料:
[1] Very Deep Convolutional Networks for Large-Scale Image Recognition https://arxiv.org/abs/1409.1556
[2] 从LeNet到GoogLeNet:逐层详解,看卷积神经网络的进化
https://cloud.tencent.com/developer/article/1581721
本文所有文字版权均属“宝略科技”,更多内容请搜索关注【宝略科技】微信公众号~
猜你喜欢
- 2024-10-03 Inception系列之Inception_v2 inception v2
- 2024-10-03 谷歌力作:神经网络训练中的Batch依赖性很烦?那就消了它
- 2024-10-03 Java树结构 Java树结构数据导出easyexcel
- 2024-10-03 「干货」泌尿外科腹腔镜手术入路,齐了
- 2024-10-03 泌尿外科腹腔镜手术入路,全在这了
- 2024-10-03 机器不学习:深度卷积模型 不要再问1x1卷积核的问题啦
- 2024-10-03 归一化方法总结 归一化bn
- 2024-10-03 RSTP和STP的状态角色一览 rstp相比stp的优点
- 2024-10-03 深度学习笔记:AlexNet alexnet卷积神经网络
- 2024-10-03 深度学习之重读经典(二)AlexNet 重拾经典深度阅读
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)