DETR:vision transformer在目标检测中的应用

End-to-End Object Detection with Transformers

一些需要掌握的前提知识:
  •  bipartite matching:二部匹配,即在两个集合之中进行匹配,在本文占用主要是解决目标检测中ground truth集合,和模型预测的结果集合predict的匹配问题。
     一种用来解决这种匹配的算法叫匈牙利算法,可以点击传送门了解,匈牙利算法是一种解决二分图的匹配问题的算法。

基于Transformer的目标检测算法基本架构,来自facebook AI
基本的框架

由上面的图形可以看到,整个模型可以分为4个部分,backbone,encoder,decoder和FFN
1. backbone

 一般的对于一个批次的输入为 ( B , C , H 0 , W 0 ) (B,C,H_0,W_0) (B,C,H0,W0),这个输入通过一个基本的CNN卷积网络(这个网络又可以叫做backbone),用作特征提取,然后最后得到的特征图经过了一个 1 ∗ 1 1*1 11的卷积,把通道的数量变成了 d d d,即特征图变成了 ( B , d , H , W ) (B,d,H,W) (B,d,H,W),一般要把H_0这个d也就是嵌入维度的值(当然也可以是其他的值),可以这样理解,变换过后的一张图片有HW个维度,每个维度的特征是一个256维的矩阵。然后回经过一次reshape,可以变为 ( B , H W , d ) (B,HW,d) (B,HW,d),并且需要注意的是原文中提取到的特征为 d = 2048 , H = H 0 32 , W = W 0 32 d=2048,H=\frac {H_0} {32},W=\frac {W_0} {32} d=2048,H=32H0,W=32W0
 接着就要对这个进行位置编码,可以得知此时对于一张图片来说已经是一个H
