博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算机视觉 - 常见的图片分类模型【架构演变】
阅读量:5051 次
发布时间:2019-06-12

本文共 7506 字,大约阅读时间需要 25 分钟。

LeNet

  1. 原始论文中的版本

    数据集为MNIST,输入:\(32*32*1\)

    Name kernel stride pad Input Output Parameter Number
    Conv1 6 5×5 1 0 32×32×1 28×28×6 (5×5×1+1)×6
    subsampling+sigmoid 2×2 2 0 28×28×6 14×14×6 (1+1)×6
    Conv2 16 5×5 1 0 14×14×6 10×10×16 (5×5×3+1)×6+(5×5×4+1)×6+(5×5×4+1)×3+ (5×5×6+1)×1
    subsampling+sigmoid 2×2 2 0 10×10×16 5×5×16 (1+1)×16
    Conv3 120 5×5 1 0 5×5×16 1×1×120 (5×5×16+1)×120
    FC4+tanh - - - 1x1x120 84 1x1x120x84
    RBF - - - 84 10 0
  2. 下采样的方式为 \[sigmoid(w*(\sum_{i=0}^{1} \sum_{j=0}^{1} x_{ij})+b)\] 这里,\(w\)\(b\) 是可学习参数。

  3. conv2使用了包括3层、4层、6层三种通道数不同的filters,然后将它们的输出拼接在一起作为这一层的输出。

    1179034-20171128193406565-1583018742.jpg

    这里使用多组不同形式的卷积的原因:
    • 不完全机制限制了连接的数量,减少计算量
    • 破坏了网络的对称性
  4. 最后一层是RBF,虽是全连接,但参数W是给定值。输入的\(84\)维向量相当于\(12*7\)的比特图。输出的每一个值,代表了输入输出对应的参数权重的均方误差MSE。

  5. 要求损失函数可以使正确的label对应的输出值越小越好。

  6. Caffe中的实现,输入的 batch size \(64\),归一化scale \(0.00390625\)

    Name kernel stride pad Input Output Parameter Number
    Conv1+ReLU 20 5×5 1 0 28×28×1 24×24×6 (5×5×1+1)×20
    Max Pooling 2×2 2 0 24×24×20 12×12×20 0
    Conv2+ReLU 50 5×5 1 0 12×12×20 8x8x50 (5×5×20+1)×50
    Max Pooling 2×2 2 0 8x8x50 4x4x50 0
    FC3+ReLU - - - 4x4x50 500 4x4x50×500
    FC4+Softmax - - - 500 10 500x10

    损失函数为 SoftmaxWithLoss

    细节:
    • 权重的初始化方式为xavier,偏移值的初始化方式为constant,默认设为0
    • 权重的学习率为 base_learning_rate,偏移值的学习率为 base_learning_rate 的两倍

AlexNet - ImageNet Classification with Deep Convolutional Neural Networks

  1. 结构

    Name kernel stride pad Input Output Parameter Number
    Conv1+ReLU 96 11×11 4 0 227×227×3 55×55×96 (11×11×3+1)×96
    Max Pooling 3x3 2 0 55x55x96 27x27x96 0
    Conv2+ReLU 256 5x5 1 2 27x27x96 27x27x256 (5x5x96+1)x256
    Max Pooling 3x3 2 0 27x27x256 13x13x256 0
    Conv3+ReLU 384 3x3 1 1 13x13x256 13x13x384 (3x3x256+1)x384
    Conv4+ReLU 384 3x3 1 1 13x13x384 13x13x384 (3x3x384+1)x384
    Conv5+ReLU 256 3x3 1 1 13x13x384 13x13x256 (3x3x384+1)x256
    Max Pooling 3x3 2 0 13x13x256 6x6x256 0
    FC6+ReLU+Dropout - - - 6x6x256 4096 6x6x256x4096
    FC7+ReLU+Dropout - - - 4096 4096 4096x4096
    FC8+Softmax - - - 4096 1000 4096x1000
  2. 浮点乘法运算量:\[55*55*96*11*11*3 + 27*27*256*5*5*96 + 13*13*384*3*3*256 + 13*13*384*3*3*384+13*13*256*3*3*384 + 6*6*256*4096 + 4096*4096 + 4096*1000\]

    参数60 Million,MACs 1.1 Billion
    (实际计算量比这个值小,因为Conv层中使用了group)

  3. 第一次引入ReLU,并使用了 overlapping Max Pooling

    在前两个全连接层使用了系数为0.5的 Dropout,因此测试时需要将结果乘以0.5

  4. 在论文中,还引入了局部响应归一化层LRN。但后来证明没有效果提升。同时,overlapping Max Pooling也没有被广泛应用。

  5. 训练细节:

    batch size 128,momentum 0.9,weight decay 5e-4
    学习率初始为0,每当error停止下降,就除以10

  6. 数据增强
    • 对于训练集,随机剪裁。对于测试集,将原始图片和对应的水平镜像从中间和四边剪切,然后将这十个预测结果取平均
    • PCA jittering。基于整个训练集特征值 λ 和特征向量 P,对于每个epoch的每一张图像,从均值0、方差0.1的高斯分布随机抽取 α。对原始图片三维通道做 λ * α * P 映射

