ECCV2020-DETR笔记

article/2025/9/23 22:48:50

ECCV2020-DETR-End to End Object Detection with Transformers

arxiv

[打开本地pdf](eccv2020-DETR-End to End Object Detection with Transformers.pdf)

github仓库

DETR的卖点是End-to-End, 它没有复杂的后处理,把目标检测问题当作集合预测问题,直接输出框(只是转换cxcywh和乘宽高)。大致的流程为

  1. cnn抽取特征

  2. 把特征送入transformer encoder-decoder, 输出N(本文N=100)个预测

  3. 训练时把这N个预测和gt做二分图匹配,匹配上的"预测-gt对",计算loss

  4. 预测时输出置信度大于阈值的框
    在这里插入图片描述
    稍微细节一点的流程举例如下
    在这里插入图片描述

  5. 如输入是3x800x1066的图片,经过cnn backbone后,输出2048x25x34的图像特征, 宽高降采样为1/8

backbone = nn.Sequential(*list(resnet50(pretrained=True).children())[:-2])
x = backbone(inputs)  # bx2048x25x34
  1. 这里需要一个transformer做encoder, decoder, 设置隐藏层维度hidden_dim为256,encoder, decoder内有6层,8头
transformer = nn.Transformer(256, 8, 6, 6)
  1. 图像特征需要transformer隐藏层保持一个维度, , 输出的图像特征维度是256x25x34
conv = nn.Conv2d(2048, 256, 1)
h = conv(x)  # bx256x25x34
  1. 图像特征要被拉平为序列,序列本身缺乏位置信息,需要给他们加上位置编码,位置编码其实就是一组维度和序列相同的向量,每个位置唯一即可(这里是根据论文的伪代码改编的,实际的代码里还是用的sine和learned), 维度须和图像特征一致
