论文:https://arxiv.org/abs/2211.05778
理论部分参考知乎:CVPR2023 Highlight | 书生模型霸榜COCO目标检测,研究团队解读公开 - 知乎
不同于近来聚焦于大核的CNN方案,InternImage以形变卷积作为核心操作(不仅具有下游任务所需的有效感受野,同时具有输入与任务自适应空域聚合能力)。所提方案降低了传统CNN的严格归纳偏置,同时可以学习更强更鲁棒的表达能力。ImageNet、COCO以及ADE20K等任务上的实验验证了所提方案的有效性,值得一提的是:InternImage-H在COCO test-dev上取得了新的记录65.4mAP。
InternImage通过重新设计算子和模型结构提升了卷积模型的可扩展性并且缓解了归纳偏置,包括(1)DCNv3算子,基于DCNv2算子引入共享投射权重、多组机制和采样点调制。
(2)基础模块,融合先进模块作为模型构建的基本模块单元
(3)模块堆叠规则,扩展模型时规范化模型的宽度、深度、组数等超参数。
研究者基于DCNv2算子,重新设计调整并提出DCNv3算子,具体改进包括以下几个部分。
(1) 共享投射权重。与常规卷积类似,DCNv2中的不同采样点具有独立的投射权重,因此其参数大小与采样点总数呈线性关系。为了降低参数和内存复杂度,借鉴可分离卷积的思路,采用与位置无关的权重代替分组权重,在不同采样点之间共享投影权重,所有的采样位置依赖性都得以保留。
(2) 引入多组机制。多组设计最早是在分组卷积中引入,并在Transformer的多头自注意力中广泛使用,它可以与自适应空间聚合配合,有效地提高特征的多样性。受此启发,研究者将空间聚合过程分成若干组,每个组都有独立的采样偏移量。自此,单个DCNv3层的不同组拥有不同的空间聚合模式,从而产生丰富的特征多样性。
(3) 采样点调制标量归一化。为了缓解模型容量扩大时的不稳定问题,研究者将归一化模式设定为逐采样点的Softmax归一化,这不仅使大规模模型的训练过程更加稳定,而且还构建了所有采样点的连接关系。
modules.py
中核心代码:
###################### DCNV3 #### start#############################
from ultralytics.nn.ops_dcnv3.modules import DCNv3
class DCNV3_YoLo(nn.Module):
def __init__(self, inc, ouc, k=1, s=1, p=None, g=1, d=1, act=True):
super().__init__()
self.conv = Conv(inc, ouc, k=1)
self.dcnv3 = DCNv3(ouc, kernel_size=k, stride=s, group=g, dilation=d)
self.bn = nn.BatchNorm2d(ouc)
self.act = Conv.default_act
def forward(self, x):
x = self.conv(x)
x = x.permute(0, 2, 3, 1)
x = self.dcnv3(x)
x = x.permute(0, 3, 1, 2)
x = self.act(self.bn(x))
return x
###################### DCNV3 #### END#############################
详见:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。