ZFNet - Visualizing and Understanding Convolutional Networks

  1. 引入 DeconvNet 来可视化某一 feature map

    将该层其余 feature maps 设置为0,然后经过一系列的 (i) unpool (ii) rectify (iii) filters 映射回像素级别。
    其中,(i) unpool:max-pooling同时记录位置信息。(ii) ReLU。(iii) 原卷积对应矩阵的转置。

  2. 论文中使用可视化方法:

    对于某一层的某个 feature map,我们在验证集中寻找使该 feature map 的 response 最大的九张图片,画出这九张图片中的该 feature map 反卷积映射的结果,并和原图相对应的 patch 对比

  3. 特征可视化:层数越高,提取的特征越复杂,不变性越明显,越 discrimination。

    训练过程中特征收敛过程:层数越低,收敛越早
    特征不变性:(1) 图像缩放、平移对模型第一层影响较大,对后面基本没有影响;(2) 图像旋转后,特征不具有不变性。

  4. 通过第一层和第二层可视化对AlexNet进行改造得到ZFNet:减小感受野,降低步长。

  5. 模型对局部特征敏感

  6. 模型具有特征泛化性,因此可以用于迁移学习。

Network in Network

  1. 引入1x1卷积

    Original:Conv 3x3 -> ReLU -> Pooling
    MLPConv: Conv 3x3 -> ReLU -> Conv 1x1 -> ReLU -> ... -> Pooling

  2. 使用 average pooling 取代 FC

  3. 结构:MLPConv 堆叠 + global average pooling

VGG - Very Deep Convolutional Networks for Large-Scale Image Recognition

  1. 使用了统一的卷积结构,证明了深度对模型效果的影响。LRN层没有提升效果。

  2. 堆叠多个3x3的感受野,可以获得类似于更大感受野的效果。同时,多层3x3卷积堆叠对应的参数更少(减少参数相当于正则化效果)

  3. 运用了 Network in Network 中提出的1x1卷积。

  4. 训练方式: 256 batch size,0.9 momentum,5e-4 weight decay,0.5 dropout ratio。learning rate:初始1e-2,每当停止提升后下降为之前的十分之一

  5. 数据增强
    • 颜色增强 color jittering,PCA jittering
    • 尺度变换:训练集随机缩放到[256, 512],然后随机剪切到224x224
      尺度变换对应的测试方法:(1) 随机裁剪,取平均,类似AlexNet (2) 将FC转为Conv,原始图片直接输入模型,这时输出不再是1x1x1000,而是NxNx1000,然后取平均。

