极市导读
本文提出了一种新的基于CNN的大尺度基础模型InternImage,它通过类似ViT提升参数量与训练数据等方式取得了大幅性能提升。首个参数达1B、训练数据达400M并取得与ViT相当、甚至更优的CNN方案。 >>极市打榜|18.5G+数据集免费使用,无人机视角的检测算法上新!
论文链接:https://arxiv.org/abs/2211.05778
代码链接:https://github.com/OpenGVLab/InternImage
不同于近来聚焦于大核的CNN方案,InternImage以形变卷积作为核心操作(不仅具有下游任务所需的有效感受野,同时具有输入与任务自适应空域聚合能力)。所提方案降低了传统CNN的严格归纳偏置,同时可以学习更强更鲁棒的表达能力。ImageNet、COCO以及ADE20K等任务上的实验验证了所提方案的有效性,值得一提的是:InternImage-H在COCO test-dev上取得了新的记录65.4mAP。
通过提升参数量(>1B)、大尺度训练数据(+JFT300),ViT在大尺度模型方面取得了巨大成功,大败CNN、大幅提升了一系列CN任务(含分类、检测以及分割等)的性能边界。尽管如此,作者认为:当加持类似ViT的算子/架构设计、参数提升以及大尺度数据后,CNN基础模型同样可以取得与ViT相当甚至更好的性能。
作者首先对CNN与ViT的差异性进行了总结:
作者以DCNv2算子为基础,通过对其扩展得到DCNv3,然后参考ViT从block与架构维度进行定制化得到了本文所提InternImage(见上图d)。本文贡献包含以下三点:
一种最简单的弥补卷积与MHSA差距的方式:将MHSA的长程依赖与自适应空域聚合引入到常规卷积。作为常规卷积的广义形式,DCNv2空域描述为如下形式:
其中,K表示采样点数,表示第k个采样点的投影权值,表示第k个采样点的调制因子(它通过 进行归一化), 表示预定义的网格采样 表示第 个采样位置的偏移。从上述公式可以看到:
因此,DCNv2所具有的与MHSA类似优异属性驱动我们基于该算子研发大尺度CNN基础模型。
在已有的实践中,DCNv2往往作为常规卷积的扩展,加载常规卷积的预训练权值后进行微调以达成更优性能。这种使用方式不适用于需要从头开始训练的大尺度视觉基础模型。为解决上述问题,作者对DCNv2进行了如下扩展改进:
通过组合上述改进,DCNv2成功进化到了DCNv3,描述如下:
其中, G表示聚合组数量。对于第 组, 表示位置不相关投影权值, 表示第 个采样点的调制因子且沿维度 通过 softmax 归一化。总而言之, DCNv3 作为 DCN系列的扩展具有以下几个特性:
采用DCNv3作为核心算子会带来新的问题:如何构建可以充分利用该算子的模型呢?看上图。
Basic Block 在模块层面,不同于传统CNN常用的BottleNeck,作者采用了ViT的基本模块:加持了更鲜艳的成分(如LN、FFN、GELU),见上图的基本模块示意图,即将ViT模块中的MHSA替换为了DCNv3。需要注意的是:这里采用的post-normalization设置,而非ViT常见的pre-normalization。
Stem & downsampling layers 为获得分层特征,作者采用卷积Stem与下采样层将特征下采样到不同尺度。Stem由两个卷积、两个N、一个GELU构成,卷积核尺寸为3,stride为2,第一个卷积的输出通道维第二个卷积输出通道的一半。下采样层由stride=2的卷积构成,同时后接LN层。
Stacking rules 为更清晰说明模块堆叠过程,作者首先列出了InternImage的超参:
由于所提模块包含 4 个阶段, 由 12 个超参构成, 该搜萦空间太大了以至于无法详尽的枚举以寻找最佳配置。为减少搜索空间,作者总结出以下 4 条规则:
此时, InternImage仅需 4 个超参 即可进行定义。作者先选择了一 个 参数的模型作为起始模型, 超参空间分别为:
。起始模型的搜索空间仅为 : 我呢?),通过在I mageNet上训练并评估得到了最佳模型配置 。
Scaling rules 基于上述最优起始模型, 作者进一步探索了参数缩放规则。具体 来说, 作者考虑了两个缩放维度: 深度 与宽度 并采用 进行缩放。缩放规则定义如下:
其中, 。通过实验, 作者发现最佳缩放配置为详见下表。为进一步探索模型容量, 作者还构建了具有 参数量的InternImage-H.
上表给出了不同方案在ImageNet上的性能对比,从中可以看到:
上表给出了Mask R-CNN框架下不同方案的性能对比,可以看到:
如上表所示,当采用更多参数、更先进的Cascade Mask R-CNN框架后,
为进一步提升目标检测的性能上限,我们采用了更先进的配置,结果见上表,可以看到:
上表给出了ADE20K分割任务上的性能对比,从中可以看到:
在代码方面,作者尚未开源,不过相比DCNv2,DCNv3更多是体现在引入新机制,如调制因子生成方式、多组机制、规范化方式。可基于MMCV的扩展算子ModulatedDeformConv2dPack进行简单的说明,见下图。DCNv2中的调制因子与偏移通过conv_offset统计计算得到,而调制因子mask采用的是sigmoid激活。而DCNv3则采用depth-wise计算mask,采用point-wise计算offset,通过该操作可以一定程度减少模型参数量。至于sigmoid到softmax的迭代在实现上就更容易了。最后,说一点:DCNv2实际上已经有了多组(见deform_groups)的概念,应该不算是本文新引入的吧。
公众号后台回复“速查表”获取
21张速查表(神经网络、线性代数、可视化等)下载~
“
点击阅读原文进入CV社区
收获更多技术干货