FCOSR论文阅读笔记
(一) Title
论文地址:https://arxiv.org/abs/2111.10780
项目地址:https://github.com/lzh420202/FCOSR
(二) Summary
研究背景:
现有的基于anchor-based方法的旋转框检测算法需要手动设置预设框,引入了额外的超参数和计算。基于anchor-free的方法通常具有复杂的体系结构,不容易部署。
本文方法:
本文提出了一个一阶段的带有角度旋转的检测框架FCOSR,一看就是基于FCOS架构,并且将二维高斯分布也引入进来了。这个工作主要关注的是在训练过程中的label assignment策略,包括:
- 采用ellipse center sampling方法来给旋转框(oriented bounding boxes)定义一个合适的采样区间
- 对于overlapping的目标区域,通过fuzzy sample assignment提供了一个更加合理的标签。
- 通过multi-level sampling模块解决了不充分采样的问题。
实验效果:
算法在DOTA1.0,DOTA1.5以及HRSC2016数据集上的map分别为79.27,75.41以及90.15。FCOSR在one-stage中优于其他的目标检测器。
将一个轻量网络转换成TensorRT格式,在Jetson Xavier NX上进行部署,在DOTAv1上10.68FPS,实现了73.93的mAP.
(三) Method
网络基于FCOS架构,直接预测中心点,长宽以及旋转角度。通过label assignment module定义特征图的输出,去掉了centerness分支。
3.1 网络输出
输出两个分支,分类分支是一个 C C C维的类别向量,回归分支包括一个5维的向量,这个5维向量的符号表示为 ( R e g x , R e g y , R e g w , R e g h , R e g θ ) (Reg_x,Reg_y,Reg_w,Reg_h,Reg_\theta) (Regx,Regy,Regw,Regh,Regθ),需要经过变换得到最终边界框 ( o f f s e t x , o f f s e t y , w , h , a n g l e ) (offset_x,offset_y,w,h,angle) (offsetx,offsety,w,h,angle),并且对边界框的要求是偏移量可以是负数,宽和高必须是正数,角度范围必须限制在0-90。将回归分支输出变换到最终边界框的计算公式为:
offset x y = Reg x y ⋅ k ⋅ s w h = ( Elu ( Reg w h ⋅ k ) + 1 ) ⋅ s θ = Mod ( Reg θ , π / 2 ) \begin{array}{l} \text { offset }_{x y}=\operatorname{Reg}_{x y} \cdot k \cdot s \\ w h=\left(\operatorname{Elu}\left(\operatorname{Reg}_{w h} \cdot k\right)+1\right) \cdot s \\ \theta=\operatorname{Mod}\left(\operatorname{Reg}_{\theta}, \pi / 2\right) \end{array} offset xy=Regxy⋅k⋅swh=(Elu(Regwh⋅k)+1)⋅sθ=Mod(Regθ,π/2)
3.2 椭圆中心采样
Center Sampling是将采样点集中到目标中心附近,有助于减少低质量预测,提高模型性能。在FCOS以及YOLOX中都采用该策略提升了精度。然而将水平中心采样策略直接迁移到旋转框中存在着两个问题:
- 水平框的采样区域通常为 3 × 3 3 \times 3 3×3或者 5 × 5 5 \times 5 5×5的正方形,旋转框的角度会影响采样范围
- 对于长宽比较大的边界框来说,短边限制了中心采样的范围,这里我觉得是中心采样范围过大,会超出边界框。
为了解决上面两个问题,本文提出了基于二维高斯分布的椭圆中心采样方法,基于旋转框参数定义一个二维的高斯分布:
Σ = R θ ⋅ Σ 0 ⋅ R θ I μ = ( c x , c y ) R θ = [ cos θ − sin θ sin θ cos θ ] , Σ 0 = 1 12 [ w 2 0 0 h 2 ] \begin{aligned} \Sigma &=R_{\theta} \cdot \Sigma_{0} \cdot R_{\theta}^{I} \\ \mu &=(c x, c y) \\ R_{\theta} &=\left[\begin{array}{cc} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{array}\right], \Sigma_{0}=\frac{1}{12}\left[\begin{array}{cc} w^{2} & 0 \\ 0 & h^{2} \end{array}\right] \end{aligned} ΣμRθ=Rθ⋅Σ0⋅RθI=(cx,cy)=[cosθsinθ−sinθcosθ],Σ0=121[w200h2]
其中 Σ \Sigma Σ是协方差矩阵,当角度为0时 Σ 0 \Sigma_0 Σ0也是协方差矩阵, μ \mu μ是均值, R θ R_\theta Rθ是旋转变换矩阵。正常情况下的二维高斯分布概率密度函数为:
f ( X ) = 1 2 π ∣ Σ ∣ 1 / 2 exp ( − 1 2 ( X − μ ) T Σ − 1 ( X − μ ) ) f(X)=\frac{1}{2 \pi|\Sigma|^{1 / 2}} \exp \left(-\frac{1}{2}(X-\mu)^{T} \Sigma^{-1}(X-\mu)\right) f(X)=2π∣Σ∣1/21exp(−21(X−μ)TΣ−1(X−μ))
X X X表示二维坐标,将归一化项去掉得到:
g ( X ) = exp ( − 1 2 ( X − μ ) T Σ − 1 ( X − μ ) ) g(X)=\exp \left(-\frac{1}{2}(X-\mu)^{T} \Sigma^{-1}(X-\mu)\right) g(X)=exp(−21(X−μ)TΣ−1(X−μ))
椭圆的2D高斯分布表示为 g ( X ) = C g(X)=C g(X)=C进行表示,当 C = C 0 = exp ( − 1.5 ) C=C_{0}=\exp (-1.5) C=C0=exp(−1.5)时,椭圆的等高线刚刚好能够切到旋转框上,也就是如下图中 ( c ) (c) (c)所示。随着 C C C的减小,椭圆曲线的范围将扩大。
当 C C C的范围在 [ C 0 , 1 ] [C_0,1] [C0,1]直接时,就是一个缩放的椭圆核,这个椭圆核不超过边界框的范围 C = 1 C=1 C=1时就是中心点。此时不再采用图 ( a ) (a) (a)中的方式来确定正样本,而是通过判断点是否在椭圆内,在椭圆内的话就是正样本,不在椭圆内的话就是负样本。
接着解决第二个问题,长宽比较大时,二维高斯核的长边部分会距离图像中心很远,此时样本的可信度也比较小,通过调整长边高斯核方差来实现椭圆在长边方向上的收缩,也就是如上图中的 ( d ) (d) (d)所示。这里通过调整协方差矩阵来实现对长边的收缩:
Σ 0 = min ( w , h ) 12 [ w 0 0 h ] \Sigma_{0}=\frac{\min (w, h)}{12}\left[\begin{array}{ll} w & 0 \\ 0 & h \end{array}\right] Σ0=12min(w,h)[w00h]
也就是将椭圆的长轴收缩成 w h \sqrt{wh} wh,短边保持不变。博主认为这个椭圆中心采样方法就是TTFNet中的一种特例。
3.3 Fuzzy sample label assignment
FCOS中将不同尺度的目标分配给具有不同步长的特征图来减少ambiguous样本。对于尺度相近的目标,FCOS将ambiguous样本标签设置成smaller targets,也就是较小的目标(这里的大小说的是面积),但是这种方式很难处理航空场景。这里将二维高斯分布的值看成是采样点到目标中心的距离度量,中心距离的度量通过下式表示:
J ( X ) = w h ⋅ f ( X ) J(X)=\sqrt{w h} \cdot f(X) J(X)=wh⋅f(X)
对于任何一个采样点,计算每一个采样点的 J ( X ) J(X) J(X)值,这个值越大表示越接近目标。按照当前的分配方式可以表述成:
3.4 多阶段采样
对于大长宽比目标,按照上述方式,采样数量主要受短边的影响,当feature map的步长比采样区域更大时(受短边影响,虽然边界框很大,但是采样区域面积比较小,当比特征图的步长还小时就没法分配到特征点来回归边界框了),为了解决这个问题,本文通过比较短边和步长来决定是否在低层特征图中分配标签,满足下面两个条件的话就分配:
- 目标的短边同feature map步长的比值小于2,也就是在特征图上不超过4个点来回归目标。
- 旋转框最小的外界轴对齐矩形的长边超过了特征图的范围。
Multi-level sampling strategy允许我们将一些无法有效采样的目标添加到底层特征图上。在底层特征图上进行密集采样。
这里没说明是怎么将分配到下面的特征图上的,只说了什么情况下分配给下面的特征图。
3.5 损失函数
在分类损失中使用QFL,同时引入IoU来关联类别和边界框的质量:
Q F L ( σ ) = − ∣ y − σ ∣ β ( ( 1 − y ) log ( 1 − σ ) + y log ( σ ) ) Q F L(\sigma)=-|y-\sigma|^{\beta}((1-y) \log (1-\sigma)+y \log (\sigma)) QFL(σ)=−∣y−σ∣β((1−y)log(1−σ)+ylog(σ))
上式中 y y y表示IoU
回归损失使用ProbIoU loss。总损失表示为:
L o s s = 1 N p o s ∑ z Q F L + 1 ∑ z 1 { c z ∗ > 0 } I o U ⋅ ∑ z 1 { c z ∗ > 0 } I o U ⋅ Loss P r o b l o U \begin{aligned} L o s s &=\frac{1}{N_{p o s}} \sum_{z} Q F L+\\ & \frac{1}{\sum_{z} \mathbf{1}_{\left\{c_{z}^*>0\right\}} I o U} \cdot \sum_{z} \mathbf{1}_{\left\{c_{z}^*>0\right\}} I o U \cdot \operatorname{Loss}_{P r o b l o U} \end{aligned} Loss=Npos1z∑QFL+∑z1{cz∗>0}IoU1⋅z∑1{cz∗>0}IoU⋅LossProbloU
其中 N p o s N_{pos} Npos表示正样本数量, 1 { c z ∗ > 0 } \mathbf{1}_{\left\{c_{z}^*>0\right\}} 1{cz∗>0}表示示性函数,博主觉得这里指的应该是在椭圆采样区域内的为1,不在这个区域的为0.
(四) Experiments
4.1 实验设置
- 数据集采用DOTA1.0,DOTA1.5以及HRSC2016,使用随机翻转+随机旋转增强数据。
- 使用ResNext50+FPN作为骨干,在DOTA上训练36个epoch,在HRSC2016上训练40k迭代。DOTA上使用SGD学习器,初始学习率0.01(感觉挺大的啊),学习率在24和33个epoch降低10倍。HRSC2016上使用SGD,学习率0.001在30K和36K学习率下降10倍。动量为0.9,权重衰减为0.0001.
- 提出使用两步旋转,第一步等概率旋转0,90,180,270.第2步以50%的概率旋转30和60度。这种两步旋转相比于随机旋转更好嘛?
4.2 消融实验
4.3 精度和速度
4.5 公开数据集上的对比实验
(五) Conclusions
本文将二维高斯分布引入到FCOS中,主要工作包括 ellipse center sampling, fuzzy sample label assignment, and multi-level sampling。椭圆中心采样为旋转对象提供了更合适的采样区域。模糊样本标签分配方法更合理地划分了重叠目标的采样区域。多层次抽样方法解决了大长宽比目标抽样不足的问题。
(六) Notes
8.1 主流的旋转框目标检测算法
带锚框的方法
ROI transformer:看着像Transformer,但是并不是基于Transformer架构的方法,主要是通过将ROI输出的水平proposals转变成OBB(旋转边界框),提取旋转proposal的特征用于后续的分类和回归。
ReDet中引入了一个rotation invariant卷积(e2cnn)到整个模型中,并且通过RiROI alignment提取了rotation invariant features
Oriented R-CNN中将ROI Transformer中的RROI learning 模块用一个轻量化,简单的oriented region proposal network(orientation RPN)进行替换
R3Det中通过Feature innovation module(FRM)模块水平的anchor进行微调得到旋转anchor
S2ANet由feature Alignment module(FAM)模块以及Oriented detection module(ODM)模块组成。FAM用于生成高质量的旋转anchor。ODM采用active filters来产生方向敏感和方向不变的特征,缓解分类分数同localization精度不一致的问题。
CSL将角度预测转换成分类任务,解决了discontinuous rotation angles的问题。
DCL中在CSL的基础上采用了密集编码来提高训练速度,同时采用角度距离和长宽比加权来改善性能。
无锚框方法
IENet采用了一个带有注意力机制的branch interactive module,能够融合分类和回归分支的特征。
GWD,KLD,ProbIoU使用两个二维高斯分布之间的距离度量来表示损失,给基于anchor-free的方式提供了一种新的回归损失方案。这个需要后面看看
PIoU定义了用于旋转框的能够梯度反向传播的损失函数
BBAVectors和PolarDet分别使用bbav vector以及polar coordinates定义旋转框
CenterRot使用可变形卷积来融合多尺度特征。
AROA采用了注意力机制。