【无标题】读DETR


目标检测领域:从目标检测开始火到detr都很少有端到端的方法,大部分方法最后至少需要后处理操作(NMS,non-maximum suppression非极大值抑制)

无论是proposal based方法、anchor based方法、non-anchor based方法,最后都会生成很多预测框,如何去除这些冗余的框就是NMS要做的事情,

问题:

1、而有了NMS,模型调参就会很复杂,

2、而且即使训练好了一个模型,部署起来也非常困难(NMS不是所有硬件都支持)

引入:

所以一个简单的、端到端模型一直是大家梦寐以求的,detr解决了这些痛点

原因:

1、不需要proposal、不需要anchor,直接利用transformer这种全局建模的能力,把目标检测看做是集合预测问题

2、因为有了这种全局建模的能力,detr不会有那么多冗余框,最后出什么结果就是什么结果,不需要NMS做后处理,让模型的训练和部署简单不少

目的:不想让大家觉得目标检测是比图像分类难很多的任务,都可以用简单的,优雅的框架做出来

集合预测:目标检测本来任务就是给定一个图像,预测一堆框,每个框不仅要知道的其坐标,还要知道框里包含物体的类别,这些框就是一个集合,不同的图像对应的集合也是不同的,给定一个图片,我要预测这个集合

贡献:

1、把目标检测做成一个端到端的框架,

把之前特别依赖人的先验知识的部分删掉了(NMS部分、anchor),一旦把这两个部分拿掉之后,我们也不用费尽心思设计这种anchor,最后不会出现这么多框,不会用到NMS,也不会用到很多超参去调

detr提出:

2、新的目标函数,通过二分图匹配的方式,强制模型输出一组独一无二的预测(没有那么多冗余框,每个物体理想状态下就会生成一个框)

3、使用encoder-decoder的架构

两个小贡献:

1、decoder还有另外一个输入learned object query,类似anchor的意思

(给定这些object query之后,detr就可以把learned object query和全局图像信息结合一起,通过不同的做注意力操作,从而让模型直接输出最后的一组预测框)

2、想法&&实效性:并行比串行更合适,并不是检测一个大物体前必须先检测一个小物体,或从左到右检测,我们希望越快越好

DETR的好处:

1、简单性:想法上简单,不需要一个特殊的library,只要硬件支持transformer或CNN,就一定支持detr

2、性能:在coco数据集上,detr和一个训练非常好的faster RCNN基线网络取得了差不多的效果,模型内存和速度也和faster RCNN差不多

3、想法好,解决了目标检测领域很多痛点,写作好

4、别的任务:全景分割任务上detr效果很好,detr能够非常简单拓展到其他任务上

Facebook research的代码一般都非常好

引言

1、目标检测任务:对每一个感兴趣的物体,去预测一些框,和物体类别,就是一个集合预测问题

2、现在大多数好用的目标检测器,都是用间接的方式去处理集合预测问题,(1)比如proposal方式(如RCNN系列工作),(2)anchor方式(YOLO系列,focal loss),non-anchor based方法(物体中心点center net,FCOS),他们都没有直接做集合预测任务,而是设计一个替代(回归、分类)解决目标检测问题。所有这些方法性能受限于后处理操作(NMS),由于用了anchor和NMS导致检测器都非常复杂,难以优化和调参

3、端到端的思想已经在别的很多任务里大范围使用,而且使任务更加简单好用,我们不要先验知识,就是要用一个端到端网络

dert流程:

1、用 卷积神经网络去抽取一个特征,拉直成向量,
2、送到transformer的encoder-decoder中做特征的强化,encoder作用:进一步学习全局信息,为近下来的decoder,也就是最后出预测框做铺垫
这样的话图片中每个点都会跟图片的其他特征有交互,知道哪一块是哪个物体,对于同一个物体来说,就指出一个预测框而不是重复多个。
全局特征有利于去移除冗余的框

3、decoder生成框的输出,当你有了图像特征之后,还会有一个object query(限定了你要出多少框),通过query和特征在decoder里不停地交互、进行自注意力操作,得到输出的框(文中是100,无论是什么图片都会预测100个框)???没懂这里

4、怎么和ground truth做匹配然后得到loss呢?看成集合预测的问题,用 二分图匹配,计算100个预测的框和2个GT框的matching loss,决定100个预测框哪两个是独一无二对应到红黄色的GT框,匹配的框去算目标检测的loss
然后才会像普通的目标检测一样去计算分类的loss和banding box的loss,没有匹配到ground truth的框,剩下的98个,就被标记为背景类

训练和推理过程

训练的时候需要算二分图匹配的loss,推理的时候第四步不需要算loss,直接在输出的时候用阈值去卡一下置信度,置信度大于0.7的预测,就会被保留下来,作为前景物体
都没有anchor生成的一步,都没有NMS

dert结果 优点、缺陷、训练速度慢有待改进

1、大物体预测好,归功于transformer,做全局的建模
原来使用anchor会受限于anchor的大小
2、小物体上效果不太OK,模型还需要时间去进化,需要后续工作来优化
3、detr训练很慢,500个epoch(coco大多数模型一般训练几十个epoch就行)

相关工作

目标检测:

根据初始猜测做预测:

