webooru icon indicating copy to clipboard operation
webooru copied to clipboard

关于卷积神经网络(CNN)骨干结构的思考 - DeepInsight

Open madobet opened this issue 4 years ago • 0 comments

  • 机器学习、模式识别、深度学习等等模型的目的,是压缩。对数据的背诵这不是压缩,对特征的提取才是压缩。

  • 它们都抓住了、而且必须抓住平移、镜像、一定程度上的缩放不变性,只要满足不变性,相似的特征表征能力一定强。CNN 的新工作还有旋转不变性、仿射变换不变性和时间轴上的灰度不变性。设计思路不包含这些不变性的,一般都是逗比。

  • 在 ImageNet 上训练的不少模型,把 2 ^ (224 _ 224 _ 3 * 8bit) 的数据空间中的数据特征用少到几十万,大到几亿的参数表征出来,起到了局部或者全局特征的提取,从而用特征进行各种任务。重要的是很多任务可以通过 1 次定义结构端到端完成。

  • 它是 Object Detection, Scene Parsing, OCR 等任务的前导性任务,往往也被称为 Backbone Model。而且在上面快速实验很多元方法,比如 dropout,attention,套用 GAN 等等是直接、方便的。

  • 要求概率图可微分这个假设很强,在 CNN 里体现为参数连续,而很多超参离散,使用同样的 NN 技巧自动连续超参还凑合,离散会碰到各种问题。

  • 概念中提到,它是 Object Detection, Scene Parsing, OCR 等任务的前导性任务。

  • 这个共享结构除了结构性的超参(总深度、总宽度)以外,反复使用了多种技巧,其中包括

    • Residual(残差): 直接 elementwise 加法。
    • Concat(特征拼接): 直接对特征深度作拼接。
    • Bottleneck(特征压缩): 通过 Conv(1,1) 对稀疏的或者臃肿的特征进行压缩
    • Grouping(分组): fc-softmax 分类器从 1 个观察点把不同类靠空间球心角分离开,不同类放射状散开不符合高斯假设。分组改善了这一点。
    • Fractal(分形模式): 结构复用,可能带来好处
    • High-Order(高阶): 在非分组时,可能带来好处
    • Asymmetric(非对称): Conv(1,3),Conv(1,5),Conv(1,7) 属于非对称结构,这个技巧在 OCR 处理长宽非 1:1 的字体有用
  • 再次的,我们对结构有一个重新的审视

    • AlexNet/VGG: 普通
    • VGG: 加深
    • ResNet: 通过 x+F(x) 直接加法实现了 Residual 模块
    • Wide ResNet: 加宽
    • FractalNet: 结构复用,使用 Concat
    • ResNeXt: ResNet 基础上对 Conv(3,3) 使用了分组,但是如果 Conv(1,1) 也分组甚至精度不降
    • GoogleNet/Inception: 大量的非对称技巧
    • DenseNet: 大量使用压缩
    • SORT: 一个小 trick 使用 elementwise x*F(x) 实现高阶
    • Compact Bilinear: 通过学习矩阵 A 实现 x’Ay 实现制造新的特征
  • 为 Object Detection 设计的结构更主要关心多尺度框选准确与否,因此有 RPN、SPPNet、上下采样等设计思想。

  • 为 Scene Parsing 设计的结构更主要关心单位像素点分类正确与否,因此有 FCN、上下采样等设计思想。

本文不作介绍。

  • 作为模型压缩的替代方案,XNOR,二值化(Binarization),量子化(Quantization,使用数个比特替代原模型)

本文不作介绍。

我们在 DataParallel 的语境下面讨论这个问题。也就是说,每张显卡都保存一份参数全集,一份数据 + 数据形成 FeatureMap 的子集

我们知道,就像组装深度学习服务器一样,你的预算一定的条件下,如何搭配一台服务器才能让 CPU 对数据预处理够用、内存加载数据够用、硬盘 I/O 够用,以及最重要的是,选择一块好的 GPU 卡。资源不是无限的。这其实是一个线性规划问题。在这里不赘述。

进行 CNN Backbone 优化同样有这个问题:

  • 降低 Batch-size 会减小 Feature Map 占用缓存,但收敛情况怎么样,可能饮鸩止渴。

  • 加宽直接影响参数数量。

  • 加深不仅影响参数数量还影响 Feature Map 大小。

  • 分组极大节省参数,甚至还能提高效果。

  • 结构复用、压缩节省参数,增加计算量。

  • 特征拼接、高阶操作降低并行效率,尤其不是 inplace 的那种。在动态图框架尤为如此。

  • Bilinear 大量使用额外参数。

  • 非对称带来额外的代码工作。

  • 任何新颖结构的引入带来非连续超参,让模型 BP,让超参优化无 B 可 P。

  • 美就是简单,复用,对称,分形

Inception-ResNet.v2 不如 ResNeXt

Mask-RCNN Backbone 为 ResNeXt101

https://github.com/deepinsight/examples/tree/master/imagenet/main_next.py

  • 基于个人品位,使用 ResNeXt+WideResNet+SORT,强力备选方案是 DenseNet 修改版。
  • 大量超参可调整。
  • CIFAR100 top1 acc: 84.2%,可再现。
  • 计划使用 Compact Bilinear 和 Attention。

« Tensorflow on Centos7 installation notes... 关于神经网络 (CNN) 处理特定问题的思考. 结构篇 »

https://deepinsight.github.io/deep_learning/2017/05/12/Think_CNN_Backbone_Structure.html

madobet avatar May 21 '20 11:05 madobet