首页 > 其他分享 >End-to-End Object Detection with Transformers论文阅读笔记

End-to-End Object Detection with Transformers论文阅读笔记

时间:2023-05-26 22:34:01浏览次数:43  
标签:GT Transformers 预测 匹配 hat Object mathcal End sigma

摘要

作者提出了一种新的基于Transformer的目标检测模型DETR,将检测视为集合预测问题,无需进行nms以及anchor generation等操作。同时,对模型进行简单的修改就可以应用到全景分割任务中。

方法

Object detection set prediction loss

DETR给出的是N个预测,N为预先设定的远大于GT目标框数量的一个值,难点在于根据GT对这些预测框进行评分。作者在这里对预测框与GT进行二分图匹配,从而计算损失。具体来说,设\(y\)为GT集合,\(\hat{y}=\{\hat{y_i}\}_{i=1}^N\)为N个预测结果,为了满足二分图完美匹配的条件,作者将GT集合的大小同样扩充为N,多出来的部分用no object来补足。之后,使用匈牙利算法找到一组完美匹配(完美匹配一定是最大匹配),用这一组匹配计算损失(这里的目的实际上是找到一组最小的损失,进行取负之类的操作就可以转换成求最大匹配了)。
截屏2023-05-25 11.46.03.png
匹配的损失需要同时考虑类别分数以及预测框和GT的相似度。对于GT集合中的每个边界框,可以将其看作\(y_i=(c_i,b_i)\),\(c_i\)表示类别标签,\(b_i\in [0,1]^4\)表示边界框的相对图像的中心坐标和长宽。对于下标为\(\sigma(i)\)的预测结果,设其预测为\(c_i\)类别的概率为\(\hat{p}_{\sigma(i)}(c_i)\),预测框为\(\hat{b}_{\sigma(i)}\),\(\mathcal{L}_{match}(y_i,\hat{y}_{\sigma(i)})\)可以表示为\(-\mathbb{1}_{c_i\neq ∅}\hat{p}_{\sigma (i)}(c_i)+\mathbb{1}_{c_i\neq ∅}\mathcal{L}_{box}(b_i,\hat{b}_{\sigma(i)})\),最终的匈牙利损失可以表示为:
\(\mathcal{L}_{Hungarian}(y,\hat{y})=\sum_{i=1}^N[-\log\hat{p}_{\sigma (i)}(c_i)+\mathbb{1}_{c_i\neq ∅}\mathcal{L}_{box}(b_i,\hat{b}_{\sigma(i)})]\)。在实际训练时,对于\(c_i=\)no object的对数概率的权重设置为原来的1/10,从而避免类别不平衡的问题。需要注意的是,如果一个预测框匹配到no object,这个匹配的损失是常数0。对于bounding box的损失\(\mathcal{L}_{box}(b_i,\hat{b}_{\sigma(i)})\)定义为\(\lambda_{iou}\mathcal{L}_{iou}(b_i,\hat{b}_{\sigma(i)})+\lambda_{L1}||b_i-\hat{b}_{\sigma(i)}||\),这是因为直接计算两个框中心的L1 loss的话,两个框即便中心相近,大小很有可能存在较大差异,因此作者选择使用IoU loss与L1 loss的线性组合。

DETR architecture

截屏2023-05-26 17.27.25.png
网络使用了一个CNN作为特征提取器,使用Transformer对特征进行编码/解码,将输出送入FFN进行预测。

Backbone

backbone为CNN,对三通道RGB图像\(x_{img}\in \mathbb{R}^{3\times H_0\times W_0}\)提取得到大小为\(2048\times \frac{H_0}{32}\times \frac{W_0}{32}\)的特征。

Transformer encoder

首先通过1x1卷积将输入特征的通道维度降为d,之后将其维度转换为\(d\times HW\),与位置编码相加后送入标准的Transformer。

Transformer decoder

decoder同样是标准的Transformer,只不过解码的是N个可学习的query,这些query经过解码后送入FFN就得到了N个预测的box。使用这N个query以及image feature计算注意力可以使模型捕捉到每两个query之间的关系,同时引入了整个图像的上下文信息。

Prediction feed-forward networks (FFNs)

最终的预测通过一个三层的FFN实现。FFN分为两种,一种预测类别概率,一种预测边界框回归参数。类别概率中包含一个no object类,起到的作用类似background。

Auxiliary decoding losses

在训练时作者还使用了辅助损失,可以参考https://ojs.aaai.org/index.php/AAAI/article/view/4182

