《Mask DINO: Towards A Unified Transformer-based Framework for Object Detection and Segmentation》论文解读

2022:ArXiv      2023:CVPR

摘要

本文提出Mask DINO,一个统一的目标检测和分割框架。Mask DINO通过添加掩码预测分支来扩展DINO(具有改进的去噪锚框的DETR),该分支支持所有图像分割任务(实例、全景和语义)。它利用迪诺的查询嵌入对高分辨率像素嵌入图进行点积,以预测一组二进制掩码。DINO中的一些关键组件通过共享架构和训练过程进行了扩展以进行分割。Mask DINO简单、高效、可扩展,可以从联合的大规模检测和分割数据集中受益。实验表明,Mask DINO明显优于所有现有的专用分割方法,无论是在ResNet-50骨干网上,还是在具有SwinL骨干网的预训练模型上。值得注意的是,Mask DINO在10亿参数以下的模型中建立了迄今为止在实例分割(COCO上的54.5 AP)、全景分割(COCO上的59.4 PQ)和语义分割(ADE20K上的60.8 mIoU)方面的最佳结果。

代码地址:https://github.com/IDEA-Research/MaskDINO

一、Introduce

目标检测和图像分割是计算机视觉中的基本任务。这两种任务都涉及在图像中定位感兴趣的物体,但具有不同的聚焦水平。

  • 目标检测:是定位感兴趣的目标并预测其边界框和类别标签。
  • 图像分割:侧重于不同语义的像素级分组。此外,图像分割还包括各种任务,包括实例分割、全景分割和针对不同语义的语义分割,例如实例或类别隶属度、前景或背景类别。

基于transformer模型存在的问题:性能最好的检测和分割模型仍然不统一,这阻碍了检测和分割任务之间的任务和数据合作

在基于 CNN 的模型中,Mask-R-CNN和 HTC仍然被广泛认为是实现检测和分割之间相互合作的统一模型,以实现比专业模型更好的性能。尽管我们相信检测和分割可以在基于 Transformer 的模型的统一架构中相互帮助,但简单地使用 DINO 进行分割并使用 Mask2Former 进行检测的结果表明它们不能很好地完成其他任务,如表 1 和表 2 所示。

表1:简单地将检测头添加到Mask2Former会导致较低的检测性能。* 表示框是从预测的掩码生成的。Mask2Former生成的框也不如DINO (-4.5 AP)。这些模型训练了 50 个 epoch。
表2:简单地将分割头添加到DINO会导致实例分割性能低。DINO的预测掩码也不如Mask2Former (-3.5 AP)。这些模型训练了 50 个 epoch。

此外,琐碎的多任务训练甚至会损害原始任务的性能。它自然会导致两个问题:1)为什么不能检测和分割任务在基于 Transformer 的模型中相互帮助。2) 是否有可能开发一种统一的架构来取代专门的架构?

为解决这些问题,本文提出Mask DINO:用一个掩码预测分支对DINO进行扩展,并与DINO的盒子预测分支并行。

  1. 受其他用于图像分割的统一模型[3][4][28]的启发,重用DINO的内容查询嵌入,在从骨干和Transformer编码器特征获得的高分辨率像素嵌入图(输入图像分辨率)上对所有分割任务执行掩码分类。
  2. mask分支通过简单地用像素嵌入图生成每个内容查询嵌入来预测二进制掩码。

由于DINO是区域级回归的检测模型,因此它不是为像素级对齐而设计的。为了更好地对齐检测和分割之间的特征,本文还提出了三个关键组件来提高分割性能:

  • 提出一种统一的、增强的查询选择方法。它利用编码器密集先验,从排名靠前的标记中预测掩码,将掩码查询初始化为锚点。
  • 像素级分割在早期阶段更容易学习,建议使用初始掩码来增强盒子,实现任务协作。提出一种统一的掩模去噪训练,以加速分割训练。
  • 然后,使用混合二部图匹配算法实现真实值与掩码的精确匹配。

