【深度学习】Mask DINO四部曲—DETR潘多拉魔盒的正确打开方式

news/2024/12/26 5:19:11/

看本文之前,可以先看一下之前的文章:计算机视觉"新"范式: Transformer

检测框架的本质:从检测框编码的输入角度考虑,有密集到稀疏,密集和稀疏三种框架。Mask R-CNN属于先通过密集预测得到稀疏的采样,然后进行稀疏预测的检测框架;RetinaNet(FCOS、CenterNet)等都属于直接密集预测得到结果的检测框架。在DETR工作之前,几乎所有的检测算法都可以归类到这两种类型中去。之前的G-CNN是直接通过稀疏的初始化采样级联回归得到结果,这算第三种检测框架,但是精度不太令人满意。从检测框编码的输出角度考虑,有one-to-many和one-to-one两种框架。one-to-many需要通过nms、maxpooling等后处理方式去重,而one-to-one通过学习的方式去重。所有的检测框架都可以通过3x2的排列组合得到。举几个例子,Mask R-CNN(密集到稀疏+one-to-many),FCOS(密集+one-to-many),DeFCN(密集+one-to-one),Deformable DETR two-stage版本(密集到稀疏+one-to-one)等等。

DETR属于稀疏+one-to-one的框架,DETR的成功主要归功于Transformer强大的建模能力,还有匈牙利匹配算法解决了如何通过学习的方式one-to-one的匹配检测框和目标框。

虽然DETR可以达到跟Mask R-CNN相当的精度,但是训练500个epoch、收敛速度慢,小目标精度低的问题都饱受诟病。后续一系列的工作都围绕着这几个问题展开,其中最精彩的要属Deformable DETR,也是如今检测的刷榜必备,Deformable DETR的贡献不单单只是将Deformable Conv推广到了Transformer上,更重要的是提供了很多训练好DETR检测框架的技巧,比如模仿Mask R-CNN框架的two-stage做法,如何将query embed拆分成content和reference points两部分组成,如何将DETR拓展到多尺度训练,还有通过look forward once进行boxes预测等技巧,在Deformable DETR之后,大家似乎找到了如何打开DETR框架的正确姿势。本文将通过DAB-DETR、DN-DETR、DINO和Mask DINO等四篇文章,串讲一下如何正确打开DETR的潘多拉魔盒。

DAB-DETR

DAB-DETR将object query看成是content和reference points两个部分,其中reference points显示的表示成xywh四维向量,然后通过decoder预测xywh的残差对检测框迭代更新,另外还通过xywh向量引入位置注意力,帮助DETR加快收敛速度。

c5dc46232786d676c519c122cc2e8b7e.png

04314d7f437140ae6bd177574dc7d173.png

在DAB-DETR之前,有许多工作对如何设置reference points进行过深入的探索:Conditional DETR通过256维的可学习向量学习得到xy参考点,然后将位置信息引入transformer decoder中;Anchor DETR参考点看成是xy,然后通过学习的方式得到256维的向量,将位置信息引入transformer decoder中,并且通过逐级迭代得到检测框的xy;Defomable DETR则是通过256维可学习向量得到xywh参考anchor,通过逐级迭代得到检测框;DAB-DETR则更为彻底,吸百家之长,通过xywh学习256维的向量,将位置信息引入transformer decoder中,并且通过逐级迭代得到检测框。至此,reference points的使用方式逐渐明朗起来,显示的表示为xywh,然后学习成256维向量,引入位置信息,每层transformer decoder学习xywh的残差,逐级叠加得到最后的检测框。

0b8a618c9abf9839fa865201e3357425.png

另外,DAB-DETR为了更充分的利用xywh这种更为显示的reference points表示方式,进一步的引入了Width & Height-Modulated Multi-Head Cross-Attention,其实简单来讲就是在cross-attention中引入位置xywh得到的位置注意力,这一点改进可以极大的加快decoder的收敛速度,因为原始的DETR相当于是在全图学习到位置注意力,DAB-DETR可以直接关注到关键位置,这也是Deformable DETR为啥能加快收敛的原因,本质就是更关键的稀疏位置采样可以加快decoder收敛速度

DN-DETR

虽然DAB-DETR已经极大的加快了DETR的收敛速度,但是仍然不能和Mask R-CNN和RetinaNet等算法比较,常规的Mask R-CNN和RetinaNet算法,可以在12epoch(1x)训练时长下就达到相当好的精度水平,而DAB-DETR仍然需要训练50个epoch,尽管有了更好的reference points和更好的attention。DN-DETR通过实验发现,DETR的decoder收敛速度慢,还有一个重要的原因就是,匈牙利匹配算法导致one-to-one匹配检测框和目标框切换频繁。

