导读:启发于Transformer结构,作者将三种设计引入到CNN中,加强后的CNN取得比ViT更强的鲁棒性。这三种设计,实现简单,仅仅几行代码就能实现高效的CNN结构设计。

ArXiv: https://arxiv.org/abs/2206.03452

Source Code: https://github.com/UCSC-VLAA/RobustCNN


文章目录

  • 摘要
  • 介绍
    • 关键启发
    • 效果
    • CNN block设计前后对比
    • 优化后的四种模块设计

摘要

最近,ViT获得巨大成功,正在动摇图像识别中CNN的数十年统治地位。特别地,对于样本分布不在数据集内的情况,无论如何设置训练参数,Transformer在本质上都比CNN更鲁棒。人们认为Transformer的这种优越性,归功于它的自注意力架构。在本文中,我们通过仔细检测Transformer的设计,来质疑这种认识。我们发现三个有效的设计,可以提升鲁棒性,并用几行代码就能实现,即:

  1. 将输入图像分块,patchifying;
  2. 增大卷积核大小;
  3. 减少激活和归一化的层数。

将这三个组件组合在一起,我们能够构建纯CNN架构,能够取得与Transformer同等甚至更强的鲁棒性。这个工作将帮助社区设计更加鲁棒性的神经网络架构。

关键词:CNN,Transformer,分布之外的鲁棒性(out of distribution robustness)

介绍

计算机视觉中深度学习的成功被CNN很大地推动。从基石工作AlexNet开始,CNN持续推动计算机视觉的前沿发展和为现代识别系统作铺垫。有趣的是,最近出现的ViT开始挑战CNN在计算机视觉中的领导地位。ViT提供了一个完全不同的构造识别模型的路线,通过应用纯粹的自注意力架构到图像块够成的序列上,使得ViT能够在广泛的视觉任务上获得与CNN相媲美的性能。

最近在分布外的鲁棒性研究进一步将CNN和Transformer之间的争论炒热起来。不同于两种模型紧密相连的标准数据库上,Transformer在数据集外测试的鲁棒性更强。并且,这种强大的分布外鲁棒性不是来自于先进的训练方法,而是来自于与生俱来的Transformer自注意力架构。例如,仅仅简单地将纯CNN升级成一个混合的架构,如CNN和Transformer的混合块,能够有效提升分布外的鲁棒性。

尽管广泛认为架构的差异是导致Transformer和CNN之间存在鲁棒性差异的关键因素,当前的工作都无法回答Transformer中的哪个因素导致了更强的鲁棒性。最相关的分析指出,Transformer块,其中自注意力操作为核心单元,对鲁棒性至关重要。然而,Transformer块本身已经是一个具有多元素架构的复合设计;其次,Transformer包含很多其它层,例如增加到Transformer块中的patch嵌入层,鲁棒性与Transformer块的元素之间的关系仍然令人困惑。本文将仔细研究Transformer架构的设计,重点关注分布外的鲁棒性。更重要的是,我们尝试去探索,在Transformer元素的帮助下,CNN是否比Transformer更加鲁棒。

关键启发

从神经架构设计的角度来看,我们的诊断从三个方面提供了用于提升鲁棒性的手段。
第一,将图像分割成没有重叠的图像块,能够大大提升分布外的鲁棒性。
第二,尽管使用小卷积核是个非常流行的手段,我们观察到使用一个更大的卷积核,例如从3×33 \times 33×3到7×7,11×117\times 7, 11\times117×7,11×11,对于确保鲁棒性是非常必要的。
最后,启发于最近的工作,我们积极减少归一化和激活层的数量有利于鲁棒性的提高;同时,作为副产品,训练速度也提升了高达23%,由于使用了较少的卷积层。

效果

利用我们上述三种设计手段,增强后的ResNet能够在Stylized-ImageNet上超过相似尺度的Transformer,即Deit-S。

CNN block设计前后对比


上述图中,分别代表:

  • a) 使用DW-CNN替代了原始ResNet中的CNN;
  • b) 反转通道后的DW-CNN
  • c) 将DW-CNN上移后;
  • d) 将DW-CNN下移后

上述四种操作,与原始的ResNet相比,能很大程度降低运算量,归功于DW-CNN的运用。但不光为了减轻计算成本损失,并尝试借鉴 ResNeXT [44] 的思想去提高模型性能,我们将每个阶段的通道设置从 (64, 128, 256, 512) 更改为 (96, 192, 384, 768)。

优化后的四种模块设计


(d)模块的参考代码如下: RobustResNetDWDownInvertedBlock

// An highlighted blockclass RobustResNetDWDownInvertedBlock(nn.Module):def __init__(self, indim, dim, drop_path=0., layer_scale_init_value=1e-6, mlp_ratio=4.,norm_layer=nn.BatchNorm2d, act_layer=partial(nn.ReLU, partial=True),stride=1, downsample=None,kernel_size=11, padding=5):super().__init__()self.pwconv1 = nn.Conv2d(indim, int(mlp_ratio * dim), kernel_size=1, bias=True)self.norm2 = norm_layer(int(mlp_ratio * dim))self.act2 = act_layer()self.pwconv2 = nn.Conv2d(int(mlp_ratio * dim), dim, kernel_size=1, bias=True)self.conv_dw = nn.Conv2d(dim, dim, kernel_size=kernel_size, padding=padding, groups=dim, stride=stride, bias=True)  # depthwise convself.gamma = nn.Parameter(layer_scale_init_value * torch.ones(dim)) if layer_scale_init_value > 0 else Noneself.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity()self.downsample = downsampledef forward(self, x):shortcut = xx = self.pwconv1(x)x = self.norm2(x)x = self.act2(x)x = self.pwconv2(x)x = self.conv_dw(x)if self.gamma is not None:x = x.mul(self.gamma.reshape(1, -1, 1, 1))if self.downsample is not None:shortcut = self.downsample(shortcut)x = self.drop_path(x) + shortcutreturn x

