搞懂DEtection TRanformer(DETR)

文章目录

  • 1 bipartite matching loss
  • 2 模型总体框架
    • 2.1 backbone
    • 2.2 transformer
      • 2.2.1 encoder
      • 2.2.2 decoder
      • 2.2.3 prediction heads
  • 3 模型效果
  • 参考文献

本文描述了笔者在阅读了一些文献之后,对 End-to-end Object Detection with Transformers(DETR) 的理解。DETR是一个令人非常兴奋的目标检测模型,它在思路上完全不同于现有的state-of-art的那些目标检测模型,让人对目标检测这个任务重新思考。一句话概括一下,DETR就是一个不用nms不用anchor,流程非常简洁明了,且基于transformer的state-of-art的目标检测模型。

1 bipartite matching loss

在讲这篇论文之前,先来说一个这篇论文的精华思想——bipartite matching loss。假设我们现在有两个sets,左边的sets是模型预测得到的NNN个元素,每个元素里有一个bbox和对这个bbox预测的类别的概率分布,预测的类别可以是空,用ϕ\phiϕ来表示;右边的sets是我们的ground truth,每个元素里有一个标签的类别和对应的bbox,如果标签的数量不足NNN则用ϕ\phiϕ来补充,,ϕ\phiϕ可以认为是background。

两边sets的元素数量都是NNN,所以我们是可以做一个配对的操作,让左边的元素都能找到右边的一个配对元素,每个左边元素找到的右边元素都是不同的,也就是一一对应。这样的组合可以有N!N!N!种,所有组合记作σN\sigma_NσN。这个NNN即是模型可以预测的最大数量。

bipartite matching

我们的目的是在这所有的N!N!N!种中,找到使得LmatchL_{match}Lmatch最小的那个组合,记作σ^\hat{\sigma}σ^

Lmatch=−1{ci≠ϕ}p^σ(i)(ci)+1{ci≠ϕ}Lbox(bi,b^σ(i))L_{match} = -\mathbf{1}_{\{c_i \neq \phi\}}\hat{p}_{\sigma (i)}(c_i) + \mathbf{1}_{\{c_i \neq \phi\}}L_{box}(b_i, \hat{b}_{\sigma (i)}) Lmatch=1{ci=ϕ}p^σ(i)(ci)+1{ci=ϕ}Lbox(bi,b^σ(i))

其中,1\mathbf{1}1是示1符号,后面括号的内容为真时取值1,否则取值0;iii表示ground truth中的第iii个元素;cic_ici是ground truth中的第iii个class,即classiclass_iclassibib_ibi是ground truth中的第iii个bbox,即bboxibbox_{i}bboxiσ(i)\sigma(i)σ(i)是某个组合中ground truth第i个元素对应于predictions中的index;p^σ(i)\hat{p}_{\sigma(i)}p^σ(i)表示prediction中第σ(i)\sigma(i)σ(i)个probs,即probsσ(i)probs_{\sigma(i)}probsσ(i)b^σ(i)\hat{b}_{\sigma(i)}b^σ(i)表示prediction中的第σ(i)\sigma(i)σ(i)个bbox,即bboxσ(i)bbox_{\sigma(i)}bboxσ(i)

写成目标函数的形式就是

argminσ∈σN∑iNLmatch(yi,y^σ(i))argmin_{\sigma \in \sigma_N} \sum_{i}^{N} L_{match} (y_i, \hat{y}_{\sigma(i)}) argminσσNiNLmatch(yi,y^σ(i))

其中的yyy可以看成class和bbox的一个组合。

σN\sigma_NσN中找使得LmatchL_{match}Lmatch最小的那个组合的方法用的是Hungarian算法,这里不展开说,总之就是一个高效的可以帮我们找到最有最优σi\sigma_{i}σi的启发式算法。

这里还有一个没有说到的就是LboxL_{box}Lbox。由于文章中所使用的方法是没有预先设计好的anchor的,是直接预测bbox的,所以如果像其他方法那样直接计算L1L_1L1 loss的话,就会导致对于大的框和小的框的惩罚力度不一致,所以文章在使用L1L_1L1 loss的同时,也使用了scale-invariant的IoU loss。

