关注并星标
从此不迷路
计算机视觉研究院
公众号ID|ComputerVisionGzq
学习群|扫码在主页获取加入方式
源代码:https://github.com/facebookresearch/ConvNeXt
计算机视觉研究院专栏
作者:Edison_G
自从ViT提出之后,在过去的一年里(2021年),Transformer在深度学习领域大杀四方,很多纯卷积的网络也不断的革新。基于transformer的模型在计算机视觉各个领域全面超越CNN模型。然而,这很大程度上都归功于Local Vision Transformer模型,Swin Transformer是其中重要代表。原生的ViT模型其计算量与图像大小的平方成正比,而Local Vision Transformer模型由于采用local attention(eg. window attention),其计算量大幅度降低。然后,不能忘记最经典的CNN,今天就分析transformer的优势,也借鉴了一些新的卷积网络的点,基于ResNet50和ResNet200逐步提升精度。
01
前言
ConvNets在计算机视觉中的完全主导地位并非巧合:在许多应用场景中,“滑动窗口”策略是视觉处理所固有的,尤其是在处理高分辨率图像。ConvNets有几个内置的归纳偏置,使它们非常适合各种计算机视觉应用。最重要的一个是平移等方差,这是目标检测等任务的理想属性。由于当以滑动窗口方式使用时,计算是共享的,因此ConvNets本质上也是高效的。几十年来,这一直是ConvNets的默认使用,通常用于有限的目标类别,例如digits、人脸和行人。
与在过去十年中逐渐改进的ConvNet不同,Vision Transformers的采用是一个进步。在最近的文献中,在比较两者时通常采用系统级比较(例如Swin Transformer与ResNet)。Transformer的优势在于其multi-head self-attention中优异的scaling behavior。ConvNets和Transformer都有相似的inductive biases,但是不同的是,在训练过程中和结构设计上,存在着差异性。作者尝试去找出这些影响因素,去测试一下pure ConvNets能达到一个怎么样的性能。
在今天分享中,研究了ConvNets和Transformer之间的架构区别,并在比较网络性能时尝试识别混杂变量。 研究旨在弥合ConvNet的前ViT和后ViT时代之间的差距,并测试纯ConvNet所能达到的极限。
02
背景
在高层次上,研究者的探索旨在调查和遵循Swin Transformer的不同设计级别,同时保持网络作为标准ConvNet的简单性。研究者探索路线图如下。
起点是ResNet-50模型。首先使用用于训练视觉Transformer的类似训练技术对其进行训练,并与原始ResNet-50相比获得了很大改进的结果。这将是我们的基线。然后研究了一系列设计决策,总结为:1) macro design,2) ResNeXt,3) inverted bottleneck,4)large kernel size,5) various layer-wise micro designs。在上图中,展示了“network modernization”的每一步我们能够实现的过程和结果。由于网络复杂性与最终性能密切相关,因此在探索过程中对FLOPs进行了粗略的控制,尽管在中间步骤中,FLOPs可能高于或低于参考模型。所有模型都在ImageNet-1K上进行训练和评估。
03
新研究
- Training Techniques
作者做了以下训练调整:
- 从90 epoches到300 epoches
- 使用AdamW优化器
- Mixup, Cutmix, RandAugment, Random Erasing数据增强
- 使用Stochastic Depth和Label Smoothing
- 使用EMA减少模型过拟合
结果分类准确率由76.1%上升到78.8%,这一个步骤提升了2.7%的精度。具体训练config如下:
- Macro Design
Swin Transfomer和CNN一样也采用金字塔结构:包含4个stage,每个stage输出不同尺度的特征。这里考虑Swin Transformer和ResNet在宏观设计上的区别,作者分析了Swin Transformer网络设计,发现使用了multi-stage design,每一个stage有不同的特征图分辨率。有两个值得思考的设计: stage compute ratio和stem cell structure。
改变stage compute ratio。作者认为ResNet的 heavy “res4” stage主要是用于下游任务,其detector head是基于14x14的特征图。而Swin-T, 它的比例是1:1:3:1。因此,作者调整了一下ResNet原先的分布,从(3,4,6,3)到(3,3,9,3)。这一步精度从78.8%到79.4%。不过这里要注意的一点是,调整后其实blocks数量增加了,模型的FLOPs从原来的4G增加至4.5G,基本和Swin-T一致了,所以这个性能的提升很大程度上归功于FLOPs的增加。关于各个stage的计算量分配,并没有一个理论上的参考,不过RegNet和EfficientNetV2论文中都指出,后面的stages应该占用更多的计算量。
ResNet的stem cell使用stride=2的7x7卷积,然后接一个max pool,会使得图像下采样4倍。而在Transformer当中,使用了aggressive “patchify”; Swin-T使用了4x4的patch size。因此,作者使用4x4, stride=4的卷积。两种stem最后均是得到1/4大小的特征,所以这里可以直接用Swin的stem来替换ResNet的stem,这个变动对模型效果影响较小:从79.4%提升至79.5%,这个步骤提升了0.1%的精度。
- ResNeXt-ify
在这一部分中,研究者尝试采用ResNeXt的思想,它比普通的ResNet具有更好的FLOPs/accuracy权衡。核心组件是分组卷积,其中卷积滤波器被分成不同的组。在较高的层面上,ResNeXt的指导原则是“使用更多的组,扩大宽度”。更准确地说,ResNeXt对bottleneck块中的3×3卷积层采用分组卷积。由于这显着减少了FLOP,因此网络宽度被扩大以补偿容量损失。
在例子中,使用depthwise convolution,这是分组卷积的一种特殊情况,其中组数等于通道数。depthwise convolution已被MobileNet 和Xception推广。我们注意到,depthwise convolution类似于self-attention中的加权求和操作,它在每个通道的基础上进行操作,即仅在空间维度上混合信息。depthwise conv和1 × 1convs 的组合导致空间和通道混合的分离,这是视觉转换器共享的属性,其中每个操作要么混合空间维度或通道维度的信息,但不能同时混合两者。depthwise convolution的使用有效地降低了网络FLOPs,并且正如预期的那样。按照ResNeXt中提出的策略,将网络宽度增加到与Swin-T相同的通道数(从64到96)。这使网络性能提高到80.5%,增加了FLOPs (5.3G)。
- Inverted Bottleneck
Transformer block的一个重要设计是创建了inverted bottleneck。如下图所示:
在depthwise conv的基础上借鉴MobileNet的inverted bottleneck设计,将block由下图(a)变为(b)。因为depthwise不会使channel之间的信息交互,因此一般depthwise conv之后都会接1x1的pointwise conv。这一顿操作下来准确率只涨了0.1%到80.6%。
- Large Kernel Sizes
Transformer中,non-local self-attention能够获得全局的感受野。因此研究者使用了large kernel-sized convolutions。为了使用large kernel,就要改变一下depthwise conv layer。
研究者认为更大的感受野是ViT性能更好的可能原因之一,作者尝试增大卷积的kernel,使模型获得更大的感受野。首先在pointwise conv的使用上,作者为了获得更大的感受野,将depthwise conv提前到1x1 conv之前,之后用384个1x1x96的conv将模型宽度提升4倍,在用96个1x1x96的conv恢复模型宽度。反映在上图中就是由(b)变为(c)。由于3x3的conv数量减少,模型FLOPs由5.3G减少到4G,相应地性能暂时下降到79.9%。
然后作者尝试增大depthwise conv的卷积核大小,证明7x7大小的卷积核效果达到最佳。
- Micro Design
- 使用GELU替换ReLU,精度没有变化
- 更少的activate functions,研究者发现Transformers很少激活函数。删除了residual block中的所有GELU层,除了两个1×1层之间的。精度提升了到了81.3%
- 使用更少的normalization layers。仅仅在1x1之间使用BN,精度提升到了81.4%。研究者还发现,在每个Block的开始添加一个额外的BN层,精度不会提升
- 研究者使用LN替换BN,精度提升了0.1%
- 分离降采样层。且在特征图大小变化的时候,添加一个normalization layers,有助于稳定训练。精度提升到了82.0%
04
实验&总结
Classification accuracy on ImageNet-1K
Comparing isotropic ConvNeXt and ViT
研究者提出,迄今为止讨论的设计方案都不是新颖的,但都能够提升性能。所以,借鉴transformer的设计思想和一些ConvNet的tricks,一样可以达到SOTA。这是一篇调参提升精度的实验性论文,比较有实际的工程意义。
引用:
[1] https://blog.csdn.net/wuchaohuo724/article/details/122550816
[2] https://zhuanlan.zhihu.com/p/455913104
[3] https://zhuanlan.zhihu.com/p/458016349
© THE END
转载请联系本公众号获得授权
计算机视觉研究院学习群等你加入!
计算机视觉研究院主要涉及深度学习领域,主要致力于人脸检测、人脸识别,多目标检测、目标跟踪、图像分割等研究方向。研究院接下来会不断分享最新的论文算法新框架,我们这次改革不同点就是,我们要着重”研究“。之后我们会针对相应领域分享实践过程,让大家真正体会摆脱理论的真实场景,培养爱动手编程爱动脑思考的习惯!
扫码关注
计算机视觉研究院
公众号ID|ComputerVisionGzq
学习群|扫码在主页获取加入方式
往期推荐