Oriented Object Detection with Transformer阅读笔记

(一) Title

在这里插入图片描述
前言: 本文没有开源,但是最近我有实现一个基于Transformer的Detector的想法,因此还是决定看下这个论文,然后再基于DETR构建一个基于Transformer的旋转框目标检测方法,怎么说呢?公式里的每一个符号我都能看懂,但是合到一起就看不懂了,而且看完这个论文的感受很不好,有太多疑问了,希望之后能够开源代码吧。
论文地址:https://arxiv.org/abs/2106.03146
代码地址:没开源

(二) Summary

背景

DETR相比于传统的detectors(Faster R-CNN)这些有了competitive的表现,但是基于其他问题的研究还比较少,本文选定了旋转框目标检测的问题来看DETR的表现效果。

本文的主要工作

  • 提供了解决旋转框目标检测的一个新方法,不需要使用rotated anchors
  • 构建了一个更加高效地encoder,使用Depthwise Separable Convolution替代注意力机制,从而实现来实现减小内存和计算消耗,需要看下性能上的变化
  • 成为旋转框目标检测中的一个新的benchmark,本文的SOTA是fine-tune the head mounted on O2DETR通过一个级联的module来提升性能。

(三) Problem Statement

目前在旋转框目标检测任务上,基于不带角度旋转的anchors回归存在问题(主要由于在航空DOTA数据集上旋转框又小,带有角度倾斜,并且很密集),使用预设旋转anchors的方法在旋转框的回归以及使用NMS的后处理上计算很复杂,目前已有的基于anchor-free的旋转框算法使用heatmap来预测中心点位置,但是密集场景下,heatmap预测的能力是比较有限的(注:这里是博主自己从heatmap的原理上分析的,不一定正确)
本文整体思路:作者在本文中看到了DETR在目标检测任务中的应用,并进行扩展,增加了angle维度的信息来进行旋转框目标的预测,最终通过bipartite matching实现object queries同GTs的one-by-one匹配。对应的整体框架如下所示
在这里插入图片描述
此外在DOTA数据集中的一个明显的问题是不同类别之间的scale差别很大,非常有必要引入多尺度的feature map,然而对于多尺度特征来说,transformer的注意力机制计算量很大,作者指出注意力机制带来的是global reasoning的能力,而全局推理实际上是没有必要的,因为同一类别的对象总是聚集在一起,往往只跟周边的视觉特征关联交互,而不是全局图像的视觉特征,这里地方存疑。因此作者使用depthwise separable convolutions代替Transformer中的self-attention mechanism,减少计算量并实现快速收敛。

(四) Research Object

本文基于DETR引入了角度,同时将boxes预测看成是set prediction问题,使用depthwise convolution来替换Transformer中的self-attention。

(五) Method

本文的主要工作为:

  • 使用separable depthwise convolution替代attention机制实现一个更加高效的Transformer 这里我有一个想法,使用MAE来训练这个编码器,然后给看看效果可不可

5.1 Depthwise Separable Convolution and Attention

这里需要解决的问题是:怎么将原先的Attention使用Depthwise Separable Convolution来替换?需要回顾下Depthwise的原理,以及关注这里的替换方式
首先就是Depthwise Separable Convolution方式
标准卷积的运算方式为:

Conv

(

W

,

y

)

(

i

,

j

)

=

k

,

l

,

c

K

,

L

,

C

W

(

k

,

l

,

c

)

y

(

i

+

k

,

j

+

l

,

c

)

\operatorname{Conv}(W, y)_{(i, j)}=\sum_{k, l, c}^{K, L, C} W_{(k, l, c)} \cdot y_{(i+k, j+l, c)}

Conv(W,y)(i,j)=k,l,cK,L,CW(k,l,c)y(i+k,j+l,c)
其中

K

,

L

K,L

K,L表示卷积核的size,也就是卷积核的长宽,应该是为了不使用W,H,然后

C

C

C表示Channel数。
Depthwise separable convolution(DSConv)表示成:

 DepthwiseConv 

(

W

,

y

)

(

i

,

j

)

=

k

,

l

K

,

L

W

(

k

,

l

)

y

(

i

+

k

,

j

+

l

)

,

 PointwiseConv 

(

W

,

y

)

(

i

,

j

)

=

c

C

W

c

y