Lbox(bi,b^σ(i))=λiouLiou(bi,b^σ(i))+λL1∣∣bi−b^σ(i)∣∣1L_{box}(b_i, \hat{b}_{\sigma (i)}) = \lambda_{iou}L_{iou}(b_i, \hat{b}_{\sigma (i)}) + \lambda_{L_1}||b_i - \hat{b}_{\sigma(i)}||_1 Lbox(bi,b^σ(i))=λiouLiou(bi,b^σ(i))+λL1bib^σ(i)1

其中, λiou\lambda_{iou}λiouλL1\lambda_{L_1}λL1是超参数。

注意这里的LmatchL_{match}Lmatch是帮我们找最小组合的时候,Hungarian算法所使用的loss,并不是训练模型的loss,并不是训练模型的loss,并不是训练模型的loss!!!

找到match之后,训练模型用的loss是

LHungarian(y,y^)=∑1N[−logp^σ^(i)(ci)+1{ci≠ϕ}Lbox(bi,b^σ(i))]L_{Hungarian}(y, \hat{y}) = \sum_{1}^{N} [-log\hat{p}_{\hat{\sigma} (i)}(c_i) + \mathbf{1}_{\{c_i \neq \phi\}}L_{box}(b_i, \hat{b}_{\sigma (i)})] LHungarian(y,y^)=1N[logp^σ^(i)(ci)+1{ci=ϕ}Lbox(bi,b^σ(i))]

注意这里和LmatchL_{match}Lmatch的区别,在于从−1{ci≠ϕ}p^σ(i)(ci)-\mathbf{1}_{\{c_i \neq \phi\}}\hat{p}_{\sigma (i)}(c_i)1{ci=ϕ}p^σ(i)(ci)变成了−logp^σ^(i)(ci)-log\hat{p}_{\hat{\sigma} (i)}(c_i)logp^σ^(i)(ci)。也就是说我们在找match的时候,把和ground truth类别一致的,且bbox最接近的预测结果对应上就完事了,其他那些ϕ\phiϕ,模型预测出来啥,我match并不关心。但是在算训练模型的Hungarian loss时,就不一样了,我不希望模型会预测出乱七八糟的结果,ϕ\phiϕ就是ϕ\phiϕ,没有就是没有,别整得似有似无的,该ϕ\phiϕ的时候预测出东西了,就要惩罚你。因为我预测的时候可是没有ground truth的,我没法知道哪几个是对的了。

至于为啥不在LmatchL_{match}Lmatch的时候就用logloglog,作者解释说是为了和LboxL_{box}Lbox相对称,经验的结果。我估计是用了logloglog的话,Hungarian算法计算量会变大吧。

2 模型总体框架

DETR的模型架构非常简单,所以这也使得它在几乎所有深度学习框架下都可以实现,只要有CNN和transformer就可以了。总体框架如下图所以,可以拆分为backbone,encoder,decoder和prediction heads四个部分。
DETR architecture

2.1 backbone

backbone就是一个传统的CNN模型,作用是抽取图片的特征信息。假设输入是H0×W0×3H_0 \times W_0 \times 3H0×W0×3的一张图片,那么输出就是一个H32×W32×2048\frac{H}{32} \times \frac{W}{32} \times 204832H×32W×2048的一个特征,记作H×W×CH \times W \times CH×W×C

2.2 transformer

encoder,decoder和FFN共同构成了transformer,如下图所示,和经典的transformer没有太大的区别,结构上没什么要说的,不了解transformer的小伙伴可以参见我的另一篇博客 – 搞懂transformer。用attention来做的好处就是,attention可以看到全局的信息,大框小框,不管什么奇形怪状的框,分分钟给你搞出来。
transformer

2.2.1 encoder

encoder会接收图像特征,但是在此之前也会过一下一个1×11 \times 11×1的CNN,用来给特征层压缩,从CCC降到ddd。又因为encoder吃的是一个序列,所以还要把这个H×W×CH \times W \times CH×W×C的拉成HW×CHW \times CHW×C
然后把这个特征和一个用于提供图像位置信息的positional encodings一起作为encoder的输入。

2.2.2 decoder

decoder的输入是encoder的输出,positional encodings以及一个叫做object queries的向量。这个object queries是个比较神奇的东西,它是学出来的。我们先来看一下在这些object queries下,预测出来的框是什么样子的。
object queries