实验

实验比较有趣的是DETR在全景分割中的应用。作者首先训练模型分辨每个边界框属于stuff还是things,之后使用mask head对于每个框预测一个mask,对于每个像素的所有mask scores求argmax就能得到最终的结果:
截屏2023-05-26 22.12.43.png

具体过程可以看官方代码https://github.com/facebookresearch/detr/blob/main/models/segmentation.py的PostProcessPanoptic函数。

标签:GT,Transformers,预测,匹配,hat,Object,mathcal,End,sigma
From: https://www.cnblogs.com/lipoicyclic/p/17435991.html

相关文章

  • nginx 配置中的sendfile 的作用
    http{...sendfileon...}sendfile配置的具体意思:设置为on表示,使用零拷贝技术来传输文件:sendfile,这样只需要2次上下文切换,和2次数据拷贝。设置为off表示,使用传统的文件传输技术:read+write,这时就需要4次上下文切换,和4次数据拷贝。当然,要使用sendfil......
  • IPQ8072 or IPQ8072A with the QCN9074/9024 chipset / well-suited for high-end rou
    TheIPQ8072andIPQ8072AarebothpowerfulnetworkingSoCs(System-on-Chip)designedbyQualcommforhigh-performancerouters,enterpriseWi-Fiaccesspoints,andothernetworkingequipment.ThesechipsarepartofQualcomm'sNetworkingProseriesan......
  • js中使用Object.assign方法给对象赋值
    原先的this.addForm.strPrice=resPrice.result.strPricethis.addForm.price=resPrice.result.pricethis.addForm.priceId=resPrice.result.priceId现在的只需一句代码搞定Object.assign(this.addForm,resPrice.result)减少代码冗余,提高项目的可维护性。......
  • ZOJ 3960 What Kind of Friends Are You?(模拟)
    传送门给你几个人,然后下i行对应的是回答出来第i个问题的人,最后询问回答出来了哪几个问题的是谁。用一个map,存名字和数字,回答出的问题编号也转化为2进制,然后转化为10进制,这样的话每个人回答出的问题就对应的是一个数字,询问的时候也把2进制的串转化为10进制,这样的话比对就比较方便。......
  • POJ 2080 Calendar
    题目链接:http://poj.org/problem?id=2080题目不是很难,也没什么说的,直接看代码吧:#include<iostream>#include<stdio.h>usingnamespacestd;intyear(intm){ if(m%4==0&&m%100!=0||m%400==0) return1; else return0;}intmain(){ intn,i,j......
  • FLEX SharedObject介绍及应用
    以下内容是对网上一些资料的总结FlexSharedObject介绍(Flash的本地共享对象是在用户机器上实现持久化存储的数据集合。Flash可以从程序中控制这些数据集合,向其中存入或者从中读取大量的信息数据。使用SharedObject对象对象说明:SharedObject(共享对象)可以看作是小型的数据库,我......
  • RUBY-FLEX实践—利用swfobject在RUBY工程中加载SWF
    开发环境:Ruby:Ruby1.9.1Rails:Rails2.3.5IDE:RubyMine2.0.1FlexBuilder:FlexBuilder4 开发思路:1)在FlexBuilder中创建Flex工程2)在RubyMine中创建Rails工程3)将Flex工程bin-debug下编译的swfobject.js拷贝至Ruby工程指定位置4)引用Flex工程编译后的html中的内容实现在Rails页面中嵌......
  • vue iview render函数渲染table表头和列表内容
    1computed:{2tableColumns(){3return[4{5title:"封面",6key:"pageImage",7render:(h,params)=>{8returnh("img",{9style:{10......
  • Win10专业版下如何禁用Windows Defender功能?
    操作步骤如下:1、Win键+R,运行cmd,打开命令提示符;  2、打开“命令提示符(管理员)”,然后输入:regadd“Hkey_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsDefender”/v“DisableAntiSpyware”/d1/tREG_DWORD/f  3、在重启电脑之后,可以看到各种Windows......
  • FLEX4实践—动态生成DataGrid及应用客户化itemRenderer
    应用场景:1)从后台取到的数据为数组类型,但数据的列名及列个数均是动态的2)抽取到的数据中有些是DATE类型的,如果直接显示在DataGrid中默认格式很难让用户接受,希望对特殊类型的数据(如日期)进行格式转换处理 下面的例子将模拟这一场景:数据准备:gridColumns1搭配gridProvider1,gridColumns2......