主要贡献:

  1. 开发了一个基于transformer的统一框架,用于目标检测和分割。由于该框架从DINO扩展而来,通过添加掩码预测分支,它自然地继承了DINO中的大多数算法改进,包括锚框引导的交叉注意力、查询选择、去噪训练,甚至在大规模检测数据集上预训练的更好的表示。
  2. 证明了检测和分割可以通过共享的架构设计和训练方法相互帮助。特别是,检测可以显著帮助分割任务,即使是分割背景“东西”类别。在相同的设置下,使用ResNet-50骨干网络,与DINO (COCO检测时0.8 AP)和Mask2Former (COCO实例、COCO全景和ADE20K语义分割时2.6 AP、1.1 PQ和1.5 mIoU)相比,Mask DINO的性能优于所有现有模型。
  3. 通过一个统一的框架,分割可以从大规模检测数据集的检测预训练中受益。在具有SwinL骨干的Objects365数据集上进行检测预训练后,Mask DINO显著提高了所有分割任务,并在十亿参数下的模型之间的实例(COCO上的54.5 AP)、全景(COCO上的59.4 PQ)和语义(ADE20K上的60.8 mIoU)分割上取得了最佳结果。

二、Related Work

2.1目标检测

主流的检测算法一直被基于卷积神经网络的框架所主导,直到最近基于transformer的检测器取得了很大的进展:

尽管取得了令人鼓舞的进展,但DETR-like检测模型在分割方面并不具有竞争力。Vanilla DETR在其架构中包含一个分割头。然而,它的分割性能不如专门的分割模型,仅显示了DETR-like检测模型同时处理检测和分割的可行性。

2.2分割

分割分为:

  • 实例分割是为每个对象实例预测掩码及其对应的类别。
  • 语义分割需要将包括背景在内的每个像素划分为不同的语义类别。
  • 全景分割将实例和语义分割任务统一起来,并为每个对象实例或背景分割预测一个掩码。

在过去的几年里,研究人员为这三项任务开发了专门的架构:

  • MASK-RCNN和HTC只能处理实例分割,因为它们根据每个实例的框预测来预测其掩码。
  • FCN和U-Net只能进行语义分割,因为它们是基于像素分类来预测一个分割图。
  • 全景分割模型《Panoptic Feature Pyramid Networks》和《UPSNet: A Unified Panoptic Segmentation Network》虽然统一了上述两个任务,但它们通常不如专门实例和语义分割模型。

直到最近,还开发了一些图像分割模型 [3, 4]将这三个任务与通用架构统一起来:

2.3统一的方法

由于目标检测和分割都涉及目标定位,因此它们自然共享共同的模型架构和视觉表示。一个统一的框架不仅有助于简化算法开发工作,而且允许同时使用检测和分割数据来改进表示学习。

  • Mask RCNN扩展了Faster RCNN,并从RPN提出的感兴趣区域(ROI)中池化图像特征。HTC进一步提出了一种预测盒子和口罩的交错方式。然而,这两个模型只能进行实例分割。
  • DETR以端到端的方式预测盒子和掩码。然而,其分割性能在很大程度上落后于其他模型。

由表2可知,将DETR的分割头添加到DINO中,实例分割结果较差。如何实现分割和检测之间的相互辅助一直是一个需要解决的重要问题。

三、Mask Dino

Mask DINO是DINO的扩展。在内容查询嵌入的基础上,DINO有两个用于框预测和标签预测的分支。boxes是动态更新的,用于指导每个Transformer解码器中的可变形注意力。Mask DINO为掩码预测添加了另一个分支,并最低限度地扩展了检测中的几个关键组件,以适应分割任务。

3.1Dino

DINO是一个典型的类似DETR的模型,由骨干、Transformer编码器和Transformer解码器组成。框架如图1所示(蓝色阴影部分没有红线)。