上图中,每个图都是一个object query在COCO 2017 val set预测出来的框的结果。图中的每个点都是一个框的中心点,绿色表示小框,红色表示横向的大框,蓝色表示纵向的大框。可见每个query都有自己的特点,比如第一个query会一直问左边的小框里是什么,第二个会问中间的大框是什么,等等。我们可以把每个object query看成一个关注于某个区域,某些大小物体的提问者。然后这些提问者就是模型训练出来的提问者,各有所长。

2.2.3 prediction heads

最后的prediction heads就是几层全连接,用来输出预测的类别和框的位置大小。

3 模型效果

不管模型里有多少奇思妙想,最终的效果才是真家伙,是我们最关心的。那么这个DETR的效果如何呢?作者在COCO数据集上把DETR和Faster RCNN做了比较,下表就是比较的结果。
result
表中两个区域都是Faster RCNN,backbone还都是重复的,别急,这个不是作者顺手多复制了几行。上面的是Detectron2的Faster RCNN的结果,中间的是用了GIoU, random crops train-time augmentation和the long 9x training schedule这些技巧的Faster RCNN的结果,最下面自然是DETR的结果。可见DETR和用了各种技巧的Faster RCNN效果差不多,还是很棒的。

得益于其独特的loss,DETR对于相邻的实例有着很好的区分效果。从下图中可以看出,attention学的很棒。
attention pic
不够看的话,我们再来看一副把attention对应到原图上的。attention很机智的把物体的边界给学出来了。
attention pic2
除此之外,DETR还可以拓展到全景分割。这块我没怎么看,这里就不细讲了。

参考文献

[1] End-to-end Object Detection with Transformers
[2] https://www.youtube.com/watch?v=T35ba_VXkMY
[3] https://www.kaggle.com/tanulsingh077/end-to-end-object-detection-with-transformers-detr

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四、PHP框架Laravel学习笔记——路由命名和分组

一.路由命名 给一个制定好的路由进行命名,可以生成 URL 地址或进行重定向; Route::get(task, TaskControllerindex)->name(task.index); 在控制器区域,使用助手函数 route()来获取路由生成的 URL 地址; //生成 ur…

echart 数据点可以加链接吗_地理可视化就这么简单、酷炫,蚂蚁金服AntV 空间数据可视化引擎 L72.0发布...

导读L7 是由蚂蚁金服 AntV 数据可视化团队推出的基于 WebGL 的开源大规模地理空间数据可视分析开发框架。L7 中的 L 代表 Location,7 代表世界七大洲,寓意能为全球位置数据提供可视分析的能力。L7 以图形符号学为理论基础,将抽象复杂的空间数…

论文阅读 - Large-scale weakly-supervised pre-training for video action recognition

文章目录1 概述2 数据的收集方式3 使用的模型4 预训练时的一系列问题4.1 预训练的数据是不是越多越好?4.2 用于预训练的模型是不是越大越好?4.3 预训练数据的标签种类和数量是不是越多越好?4.4 用于预训练的每个video有长有短,时长…

excel记账本模板_原来这才是老板最喜欢看的财务报表!这些模板送你,录入自动生成...

【原来这才是老板最喜欢看的财务报表!这些模板送你,录入自动生成】都说财务报表做好,会计下班会很早!财务报表做的妙,升职加薪少不了!会计每到下班拖后腿的就是要整理好各种报表然后发给领导,会…

五、PHP框架Laravel学习笔记——回退、当前路由、单行为

一.单行为控制器 之前的课程,我们简单的创建和定义了控制器,并继承了控制器基类;为何要继承基类?因为继承基类后,可以使用基类的方法,比如中间件等;继承基类后除了支持中间件快捷使…

Chapter7-7_Deep Learning for Coreference Resolution

文章目录1 什么是coreference resolution2 框架2.1 Mention Detection2.2 Mention Pair Detection2.3 End-to-End2.4 Span Representation2.5 Pratical Implementation2.6 Result3 应用本文为李弘毅老师【Deep Learning for Coreference Resolution】的课程笔记,课程…

pwn和逆向的区别_Pwn之简单patch

亲爱的,关注我吧9/27文章共计1389个词图片xue微有点多注意流量哦预计阅读7分钟来和我一起阅读吧1引言在攻防的时候不仅仅需要break,还需要fix将漏洞patch上。2工具 这里我使用的是keypatch这个ida脚本下载地址:https://github.com/keystone-engine/keypatch/blob/ma…