GoogLeNet - Going deeper with convolutions

  1. 论文发表之前相关的工作:当时研究者关注增加层数和filter数目(可能会导致小样本过拟合,并需要大量的计算资源),并通过Dropout防止过拟合。尽管有人认为 Max Pooling 造成了空间信息的损失,但这种结构在 localization、detection、human pose estimation 中均取得很好的成绩。

    Network-In-Network 中引入1x1卷积,增加了神经网络的表示能力【representational power】。GoogLeNet中的 Inception 结构也运用了1x1卷积来进行降维处理。

  2. 为解决过拟合和计算代价高的问题,使用稀疏网络来代替全连接网络。在实际中,即使用卷积层。

  3. Inception结构:对于输入的 feature maps,分别通过1x1卷积、3x3卷积、5x5卷积和 Max-Pooling 层,并将输出的 feature maps 连接起来作为 Inception 的输出【同时获得不同感受野的信息】。在3x3卷积、5x5卷积前面和池化层后面接1x1卷积,起降维的作用。

Inception v2 v3 - Rethinking the Inception Architecture for Computer Vision

  1. CNN的通用设计思想
    • 通常,随着网络层数增加,空间特征数逐渐降低,通道数逐渐增加。
    • 不要过度压缩损失精度信息,避免表征瓶颈。
    • 增加非线性特征可以解耦合特征。
    • 卷积的实现形式为空间聚合【spatial aggregation】
    • 1x1卷积降维不会产生严重的影响。猜测:相邻通道之间具有强相关性,卷积前降维基本不会损失信息。
  2. 5x5卷积的感受野与两个3x3卷积堆叠所对应的感受野相同。使用后者可以大大减少网络参数。7x7同理。此外,两个3x3卷积后各连接一个非线性层的效果优于仅在最后连接一个非线性层

  3. NxN的卷积可以用1xN与Nx1的卷积堆叠实现。

  4. 使用 Label Smoothing 增加网络的正则能力。使用 Batch Normalization 和 RMSProp

ResNet - Deep Residual Learning for Image Recognition

  1. 网络过深会导致退化问题,通过短路连接解决该问题。

  2. 通常,一个 residual unit 的残差部分使用二至三层的函数映射(或称卷积层),shortcut 部分与残差部分进行 eltwise add 后再连接非线性层。

