论文笔记:InternImage—基于可变形卷积的视觉大模型,超越ViT视觉大模型,COCO 新纪录 64.5 mAP!

文章信息

写在前面

拿到文章之后先看了一眼在ImageNet1k上的结果,确实很高,超越了同等大小下的VAN、RepLKNet、ConvNext等先进的大核注意力CNN模型,同时也超过了Swin、DeiT3、CoAtNet等ViT模型。回顾自从Vision Transformer被提出之后,通过大量数据训练出的ViT大模型刷新了许多视觉任务的记录,这得益于ViT的MHSA机制能够建模长距离依赖,具有相当低的归纳偏置,从而能够在海量数据中学习到强大鲁棒的特征表达。相反的,我们以前经常使用的卷积神经网络具有较高的归纳偏置,在大模型和大数据的条件下的表现却不如ViT大模型。该论文就指出,通过合适的算子、先进的架构设计、大量模型参数和海量数据的训练之下,CNN大模型也可以具有媲美ViT大模型的性能。InternImage设计了全新的可变性卷积模块,并且借鉴了ViT的先进架构和相关组件,从而设计出一个新的CNN大模型。并且,InternImage在相关的下游任务上的性能也很高,InternImage-H在目标检测COCO数据集上达到了的性能,超越了SwinV2-G大模型的性能。
COCO box AP

Background & Motivation

随着基于Transformer的语言大模型在NLP相关下游任务中取得优异性能,Vision Transformer也席卷了CV领域,成为基础视觉大模型研究和实践的首选。Swin V2、BeiT、CoAtNet等工作已经将ViT扩展到超过十亿参数规模,显著提升了CV分类、检测和分割等下游任务的性能,超越了CNN模型。但是,该论文提出如果CNN具备类似于ViT的算子和架构,并且在大量参数和海量数据情况下,其性能是可以与ViT相同甚至更好的。

作者认为CNN和ViT大模型性能存在差距的主要有两个原因:

  • ViTs的MHSA具有长程依赖和自适应空间聚合能力,从而可以在海量数据中学习到比CNN更强大鲁棒的特征表达。
  • 除MHSA外,ViT还包含不同于CNN的高级组件,如层归一化、前馈网络、GELU等。

基于此,该论文设计了一个新颖的基于可变性卷积CNN网络------InternImage,可以在大量参数和海量数据的情况下表现很好。如下图所示,动态稀疏可变性卷积既不像MHSA那样具有较高复杂度,也不像Local attention那样缺乏长程依赖,同时具有自适应的空间聚合能力。
不同算子的特性对比

该论文的主要贡献如下:

  • 提出一种新的CNN大模型------InternImage,首个参数达1B、训练数据达400M、取得与ViT相当甚至更优性能的CNN模型。证明对于大尺度模型研究,CNN同样是一个值得探索的方向。
  • 将长程依赖、自适应空域聚合引入到DCNv3,将CNN模型的大小和尺度进行扩展;并对模块定制化、堆叠规则以及缩放策略进行了探索。
  • 在图像分类、目标检测、语义分割以及实例分割等下游任务上验证了所提方案的有效性。其中,InternImage-B仅在ImageNet-1K训练即可取得84.9%的精度(比其他CNN至少高出1.1%);当在大量参数(1B)、海量数据(427M)条件下,InternImage-H取得了89.2%的性能;在COCO上,InternImage-H以2.18B的参数量取得了65.4%mAP,比SwinV2-G高出2.3%,参数量少27% 。

Method

该论文首先从DCNv2算子开始实验,然后借鉴了MHSA的相关思想对DCN V2做出了三个关键改进,设计出了全新的DCNv3算子;基于此算子,作者又提出了与ViT相似的Basic Block组成了InternImage网络,并且给出了InternImage的堆叠规则和大小缩放规则。

DCN V2

在提出DCN V3算子前,作者先回顾了一下传统卷积和多头自注意力机制这两种算子的区别,主要包括如下两点:

  • 长距离建模能力 。普通的卷积聚合邻域内的信息,显然不具备全局建模的能力,尽管传统的CNN能够通过堆叠多个的卷积增加模型的感受野,但是仍然不能像ViT那样进行全局的交互。
  • 自适应空间聚合能力。多头自注意力机制在聚合不同的tokens的时候,权重都是根据输入query的不同而动态变化的;而传统的CNN不管输入是什么,卷积核的参数都是静态不变的。

然后回过头看一下DCN V2算子,其恰好是具有上述两个特性的;对于给定输入 和某像素 ,DCN V2算子的输出如下
其中,表示采样点个数、为相应采样点投影权重、代表了相应采样点的调制标量、表示相应采样点的偏移量。