python n个list如何组成矩阵_通过学习在processing中操作图片,掌握python 列表操作...

这次的教学非常简单,只需要安装了python模式的processing就可以(安装教程见专栏目录)。我从网上找了一个比100*100稍微大一点的图片,你可以也找一个。然后我们就可以一起开始今天的学习啦~(请先阅读本专栏中的processi…

六、PHP框架Laravel学习笔记——响应设置和重定向

一.响应设置 路由和控制器处理完业务都会返回一个发送到浏览器的响应:return;比如字符串会直接输出,而数组则会输出 json 格式,本身是 Response 对象; return [1, 2, 3]; //输出 json 格式 return respo…

论文阅读 - TransNet and TransNet V2

文章目录1 概述2 模型结构简述2.1 TransNet2.2 TransNet V23 数据集的构建4 模型效果5 参考文献1 概述 有些时候,一段视频是由多段短视频拼接而成的。拼接可以是直接拼接(硬拼接,见图2),也可以是由一个转场过渡拼接&a…

工厂方法模式及php实现

工厂方法模式: 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共…

Chapter7-8_Deep Learning for Constituency Parsing

文章目录1 什么是Constituency Parsing2 解决方案2.1 Chart-based Approach2.2 Transition-based Approach2.3 Grammer as Foreign Language本文为李弘毅老师【Deep Learning for Constituency Parsing】的课程笔记,课程视频youtube地址,点这里&#x1f…

html插入flash代码_初学者必备Web开发APP,支持代码补全,一键插入代码,厉害了!...

新手学前端神器,HTML代码补全功能太牛了!讲过学习后端的许多优秀APP,这次来推荐一下前端用的软件。前端,包含了HTMLCSSJavaScript这一整套的流程,缺一不可。其实,市面上用来编写前端的优秀APP有很多&#x…

七、PHP框架Laravel学习笔记——资源控制器

一.资源控制器 声明:资源控制器是某个特定场景下的产物,完全理解需要 PHP 项目基础;比如开发过博客系统,留言帖子系统之类,具有类似思维,否则你懂的…;只是学习了 PHP 基础&#xf…

留言板练习

这个练习做下来发现大体的步骤怎么走怎么做基本清晰&#xff0c;能实现可是做的很糙&#xff0c;没有老师细致……好多需要判断的地方没有想到 denglu.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DT…

Chapter7-9_Deep Learning for Dependency Parsing

文章目录1 什么是Dependency Parsing2 模型结构本文为李弘毅老师【Deep Learning for Dependency Parsing】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来自于李宏毅老师的PPT&#xff0c;若有侵权&#xff0c;必…

八、PHP框架Laravel学习笔记——表单伪造和 CSRF 保护

一&#xff0e;表单伪造 之前一直用的 GET 请求方式&#xff0c;而表单可以实现 POST 方式&#xff0c;我们来实验下&#xff1a; 先在 TaskController 创建两个方法&#xff0c;一个表单页&#xff0c;一个接受表单数据路由&#xff1b; public function form() { return v…

高通的快充协议_高通:后续骁龙旗舰将标配100W快充

高通于昨晚正式推出了Quick Charge 5充电解决方案&#xff0c;经过3年时间的准备&#xff0c;高通这一次在Quick Charge快充的升级可谓重磅&#xff0c;在功率上实现了重大突破&#xff0c;达到了100W。官方数据显示&#xff0c;高通Quick Charge 5的性能较前代平台显著提升&am…

团队作业(六)

团队项目设计文档 1、系统框图 用户对手机进行设置&#xff0c;包括时间和解锁方式轨迹。手机对用户进行闹铃提醒&#xff0c;同时提供解锁方式。手机对数据库发送数据以保存响铃时间&#xff0c;数据库对手机提供响铃时间信息。 系统框图如下&#xff1a;2、系统结构框图 项目…

Chapter7-10_Deep Learning for Question Answering (1/2)

文章目录1 什么是Question Answering(QA)2 按答案分类2.1 答案是一个单词2.2 答案是多个选项2.3 答案是source中的一段话2.4 答案是生成的一段话3 按source分类3.1 source是网页3.2 source是图片或者视频3.3 source是语音3.4 source是视频本文为李弘毅老师【Deep Learning for …