补充:论文

  1. Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

    • 相比v3,Inception v4的主要变化是网络的加深,卷积和的个数也大大增加
    • Inception-ResNet即将ResNet的残差结构替换成了简单的Inception结构
    • 文中认为ResNet对提高精度的帮助较小【ResNet论文中提到ResNet解决了退化问题】,加快过深网络的训练速度是其主要优势。对于特别深的残差网络,可以通过在残层结构后接一个scaling【如残层结构输出的一个元素乘以0.2】来提高模型稳定性。
  2. Wide Residual Networks

    • 很多论文在ResNet的网络结构基础上进行了细微的改动。主要的观点是ResNet存在diminishing feature reuse的问题。网络过深,很多残差块对最终结果只做出了很少的贡献。甚至,有些残差块没有学到有用的信息,反而在之前学到的feature representation中加入了轻微噪声
    • ResNet提高一点精度可能需要将深度增加一倍,而且会产生diminishing feature reuse问题,因此提出增加残差块的宽度,减少网络深度的WRNs
    • 文中提到论文 Deep Networks with Stochastic Depth 中通过使残差块随机失活来降低每次训练使网络的深度。
    • 作者做了大量的实验,表明两个3x3卷积堆叠的残差块的效果优于其他残差块结构。
    • 同时增加深度和宽度可以提高精度,但需要正则。增加宽度比增加深度更容易训练。
    • 在瘦长和矮胖的网络中,在残差块中的两个卷积间增加 Dropout 层均有效果。在不做大量的数据增强的前提下,Dropout 的效果比 Batch Normalization 更好
  3. Aggregated Residual Transformations for Deep Neural Networks

    • 指出 Inception 过于复杂,不易迁移到其他问题上;ResNet 存在 diminishing feature reuse 的问题。
    • 提出了基数的概念,残差块采用 split-transform-merge 的策略,基数类似 group,表示 split 的数目。这种架构可以接近 large and dense layers 的表示能力,但只需要很少的计算资源。
    • ResNeXt 有一种基本形式和两种变体,一种类似 Inception-ResNet,一种使用 group 实现。
  4. Densely Connected Convolutional Networks

    • DenseNet 极大地增加了特征重用的能力,其有以下优点。1. 参数少,通过向后连接的方式保留学到的信息;2. 改进了前向、反向传播,更易训练;3. 增加了监督学习的能力;4. 在小数据上不易过拟合,即增加了正则化的能力。
    • Dense Block 中,对于任意一层的 feature maps,一方面会通过 BN-ReLU-Conv(1x1)-BN-ReLU-Conv(3x3)得到下一层的 feature maps,另一方面会与其后的每一层 feature maps 连接在一起。并提出了 growth rate 的概念,增长率 k 是3x3卷积层输出的 feature maps 数, 而1x1卷积层输出的 feature maps 数为 4k
    • 在 ImageNet 比赛中运用的模型,每两个 Dense Block 中间以 Batch Normalization - ReLU - Conv(1x1) - Aver Pooling(2x2) 相连。
  5. Squeeze-and-Excitation Networks

    1179034-20180113140953754-694366472.png

  6. SqueezeNet, ShuffleNet, MobileNet, Xception

    1. SqueezeNet 的基本结构是 File Module,输入的 feature maps 先经过1x1卷积降维,然后分别通过1x1卷积和3x3卷积,并将两个输出连接起来,作为这个模块整体的输出。SqueezeNet 的结构就是多个 File Module 堆叠而成,中间夹杂着 max pooling。最后用 deep compression 压缩
    2. MobileNet 的基本结构是 3x3 depth-wise Conv 加 1x1 Conv。1x1卷积使得输出的每一个 feature map 要包含输入层所有 feature maps 的信息。这种结构减少了网络参数的同时还降低了计算量。整个 MobileNet 就是这种基本结构堆叠而成。其中没有池化层,而是将部分的 depth-wise Conv 的 stride 设置为2来减小 feature map 的大小。
    3. ShuffleNet 认为 depth-wise 会带来信息流通不畅的问题,利用 group convolution 和 channel shuffle 这两个操作来设计卷积神经网络模型, 以减少模型使用的参数数量,同时使用了 ResNet 中的短路连接。ShuffleNet 通过多个 Shuffle Residual Blocks 堆叠而成。
      1179034-20180113135913629-439980392.png
    4. Xception 相对于借鉴了 depth-wise 的思想,简化了 Inception-v3。Xception的结构是,输入的 feature maps 先经过一个1x1卷积,然后将输出的每一个 feature map 后面连接一个3x3的卷积(再逐通道卷积),然后将这些3x3卷积的输出连接起来。

补充:权重初始化方式

  1. Xavier - Understanding the difficulty of training deep feedforward neural networks

  2. MSRA - Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification

补充:激活函数

补充:Dropout层

补充:Batch Normalization层

转载于:https://www.cnblogs.com/viredery/p/convolution_neural_networks_for_classification.html

你可能感兴趣的文章
8 -- 深入使用Spring -- 3...1 Resource实现类InputStreamResource、ByteArrayResource
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
一个关于vue+mysql+express的全栈项目(六)------ 聊天模型的设计
查看>>
【知识库】-数据库_MySQL 的七种 join
查看>>
.net 写文件上传下载webservice
查看>>
noSQL数据库相关软件介绍(大数据存储时候,必须使用)
查看>>
iOS开发——缩放图片
查看>>
HTTP之URL的快捷方式
查看>>
满世界都是图论
查看>>
配置链路聚合中极小错误——失之毫厘谬以千里
查看>>
【BZOJ4487】[JSOI2015] 染色问题(高维容斥)
查看>>
Ubuntu 环境变量
查看>>
一步一步学MySQL-日志文件
查看>>
bzoj3994: [SDOI2015]约数个数和
查看>>
hdu5306 Gorgeous Sequence
查看>>
Android中使用ListView实现下拉刷新和上拉加载功能
查看>>
proc文件系统的简介
查看>>
连续自然数和
查看>>
[SDOI2015]星际战争
查看>>
用好lua+unity,让性能飞起来——luajit集成篇/平台相关篇
查看>>