webooru
webooru copied to clipboard
关于卷积神经网络(CNN)骨干结构的思考 - DeepInsight
-
机器学习、模式识别、深度学习等等模型的目的,是压缩。对数据的背诵这不是压缩,对特征的提取才是压缩。
-
它们都抓住了、而且必须抓住平移、镜像、一定程度上的缩放不变性,只要满足不变性,相似的特征表征能力一定强。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 等任务的前导性任务。
- AlexNet: https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
- VGG: https://arxiv.org/pdf/1409.1556.pdf
- Residual Network: https://arxiv.org/pdf/1512.03385.pdf
- Wide ResNet: https://arxiv.org/pdf/1605.07146.pdf
- FractalNet: https://arxiv.org/pdf/1605.07648.pdf
- ResNeXt: https://arxiv.org/pdf/1611.05431.pdf
- GoogleNet: https://arxiv.org/pdf/1409.4842.pdf
- Inception: https://arxiv.org/pdf/1602.07261.pdf
- DenseNet: https://arxiv.org/pdf/1608.06993.pdf
- SORT: https://arxiv.org/pdf/1703.06993.pdf
- Compact Bilinear: https://arxiv.org/pdf/1511.06062.pdf
-
这个共享结构除了结构性的超参(总深度、总宽度)以外,反复使用了多种技巧,其中包括
- 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