1、two-stage:初始猜测是中间的proposal

2、one-stage:初始猜测是anchor或物体中心点

最近一篇论文做了详细比较,发现他们的性能和刚开始的初始猜测非常相关,怎么做后处理对性能影响至关重要

怎么后处理:

1、集合思想set-based loss:可学习的NMS方法、关系型网络,可以利用自注意力方法去处理物体之间的联系,得出独一无二的预测,就不需要后处理的步骤(性能较低)
为了跟比较好的方法的性能对齐,
解决:人工干预:手工设计的场景特征帮助模型学习,但是detr目标是想让目标检测任务更加简单,不希望用到过多人工先验知识

2、循环检测器recurrent detector:之前有用 用encoder-decoder架构做目标检测、实例分割,15、16年的工作,用的都是RNN,自回归时效性差,性能较差

让detr工作主要原因:使用了transformer,不带掩码的decoder,获得全局信息,时效性增强。
之前有 基于集合的目标函数,backbone出来的特征不够强,性能不够好,还得依赖一些先验知识或者人工干预
detr的成功还是transformer的成功

五、方法

分两块:1、基于集合的目标函数怎么做,作者如何通过二分图匹配把预测的框和GT框连接在一起,算得目标函数
2、detr具体模型架构

基于集合的目标函数

才能达到一对一的出框方式,才能不需要NMS

detr模型最后输出是一个固定集合,无论图片是什么,最后都会输出n个(本文n=100)

问题:detr每次都会出100个输出,但是实际上一个图片的GT的bounding box可能只有几个,如何匹配?如何计算loss?怎么知道哪个预测框对应GT框?
转化为二分图匹配问题(任意两条边都不依赖于同样的顶点)

百科举例:分配工人干活,让最后支出最小
遍历都可以选出最佳分配方法,匈牙利算法
scipy包提供的linear sum assignment,输入是cost matrix,就能算出一个最优的排列(最优解)
detr论文里:代码也用的linear sum assignment函数

a,b,c看成100个预测框,x,y,z看成GT框,损失矩阵未必都是正方形

目标检测中,cost matrix 的值应该放些什么?loss包含两部分:分类loss、出框的准确度
遍历所有的预测框,去和GT的框去算这两个loss
把loss放到cost matrix ,

出的框越大,L1_loss越大, loss大不利于优化
还用了一个跟框大小无关的目标函数 generlized iou loss

基于loss构建cost matrix来计算最优匹配,再将匹配上的loss回传。
先算最优匹配,在最有匹配的基础上算loss,基于集合预测的目标函数,和GT中的框一一匹配,不需要NMS后处理

detr主体网络框架(图2:图1的升级版)

object query(限定了你要出多少框)

learnable embeddeding
850x256作为key和value,100x256(object query)作为query
object query替代了生成anchor的机制,二分图匹配替代了NMS这一步

训练和推理(推理其实就是把训练好的模型在没见过的数据集上work)

训练(Training)
打个比方,你现在想要训练一个能区分苹果还是橘子的模型,你需要搜索一些苹果和橘子的图片,这些图片放在一起称为训练数据集(training dataset),训练数据集是有标签的,苹果图片的标签就是苹果,橘子亦然。一个初始神经网络通过不断的优化自身参数,来让自己变得准确,可能开始10张苹果的照片,只有5张被网络认为是苹果,另外5张认错了,这个时候通过优化参数,让另外5张错的也变成对的。这整个过程就称之为训练(Traning)。

推理(Inference)
你训练好了一个模型,在训练数据集中表现良好,但是我们的期望是它可以对以前没看过的图片进行识别。你重新拍一张图片扔进网络让网络做判断,这种图片就叫做现场数据(live data),如果现场数据的区分准确率非常高,那么证明你的网络训练的是非常好的。我们把训练好的模型拿出来遛一遛的过程,称为推理(Inference)

原文链接:https://blog.csdn.net/weixin_43135178/article/details/117885165

Ground truth、Bounding box、anchor box

作者:冰很烫
链接:https://www.zhihu.com/question/521559167/answer/2386284858
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Ground truth是真实标注框,也就是人工标注,一般被看作“真值”Bounding box一般认为(为什么是一般认为,原因参照下面一段最后括号中的内容)是网络最终预测的结果,也就是“可能值”,因为网络可能预测正确也可能错误
Anchor box被称作预选框,anchor的机制会更复杂一些,有许多帖子来专门讲解这个。总的来说就是在图像上会按照一定的规律放置一些anchor,网络会学习anchor相对于ground truth的偏移量,我们可以把anchor看作bounding box的“爷爷”,anchor+/-/×/÷偏移量所得到的框是bounding box的“父亲”,“父亲”经过非极大值抑制(NMS)之后就是bounding box了(但是也可以说“父亲”就是bounding box了,只是因为“父亲”很少出现在这个领域的相关内容中,所以一般说bounding box的时候指的是NMS之后的结果)IOU在不同的阶段会代表不同目标之间的交并比,比如在训练阶段需要判断anchor是正样本还是负样本,这个时候就需要用ground truth和anchor box计算IOU。在推理预测阶段进行NMS操作的时候,又要计算“父亲”每个框的IOU来进行合并删除操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值