DINO:一种新的端到端目标检测器(速读版)

原文:Zhang H, Li F, Liu S, et al. Dino: Detr with improved denoising anchor boxes for end-to-end object detection[J]. arXiv preprint arXiv:2203.03605, 2022.

源码:https://github.com/IDEACVR/DINO

我们提出了一种新的端到端目标检测器DINO,它在性能和效率上均优于以往的DETR类模型,主要得益于以下三点:对比去噪训练、用于锚框初始化的混合query选择、用于边框预测的look forward twice方案。DINO使用ResNet-50和多尺度特征在COCO上实现了49.4 AP(12轮)和51.3 AP(24轮)的成绩,与之前最好的DETR类模型DN-DETR相比,分别涨点6.0 AP和2.7 AP。DINO在模型大小和数据大小方面都具有良好的可扩展性。在不使用花哨技巧的情况下,DINO使用Swin-L骨干网络在Objects365数据集上进行预训练后,在COCO val2017和test-dev数据集上获得了最佳结果,分别是63.2 AP和63.3 AP。与目标检测排行榜上的其他模型相比,DINO在获得更好结果的同时,显著减小了模型大小和预训练数据大小。

图1:在COCO数据集上,DINO与其他模型结果的比较。

图2:DINO模型的框架。我们的改进主要在Transformer编码器和解码器方面。我们选择最后一层中的top-K编码器特征来初始化Transformer解码器的位置queries,而内容queries保持为可学习的参数。我们的解码器还包含一个对比去噪(CDN)部分。

图3:CDN group的结构和正负例的演示。

图4:(a)和(b)分别是全部物体和小物体上的ATD(100)值。(c)是小物体上的AP值。

图5:三种query初始化方法的比较。

图6:Deformable DETR和DINO边框更新方法的比较。

表1:在COCO val2017数据集上,DINO和其他检测模型结果的比较(使用ResNet-50骨干网络,训练12轮)。

表2:在COCO val2017数据集上,DINO和其他检测模型结果的比较(使用ResNet-50骨干网络,训练更多轮)。

图7:在COCO val2017数据集上,DINO和其他两个检测模型的训练收敛曲线(使用ResNet-50骨干网络和多尺度特征)。

表3:MS-COCO上最佳检测模型的比较。

表4:算法组件的消融研究。QS、CDN、LFT分别表示Query Selection、Contrastive De-Noising Training、Look Forward Twice。

图8:左图是使用DN queries训练的模型的检测结果,右图是DINO的结果。在左图中,箭头所指的男孩有3个重复的边框。

表5:不同模型的训练效率(使用ResNet-50骨干网络)。所有模型均使用8块Nvidia A100 GPU进行测试。

表6:编码器/解码器层数的消融研究。

表7:去噪queries数量的消融研究。

表8:DINO模型中使用的超参数。

在本文中,我们提出了一种强大的端到端Transformer检测器DINO,借助contrastive denoising training、mixed query selection、look forward twice方法,大大提高了模型的训练效率和检测性能。我们进一步尝试在更大的数据集上用更强的骨干网络训练DINO,并在COCO 2017 test-dev数据集上达到了新的SOTA水平,63.3 AP。

多模态人工智能

为人类文明进步而努力奋斗^_^↑

欢迎关注“多模态人工智能”公众号^_^↑

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,Grounding DINO一种结合了DINO和基于Transformer的检测的模型,用于开放式目标检测。它的输入是图像和文本,输出是多个[物体框,名词短语]对。具体来说,Grounding DINO使用DINO模型对图像和文本进行编码,然后使用基于Transformer的检测对编码后的特征进行检测,最终输出[物体框,名词短语]对。 下面是一个简单的示例代码,演示如何使用Grounding DINO进行开放式目标检测: ```python import torch from torchvision.models.detection import fasterrcnn_resnet50_fpn from transformers import ViTFeatureExtractor, ViTForImageClassification from transformers.models.dino.modeling_dino import DINOHead # 加载预训练的DINO模型和ViT模型 dino = ViTForImageClassification.from_pretrained('facebook/dino-vit-base') dino_head = DINOHead(dino.config) dino_head.load_state_dict(torch.load('dino_head.pth')) dino.eval() vit_feature_extractor = ViTFeatureExtractor.from_pretrained('google/vit-base-patch16-224') # 加载预训练的Faster R-CNN检测 model = fasterrcnn_resnet50_fpn(pretrained=True) model.eval() # 输入图像和文本 image = Image.open('example.jpg') text = 'a person riding a bike' # 对图像和文本进行编码 image_features = vit_feature_extractor(images=image, return_tensors='pt')['pixel_values'] text_features = dino_head.get_text_features(text) image_embedding, text_embedding = dino(image_features, text_features) # 使用Faster R-CNN检测进行目标检测 outputs = model(image_embedding) boxes = outputs[0]['boxes'] labels = outputs[0]['labels'] # 输出[物体框,名词短语]对 for i in range(len(boxes)): print([boxes[i], labels[i]]) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值