由这个表达式可以看出:

  • DCN V2算子可以通过偏移量来与局部或全局的交互,具有长距离建模的能力;
  • 由于调制标量和偏移量都是可学习并且根据输入不同而变化的,所以DCN V2算子也具有类似于MHSA的自适应空间聚合能力。

因此,DCN V2算子==具备MHSA算子的相关特性==,有可能构成大规模的CNN基础模型。

DCN V3

尽管DCN V2算子已经缩小了普通卷积算子和MHSA之间的差距,对于大规模的视觉基础模型来说,DCN V2算子仍然不是最优的选择,于是作者从三个方面对DCN V2进行改进,得到了IntenImage的主要算子------DCN V3。

  1. 共享卷积权重 。在DCN V2中,对于每一个采样点处的特征向量,都使用一个独立的投影权重。当采样点增多的时候,模型的参数和复杂度将会线性增加,不利于构建大规模的模型。在这里,作者借鉴了深度可分离卷积的思想来降低DCN算子的复杂度;具体地。对于point-wise ,也就是不同的采样点向量,使用一个共享的权重来进行投影;而对于depth-wise ,则直接使用算子中的调制标量来代替。总体来说就是用同一个同权重对采样点进行投影,然后用一个位置感知的可学习系数对投影后的特征向量进行加权。
  2. 引入多组机制。回顾多头自注意力机制中的"多头"思想,不同的head实际上能够提供在不同子空间的丰富的信息。因此,作者将DCN V3也进行分组,在每组中进行不同的偏移采样、采样向量投影、因子调制。相当于把原来的操作重复多次,增强了DCN V3算子的表达能力(确实应该这样设计,不然只有一个共享的投影权重的话,特征表达的确单一)。
  3. 归一化调制标量 。这个是因为在原始的DCN V2中,调制标量是用sigmoid进行处理的,对于个调制因子来说,其和并不是。作者指出,这样会导致训练不稳定的问题,因此作者改为了对个调制因子进行归一化,使得整个训练过程更为稳定。

以上三个点都是根据论文理解而来,因为现在作者还没有公布InternImage模型代码,无法查看具体的实现细节。综上所述,完整的DCN V3算子可以表示如下

其中,表示group的数量。每组内共享投影权重,表示第组第个采样点的归一化后的调制因子。如此一来 ,新设计的DCN V3算子弥补了传统卷积在长程依赖和自适应空间聚合方面的不足,同时使得可变性卷积算子更加适用于视觉大模型;在实现了稀疏全局建模的同时,又适当的保留了CNN的归纳偏置,可以说是在计算量和准确度之间进行了更好的权衡。

模型架构

InternImage整体架构

在设计完DCN v3算子后,作者抛弃了传统CNN的Block设计方式,而是采用了与ViT类似的整体架构设计。如上图所示,基本模块与ViT相同,什么LN、FFN、GELU激活函数都使用上了;downsample模块也是采用了正常的3*3、stride2、pooling1模块。然后按照论文中的堆叠和缩放策略就可以构建出完整的InternImage模型了。
模型配置参数

Experiment

分类

ImageNet1k分类结果

部分模型在ImageNet 1K上的效果如上图所示,可以说是非常SOTA了,超越了同等大小下的VAN、RepLKNet、ConvNext等先进的大核注意力CNN模型,同时也超过了Swin、DeiT3、CoAtNet等ViT模型。

检测

COCO val2017

在COCO val2017 和 test-dev 上的性能在当时也达到了SOTA的水平,确实可以。
© 著作权归作者所有,转载或内容合作请联系作者

喜欢的朋友记得点赞、收藏、关注哦!!!

相关推荐
qmx_0739 分钟前
HTB-Jerry(tomcat war文件、msfvenom)
java·web安全·网络安全·tomcat
小安运维日记40 分钟前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
X同学的开始43 分钟前
数据结构之二叉树遍历
数据结构
为风而战1 小时前
IIS+Ngnix+Tomcat 部署网站 用IIS实现反向代理
java·tomcat
limingade2 小时前
手机实时提取SIM卡打电话的信令和声音-新的篇章(一、可行的方案探讨)
物联网·算法·智能手机·数据分析·信息与通信
技术无疆3 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入
2401_858286113 小时前
52.【C语言】 字符函数和字符串函数(strcat函数)
c语言·开发语言
CoolTiger、4 小时前
【Vmware16安装教程】
linux·虚拟机·vmware16
AIAdvocate4 小时前
Pandas_数据结构详解
数据结构·python·pandas
jiao000014 小时前
数据结构——队列
c语言·数据结构·算法