图1。Mask DINO的框架,它基于DINO(蓝色阴影部分),扩展(红色部分)用于分割任务。QS 和 DN 分别用于查询选择和去噪训练。
  • 遵循DAB-DETR,DINO将DETR中的每个位置查询表示为一个4D锚框,并在每个解码器层中动态更新。注意,DINO使用了具有可变形注意力的多尺度特征。因此,更新后的锚框也被用来以稀疏和柔和的方式约束可变形注意力。
  • 遵循DN-DETR,DINO采用去噪训练,并进一步发展对比去噪以加快训练收敛。
  • 此外,DINO提出了一种混合查询选择方案来初始化解码器中的位置查询,并提出了一种前视两次的方法来改进box梯度反向传播。

3.2为什么通用模型没有取代DETR类模型中的专用模型

 基于transformer的检测器和分割模型已经取得了显著的进展。例如,DINO和Mask2Former分别在COCO检测和全景分割上取得了最好的结果。在这种进展的启发下,我们试图简单地将这些专门的模型扩展到其他任务中,但发现其他任务的性能远远落后于原始任务,如表1和表2所示。看似微不足道的多任务训练甚至会损害原始任务的性能。然而,在基于卷积的模型中,将检测和实例分割任务相结合是有效和互利的。例如,Mask R-CNN头部的检测模型在COCO实例分割上仍然排名第一。我们将以DINO和Mask2Former为例讨论统一基于transformer的检测和分割的挑战。

  1. 专业检测模型和分割模型之间的区别是什么:图像分割是像素级的分类任务,而目标检测是区域级的回归任务。在基于DETR的模型中,解码器查询负责这些任务。例如,Mask2Former使用这种解码器查询来点积高分辨率特征图以产生分割掩码,而DINO使用它们来回归框。然而,由于Mask2Former中的此类查询只需要与图像特征进行逐像素相似性比较,因此它们可能不知道每个实例的区域级别位置。相反,DINO的查询不是为了与这种低级特征交互以学习像素级表示而设计的。相反,它们编码丰富的位置信息和用于检测的高级语义。
  2. 为什么Mask2Former不能很好地进行检测:
  • 首先,它的查询遵循了DETR的设计,但没有利用条件DETR、锚点DETR和DAB-DETR所研究的更好的位置先验信息;例如,它的内容查询与Transformer编码器的特征在语义上对齐,而它的位置查询只是可学习的向量,如普通的DETR,而不是与单模位置相关联。如果我们删除它的mask分支,它就变成了DETR的变体,其性能不如最近改进的DETR模型。
  • 其次,Mask2Former在Transformer解码器中采用了掩码注意力(multi-head attention with attention mask)。从上一层预测的注意力掩码具有高分辨率,并用作注意力计算的硬约束。它们对于框预测既不高效也不灵活。第三,Mask2Former不能显式地逐层执行盒细化。
  • 此外,其在解码器中从粗到细的掩码细化未能利用编码器的多尺度特征。

    3. 为什么DETR/DINO不能很好地进行分割

  • DETR的分割头不是最优的。vanilla DETR让每个查询嵌入与最小特征图的点积,以计算注意力图,然后对它们进行上采样以获得掩码预测。这种设计缺乏查询与来自主干的更大特征图之间的交互。此外,头部过重,无法使用面罩辅助损失进行面罩细化。
  • 原因是改进的检测模型中的特征与分割不一致。例如,DINO继承了[18][32][35] 的许多设计,如查询公式,去噪训练和查询选择。然而,这些组件旨在加强用于检测的区域级表示,这对分割不是最优的。

3.3Our Method: Mask Dino

Mask DINO采用了与DINO相同的检测架构设计,只是进行了最小的修改。在Transformer解码器中,Mask DINO添加了一个掩码分支以进行分割,并扩展DINO中的几个关键组件以进行分割任务。如图1所示,蓝色阴影部分的框架为原始DINO模型,红色线标记了用于分割的附加设计。

图1。Mask DINO的框架,它基于DINO(蓝色阴影部分),扩展(红色部分)用于分割任务。QS 和 DN 分别用于查询选择和去噪训练。

3.4分割的分支

