【深度学习】CNN 的骨干网络 backbone

于卷积神经网络(CNN)骨干结构的思考
CNN Backbone往往是各种CNN模型的一个共享结构。
概念中提到,它是Object Detection, Scene Parsing, OCR等任务的前导性任务。
常用的 backbone 有

AlexNet:
https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
VGG:
https://arxiv.org/pdf/1409.1556.pdf
GoogleNet:
https://arxiv.org/pdf/1409.4842.pdf
Compact Bilinear:
https://arxiv.org/pdf/1511.06062.pdf
Residual Network:
https://arxiv.org/pdf/1512.03385.pdf Inception:
https://arxiv.org/pdf/1602.07261.pdf
Wide ResNet:
https://arxiv.org/pdf/1605.07146.pdf
FractalNet:
https://arxiv.org/pdf/1605.07648.pdf
DenseNet:
https://arxiv.org/pdf/1608.06993.pdf
ResNeXt:
https://arxiv.org/pdf/1611.05431.pdf
SORT:
https://arxiv.org/pdf/1703.06993.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实现制造新的特征

如何优化CNN Backbone

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

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

  • 进行CNN Backbone优化同样有这个问题:
    你的显存利用率和GPU算力利用率如何达到最高?
    降低Batch-size会减小Feature Map占用缓存,但收敛情况怎么样,可能饮鸩止渴。
    加宽直接影响参数数量。
    加深不仅影响参数数量还影响Feature Map大小。
    分组极大节省参数,甚至还能提高效果。
    结构复用、压缩节省参数,增加计算量。
    特征拼接、高阶操作降低并行效率,尤其不是inplace的那种。在动态图框架尤为如此。
    Bilinear大量使用额外参数。
    非对称带来额外的代码工作。
    任何新颖结构的引入带来非连续超参,让模型BP,让超参优化无B可P。

  • 如何提高CNN Backbone设计品位?
    美就是简单
    美就是复用
    美就是对称
    美就是分形
    Inception-ResNet.v2干不过ResNeXt,我一点都不意外。
    Mask-RCNN标配ResNeXt101 Backbone,我一点都不意外。

猜你喜欢

转载自blog.csdn.net/weixin_41990278/article/details/106446668