(

i

,

j

,

c

)

,

DSConv

(

W

p

,

W

d

,

y

)

(

i

,

j

)

=

 PointwiseConv 

(

i

,

j

)

(

W

p

,

 Depthwise Conv 

(

i

,

j

)

(

W

d

,

y

)

)

\begin{aligned} \text { DepthwiseConv }(W, y)_{(i, j)} &=\sum_{k, l}^{K, L} W_{(k, l)} \odot y_{(i+k, j+l)}, \\ \text { PointwiseConv }(W, y)_{(i, j)} &=\sum_{c}^{C} W_{c} \cdot y_{(i, j, c)}, \\ \text {DSConv}\left(W_{p}, W_{d}, y\right)_{(i, j)} &= \text { PointwiseConv }_{(i, j)}\left(W_{p}, \text { Depthwise Conv }_{(i, j)}\left(W_{d}, y\right)\right) \end{aligned}

 DepthwiseConv (W,y)(i,j) PointwiseConv (W,y)(i,j)DSConv(Wp,Wd,y)(i,j)=k,lK,LW(k,l)y(i+k,j+l),=cCWcy(i,j,c),= PointwiseConv (i,j)(Wp, Depthwise Conv (i,j)(Wd,y))
其中

\odot

表示element-wise product,跟上面的点没啥区别啊,这里Depthwise卷积的通道数同输入feature map的通道数相同,但是不再通道上进行加和,Pointwise卷积跟正常卷积相同,只不过这里使用的是

1

×

1

1\times1

1×1大小的卷积核,这里的符号有点儿混乱,下面结合知乎上的图示来进行说明:

Depthwise Separable Convolutions
由于卷积并不使用矩阵相乘,为了减少计算量,可以将卷积的过程分成两部分:a depthwise convolution and a pointwise convolution.空间特征学习+通道特征学习
depthwise convolution
首先,我们使用3个5x5x1的卷积核产生8x8x3的图像:
在这里插入图片描述
pointwise convolution
其次,使用1x1x3 的卷积核对每个像素计算,得到8x8x1 的图像:
在这里插入图片描述
使用256个1x1x3 的卷积核,则可以产生8x8x256的图像:
可以看到,整个过程由原来的12x12x3 — (5x5x3x256) →12x12x256,变成12x12x3 — (5x5x1x1) — > (1x1x3x256) — >12x12x256
意义
主要就是减少了计算量,原先是256个5x5x3的卷积核移动8x8次,即需要256x3x5x5x8x8=1,228,800次乘法计算。使用depthwise convolution,有3个5x5x1的卷积核移动8x8次,需要3x5x5x8x8 = 4,800次乘法计算。使用pointwise convolution,有256个1x1x3的卷积核移动8x8次,需要256x1x1x3x8x8=49,152次乘法计算,加起来共有53,952次计算。

接着就是Transformer中注意力的表现形式说实话这个表述给我整懵了,我都怀疑我之前看的是transformer嘛,尤其是这里符号说明很混乱,之后这里重新整理下,然后再看看同Depthwise Separable Convoluiotn之间存在的联系吧?这个应该也是这篇文章的核心了吧 😒

Ω

q

R

H

×

W

\Omega_{q} \in \mathbb{R}^{H \times W}

ΩqRH×W

Ω

k

R

H

×

W

\Omega_{k} \in \mathbb{R}^{H \times W}

ΩkRH×W分别表示query和key elements的集合,其中

q

Ω

q

,

k

Ω

k

q \in \Omega_{q}, k \in \Omega_{k}

qΩq,kΩk

5.2

O

2

O^2

O2DETR

这部分主要看下这里面Multi-scale Feature PresentationDetection Head是怎么表述的?
首先是Multi-scale Feature Presentation,本文中的multi-scale feature maps是来自骨干网络的,文中描述这个输出feature map为

{

x

l

}

l

=

1

L

1

\left\{x^{l}\right\}_{l=1}^{L-1}

{xl}l=1L1从stage

C

3

C_3

C3到stage

C

5

C_5

C5,其中

C

l

C_l

Cl表示

2

l

2^l

2l下采样,最低分辨率的那个feature map是在

C

5

C_5

C5使用一个

3

×

3

3\times3