遵循其他用于图像分割的统一模型Mask2Former、MaskFormer,我们对所有分割任务执行掩码分类。请注意,DINO 不是为像素级对齐而设计的,因为它的位置查询被表述为锚框,其内容查询用于预测框偏移和类成员资格。为了执行掩码分类,我们采用 Mask2Former的关键思想是构建一个从主干和 Transformer 编码器特征中获得的像素嵌入图。如图 1 所示,像素嵌入图是通过将主干中的 1/4 分辨率特征图 Cb 与 Transformer 编码器中的上采样 1/8 分辨率特征图 Ce 融合来获得的。然后,我们使用像素嵌入映射在解码器中对每个内容查询嵌入 qc 进行点积,以获得输出掩码 m。

公式(1)

其中 M 是分割头,T 是卷积层,用于将通道维度映射到 Transformer 隐藏维度,F 是执行 Ce 2x 上采样的简单插值函数。该分割分支在概念上很简单,易于实现在DINO框架中。

3.3统一和增强查询选择

掩码的统一查询选择:查询选择已广泛用于传统的两阶段模型和许多类似 DETR 的模型以提高检测性能。我们进一步改进了Mask DINO中的查询选择方案来完成分割任务。 

编码器输出特征包含密集特征,可以作为解码器更好的先验。因此,我们在编码器输出中采用了三个预测头(分类、检测和分割)。注意,这三个头与解码器的头是相同的。每个token的分类分数被视为置信度,以选择排名最高的特征,并将它们作为内容查询提供给解码器。所选特征还将回归框并与高分辨率特征图点积以预测掩码。预测的框和掩码将由地面真实值监督,并被视为解码器的初始锚点。请注意,我们在Mask DINO中初始化内容和锚框查询,而DINO只初始化锚框查询。

掩码增强的锚框初始化:如第 3.2 节所述,图像分割是一个像素级分类任务,而对象检测是一个区域级位置回归任务。因此,与检测相比,虽然分割是一项更困难的细粒度任务,但在初始阶段更容易学习。例如,掩码是通过使用高分辨率特征图的点积查询来预测的,这只需要比较逐像素语义相似性。然而,检测需要直接回归图像中的框坐标。因此,在统一查询选择后的初始阶段,掩码预测比框更准确(不同阶段的掩码预测和框预测之间的定性 AP 比较如表 8 和表 9 所示)。因此,在统一的查询选择之后,我们从预测的掩码中导出框作为解码器更好的锚框初始化。通过这种有效的任务合作,增强的框初始化可以显着提高检测性能。

3.4Segmentation Micro Design

掩码的统一去噪:目标检测中的查询去噪已经显示出有效的[15,32]来加速收敛和提高性能。它将噪声添加到groundtruth框和标签中,并将它们提供给Transformer解码器作为噪声位置查询和内容查询。该模型经过训练以在给定噪声版本的情况下重建地面实况对象。我们还将这种技术扩展到分割任务。由于掩码可以被视为框的更细粒度的表示,因此框和掩码是自然连接的。因此,我们可以将框视为掩码的噪声版本,并训练模型预测给定框的掩码作为去噪任务。给定用于掩码预测的框也被随机噪声,以实现更有效的掩码去噪训练。

Hybrid matching:Mask DINO,就像在一些传统模型 [2, 9] 中一样,它以松散耦合的方式预测具有两个并行头的框和掩码。因此,两个头可以预测一对彼此不一致的框和掩码。为了解决这个问题,除了二部匹配中的原始框和分类损失外,我们还添加了掩码预测损失,以鼓励一个查询更准确和一致的匹配结果。因此,匹配成本变为,其中Lcls、Lbox 和 Lmask 是分类、框和掩码损失,λ 是它们对应的权重。

四、实验

分割结果:

在COCO val2017上使用ResNet-50和SwinL骨干的Mask DINO和其他目标检测和实例分割模型的结果 :

五、结论

