看本文之前,可以先看一下之前的文章:计算机视觉"新"范式: 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加快收敛速度。

在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的残差,逐级叠加得到最后的检测框。

另外,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匹配检测框和目标框切换频繁。

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

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

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。

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

上图就是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等经典的检测算法了。

图(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的学习。

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

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

Mask DINO

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

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预测部分做了适应性的细节修改。

从上表中可以看出,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

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

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

  1. 深度学习(6)之卷积的几种方式:1D、2D和3D卷积的不同卷积原理(全网最全!)

    深度学习(6)之卷积的几种方式:1D.2D和3D卷积的不同卷积原理(全网最全!) 英文原文 :A Comprehensive Introduction to Different Types of Co ...

  2. 深度学习mask掩码机制

    目录 mask掩码机制作用 mask 使用方法 参考文献 mask掩码机制作用 在原始张量上盖上一层掩膜,以达到屏蔽或选择特定元素的目的. 结构特征提取:用相似性变量或图像匹配方法检测和提取图像中与掩 ...

  3. 【Django】项目中调用深度学习模型model.predict()(Django两种启动方式runserver和uwsgi的区别)

    目录 问题 测试 解决方法 Django两种启动方式runserver和uwsgi的区别 问题 部署含有深度学习模型的Django项目的uWSGI.Nginx服务器的时候,所有模块都可以正常运行,也可 ...

  4. 深度学习总结:DQN原理,算法及pytorch方式实现

    文章目录 Q-learning原理图 Q-learning算法描述: pytorch实现: Q-network实现: DQN实现: 2个Q-network,其中一个为target Q-network: ...

  5. 关于深度学习中concat和eltwise两种特征融合方式用处的猜想

    在对网络不同地方的特征进行融合时,尤其是在深层网络融合浅层网络的特征的时候我们需要用到这两种融合方式,这两者的使用有有什么区别吗? 在实际中,直接使用eltwise将当前的深层特征与浅层的特征融合时效 ...

  6. lambda学习视频和stream学习视频(Java8 Lambda表达式视频教程)-Java爬虫-网络购物的正确打开方式

    百度网盘 链接:https://pan.baidu.com/s/1upU5EVXOQeho6poDYdnhiQ 提取码:088l Java8 Lambda表达式视频教程 https://www.bil ...

  7. 【Skill】NHK 的正确打开方式 / 如何优雅的学习 NHK

    音频 官网下载:地址 F12 查找 地址去掉参数直接下载即可. Tampermonkey 脚本 地址:音频下载脚本 使用方法:在该页面长按 ` (反引号)5 s 后开启脚本,点击需要下载的音频在右边弹 ...

  8. 深度学习的权重衰减是什么_【深度学习理论】一文搞透Dropout、L1L2正则化/权重衰减...

    前言 本文主要内容--一文搞透深度学习中的正则化概念,常用正则化方法介绍,重点介绍Dropout的概念和代码实现.L1-norm/L2-norm的概念.L1/L2正则化的概念和代码实现- 要是文章看完 ...

  9. 深度学习-各种归一化(Batch Norm、Layer Norm、Group Norm、InstanceNorm、Spatially-Adaptive Norm)

    深度学习之归一化:BN.LN.GN.IN.SPADE 0.总述 0.1.为什么要归一化处理 0.2.大体上看BN.LN.IN.GN 1.批量归一化(Batch Normalization,BN) 1. ...

  10. Python深度学习篇

    Python深度学习篇一<什么是深度学习> Excerpt 在过去的几年里,人工智能(AI)一直是媒体大肆炒作的热点话题.机器学习.深度学习 和人工智能都出现在不计其数的文章中,而这些文章 ...

最新文章

  1. Ubuntu18.04:错误整理
  2. 为什么说21世纪是一场ABC的革命?
  3. 一致性hash算法虚拟节点_Hash算法和一致性Hash算法
  4. Redis BitMap适应场景
  5. oracle bi publisher 安装,Oracle BI Publisher 企业版安装后的配置(BI Publisher Enterprise Edition)...
  6. java运行环境(JRE)
  7. 【干货】单日10亿GMV的.NET5电商平台,是如何设计的?
  8. 企业级SpringBoot教程(十一)springboot集成swagger2,构建Restful API
  9. html入门的一些东西
  10. 无需服务端的多平台同步利器(btsync)
  11. Cloud 2.0时代,华为云EI助力内蒙煤焦化产业走向智能
  12. 《最重要的事,只有一件》读书笔记
  13. javax.validation校验整理
  14. PDF旋转使用的转换器有哪些
  15. 优锘科技:森模型插件上新:BIM秒变轻量化,模板任选效果
  16. 奇安信 测试开发岗位 面经 2019.9.11(秋招)
  17. UI设计中面性图标设计总结
  18. “5G通达,AI赋能“ AI在网络规划中的应用实践(人工智能应用案例)
  19. windows常用脚本bat合集
  20. 【天池】优惠券使用预测

热门文章

  1. 拳皇重生服务器维护,用Kaillera打造拳皇等街机服务器教程
  2. T32使用-----抓取rpm dump
  3. 2016一路有你,2017一起同行
  4. php 操作 PSD,PHP中怎么使用Imagick操作PSD文件
  5. QT进行Word文档读写
  6. Python中的Bunch模式
  7. 【Redis】Redis缓存穿透和雪崩
  8. 台式电脑出厂编号怎么查_出厂编号的查询方法
  9. 在Linux系统中增加一块SCSI硬盘,重新启动计算机。
  10. 父级fixed_子元素使用position:fixed,导致他的宽度不能和父元素保持一致的解决方案...