3×3并且步长为2的卷积实现的,所有的feature map都是256通道的.根据这里的描述吧,输出是4个不同尺寸的feature map,对应的下采样倍数分别为8,16,32,64,同时,通道数是256.

刚刚测试了下mmdetection ResNet50结构提取feature map得到的输出:
在这里插入图片描述
对应着下采样倍数分别为4,8,16,32.并且通道数增加,实际上ResNet50结构如下:
在这里插入图片描述
等弄代码的时候再仔细考虑这边骨干网络怎么弄吧

接着将多尺度的feature map进行进行聚合,这是怎么聚合的呢?

DSConv

(

W

p

,

W

d

,

x

)

l

=

DSConv

(

W

p

,

W

d

,

x

)

l

+

Dropout

(

D

S

Conv

(

W

p

,

W

d

,

x

)

l

1

+

D

S

Conv

(

W

p

,

W

d

,

x

)

l

+

1

)

,

l

[

1

,

L

1

]

\begin{array}{l} \operatorname{DSConv}\left(W_{p}, W_{d}, x\right)^{l}=\operatorname{DSConv}\left(W_{p}, W_{d}, x\right)^{l}+\operatorname{Dropout}\left(D S \operatorname{Conv}\left(W_{p}, W_{d}, x\right)^{l-1}\right. \\ \left.\quad+D S \operatorname{Conv}\left(W_{p}, W_{d}, x\right)^{l+1}\right), \quad l \in[1, L-1] \end{array}

DSConv(Wp,Wd,x)l=DSConv(Wp,Wd,x)l+Dropout(DSConv(Wp,Wd,x)l1+DSConv(Wp,Wd,x)l+1),l[1,L1]
首先问题就是:没看懂上面的公式表示的是什么意思?角标

l

l

l是加到谁的上面的?如果说是加在

x

x

x上面,表示的应该是输出的4个尺度的feature map,那么

l

=

1

l=1

l=1的时候,会出现

x

0

x^0

x0这个指的又是什么呢?
接着给出了encoded multi-scale features

E

l

(

l

L

)

E_{l}(l \in L)

El(lL)???没想到

l

l

l竟然能够属于一个Value L,又给我整懵了。最后这里的multi-scale attention表示式为:

MSAttn

(

z

q

,

p

,

{

E

l

}

l

=

1

L

)

=

l

=

1

L

k

Ω

k

A

(

q

,

k

,

l

)

W

x

k

l

\operatorname{MSAttn}\left(z_{q}, p,\left\{E_{l}\right\}_{l=1}^{L}\right)=\sum_{l=1}^{L} \sum_{k \in \Omega_{k}} A_{(q, k, l)} \cdot W \cdot x_{k}^{l}

MSAttn(zq,p,{El}l=1L)=l=1LkΩkA(q,k,l)Wxkl
公式还是没看懂,为什么说使用Depthwise Separate Convolution来替换multi-head self attention的,回头这个地方的话,我打算自己结合DETR的实际情况进行改动吧。
最后就是这个Detection Head这边,最终得到的feature map大小为

D

R

N

×

C

D \in \mathbb{R}^{N \times C}

DRN×C,然后分别通过一个3层的MLP以及一个linear层来预测边界框和类别置信度:

Box

{

x

c

,

y

c

,

w

,

h

,

α

}

=

Sigmoid

(

MLP

(

D

)

)

 Score 

=

F

C

(

D

)

\begin{aligned} \operatorname{Box}_{\left\{x_{c}, y_{c}, w, h, \alpha\right\}} &=\operatorname{Sigmoid}(\operatorname{MLP}(D)) \\ \text { Score } &=\mathbf{F C}(D) \end{aligned}

Box{xc,yc,w,h,α} Score =Sigmoid(MLP(D))=FC(D)
这里我的理解就是将原来DETR的内容保持不动,增加一个最终的预测角度。

5.3 Fine-tune

O

2

\mathbf{O}^2

O2DETR

这里我的理解就是先将上面的DETR训练好,然后冻结,把整个看成一个FPN,然后再把Faster-RCNN基于proposals来预测最终边界框的方法拿过来,得到更加精细的预测边界框。

F

=

 ROIAlign 

(

P

,

{

x

l

}

l

=

1

L

1

)

 Box 

{

x

c

,

y

c

,

w

,

h

,

α

}

F

=

 Sigmoid 

