关注并星标

从此不迷路

计算机视觉研究院

公众号IDComputerVisionGzq

学习群扫码在主页获取加入方式

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

源代码: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

作者做了以下训练调整:

  1. 从90 epoches到300 epoches

  2. 使用AdamW优化器

  3. Mixup, Cutmix, RandAugment, Random Erasing数据增强

  4. 使用Stochastic Depth和Label Smoothing

  5. 使用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

  1. 使用GELU替换ReLU,精度没有变化

  2. 更少的activate functions,研究者发现Transformers很少激活函数。删除了residual block中的所有GELU层,除了两个1×1层之间的。精度提升了到了81.3%

  3. 使用更少的normalization layers。仅仅在1x1之间使用BN,精度提升到了81.4%。研究者还发现,在每个Block的开始添加一个额外的BN层,精度不会提升

  4. 研究者使用LN替换BN,精度提升了0.1%

  5. 分离降采样层。且在特征图大小变化的时候,添加一个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

学习群|扫码在主页获取加入方式

往期推荐

ConvNeXt:新一代卷积网络,还不是ViT的时代(代码开源)相关推荐

  1. 经典重温:FAIR提出SlowFast,用双分支非对称网络处理不同采样率的视频!代码开源!...

    关注公众号,发现CV技术之美 本文分享论文『SlowFast Networks for Video Recognition』,FAIR提出<SlowFast>,用双分支非对称网络处理不同采 ...

  2. 更深更宽的孪生网络,有效提升目标跟踪精度,代码开源

    点击我爱计算机视觉标星,更快获取CVML新技术 本文为52CV群友Mr.Chen投稿,深入解读了CVPR 2019 跟踪方向的论文Deeper and Wider Siamese Networks f ...

  3. 北大图灵班本科生带来动画CG福音,「最懂骨骼的卷积网络」,无需配对样本实现动作迁移 | SIGGRAPH...

    鱼羊 金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 我有一个动画形象,我有一套人体动作,可想要把它们组合成真正的动画,可不是 1+1 这么简单. 别看这体型迥异的三位动作整齐划一,支撑动 ...

  4. 【Tensorflow】深度学习实战02——Tensorflow实现进阶的卷积网络(CIFAR-10)

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 之前使用Tensorflow实现了一个简单卷积神经网络用于手写数字识别,那是一个简单的 ...

  5. (刘二大人)PyTorch深度学习实践-卷积网络(Advance)

    1. 1x1的卷积核的作用 在width和height不变的基础上改变通道的数量 减少计算量 2. GoogLeNet中Inception Module的实现 2.1 Inception块的代码实现 ...

  6. ECCV 2022 | 超越MobileViT!EdgeFormer:学习ViT来改进轻量级卷积网络

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入-> CV 微信技术交流群 转载自:CV技术指南 前言 本文主要探究了轻量模型的设计.通过使用 ...

  7. 【深度学习】超越ConvNeXt!Transformer 风格的卷积网络视觉基线模型Conv2Former

    作者丨科技猛兽 编辑丨极市平台 导读 本文提出一种卷积调制模块,利用卷积来建立关系,这比注意力机制在处理高分辨率图像时更高效,称为 Conv2Former.作者在 ImageNet 分类.目标检测和语 ...

  8. 时间卷积网络(TCN)在 NLP 多领域发光,RNN 或将没落

    也就是从 2014.15 年起,我们基于深度神经网络的应用就已经在文本和语音识别领域达到 95% 的准确率,可以用来开发新一代的聊天机器人.个人助理和即时翻译系统等. 卷积神经网络(Convoluti ...

  9. 英伟达RTX 3080值不值得抢?在TensorFlow上训练了卷积网络

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...

最新文章

  1. rsync服务同步,linux日志,screen工具
  2. SQLITE3根据需求查询回不同的数据类型简单记录
  3. 深入理解ROS技术 【4】ROS下的模块详解(181-232)
  4. 华为usg6000配置手册_带你了解防火墙安全区域的作用及简单的配置,小白不要错过了...
  5. Linux 命令(78)—— rmdir 命令
  6. yaml与json的对比
  7. sqlSessionc操作数据库增删改无效问题
  8. NLP——12.词向量及相关应用
  9. java线程生命周期的图示以及文字说明
  10. zint编译过程记录
  11. 用excel制作项目管理甘特图
  12. TCP通信丢包原因总结
  13. DDoS攻击:无限战争
  14. 九宫格按键输入(机考Python)
  15. 再谈 共轭方向法/Conjugate Direction Method In Optimization
  16. 【react】createRef
  17. python多线程、多进程
  18. 《史蒂夫·乔布斯传》官方正式中文版电子书
  19. AD620-仪表放大器-快速上手使用
  20. 我爱机器学习 机器学习干货站- 资源

热门文章

  1. 基于Proteus学习单片机系列(二)——驱动数码管
  2. java实现i18n国际化
  3. echarts之柱状图(2)
  4. 计算机管理无法打开权限不足,win10管理员权限不足怎么设置_win10管理员权限不足如何解决...
  5. 蓝牙耳机无法打开计算机,电脑搜不到蓝牙耳机怎么回事_电脑搜不到蓝牙耳机的处理方法【图文】...
  6. 罗格数据:生命周期动态模拟技术及其在税收领域应用初探 | 会员专栏
  7. Android GPS中间层驱动开发调试
  8. 配置LXDE快捷键锁屏
  9. 彩虹登录聚合中转API程序网站源码「免授权」
  10. html5微信视频无法播放视频教程,解决微信h5页面视频播放问题实例