(自用学习笔记)detr

概述

detr是一个端到端的目标检测的方法,该模型使用 Transformer 替代了复杂的目标检测传统套路,它既不需要proposal也不需要anchor,无需nms来去除冗余的框,使模型的训练和部署都变得简单了。

detr 将目标检测任务看作集合预测问题, 对于一张图片,固定预测一定数量的物体(原作是100个),模型根据这些物体对象与图片中全局上下文的关系直接并行输出预测集, 也就是 Transformer 一次性解码出图片中所有物体的预测结果,这种并行特性使得 DETR 非常高效。

模型

一次大概的前向过程:输入图片通过卷积神经网络提取特征然后拉直,送入transformer encode中学习全局的特征(使用transformer encode的好处就是模型对图片有了一个全局的建模,对于一个物体就只应该出一个框而不是100个框全出在一个物体上了),(图中没有画出object query)通过query和特征在decode中做自注意力操作,然后得到最终的输出。

基于集合的目标函数(贡献)

在得到100个预测框之后我们该怎么去计算loss呢,这里给到的一个解决方法是二分图匹配,论文中使用的是匈牙利算法,大概意思就是有很多工人和工作,该怎么分配这些工人可以使得花销最少。那这里工人可以看成是预测框,工作是真实框,那cost matrix中的值就是对应的loss,一个是分类的loss,还有一个是出框的loss,这样的好处就是强制要得到一个一对一的关系,这样就可以免去nms的后处理操作。在知道了哪些框和真实框是对应的之后就可以计算真正的loss了。

右边那个出框的loss使用了l1loss和generalized iou loss的合体来计算的,因为l1loss跟框的大小有关,而detr对大物体很友好,而generalized iou loss的大小与框无关。

详细模型

这幅图是上面那副图的详细版本,这里画出了object query,在decode里面一个输入是encode出来的全局特征,还有一个是object query,主要的用处就是每一个query相互通信,大概知道每一个query出框的位置,这样就不会重复了,还有一个细节就是可以在每一个decode后面加上loss,这样可以更快的收敛,因为进出decode的维度不变,每一个decode出来的值都可以拿去做预测(原作中是6个decode堆叠的)。

集合预测

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

总结

特点: 端到端:去除了NMS和Anchor,没有那么多的超参数,计算量的大大减少,整个网络变得很简单;

基于Transformer:首次将Transformer引入到目标检测任务当中; 提出一种新的基于集合的损失函数:通过二分图匹配的方法强制模型输出一组独一无二的预测框,每个物体只会产生一个预测框,这样就讲目标检测问题之间转换为集合预测问题,所以才不用NMS,达到端到端的效果;

而且在decoder输入一组科学的object query和encoder输出的全局上线特征,直接以并行方式强制最终输出的100个预测框,替代了anchor;

缺点: 对大物体的检测效果很好,但是对小物体的监测效果不是很好;训练起来比较慢; 由于query的设计以及初始化等问题,DETR模型从零开始训练需要超长的训练时间;

优点: 在COCO数据集上速度和精度和Faster RCNN差不多;可以扩展到很多细分的任务中,比如分割、追踪、多模态等; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值