130e2743e5a7249984f3581ea7909b0b.png

DN-DETR用IS指标表示匈牙利匹配算法的匹配稳定性,可以看到DN-DETR相比于DETR和DAB-DETR,匹配稳定性有显著的提升。

e9d6bce96acf645d9bcdeb9791dc77ed.png

DN-DETR在DAB-DETR的基础上,引入了denoising part部分,具体来讲就是通过ground truth生成带有噪声的label和bbox,这一部分直接跳过匈牙利匹配,直接进行label和bbox的预测,另外在decoder的embeding中引入一个indicator位置来指示是否是带有噪声的label和bbox的预测部分。

42826247522f6896b6935baf20cede8e.png

DN-DETR的整体框架如图所示,decoder的训练分成denoising part和matching part两个部分,reference points表示成xywh和label两个部分,其中matching part的xywh是可学习的4维向量,label是unknown的,训练目标通过匈牙利匹配算法one-to-one进行匹配;而denoising part的reference points表示成noised的boxes和labels,训练目标直接匹配(其中group表示不同目标分组)。另外为了避免denoising part部分泄露信息,DN-DETR在decoder的self-attention部分引入了一个attention mask,避免不同目标denoising的相互影响,也避免了denoising部分对matching部分的影响。

DN-DETR的denoising part部分设计的十分巧妙,从我对于检测算法的认知来讲,匈牙利匹配算法的虽然可以通过自适应的方式one-to-one匹配,但是也带来了额外的问题,一个是匹配会频繁切换,另一个就是训练样本不够的问题,Mask R-CNN和RetinaNet等检测框架,每个目标可以有多个正样本进行匹配训练,这可以极大的加快收敛速度,而denosing part部分某种程度上就是one-to-many的做法,每个目标可以有多个正样本进行训练,从这个角度看,matching part和denosing part两个部分相当于解耦了one-to-one和one-to-many两种匹配方式,one-to-many只用来加快训练速度,而one-to-one用来找出最佳的匹配结果。

DINO

DINO简单来讲,就是在DN-DETR的基础上,提出3个有效的提点加快收敛速度的技巧:contrastive denoising(CDN)、mixed query selection和look forward twice。

8783c6b8d6e0a01b075eaf801e2ef7b7.png

整体框架如图所示,transformer encoder出来的特征,通过query selection采样得到稀疏的init anchors,然后在DN-DETR的denoising part部分引入了CDN进行辅助训练。

09a955fc3c530af17be625f66b16e7bc.png

上图就是contrastive denoising的设计,这个设计同样非常巧妙,原始的denoising part虽然增加了每个目标的正样本数量,但是仍然存在没有负样本的问题,这样就会导致DETR的去重能力不够强,于是DINO为每个noised labels和boxes都设置了正负样本(比例为1:1),负样本的重建目标为no object。正负样本通过右图的两个参数控制,也就是小于参数1的为正样本,大于参数1小于参数2的为负样本,之所以这样子设计是因为noised boxes距离ground truth boxes很近一定是正样本,而距离很远的非常容易学习成负样本,距离不近不远的是难负样本,更有利于学习出去重的能力。这里的正负样本设计已经非常类似Mask R-CNN或者RetinaNet等经典的检测算法了。

279d03fecb93064e3c16e3dc4b120fee.png

图(a)是原始DETR的query做法,anchor和content queries都是静态的;图(b)是Deformable DETR的two-stage版本,从transformer encoder的输出中学习出最重要的query采样点来初始化decoder的anchor和content queries;图(c)是DINO提出的mixed query selection,也就是decoder的初始化anchor从transformer encoder的输出中取,而content queries保持静态。之所以这么修改,是为了避免encoder输出的query采样点误导decoder的学习。

5379a17adaeebdc1999d67895c4a22bf.png

上图的虚箭头表示gradient detach。图(a)是Deformable DETR预测boxes的技巧,因为layer i的参数更新只是由当前层的预测boxes决定的,所以简称为Look Forward Once。图(b)是DINO提出来的Look Forward Twice,意思就是当前层的预测boxes同时由layer i和layer i-1两层参数更新来决定。

d05a08354461005a99450822529309d7.png

通过以上3个技巧的改进,极大加快了DINO的收敛速度,DINO-R50在36个epoch下可以达到51mAP。

Mask DINO

Mask DINO在DINO的基础上,将DINO拓展到了Instance Segmentation、Semantic Segmentation和Panoptic Segmentation任务上。