(

M

L

P

(

F

)

)

 Score 

e

F

=

F

C

(

F

)

,

 Box 

=

 Box 

{

x

c

,

y

c

,

w

,

h

,

α

}

+

 Box 

{

x

c

,

y

c

,

w

,

h

,

α

}

F

,

\begin{array}{c} F=\text { ROIAlign }\left(P,\left\{x^{l}\right\}_{l=1}^{L-1}\right) \\ \text { Box }_{\left\{x_{c}, y_{c}, w, h, \alpha\right\}}^{F}=\text { Sigmoid }(\mathbf{M L P}(F)) \\ \text { Score } e^{F}=\mathbf{F C}(F), \\ \text { Box }=\text { Box }_{\left\{x_{c}, y_{c}, w, h, \alpha\right\}}+\text { Box }_{\left\{x_{c}, y_{c}, w, h, \alpha\right\}}^{F}, \end{array}

F= ROIAlign (P,{xl}l=1L1) Box {xc,yc,w,h,α}F= Sigmoid (MLP(F)) Score eF=FC(F), Box = Box {xc,yc,w,h,α}+ Box {xc,yc,w,h,α}F,
又给我整懵了,首先第一个问题就是:

  • ROIAlign我要是没理解错的话,好像是将proposal对应到feature map上,然后再将这个feature map做pool到固定的大小上,难道说旋转框的feature map这边也做了适配吗?
  • 第二个问题就是最后的Box是

     Box 

    {

    x

    c

    ,

    y

    c

    ,

    w

    ,

    h

    ,

    α

    }

    \text { Box }_{\left\{x_{c}, y_{c}, w, h, \alpha\right\}}

     Box {xc,yc,w,h,α}

     Box 

    {

    x

    c

    ,

    y

    c

    ,

    w

    ,

    h

    ,

    α

    }

    F

    \text { Box }_{\left\{x_{c}, y_{c}, w, h, \alpha\right\}}^{F}

     Box {xc,yc,w,h,α}F加和,这里的

     Box 

    {

    x

    c

    ,

    y

    c

    ,

    w

    ,

    h

    ,

    α

    }

    \text { Box }_{\left\{x_{c}, y_{c}, w, h, \alpha\right\}}

     Box {xc,yc,w,h,α}是啥?通过ROIAlign以及新的prediction head得到的更加准确的预测边界框和分数吗?那为什么还要加上原来的边界框呢?并且作者这里说不需要做NMS?

  • 最最最重要的一个问题就是这边损失函数用的啥?旋转框不给出损失函数感觉很难顶~

(六) Experiments

实验设置

数据集:DOTA,corp original images into 1024x1024,random horizontal flipping
模型:基于ResNet50,ResNet101得到了O2DETR-R50和O2DETR-R101,同时还有一个Fine-tune的F-O2DETR,没有使用FPN。
训练:训练50个epoch,在第40个epoch时学习率下降1/10,Transformer encoder-decoder的学习率10-4,resnet骨干网络学习率为10-5,这边旋转框是怎么使用IoU loss呢?F-O2DETR训练了12个epoch。咱也不知道用的啥学习器啊?

6.1 同Faster-RCNN以及RetinaNet的比较

在这里插入图片描述

6.2 消融实验

Depthwise Separable Convolution的作用
在这里插入图片描述
Fine-tune on O2DETR
比较Faster-RCNN的RPN和F-O2DETR的召回率
在这里插入图片描述
比较O2DETR和F-O2DETR的区别
在这里插入图片描述

6.3 同state-of-the-art比较

在这里插入图片描述

(七) Conclusions

本文主要使用DETR解决了旋转框目标检测的问题,并且在此基础上提出了fine-tune的方式能够更好地解决问题。

(八) Notes

8.1 旋转框目标检测的方法

R-RPN,

R

2

R^2

R2CNN,RoI Transformer,SCRDet,RSDet,CSL,

R

3

R^3

R3Det,

S

2

S^2

S2Det,
今年的一篇论文:Redet: A rotation-equivariant detector for aerial object detection.

8.2 基于DETR的一些工作

SMCA-DETR,Deformable DETR,需要思考一个问题是:本文是基于标准的DETR嘛?

版权声明:本文为CSDN博主「不知道叫啥好一点」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/A_A666/article/details/121408283

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