CMT: Convolutional Neural Networks Meet Vision Transformers概述
0.前言
1.针对的问题
当前将transformer应用于视觉领域的模型存在一些问题:
虽然将图片打成patch可以大大简化将transformer应用于基于图像的任务的过程,很好地捕获补丁之间的远程依赖关系。但是,它忽略了基于序列的NLP任务和基于图像的视觉任务之间的根本区别,例如,会忽略图片内部潜在的2D结构和空间局部信息。
transformer的块输出和输入大小固定,难以显示提取多尺度特征和低分辨率的特征。
计算复杂度太高。自注意力的计算与输入图片的大小成二次复杂度。
作者的目标是建立一个混合网络,同时利用cnn和transformer的优势。
2.主要贡献
1.提出了一种新颖的 CMT(CNNs meet transformers)架构用于视觉识别
2.提出了局部感知单元(LPU)和反向残差前馈网络(IRFFN),可以帮助捕获中间特征内的局部和全局结构信息,并提高网络的表示能力。
3.方法
与ViT相比,CMT第一阶段生成的特征能够保持更高的分辨率,对于其他密集预测任务是必不可少的。此外,采用了类似于CNNs的stage-wise架构设计,使用stide为2的四个卷积层,逐步降低分辨率(序列长度),灵活增加维数。分stage设计有助于提取多尺度特征,减轻高分辨率带来的计算量。使用平均池化代替ViT中的class token,以获得更好的分类结果。使用一种简单的缩放策略来获得CMT变体族。模型主要包括3个模块:
CMT stem,用于解决in-patch信息的建模问题,减小图片大小,提取细粒度特征和局部信息。首先是一个stride为2的 3×3 卷积,输出通道数为32,用于减小图片大小,然后是两个stride为1的 3×3 卷积以获得更好的局部信息提取。
Conv Stride,卷积+layer norm,缩小中间特征的尺寸(分辨率下采样2倍),并将其投影到更大的维度(维度放大2倍),以产生层次化表示。
CMT block,有助于在中间特征中同时捕捉局部和全局结构信息,提高网络的表示能力,包括局部感知单元,轻量多头自注意力和反向残差前馈网络。
局部感知单元,用于缓解绝对位置编码对平移不变性的破坏和视觉transformer对局部关系和patch内部的结构信息的忽略。
式中,X∈RH×W×d,H×W为当前阶段输入的分辨率,d为特征的维度,DWConv(·)表示深度卷积。本质就是,将输入图片信息,与 3*3 的卷积操作后相加,旨在增加空间信息,可以和 ViT 的绝对位置编码对应理解
轻量多头自注意力,在原始的self-attention模块中,输入 X 被线性变换为 query,key,value 再进行计算,运算成本高,此模块主要功能就是使用深度卷积计算代替了 key 和 value 的计算,从而减轻了计算开销。
具体来说,在进行注意力操作之前,用步长为k的k×k深度卷积减小K和V的空间大小 ,另外,在每个自注意力模块中添加一个相对位置偏差B,B∈是随机初始化且可学习的。学习到的相对位置偏差也可以很容易地通过双三次插值转换为具有不同尺寸m1×m2的B'∈Rm1×m2,从而使得CMT可以很方便的微调用于其他下游任务,最后输入h个头,每个头输出一个大小为n×d/h的序列。然后将这些h序列连接成一个n×d序列。
反向残差前馈网络,深度卷积增强局部信息的提取,残差结构来促进梯度的传播能力。vit的FFN是两个线性层中间隔着一个GELU激活,第一个线性层将维度扩展4倍,第二个线性层将其减小相同的倍数,本文中的IRFFN与反向残差块类似,由一个扩展层+深度卷积+投影层组成,但是改变了shortcut connectin的位置以获得更好的性能。
删除了激活层,但是在后面保留了batch归一化和最后一层线性层。
最新文章
- [Java] Java解析XML格式Response后组装成Map
- Android高效加载大图、多图解决方案,有效避免程序OOM
- Thinkphp_基础(2)URL模式
- Vijos1451圆环取数[环形DP|区间DP]
- ASIHTTPRequest下载示例(支持断点续传)
- 0,SFDC 管理员篇 - 整体框架
- Login failed知多少
- 关于malloc申请的动态内存的问题
- H.264的一些资料整理
- centos vpn client set
- IOS开发UIImage中stretchableImageWithLeftCapWidth方法的解释
- ReportViewer导出功能筛选
- uncompyle2 windows安装和使用方法
- js日期天数差
- Reminders在电商推荐中的价值
- 开启telnet
- Java就业班 mysql02
- nginx+keepalived高可用web负载均衡
- 《pyhton语言程序设计》_第一章笔记
- MeshLab 编译
热门文章
- [编程基础] C++多线程入门10-packaged_task示例
- LeetCode HOT 100:验证二叉搜索树(从左右子树获取信息进行推导)
- 《STL源码剖析》STL迭代器分类
- Spring MVC复习 —— 搭建Spring MVC项目
- day03-Spring管理Bean-IOC-01
- Echarts自适应屏幕,无需刷新网页,可根据屏幕大小完美展现,内有详细代码注释,我可真是个小机灵~~O(∩_∩)O哈哈~
- order by 语句怎么优化?
- spring-cloud03-consul
- IoT 边缘集群基于 Kubernetes Events 的告警通知实现
- vue+elementUI 实现设置还款日字母弹窗组件