fda8936d0026f34cad85b77fc9b5523f.png

Mask DINO整体框架如图所示,类似MaskFormer的做法,将分割任务统一成mask classification任务,引入一个mask prediction branch,通过query embedding来对高分辨率的pixel embedding map进行点乘,得到最终的mask预测结果。其中pixel embedding map通过1/4的feature map和transformer encoder后的1/8、1/16和1/32的feature map融合得到。相比于DINO,Mask DINO将mixed query selection改回了pury query selection。另外,query selection、matching和DN部分都针对mask预测部分做了适应性的细节修改。

c35df88adbfdf2788b48512a51895842.png

从上表中可以看出,Mask DINO几乎把所有能提升的部分都做了一遍改进,DINO和Mask DINO屠榜了Object Detection、Instance Segmentation、Semantic Segmentation和Panoptic Segmentation等主流视觉任务,成功帮助DETR正名,原来不是DETR不够强,而是打开的方式不对。

Reference

[1] DAB-DETR: DYNAMIC ANCHOR BOXES ARE BETTER QUERIES FOR DETR

[2] DN-DETR: Accelerate DETR Training by Introducing Query DeNoising

[3] DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection

[4] Mask DINO: Towards A Unified Transformer-based Framework for Object Detection and Segmentation

 

e893cead5c9e85dbd16c753d088f358a.jpeg

 
 
 
 
往期精彩回顾适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑机器学习交流qq群955171419,加入微信群请扫码(读博请说明)

cda729c7a5afd37739c00bebfdfa161c.png


http://www.ppmy.cn/news/376926.html

相关文章

潘多拉的魔盒 2006-12-09

我刚生下来的时候,得到一个魔盒,没人告诉过我这是潘多拉的魔盒,但后来我逐渐认识了它.我不想打开,也以为我没有打开过,但可惜,本性使我多次自以为在掀开盒子,得到罪恶的满足时候,并没有放出他们,可里面的恶魔已经悄然渗出.懒惰,淫欲,愚蠢,自私,嫉妒,狭隘,纷纷飞出,缠绕在我身体…

潘多拉 (Pandora),一个让你呼吸顺畅的 ChatGPT 相关文件ChatGPT Auth Helper

https://github.com/pengzhile/pandora Pandora 潘多拉 (Pandora),一个让你呼吸顺畅的 ChatGPT。 潘多拉实现了网页版 ChatGPT 的主要操作。后端优化,绕过 Cloudflare,速度喜人。 体验地址 点击 https://chat.zhile.io最新拿 Access Tok…

MySQL-索引详解(五)

♥️作者:小刘在C站 ♥️个人主页: 小刘主页 ♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏&#xf…

让Centos7(minimal install, kde)驱动惠普HP P1007打印机

我以为安装会挺顺利。果然,还是太天真了 参考文献: 1、https://nbabusyahid.wordpress.com/tag/hp-laserjet-p1007/ 2、https://tipsdaddy.blogspot.com/2015/05/installing-hp-laserjet-p1007-printer-on.html 有这两篇做指引就够了,但需要…

测试打印机性能的软件,首选项设置及打印速度测试

打印首选项设置 在“纸张/质量”页面中,用户可以通过该选项设置打印,如纸张尺寸、纸张类型、打印质量等。 打印首选项设置(一) 在“效果”页面中,用户可以设置打印尺寸、水印。除了软件本身提供的“保密”、“草稿”、“样本”三种水印外&…

M401a armbian下安装cups共享打印机

参考了以下两位大佬的文章: https://blog.csdn.net/inthesun29/article/details/105799656 https://blog.csdn.net/m0_45961169/article/details/125915188 1 安装Cups 更新系统 apt-get update apt-get upgrade安装相关的软件 apt-get install ghostscript apt…

树莓派做无线打印服务器,亲测可用 树莓派打造无线共享打印机

最近买了一个打印机,只有usb接口没有网口,也不支持网络打印,就打算用树莓派来做一个打印机服务器,废话不说,教程走起!!! 准备工作: 1.连接网络的树莓派 2.usb接口的打印机 虽然很多文章提到了raspberry树莓派如何安装cups实现共享打印机服务,但是我自己试下来发现HP …

Linux系统HPLIP-GUI网络打印驱动正确安装方法及配置

文章目录 前言一、准备工作二、驱动安装三、驱动配置后记前言 在Linux系统中安装网络打印机真不是一件简单的事情,Unix/Linux的核心打印服务CUPS至今都没有一个独立完善的GUI图形界面,只能通过网页浏览器访问http://localhost:631(或者https://localhost:631)网页界面来快…