文章目录[隐藏]
(一) 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,c∑K,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,l∑K,LW(k,l)⊙y(i+k,j+l),=c∑CWc⋅y(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}
Ωq∈RH×W和
Ω
k
∈
R
H
×
W
\Omega_{k} \in \mathbb{R}^{H \times W}
Ωk∈RH×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 Presentation和Detection 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=1L−1从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)l−1+DSConv(Wp,Wd,x)l+1),l∈[1,L−1]
首先问题就是:没看懂上面的公式表示的是什么意思?角标l
l
l是加到谁的上面的?如果说是加在
x
x
x上面,表示的应该是输出的4个尺度的feature map,那么
l
=
1
l=1
l=1的时候,会出现
x
0
x^0
x0这个指的又是什么呢?
接着给出了encoded multi-scale featuresE
l
(
l
∈
L
)
E_{l}(l \in L)
El(l∈L)???没想到
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=1∑Lk∈Ωk∑A(q,k,l)⋅W⋅xkl
公式还是没看懂,为什么说使用Depthwise Separate Convolution来替换multi-head self attention的,回头这个地方的话,我打算自己结合DETR的实际情况进行改动吧。
最后就是这个Detection Head这边,最终得到的feature map大小为D
∈
R
N
×
C
D \in \mathbb{R}^{N \times C}
D∈RN×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=1L−1) 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
暂无评论