【论文阅读笔记】InternImage: Exploring Large-Scale Vision Foundation Models with Deformable Convolutions

2023-02-12 Views2664字11 min read

论文地址:https://arxiv.org/abs/2211.05778
代码地址:https://github.com/OpenGVLab/InternImage

一、引言

现在深度学习都去研究大模型了,不管CV还是NLP,都上大模型。这篇文章也一样,它说现在CV任务里面用的大模型都是基于transformer的,效果相当不错,可以说是横扫一切!但是,作者说卷积神经网络配合相似的算子/架构级别的精心设计,在大模型、大数据的条件下也可以做到类似、甚至更好的性能。就是说你transformer能做到的,我CNN也能做到。这篇文章充分展示了怎么去设计一个神经网络模型!值得学习~

为了设计出不弱于transformer的CNN大模型,就得先分析它们的不同之处,(1)从算子层面来看,transformer的基础模块多头注意力具有学习长距离依赖的能力以及可以进行自适应的空间信息聚合的能力(如下图(a)所示);(2)从架构层面看,transformer除了多头注意力还有其他一些先进的模块,例如Layer Normalization(LN)、Feed-forward network (FFN)、GELU等。

Transformer有优势,也有缺点,就是计算复杂度极高,为了克服这个问题,有人就对多头注意力做一些限制,使它从global attention变成local attention,这样,复杂度问题解决了,但是却牺牲了长距离依赖的学习能力(如下图(b)所示)。

为了给CNN模型引入长距离依赖的学习能力,有些工作[1-2]就采用了超级大的卷积核(比如:31×3131 \times 31),但是这种超大卷积核的空间信息聚合能力不能自适应,因为卷积核的权重是固定的(如下图(c)所示)。

现有算子中恰好还有可变形卷积,它能够满足我们想要的三个性质:长距离依赖、自适应空间信息聚合以及高计算效率(如下图(d)所示)。首先,可变形卷积的采样偏移量可以灵活地从给定的数据中动态地学习适当的感受野(可以是长距离的或短距离的);其次,采样偏移量和调制标量都是针对输入数据自适应的;最后,采样常规3×33 \times 3卷积核,避免了计算复杂度爆炸,提高了计算效率。

因此,本文将基于可变形卷积设计大模型。

二、InternImage模型

1、核心算子

长距离依赖。现有研究证明大的有效感受野(长距离依赖)对下游的视觉任务有用,但是常规3×33 \times 3卷积核的感受野相对很小,即便是很深的模型依然不能捕获类似于transformer的长距离依赖。

自适应空间信息聚合。与transformer根据输入动态决定权重不同,常规卷积的权重固定且具有很强的归纳偏置,比如二维局部性、近邻结构性以及平移不变性等。高归纳偏置的模型收敛更快,需要的训练数据更少,但是也限制了模型无法从大规模数据集中学习更加通用和鲁棒的表征。

(1)DCNv2回顾

同时满足上述两个性质的卷积算子的DCN。给定输入xRC×H×W\mathbf{x} \in \mathbb{R}^{C \times H \times W}和当前像素点p0p_0,DCNv2如下式所示:

y(p0)=k=1Kwkmkx(p0+pk+Δpk)\mathbf{y}(p_0) = \sum_{k=1}^{K} \mathbf{w}_{k} \mathbf{m}_{k} \mathbf{x}(p_0 + p_k + \Delta p_k),

其中,KK表示采样点的数量,如采用3×33 \times 3卷积核采样点数量则为9,kk遍历所有采样点。pkp_k表示预定义采样网格{(1,1,),(1,0),...,(0,+1),...,(+1,+1)}\left\{ (-1,-1,), (-1, 0), ..., (0, +1), ..., (+1, +1) \right\}的第kk个位置;Δpk\Delta p_k 表示第kk个采样网格位置的偏移量,有了这个偏移量,DCN就可以灵活地学习短距离或长距离依赖。mkR\mathbf{m}_{k} \in \mathbb{R}表示第kk个采样点的调制标量,经过sigmoidsigmoid函数的标准化。wkRC×C\mathbf{w}_{k} \in \mathbb{R}^{C \times C}是第kk个采样点的映射权重。根据输入数据x\mathbf{x}可学习的调制标量mk\mathbf{m}_{k}和位置偏移量Δpk\Delta p_k 使得DCN能够进行自适应的空间信息聚合。

(2)DCVv2改造

为了适应大模型,作者对DCNv2进行改造,

1)卷积神经元(一个常规的3×33 \times 3卷积核具有9个线性映射神经元)之间共享权重。回顾一下原始的DCNv2:对于每个采样点对应的向量x(p0+pk+Δpk)\mathbf{x}(p_0 + p_k + \Delta p_k)首先会乘上一个调制标量mkR\mathbf{m}_{k} \in \mathbb{R},然后再拿一个权重向量wkRC×C\mathbf{w}_{k} \in \mathbb{R}^{C \times C}去乘,进行线性映射。也就是每个采样点都会对应一个不同的映射向量,这样会是得计算复杂度跟采样点数量成线性关系,作者为了提高计算效率,对每个采样点都采用同一个映射权重,即wRC×C\mathbf{w} \in \mathbb{R}^{C \times C}与位置kk无关。(其思想与深度可分离卷积类似,但并不完全一致)