在本文中,我们提出了 Mask DINO 作为一个统一的基于 Transformer 的框架,用于对象检测和图像分割。从概念上讲,Mask DINO是DINO从检测到分割的自然扩展,对一些关键组件进行了最小的修改。Mask DINO 优于以前的专业模型,并在 10 亿个参数下的模型中在所有三个分割任务(实例、全景和语义)上都取得了最佳结果。

此外,Mask DINO 表明检测和分割可以在基于查询的模型中相互帮助。特别是,Mask DINO 支持语义和全景分割,以从在大规模检测数据集上预训练的更好的视觉表示中受益。我们希望Mask DINO可以为实现任务合作和数据合作,为更多的视觉任务设计通用模型提供见解。局限性:在COCO全景分割中,不同的分割任务无法在Mask DINO中实现相互帮助。例如,在COCO全景分割中,掩码AP仍然落后于仅使用实例训练的模型。 

### DINO模型的目标检测实现与使用 #### 模型概述 DINODEtection Transformer with Iterative Object Queries)是一个基于Transformer架构的对象检测框架,它通过迭代查询机制来逐步优化对象预测。这种设计使得DINO能够在较少的标注数据上达到较高的精度,并且具有良好的泛化能力。 #### 实现细节 为了有效地应用DINO进行目标检测,通常会采用预训练的基础模型并对其进行微调。具体来说: - **基础网络**:选用ResNet或其他更先进的骨干网作为特征提取器[^4]。 ```python import torch.nn as nn class Backbone(nn.Module): def __init__(self): super(Backbone, self).__init__() # 使用UniRepLknet或者其他适合的backbone self.backbone = UniRepLknet() def forward(self, x): return self.backbone(x) ``` - **编码解码结构**:构建编码器用于生成多尺度特征金字塔;解码器则负责处理这些特征并将它们转换成边界框和类别得分。 ```python from transformers import DetrConfig, DetrForObjectDetection config = DetrConfig.from_pretrained('facebook/detr-resnet-50') detr = DetrForObjectDetection(config=config) # 将detr中的transformer部分替换为更适合实时推理的设计 # 如extend or compound scaling methods mentioned in [^1] ``` - **损失函数配置**:定义合适的损失项以监督模型的学习过程。除了常见的交叉熵损失外,还可以加入其他辅助性的损失如Mask Loss、LPiPS Loss等[^3]。 ```python criterion = nn.CrossEntropyLoss() total_loss = mse_loss + mask_weight * mask_loss + lpips_weight * lpips_loss + dist_weight * distance_loss ``` #### 数据准备 对于输入图片,需按照特定格式调整尺寸并与标签文件配对形成Dataset实例。此外,还需要考虑如何增强数据集以便更好地适应实际应用场景的需求。 ```python from torchvision.datasets import CocoDetection import albumentations as A from albumentations.pytorch.transforms import ToTensorV2 def get_transform(): transforms = [ A.Resize(height=800, width=800), A.HorizontalFlip(p=0.5), ToTensorV2(), ] return A.Compose(transforms) dataset = CocoDetection(root='./data/coco/train2017', annFile='./annotations/instances_train2017.json', transform=get_transform()) ``` #### 训练流程 设置好超参数之后就可以启动训练循环了。期间要注意监控验证集上的表现指标变化趋势,适时保存最佳权重副本。 ```python device = 'cuda' if torch.cuda.is_available() else 'cpu' model.to(device) optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4) for epoch in range(num_epochs): train_one_epoch(model, optimizer, data_loader, device, epoch, print_freq=10) coco_evaluator = evaluate(model, val_data_loader, device=device) ``` #### 推理阶段 完成训练后即可加载最优模型来进行测试或部署上线。此时只需简单修改前向传播逻辑就能得到想要的结果输出。 ```python checkpoint = torch.load('./best_model.pth') model.load_state_dict(checkpoint['state_dict']) with torch.no_grad(): predictions = model(images)[0] boxes = predictions["boxes"].tolist() scores = predictions["scores"].tolist() labels = predictions["labels"].tolist() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值