欢迎光临散文网 会员登陆 & 注册

【精读AI论文】VGG深度学习图像分类算法

2021-11-20 18:24 作者:如果我是泡橘子  | 我要投稿

ImageNet图像分类竞赛历年Tops 错误率







VGG16和VGG19


  • D是VGG16,E是VGG19
  • 每一个模型都分为5个bolck,所有的卷积层全部使用3*3大小的卷积核,随着模型的变深,每一个模型的channel(或者说卷积核)的个数都翻倍
  • VGG16


VGG16和VGG19 P2 - 00:42


  • A-LRN(通过对比发现添加LRN并没有什么用)
    
    VGG16和VGG19 P2 - 02:39
    





  • 红色表示max pooling,最大池化下采样层,下采样层并不包含参数,所以并不包含在16或者19中
  • 白色表示卷积层
  • 像素层面的长宽越来越小,语义层面的通道数越来越深(长宽越来越小,通道数越来越多)
  • VGG16和VGG19本质上并没有什么区别,只是VGG19比VGG16在后面三个block中各多了一个卷积层





VGG16

  • 最常用的迁移学习的骨干模型
  • 输入时224*224*3的RGB彩色图像
  • 第一个block输出的feature map是224*224*64,有64个卷积核,每一个卷积核生成一个channel,每一个channel还是224*224
  • 下采样后长宽减半,然后继续用128个卷积核进行卷积,得到128个channel
  • 以此类推
  • 第五个block输出的feature map是7*7*512,经过下采样将它展平成为一个长向量,再经过3个全连接层(第一二层有4096个神经元,第三层有1000个神经元)
  • 经过最后一个全连接层输出1000个类别的logic分数,这1000个分数经过softmax处理,得到1000个类别的后验概率
  • 长宽信息逐渐减小,通道信息逐渐增加(将像素空间的信息转化成语义信息)
  • 有图有误,最后一个全连接层神经元的个数应该是1000



所有卷积层输出的feature map的尺寸

  • 2、2、3、3、3



  • 红色表示VGG中每一层所占用的内存
  • 蓝色表示每一层所对应的参数数量
  • 前两层卷积占用了绝大部分内存
  • 第一层全连接层占用了绝大部分参数
  • 总共的内存消耗大约是96MB(只是前向传播)





为什么VGG全部使用3*3的卷积?


3 x 3卷积的作用 P3 - 00:01



  • 带权重的卷积核在原图上进行滑动,它所覆盖到的区域叫做感受野
  • 感受野上的像素和对应的卷积核上对应的权重相乘并求和,最终得到feature map


  • 5*5的输入通过一个3*3的卷积核(步长为1)得到一个3*3的feature map,再通过一个3*3的卷积核(不用进行滑动)进行卷积,最后得到一个值,这个值反映的是原来的5*5的输入的信息,即2个3*3的卷积可以代替1个5*5的卷积
  • 这样做的好处,经过两层之后模型深度变深了,非线性次数变多了,学习能力会变得更好,表示空间会变得更大而且参数的数量减少了
  • 3个3*3的卷积核进行堆叠可以等价于1个7*7的卷积核
  • 所以VGG中全部使用3*3的卷积
  • 3*3本身也有一个好处:他是最小的能够包含左右、上下和中心点的最基本的单元


  • 这种结构在inception中也用到了:用两个3*3的卷积核来代替一个5*5的卷积核
  • 一个3*3卷积也可以分解为一个3*1卷积和一个3*1卷积,相当于不对称卷积,这样也能够减少参数数量





VGG网络特点


VGG模型特点 P4 - 00:03


特点鲜明

  • 它的准确率并不是最优秀的(经典神经网络结构,深度并不是很深),准确率处于中游水平
  • 臃肿:计算量和参数量都特别大
  • 上图中横轴代表计算量(一次正向推断/前向传播运算的计算量),纵轴表示Top1准确率,圆圈的大小表示模型的参数数量
  • 上图中横轴代表计算量(一次正向推断/前向传播运算的计算量),左图纵轴表示Top1准确率,右图纵轴表示Top1准确率,圆圈的大小表示模型的参数数量
  • 上图中a图表示单位参数能为准确率做出多少贡献,可以看出VGG的效率是非常差的
  • b图是a图的散点图



图像增强使用的是随机的水平翻转和随机的颜色变化




  • 预测的时候把全连接层转化成为了卷积层,这样全卷积网络就能输入任意大小的图像



  • 上图比较了训练尺寸是不是固定对模型性能的影响
  • 纵轴表示错误率,越低表示性能越好
  • 从图中可以看出图像尺寸越大





迁移学习与可解释性分析

  • 以VGG作为迁移学习的基模型非常简单,只需要将最后一层全连接层换成自己类别个数的神经元就可以了
  • 可以在新的类别的数据集上冻结之前的模型,仅训练最后改的那层全连接层就可以实现迁移学习的目的了



  • VGG是一个经典的的串行的卷积神经网络,没有引入跨层连接等fancy的trick,所以最后提取出来的feature map是包含图像的位置信息的(最后提取的feature map与原图中的区域是相对应的)

【精读AI论文】VGG深度学习图像分类算法的评论 (共 条)

分享到微博请遵守国家法律