2)引入多组机制。Transformer的核心算子是多头注意力,即将输入沿通道分成多个组,在每个组内分别进行运算,这样每个子空间中都可以学习不同的表征,有利于提高模型的表达能力。因此,作者引入多组机制,即分组卷积。

3)沿采样点规范化调制标量。DCNv2中每个采样点的调制标量是直接经过sigmoidsigmoid缩放到[01][0-1]之间,这样调制标量的总和会在[0K][0-K]之间变化,导致训练不稳定,因此作者对所有的调制标量进行softmaxsoftmax规范化,使得调制标量总和为1。

基于上述改进,作者提出了DCN v3,如下所示,

y(p0)=g=1Gk=1Kwgmgkxg(p0+pk+Δpgk)\mathbf{y}(p_0) = \sum_{g=1}^{G} \sum_{k=1}^{K} \mathbf{w}_{g} \mathbf{m}_{gk} \mathbf{x}_g(p_0 + p_k + \Delta p_{gk}),

其中,GG表示分组数量,其他符号的意义与原来类似,wgRC×C\mathbf{w}_{g} \in \mathbb{R}^{C \times C^{'}}表示映射权重,C=C/GC^{'} = C / G表示分组后每组的通道维度,mgkR\mathbf{m}_{gk} \in \mathbb{R}表示调制标量。

2、模型构建

(1)basic block

Basic block 采用transformer常用的结构设置,如下图所示,其中位置偏移量和调制标量通过一个独立卷积层(a 3×3 depth-wise convolution followed by a linear projection)来学习。

(2)Stem & downsampling layers

Stem 和 downsampling layers的设置如下,

(3)Stacking rules

Stacking rules决定了如何使用基本模块组成整体模型,首先定义几个基本符号:

CiC_i: 第ii个stage的通道数;

GiG_i: 第ii个stage的分组数;

LiL_i: 第ii个stage的basic block数量;

通常一个模型有4个stage,每个stage由上面3个参数决定。为降低搜索空间,作者总结前人经验,提出了4个规则:1)后3个stage的通道数由第一个通道数决定,Ci=2i1C1C_i = 2^{i-1} C_1;2)分组数由通道数决定,Gi=Ci/CG_i = C_i / C^{'};3)第1、2、4stage中的basic block数量一样,即采用"AABA"的模式,L1=L2=L4L_1=L_2=L_4;4)第3个stage的basic block数量要大于其他stage的数量,L1L3L_1 \le L_3。这样,一个模型就可以由4个参数决定,分别为(C1,C,L1,L3)(C_1, C^{'}, L_1, L_3),然后对4个参数取不同值进行超参数搜索,最终找到基础模型的最优超参数为(64,16,4,18)(64, 16, 4, 18)

(4) Scaling rules

主要是考虑缩放模型的深度和宽度来构建大模型,记模型深度为D=(3L1+L3)D=(3L_1+L_3),宽度C1C_1,因子α,β,ϕ\alpha, \beta, \phi,Scaling rules为D=αϕD,C1=βϕC1D^{'} = \alpha ^{\phi} D, C_1^{'} = \beta ^{\phi} C_1,其中,α1,β1,αβ1.992\alpha \geq 1, \beta \geq 1, \alpha \beta ^{1.99} \approx 2,在这里,1.99是特定于InternImage模型的,通过将模型宽度加倍并保持深度恒定来计算。

最终,各个规模的模型配置设置如下,

三、实验结果

目标检测和语义分割破纪录,COCO test-dev目标检测数据集达到65.4mAP,ADE20K语义分割数据集达到62.9 mIoU。

目标检测,用的是DINO检测器,结果如下,

四、总结

现在transformer说要一统江湖,CNN说廉颇未老尚能再战,其实背后的思想发展脉络已经决定了未来的结局。最开始的深度神经网络是MLP,号称只要模型够大便可以拟合任意函数,只是当时算力不够,标注数据太少且质量太差,训练不出来这样的模型;因此引入归纳偏置,归纳偏置就是人类洞察的关于事物的认知,视觉任务引入高归纳偏置的CNN,语言处理引入RNN。高归纳偏置可以提高模型收敛速度和训练数据的需求。Transformer的兴起是得益于高算力和大数据,直接舍弃部分归纳偏置,直接从数据中学习更通用更鲁棒的知识。Transformer现在面临的问题是计算复杂度高,说到底还是算力不够,所以又考虑重新引入归纳偏置,比如这篇文章。现在一个很现实的考虑就是可以把这篇文章的DCNv3改造成一维卷积,这样便可以同时处理视觉任务和自然语言任务。

参考文献:

[1] Zhuang Liu, Hanzi Mao, Chao-Yuan Wu, Christoph Feichtenhofer, Trevor Darrell, and Saining Xie. A convnet for the 2020s. arXiv preprint arXiv:2201.03545, 2022. 2, 3, 5, 6, 7, 8
[2] Xiaohan Ding, Xiangyu Zhang, Jungong Han, and Guiguang Ding. Scaling up your kernels to 31x31: Revisiting large kernel design in cnns. In IEEE Conf. Comput. Vis. Pattern Recog., pages 11963–11975, 2022. 2, 3, 5, 6, 7, 8

EOF