优化过后的四种模块设计,减少了对应归一化和激活层的数量。
上述结果,给了模型设计很大的建议与参考作用,这对定制化模块提供了一个可参考的炼丹药方。


深度网络架构的设计技巧<一>:Can CNNs Be More Robust Than Transformers?相关推荐

  1. 深度网络架构的设计技巧(三)之ConvNeXt:打破Transformer垄断的纯CNN架构

    单位:FAIR (DenseNet共同一作,曾获CVPR2017 best paper),UC伯克利 ArXiv:https://arxiv.org/abs/2201.03545 Github:htt ...

  2. 基于深度学习的图像语义分割技术概述之背景与深度网络架构

    本文为论文阅读笔记,不当之处,敬请指正.  A Review on Deep Learning Techniques Applied to Semantic Segmentation: 原文链接 摘要 ...

  3. Hadoop集群环境下网络架构的设计与优化

    2019独角兽企业重金招聘Python工程师标准>>> 大数据时代,研究大数据的IT 厂商把研究重心放在优化大数据系统软件架构.优化业务逻辑.优化数据分析算法.优化节点性能等方向,而 ...

  4. 61、弱电工程数据中心的网络架构及其设计思路

    01 网络分区与等保 一般情况下,本着灵活.安全.易管理的设计原则,企业都会对数据中心网络的物理设备进行分区.通常情况下,数据中心都会采用核心-汇聚-接入三层的网络结构,核心用于所有流量的快速转发,而 ...

  5. 数据中心网络架构和设计指南

    (欢迎了解微信公众号:网络工程师阿龙) (欢迎了解微信公众号:网络工程师阿龙) (欢迎了解微信公众号:网络工程师阿龙) (欢迎了解微信公众号:网络工程师阿龙) (欢迎了解微信公众号:网络工程师阿龙) ...

  6. 叶脊网络架构是什么?如何设计?

    多年以来,数据中心一直采用三层网络架构进行网络部署,但随着数据中心的整合以及虚拟化.超融合的兴起,叶脊网络架构作为一种新兴的网络架构,逐渐成为了当今数据中心网络部署的主流,它克服了传统三层网络构架的局 ...

  7. 数据中心网络架构的问题与演进 — 传统路由交换技术与三层网络架构

    戳蓝字"CSDN云计算"关注我们哦! 文章目录 目录传统路由交换技术路由和交换交换技术传统的 2 层交换技术具有路由功能的 3 层交换技术具有网络服务功能的 7 层交换技术路由技术 ...

  8. 数据中心网络架构 — 传统数据中心网络 — 传统树型三层网络架构

    目录 文章目录 目录 数据中心组网架构 传统三层网络架构 核心层(Core Layer) 汇聚层(Aggregation Layer) 接入层(Access Layer) 三层网络架构的设计原则 三层 ...

  9. lorawan的工作原理_详解LoRaWAN网络架构和协议内容

    本文是一篇LoRaWAN的科普介绍,你已经在朋友圈看过无数蜻蜓点水的LoRaWAN文章,是时候来一篇真正的技术干货了.本文先从横向介绍下LoRaWAN的背后势力和网络部署情况,然后纵向讲解了网络架构和 ...

最新文章

  1. python分布式框架有哪些_Python并行分布式框架Celery详解
  2. 系统通知并发问题_玩转Java高并发?请先说明下并发下的惊群效应
  3. javascript生成器
  4. python中属于私有属性的是_Python中的实例属性和私有属性
  5. 五分钟实现SpringBoot快速入门
  6. 软件测试知识产权保护,一种软件测试方法及软件测试系统专利_专利申请于2017-09-07_专利查询 - 天眼查...
  7. 看清美国“黑客帝国”的真面目
  8. python入门-廖雪峰 Python教程
  9. 关于Linux平台视频采集程序的修改
  10. request中的技巧
  11. 翰文进度计划软件横道图不显示文字_作为工程新人总是加班?这份工程软件+算量套表直接帮助你,共享...
  12. python多进程与多线程_第十五章 Python多进程与多线程
  13. Vb 6.0 ado连接mysql_VB使用ADO操作Access数据库
  14. 从数据库反向生成er图
  15. python ---图片转为卡通图
  16. 查看OracleVMVirtualBox虚拟机的ip地址
  17. android格式化手机号正则,Android中手机号、车牌号正则表达式大全
  18. elevation_mapping安装使用
  19. 商品新零售行业——客户价值分析驾驶舱(附详细操作)
  20. 最全英语单词下载地址

热门文章

  1. win7(32/64)+apache2.4+php5.5+mysql5.6 环境搭建配置
  2. 中学教学能用上python吗_AI双师教学、用Python绘图 未来的中小学可能这样上课
  3. Flexslider - 响应式的 jQuery 内容滚动插件
  4. el-Dropdown踩坑1
  5. 25张图展示线程池工作原理和实现原理,建议认真阅读,对你有帮助
  6. C51——循迹小车实现
  7. 25个超级经典生活小故事
  8. 计算机网络课程教学,计算机网络课程教学新道路
  9. 系统架构设计师-大纲
  10. QCustomPlot使用心得六:框选放大,拖动,选中数据