zoukankan      html  css  js  c++  java
  • 计算机视觉

    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,然后将它们的输出拼接在一起作为这一层的输出。

      这里使用多组不同形式的卷积的原因:

      • 不完全机制限制了连接的数量,减少计算量
      • 破坏了网络的对称性
    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. 浮点乘法运算量:$$55559611113 + 27272565596 + 131338433256 + 131338433384+131325633384 + 662564096 + 40964096 + 40961000$$
      参数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

    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 堆叠而成。
      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层

  • 相关阅读:
    2016CCPC东北地区大学生程序设计竞赛 1003 HDU5924
    2016CCPC东北地区大学生程序设计竞赛 1001 HDU5922
    Codeforces Round #375 (Div. 2) D
    linux开发缩写
    unity实现玻璃效果
    商业智能在公安交通管理领域的应用
    unity shaderlab Blend操作
    某中国500强企业BI系统成功应用案例
    Unity 5.X扩展编辑器之打包assetbundle
    unity描边效果
  • 原文地址:https://www.cnblogs.com/viredery/p/convolution_neural_networks_for_classification.html
Copyright © 2011-2022 走看看