DETR

整体介绍:https://zhuanlan.zhihu.com/p/348060767

关于损失函数和二分图的匹配: 【论文】DETR_大白羊_Aries的博客-CSDN博客_detr object query

物体检测思路:首先使用CNN提取特征然后使用Transformer来检测物体,与之前的目标检测框架下相比,这篇文章的工作要简单很多。而且没有特别多需要调整的超参

前向过程:图1

  • 首先输入CNN提取特征,提取到的特征图仍然具有图像的形式,只是通道数更深,尺寸更小,可以把特征图视为更高层次的特征表达
  • 输入transformer encoder-decoder
  • 输出一系列的框(set of box predictions),这个box是一个元组里面存储了类别c和框的位置,这box的类别可能为空(具体是空还是零我也不知道torch.zeors??),那么就代表这个box内没有物体。

训练:使用二分图匹配损失 - bipartite matching loss

  • 一张输入图片里有两只海鸥
  • 经过前向网络现在有N组prediction (c,b),这是一个固定的值,因为我们想要保证检测框的目标不要遗漏,
    • 所以现在的情况是这样,这张图片里其实只有两个目标
  • 我们将label 做成2个海鸥label,并pad出N-2个背景label ,保证gt的数量与prediction的数量相等
  • 使用匈牙利算法匹配每一个gt,匈牙利匹配算法的评估指标就是这个二分图匹配损失,具体来说,如果prediction A 和 labels B的类别不相同,bbox的位置也是千里迢迢,这个loss就hi很大,反之亦然。这个过程中还隐藏了一个惩罚手段,考虑一直海鸥被多次预测的情况,在匈牙利匹配算法中,一个gt只能被一个prediction匹配,那么多余的prediction只能去匹配pad出的背景类,那么就会造成一个相对大的loss。这时就可以理解为网络正在惩罚这种情况的发生。
  • 这里没提到DETR的匈牙利匹配具体是怎么做的,我需要再看一下

Transformer内部

  • 将特征图和位置编码结合 positional encoding,因为trnasformer接受的是序列化的输入
  • 展平为HW * C这样的特征序列
  • 输入encoder 得到相同长度的特征序列
  • decoder除了接受encoder的输出之外,还会接受一组object queries 长度为n,decoder的输出长度也为n ,与object queries的长度相同

object queries 究竟是什么?

  • 一组随机的向量
  • 没错,这很悬,根据这位老师的说法,this is so deep learning,当然也有一个很好的解释
  • 随机向量n就好像n个人在对同一张图的不同特征提问,这也是这个向量叫queries的原因,对应attention is all your need里的Q
  • 有个人会对图像中左边的目标感兴趣,有的人会对上面的目标感兴趣,有的人可能会对大尺寸的目标感兴趣等等
  • 我们将这n个问题输入到decoder里面,得到n个V(transformer的那个V),然后经过deocder的注意力模式整合这些特征,比如确实发现了图片中左边有目标+发现图片上边有目标 = 图片的左上有目标。
  • 从这里能看出来,object queries需要很不一样,最好能覆盖整个数据集的所有特征,课程中一直提到这些object queries是训练出来的,具体我也不知道是怎么训练出的。

文章的最后也设计了一个全景分割的网络模型搭建

———————————————————————————————————————————

Deformable DETR

DETR存在两个问题:

1)网络的设计中没有特征金字塔,在检测小物体的性能上相对较差,但一味的提高图像分辨率会带来无法接受的计算复杂度,因为DETR是全局注意力计算的Transformer,计算复杂度和图像尺寸成二次方比例关系

2)全局注意力的计算带来的另一个问题是,训练时间过长。导致训练时间过长的原因:根据self-attention的原始公式

图1

这里面的dk是跟图像尺寸成正比关系的,如果在训练之前采用了合适的初始化方式,QK两个向量的分布基本会在(0,1)那么过大的分子会使得注意力分布图在初始化阶段无限接近于0。虽然在经过训练之后,attention能够成功集中在那些有关联的物体上,但是这个训练过程耗时过长。

针对性的提出了解决方案:

1)借鉴FPN引入多尺度的特征,具体来说就是将同一张特征图分别下采样两次,然后在这3张特征图上针对同一点计算3轮attention,这个具体实现我后面会提到。