W维度的序列了,其中每一个维度的编码为d维的向量,这时我们就要对其加入位置编码,和原始transformer中的位置编码不尽相同。
原始transformer中的编码如下:
P E ( p o s ) = { s i n ( p o s 1000 0 i d m o d e l ) i f   i 为 偶 数 c o s ( p o s 1000 0 i − 1 d m o d e l ) i f   i 为 奇 数 注 : 使 用 三 角 函 数 是 因 为 三 角 函 数 的 性 质 既 可 以 考 虑 到 绝 对 位 置 又 可 以 考 虑 到 相 对 位 置 c o s ( α + β ) = c o s ( α ) ∗ c o s ( β ) − s i n ( α ) ∗ s i n ( β ) s i n ( α + β ) = s i n ( α ) ∗ c o s ( β ) + c o s ( α ) ∗ s i n ( β ) 通 过 这 些 公 式 可 以 通 过 位 置 k 的 先 行 表 达 来 表 示 位 置 k + x PE(pos)= \begin{cases} sin\left( \cfrac {pos}{10000^{\frac{i}{d_{model}}}}\right) \quad if\, i为偶数 \\ cos\left( \cfrac {pos}{10000^{\frac{i-1}{d_{model}}}}\right)\quad if\,i为奇数 \end{cases}\\ 注:使用三角函数是因为三角函数的性质既可以考虑到绝对位置又可以考虑到相对位置\\ cos(\alpha + \beta)=cos(\alpha)*cos(\beta)-sin(\alpha)*sin(\beta)\\ sin(\alpha+\beta)=sin(\alpha)*cos(\beta)+cos(\alpha)*sin(\beta)\\ 通过这些公式可以通过位置k的先行表达来表示位置k+x PE(pos)=sin(10000dmodelipos)ificos(10000dmodeli1pos)ifi使cos(α+β)=cos(α)cos(β)sin(α)sin(β)sin(α+β)=sin(α)cos(β)+cos(α)sin(β)kk+x
原始transformer中由于是对文本作为输入,但是一张图片包含了两个维度的方向和序列的信息,因此作者在两个方向分别都进行了位置编码如下:
P E ( p o s ) = { s i n ( p o s 1000 0 i d / 2 ) i f   x i 或 者 y i 为 偶 数 c o s ( p o s 1000 0 i − 1 d / 2 ) i f   x i 或 者 y i 为 奇 数 可 以 理 解 为 对 x 和 y 方 向 分 别 都 进 行 了 位 置 编 码 并 且 思 路 一 样 , 从 而 能 够 保 持 x , y 两 个 方 向 的 局 部 特 性 和 序 列 特 性 。 这 个 注 意 力 位 置 编 码 会 在 每 一 个 注 意 力 层 中 被 主 动 的 加 入 。 ( 虽 然 我 不 知 道 这 和 一 开 始 加 入 的 区 别 , 应 该 是 效 果 更 好 ) PE(pos)= \begin{cases} sin\left( \cfrac {pos}{10000^{\frac{i}{d/2}}}\right) \quad if\, x_i或者y_i为偶数 \\ cos\left( \cfrac {pos}{10000^{\frac{i-1}{d/2}}}\right)\quad if\,x_i或者y_i为奇数 \end{cases}\\ 可以理解为对x和y方向分别都进行了位置编码并且思路一样,从而能够保持x,y两个方向的局部特性和序列特性。\\ 这个注意力位置编码会在每一个注意力层中被主动的加入。(虽然我不知道这和一开始加入的区别,应该是效果更好) PE(pos)=sin(10000d/2ipos)ifxiyicos(10000d/2i1pos)ifxiyixyxy()

除了以下的三点,其他的都和原始的Transformer一样:
  1. 输入编码器的位置编码需哟考虑2-D的空间位置
  2. 位置向量编码需要加入到每一个Encoder中
  3. 在编码器的内部位置编码 P o s i t i o n a l E n c o d i n g Positional Encoding PositionalEncoding仅仅作用于 Q u e r y Query Query K e y Key Key,即只和 Q u e r y Query Query K e y Key Key但是不和 V a l u e Value Value相加
    结构接着我们来看一下解码器:
    DETR和原来的版本的也有一些不同,具体如下面的两个:
  • 其中间的注意力层输入的是Encoder输出的Embedding和位置编码和前一层的输入之和
  • 最底部有一个object queries
    其中 object queries是一个维度为(B,100,d)的矩阵,这个100是最终可以预测的框的数量,这个可以被看做是一个可以连续的位置的编码。
    可以在上图很明显的看出来,解码器的第一层的输入来自于:
     1. 一开始输入的维度为*(B,100,d)的张量和 o b j e c t q u e r i e s object queries objectqueries相加 − > K & Q ->K\&Q >K&Q。这时候 K 和 Q : ( B , 100 , d ) K和Q:(B,100,d) KQ:(B,100,d)
     2. 一开始输入的维度为
    (B,100,d)的张量 − > V ->V >V。这时候 V ( B , 100 , d ) V(B,100,d) V(B,100,d)
    解码器的第二层和之后的层的输入为:
      开始前,前一层的Q和前一层注意力输出的Q进行了一次Add & Norm残差连接。这时候维度为: ( B , 100 , d ) (B,100,d) (B,100,d)
     1. 一开始输入的维度为
    (B,100,d)的张量(充当位置编码)残差连接的结果相加 − > Q ->Q >Q。这时候Q的维度为(B,100,d)
     2. (编码器输出的 K e n c o d e r + 加 固 定 的 位 置 编 码 K_{encoder}+加固定的位置编码 Kencoder+) − > K ->K >K,编码器输出的 V e n c o d e r V_{encoder} Vencoder − > V ->V >V。这时候V和K的维度都是: ( B , H W , d ) (B,HW,d) (B,HW,d)
     3. 一开始输入的维度为
    (B,100,d)*的张量和 o b j e c t   q u e r i e s object \,queries objectqueries相加 − > K & Q ->K\&Q >K&Q

待续。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值