row_embed = nn.Parameter(torch.rand(25, 256 // 2))
col_embed = nn.Parameter(torch.rand(34, 256 // 2))
pos = torch.cat([col_embed.unsqueeze(0).repeat(25, 1, 1),    # bx25x34x128row_embed.unsqueeze(1).repeat(1, 34, 1)     # bx25x34x128
], dim=-1)                                      # bx25x34x256
  1. 将图像特征和位置编码融合(detr实际代码中,位置编码加在qk上, 这里的伪代码是在qkv都加了)。
pos = pos.flatten(0, 1).unsqueeze(1) # 850x1x256
h = h.flatten(2).permute(2, 0, 1)    # 850xbx256
encoder_input = pos + h              # 850xbx256
  1. transformer输出100个预测(设置的),decoder需要100个query, 维度也是256
object_query = nn.Parameter(torch.rand(100, 256))  # 100x256
object_query = object_query.unsqueeze(1)           # 100x1x256
tout = transformer(encoder_input, object_query)    # 100xbx256
  1. 全连接把100个预测转化为置信度和框坐标, 就是上图中的FFNs(Prediction Feed-forward networks)
linear_class = nn.Linear(256, 91)
linear_bbox = nn.Linear(256, 4)
logits = linear_class(tout)   # 100xbx91
bboxes = linear_bbox(tout)    # 100xbx4

DETR使用scipy.optimize.linear_sum_assignment来做预测和gt的匹配,它的输入是cost matrix,对于一张图就是100xnum_gt的矩阵,i行j列的值为第i个预测与第j个gt的loss, 它返回的是一组匹配的索引,这组匹配的总loss是所有可能的匹配中最小的。

在这之前需要计算每个预测和每个gt的loss,它包含

  • 分类loss: -prob[target_class]

  • L1loss: torch.cdist(out_bbox, target_bbox, p=1)

  • giou loss:

    • 在这里插入图片描述

为了好收敛吧,它在每层decoder的输出都算了loss, 辅助loss是一种常见的trick。

它最好的DETR-DC5-R101的AP=44.9,不如当时最好的检测网络(coco ap=58 huawei 2020-06-11), 他达到了detectron2中 Faster RCNN的水平,下表第一组是detectron中 Faster RCNN,第二组是使用了和DETR一样的训练策略,loss的Faster RCNN. 最后一组为DETR. 注意DETR-DC5-R101和Faster RCNN-R101-FPN+, 参数量相同,gflops相近,但是fps却只有faster rcnn一半,说明相同参数量和计算量下是比faster rcnn慢的。也说明参数量,gflops和速度fps没有直接的关系。DETR和第二栏的faster rcnn+比较,APL要高6个点,APS要低4个点,说明DETR对小物体表现差,对大物体表现好,毕竟没有加FPN之类的结构,也没有针对小物体做针对处理。
在这里插入图片描述
它对encoder的层数做了消融实验,层数越多,精度越高
在这里插入图片描述
对decoder的层数也做了实验,decoder层数越多,就越接近使用nms的性能
在这里插入图片描述
他们可视化了encoder中的自注意力,就是选择下图中4个参考点,并绘制出整图各位置和参考点的自注意力(应该是softmax(qk)),自注意力高的位置接近牛的分割mask了,他想说明encoder的自注意力学到了目标物的区域。
在这里插入图片描述
还可视化了decoder中object_query的注意力,表明decoder更关注物体的边缘区域。
在这里插入图片描述
下面这个消融实验非常有意思,spatial pos表示encoder部分的位置编码,output pos其实是object_query, 就是那100个query, 这是必须要使用的. encoder中spatial pos加在qk上,decoder中加在k上,output pos加在decoder的q上。

  • sine表示使用sin cos的位置编码

  • learned表示使用位置序号乘以可学习的weight作为位置编码

  • at input表示只加在输入上 (标准的transfomer)

  • at attn表示加在输入和encoder或decoder所有中间层上

  • none表示不使用位置编码

在这里插入图片描述
不使用spatial pos也有32的ap, 使用了spatial pos有明显提升(AP32->39), 最好的结果来自于每层都加位置编码,比标准的transformer(只加在输入)好1.4(AP39.2->40.6), spatial pos用sine at attn比用learned at attn好1.0(AP39.6->40.6)

在loss中,giou loss的提升最大, 下表AP35.8->39.9
在这里插入图片描述

DETR给了一份可读性很高的伪代码,很好滴帮助理解detr,前面的详细步骤也是照这个伪代码改的。过去也有人用集合预测做过目标检测,但是不work,detr 能work的主要原因还是在transfomer上. DETR给端到端的目标检测做了一个很好的示范。
在这里插入图片描述


http://chatgpt.dhexx.cn/article/NNMsfPrX.shtml

相关文章

ECCV2022 论文最全汇总!附下载

大家好,我整理了 CVPR2022 和 ECCV2022 的代码和论文 https://github.com/DWCTOD/CVPR2022-Papers-with-Code-Demo https://github.com/DWCTOD/ECCV2022-Papers-with-Code-Demo 我将 CVPR2022 所有论文汇总并上传到网盘上,受到挺多小伙伴的喜欢&#xff…

ECCV22 最新论文汇总(目标检测、图像分割、监督学习、GAN等)

强烈感谢极市平台提供的论文资源 ECCV 2022 已经放榜,共有1629篇论文中选,录用率还不到20%。为了让大家更快地获取和学习到计算机视觉前沿技术,作者对ECCV2022最新论文进行追踪,包括分研究方向的论文及代码汇总。 本次更新的 ECCV…

ECCV2020超分辨率方向论文整理笔记

ECCV2020超分辨率篇 ECCV的全称是European Conference on Computer Vision(欧洲计算机视觉国际会议) ,是计算机视觉三大顶级会议(另外两个是ICCV]和CVPR)之一,两年一次在欧洲召开。 ECCV2020超分方向有24篇,涉及图像超…

ECCV 2020 图像增强论文汇总

本文盘点 ECCV 2020 中底层图像处理方向相关的论文,包含:图像增强、图像恢复、去摩尔纹、去噪和质量评价论文,总计 29 篇,去摩尔纹 2 篇,去噪 10 篇,图像增强 7 篇,图像恢复 9 篇,质…

ECCV 2018 论文下载及分析(774篇全)

ECCV2018 收录论文整理,共774篇。 百度云链接:https://pan.baidu.com/s/1Mg0Kw9bepUK6_vqqVSOjNQ ,密码:mh97。 以下是下载后的文件: 以下是文件名对应的论文名称: 序号 文件名论文题目1Aaron_Gokaslan_I…

WDNet—2020ECCV

论文题目: Wavelet-Based Dual-Branch Network for Image Demoireing 基于小波变换的双分支图像去摩尔纹网络 1. Introduction 提出了一种基于小波和双分支神经网络的去摩尔纹方法,同时提出了一种空间注意机制direction perception module(DPM )方向感…

新鲜出炉!ECCV2022 107个开源数据集合辑,全球 AI 研究热点一网打尽

两年一度的ECCV2022终于在万众瞩目下召开啦,相信有不少小伙伴们对今年ECCV发布的新方向、新算法和新数据集十分感兴趣。今天小编从数据集的角度入手,给大家精选了ECCV2022发布的8个数据集,囊括了庞大的标注数据和新奇又有趣的任务&#xff0c…

ECCV2022 Workshop | 复杂环境中的多目标跟踪和分割

点击上方“3D视觉工坊”,选择“星标” 干货第一时间送达 来源丨CVer 本文主要介绍我们将在ECCV2022举办的workshop:复杂环境中的多目标跟踪和分割 多目标跟踪和分割任务是在视频中定位和关联感兴趣的目标,是城市监控、公共安全、视频内容理解…

ECCV 2020 best paper: RAFT算法解析

ECCV 2020 best paper: RAFT 作者‖ flow 编辑‖ 3D视觉开发者社区 3D开发者社区该文链接‖ https://mp.weixin.qq.com/s/IknaCBVllJZI0pGZA6iANw 导语: RAFT这篇文章荣获了ECCV 2020的best paper,可以说实至名归,也将在光流领域…

ICCV、ECCV、CVPR三大国际会议

目录 前言 一、ICCV、ECCV、CVPR是什么? 1.ICCV 2.ECCV 3.CVPR 二、三大会链接及论文下载链接 前言 作为刚入门CV的新人,有必要记住计算机视觉方面的三大顶级会议:ICCV,CVPR,ECCV,统称为ICE。 与其它学术领域不同&#xff0…

计算机视觉会议(CVPR,ECCV,ICCV,NIPS,AAAI,ICLR等)

文章目录 前言CVPRICCVECCVNIPSAAAIICLRICJAI链接汇总表格直达 前言 大家都知道,计算机视觉和人工智能领域发展非常迅速,大部分最新的工作都首先发表在顶级会议上,这些顶级会议反映了当前的最新研究方向和最新方法。本文主要介绍一下CVPR&am…

计算机视觉三大会议--ICCV、CVPR、ECCV简要介绍

计算机视觉三大会议–ICCV、CVPR、ECCV简要介绍 ICCV 英文名:IEEE International Conference on Computer Vision 中文名: IEEE国际计算机视觉大会 时 间: 两年一次(奇数年),通常在四到五天。第一届ICCV会…

ICCV, ECCV, CVPR,IEEE的关系

计算机视觉领域世界三大顶级会议分别为CVPR、ICCV和ECCV。 CVPR CVPR,英文全称IEEE Conference on Computer Vision and Pattern Recognition,中文全称是国际计算机视觉与模式识别会议。这个会议是由IEEE主办的一年一度的全球学术性顶级会议&#xff…

计算机视觉方面的三大顶级会议:ICCV,CVPR,ECCV(统称ICE)

ICCV/CVPR/ECCV发论文的难度,相当于顶级SCI期刊 和目前国内评价学术水平是以在学术期刊发表SCI论文的情况不一样,大家要注意:在计算机视觉方向,会议论文 > 期刊论文(在重要程度上来说) 原因是&#xff…

OPA 4 - createButtonTest

Created by Wang, Jerry on Nov 08, 2015

OPA 22 - sinor fake xml http request

Created by Wang, Jerry, last modified on Nov 08, 2015 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

OPA 20 - deliberately generate an error

Created by Wang, Jerry, last modified on Nov 08, 2015 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

OPA 18 - iTeardownMyAppFrame

Created by Wang, Jerry, last modified on Nov 08, 2015 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

OPA 1 - testsuite.opa.html

Created by Wang, Jerry, last modified on Nov 08, 2015 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

Change code to ensure that OPA5 work also in WebIDE

Created by Wang, Jerry, last modified on Jul 06, 2016