2)如果计算复杂度太高,就舍弃了全局计算attention的设计,转而采用就近计算,同时加入多个偏移,其实我觉得这么设计是合理的,因为目标不会出现在距离太远的物体上,swin transformer也是遵循的这个思路

重头戏:有关具体实现

下面是建立在你已经熟悉了Transformer的概念和self-attention以及DETR的基础之上的。

如果忘了也不必担心,这里我放两个链接,有助于你快速回忆起来,相关概念不是很难,可以快速上手。

https://zhuanlan.zhihu.com/p/44121378

https://blog.csdn.net/longxinchen_ml/article/details/86533005

不熟悉DETR的同学可以直接去读原论文,那篇文章写的真是太牛逼了,没有太多复杂的概念

下面进入正题。

首先,对于一个经典的多头注意力的self-attention模块,他的计算应该是这样的。

其中m代表多头注意力的个数

Wm :每个注意力头的权重

是一个可训练的权重 在于xk相乘之后,得到了图1中的V

的计算如下

其中U ; V都是可以训练的权重矩阵

zq * U对应了图1中的Q ,在self-attention的情况下,zq 可以被xk的转置替换。但是在cross-attention的时候,zq与xk的转置是不同的。

我打红色圈圈的位置是在进行self-attention的计算,即同一组数据x会被复制为3份输出到Multi-Head Attention模块分别去计算QKV三个向量。

我打蓝色圈圈和绿色圈圈的地方在进行的就是cross-attention计算,具体来说由encoder来提供attention计算所需的K和V这两个向量,由decoder来提供Q这个向量,这也是transformer中encoder和decoder之间的信息交互方式。

Vm * Xk对应了图1中的K

最终还会经过一个softmax归一化到(0,1)之内。

具体概念就是算出向量z与特征图x之间的关系。

在看懂了式(1)之后,再看Deformable Attention Module的设计应该就不难理解了

参照原文给出的参考图片

式(2)中的代表了基础采样点的选取位置,就是左下角 Input Feature map中那个红点。

则是Head1或Head2或Head3中的三个偏移量,换句话式2中的K = 3对应了三个偏移,M =3,对应了三个Head。

那么问题就来了,这三个偏移量是怎么产生的呢?

是根据Query Feature Zq经过线性变换产生的,Zq如果在cross-attention中就是decoder中输入的序列,如果在self-attention中,就是C*HW的向量。

总之,C向量会在经过线性变换之后产生一个通道数为3MK的向量,其中2Mk会被用于产生offset,在中就是9个offset,每个offset有两个方向所以乘2。

另外MK会被用于产生,这里的产生方式就与经典的Transformer有很大不同。这里面就产生了3*3 = 9个权重,分别代表了Head1中的各个offset与zq之间的密切程度。

图中Aggreagte就是相乘再相加。

当然,还有一个问题没有解决,那就是多尺度的问题

所以文中进一步提出了Multi-scale Deformable Attention Module

式(3)中进一步添加了一个L求和 和一个这样一个变换

L就代表将原feature map下采样了l次,

为了保证一致性,如(0,0)就代表了当前特征图的左上角,(1,1)就代表了当前特征图的右下角

是根据feature map的尺寸进行放缩的变换

下图中,就采用了三种不同尺度的特征图

这也是整个模型的流程图,里面的紫色三角点,紫色原点,红色方格点,和右边的decoder里面的三种不同颜色的矩形框框代表啥,红色线红色图形红色框之间有啥联系,不知道你能不能理解,反正我是理解不了,你能理解了教教我,球球了

DETR - Deformable DETR - Conditional DETR相关推荐

  1. DETR、conditional DETR、Deformable DETR

    DETR是将transformer机制应用到目标检测领域的算法模型.其主要思想是利用transformer的encoder-decoder架构,利用注意力机制来实现端到端获得目标检测的结果. DETR ...

  2. 通过显式寻找物体的 extremity 区域加快 DETR 的收敛:Conditional DETR

    关注公众号,发现CV技术之美 本文系52CV粉丝Charles投稿. 原文:https://zhuanlan.zhihu.com/p/401916664 在这篇文章,我们解读一下我们发表在 ICCV ...

  3. Deformable 可变形的DETR

    Deformable 可变形的DETR This repository is an official implementation of the paper Deformable DETR: Defo ...

  4. 论文阅读:DEFORMABLE DETR:DEFORMABLE DETR: DEFORMABLE TRANSFORMERSFOR END-TO-END OBJECT DETECTION

    题目:DEFORMABLE DETR:DEFORMABLE DETR: DEFORMABLE TRANSFORMERSFOR END-TO-END OBJECT DETECTION 来源:ICLA 是 ...

  5. 计算机视觉算法——基于Transformer的目标检测(DETR / Deformable DETR / DETR 3D)

    计算机视觉算法--基于Transformer的目标检测(DETR / Deformable DETR / DETR 3D) 计算机视觉算法--基于Transformer的目标检测(DETR / Def ...

  6. Deformable DETR: DEFORMABLE TRANSFORMERSFOR END-TO-END OBJECT DETECTION(论文阅读)

    Deformable DETR 是商汤Jifeng Dai 团队于2021年发表在ICLR 上的文章,是针对Detr 的改进. 论文:<DEFORMABLE DETR: DEFORMABLE T ...

  7. 【Transformer】Deformable DETR: deformable transformers for end-to-end object detection

    文章目录 一.背景和动机 二.方法 三.效果 四.可视化 论文链接:https://arxiv.org/pdf/2010.04159.pdf 代码链接:https://github.com/funda ...

  8. Conditional DETR浅析

    文章目录 一:创新点 二:源码实现 一:创新点 这篇论文首次提出了对content_q和pos_q的解耦运算,为DAB-DETR和DN-DETR打下了基础. 论文主要解决Detr收敛速度慢的原因,故作 ...

  9. DETR与Deformable DETR小结

    DETR与deformable DETR小结 DETR Deformable DETR DETR 论文地址https://arxiv.org/abs/2005.12872 论文解读 DETR将检测视为 ...

最新文章

  1. 10通信端口感叹号_BFC 系列 数字光纤放大器通信转换器代理报价
  2. linux centos 使用 alpine 编译的二进制文件 报错 /lib/ld-musl-x86_64.so.1: bad ELF interpreter 解决方法
  3. [转][linux]简单的linux下的tcp/udp
  4. asp.net mvc请求响应模型原理回顾
  5. UA MATH565C 随机微分方程V 无穷小生成算子
  6. c++预处理命令#pragma 用法
  7. 服务器内存不认硬盘_8分钟了解服务器硬件知识
  8. java 8 删选集合 和取集合中的字段重组成集合的使用
  9. Vb.Net实现图片合并(相框效果)
  10. html辅助方法以及常用属性值,ASP.NET MVC 2博客系列之一:强类型HTML辅助方法
  11. python使用phantomJS循环for爬取多个页面时,解决内存持续变大而报错“ConnectionResetError: [WinError 10054]远程主机强迫关闭了一个现有的连接”的问题
  12. Struts2中的ModelDriven机制及其运用
  13. SQL server 2008 中的五个系统数据库详解
  14. 艰难时局下电子发现蓬勃发展
  15. Java网络编程IO模型 --- BIO、NIO、AIO详解
  16. 给小朋友讲故事——第一次世界大战(音频)
  17. Centernet 生成高斯热图
  18. 《小岛经济学》八、金本位的破灭、房地产的泡沫
  19. 写论文 参考文献引用 谷歌学术 规范格式 一键生成
  20. Vue3.0的插槽是如何实现的?

热门文章

  1. CountDownLatch的await和countDown方法简单分析
  2. Servlet和JavaBean开发(VO)(javaWeb第二部分)
  3. RK3288 android7.1.2 i2c 出现timeout 超时错误分析
  4. 国钦智能科技携卫生级阀门管路管件解决方案,亮相2022生物发酵展
  5. android服务中定时清理,Android中(Service )服务的最佳实践——后台执行的定时任务...
  6. (4)统一流程管理平台----企业中存在的流
  7. POJ 3311--佛洛依德枚举
  8. sourceinsight教程
  9. 无线路由器WDS设置方法图解(无线…
  10. 控制安卓手机物理返回键