点击上方“CVer”,选择加"星标"置顶
重磅干货,第一时间送达
本文作者:yangxue
https://zhuanlan.zhihu.com/p/111493759
本文已由原作者授权,不得擅自二次转载
上一篇文章说过,想设计一种没有边界问题的角度预测方法。这次我就来讲一下初步的进展,也是我最近的一个工作Circular Smooth Label (CSL)。简单来说,CSL总结了目前流行的基于回归方式的角度预测方法都有或多或少的边界问题,一个主要的原因是理想的预测结果超出了我们所定义的范围,导致产生一个较大的损失值,因此CSL通过将角度的回归问题转换成了一个分类问题,限制预测结果的范围来消除这一问题。
文章地址:https://arxiv.org/abs/2003.05597
代码地址:https://github.com/Thinklab-SJTU/CSL_RetinaNet_Tensorflow
首先介绍了三种常见的任意旋转框的定义方法,包括两种角度范围的五参数定义法以及八参数的四边形定义法,如下图所示:
(a) opencv定义法( -regression-based, ):角度 是指框与x轴所成的锐角,并且框的这条边记为 ,另一条边记为 ,因此角度的表示范围是 。
(b) 长边定义法( -regression-based,):角度 是指框的长边与x轴所成的夹角,因此角度的表示范围是 。
(c) 有序四边形定义法(Point-based, ):最左边的点(如果水平矩形的话有两个点满足取上面的那个)为起始点,逆时针排列。
当然定义方式并不局限于这几种,但是殊途同归,很多不同的表示方式都有相同的问题。
由于大长宽比的目标对于角度的变化是非常敏感的,因此研究边界问题是比较有意义的。我们希望在边界情况也能预测的比较准确,减少有预测框但是不准被当FP的情况。先给出上面三种定义方法边界问题的描述图:
(a) -regression-based:最理想的角度回归路线是由蓝色框逆时针旋转到红色框,但由于角度的周期性,导致按照这个回归方式的损失非常大(参见上图右边的Example)。此时模型必须以更复杂的形式回归(例如蓝色框顺时针旋转,同时缩放w和h),增加了回归的难度。通过下图(a)右边的example,我们可以发现损失值的突增来源于两部分,一个是角度周期性(periodicity of angular,PoA),另一个是边的交换性(exchangeability of edges,EoE)。
(b) -regression-based:相同的,这种方式比上面稍微简单一些,损失值的突增只来源于PoA。
(c) Point-based:这种情况的边界问题在上一篇文章已经讲过了,我就直接copy过来了。看(c)图,如果是蓝框是anchor,红框是ground-truth,那么通过点的排序之后,实际和理想的回归方式是一样的(按照回归的距离定义),都是:
而绿框是ground-truth时,实际是:
理想情况是:
通过上述三种例子的分析,我们不难得出这样的结论:理想的预测结果超出了我们所定义的范围,导致出现边界问题,即产生一个较大的损失值。
对于上面得出的结论,我就在考虑是否可以将角度回归的方式转换成分类的形式,因为分类的结果是有限的,不会出现超出定义范围外的情况。一种最简单的角度分类方式就是将整个定义的角度范围进行类别的划分,比如一度归为一类,如下图(a)所示:
回归问题转换成分类问题其实是将一个连续到离散的问题,在这个转换的过程中是会有精度的损失的,比如在一度一类的情况下( ),我们无法预测出0.5度这种结果。因此,我们需要先计算一下精度最大损失和平均损失(服从均匀分布),以确定这种损失对最后的结果影响大不大。
同样,以一度一类的为例( ),精度最大和期望的损失分别是0.5和0.25。假如,有两个相同的长宽比1:9的同中心的矩形,角度相差0.5和0.25,则他们之间的IoU只下降了0.05和0.02。这对于最后评测其实影响非常小,毕竟也不是所有目标都有这么大的长宽比。因此,将角度预测方式转换成分类问题是可行的,但是如果只是以最简单的分类手段来处理还是存在几个问题的:
表示方式需采用五参数的形式,而且是要是180角度范围的,不然依然会存在EoE问题。
目前的分类损失无法衡量预测结果和标签之间的角度距离,如上图(a)所示,如果gt是0度,当我们预测成1度和-90度的损失值是一样的,但是如果预测成1度其实我们也是可以接受的。
正度上述的问题(尤其是第二点),我们设计了环形平滑标签(Circular Smooth Label , CSL) ,如上图(b)所示。CSL的具体表达是如下:
公式中的 是窗口函数,窗口半径由 来控制。窗口函数主要由四点性质:
周期性:
对称性:
最大值:
单调性:
我们列举了四种满足上述上述条件的窗口函数,分别是脉冲函数、矩形函数、三角函数、高斯函数,如下图所示:
由于窗口函数的设置,使得模型可以衡量预测标签和地面真相标签之间的角度距离,即在一定范围内越靠近真实值的预测值的损失值越小。而且通过引入周期性解决了角度周期性的问题,即使得89和-90两个度数变成是近邻的,这也是我们为什么取名为环形平滑损失的原因。需要注意的是,当窗口函数是脉冲函数或者窗口函数的窗口半径很小时,Circular Smooth Label 等价于One-hot label。
1. 窗口函数的探究
对于那些角度信息明显的类别(具有一定长宽比),角度分类应该是比较容易,相反则不太容易,比如遥感场景中的油桶。因此在比较总的精度的同时,也单独挑出了5种角度信息明显的目标来比较CSL-Based和regression-based方法。
从上表可以得出以下几个结论:
由于EoE问题的存在, -CSL-baesd方法总体不如 -CSL-baesd方法;
基于高斯窗口函数的方法效果最好,而基于脉冲窗口函数(One-hot label)的效果最差,几乎预测不出角度值;
下图是在尽可能相同配置条件下CSL-Based和regression-based方法的效果对比,以及不同窗口函数的可视化对比。
2. 窗口半径的探究
下表是对合适窗口半径的探究实验:
可以的出以下几个结论:
窗口半径的大小要适中,过小则会变成One-hot label形式,无法学到角度信息,过大则角度预测偏差会加大;
单阶段检测器比双阶段检测器对于窗口半径更加敏感,推测的原因是双阶段方法是基于instance-level的特征提取方法(RoI Pooling或RoI Align),这些方法提取到的特征会明显好于单阶段image-level的提取方式,使得双阶段检测方法可以区分更加小角度差的角度类别。
下图是不同窗口半径下的可视化比较,红色是代表没有预测对角度,绿色是正确预测角度:
3. CSL-Based与regression-based方法的比较
下表展示了在三种不同基础检测器上CSL-Based与regression-based方法的性能比较。很明显,CSL-based方法在角度特征明显的类别上具有较大的优势,但是由于DOTA数据集类别多且边界情况所占整个数据集的比例比较小,因此在整体性能比较上的优势并不是那么大。我们也是将CSL-based定位为一个更合适的baseline方法,毕竟CSL可以很轻松的和基于五参数的旋转检测方法相结合。
另外,我们还将这两种方法在其他数据集上进行了性能比较,如下表所示,同样可以得出CSL-based是一个更好baseline方法的结论。
4. 可视化分析
为了进一步证明CSL-based方法的特性,我们对CSL-FPN-based检测器中的每个RoI的角度特征向量进行了可视化的展示,采用的方法是主成分分析法(PCA),可视化结果如下图所示:
上图中第一行用的是脉冲窗口函数,可以看到每个RoI的角度特征分布是趋于随机的,也就说明它没有学习到角度这一信息。而第二行使用的是高斯窗口函数,可以看到整个可视化分布是呈现环状的,而且相邻度数的特征是挨在一起的,具有一定的耦合。这种现象正是我们设计CSL方法的目的,也很好证明了基于CSL方法的检测器可以很好学习到目标的方向信息。
5. 对比实验
虽然CSL的定位是一个更好的baseline,但我们也对比了目前在DOTA和HRSC2016数据集上的SOTA方法,如下面两个表所示:
对于上面的实验结果,我们只是加了常规的数据增强(包括随机水平垂直翻转、随机旋转、随机灰度化)、多尺度训练和测试、大骨干网络,就在两个数据集上取得了SOTA的结果。
CSL这个工作是我从源头上解决边界问题的初步探索。其实基于分类预测角度的想法很早在人脸方面有一些工作(我最早调研到的论文是一篇CVPR1998的论文),但是很多是通过普通分类或者分治法来做。在ICCV2019中也有一篇通过分类方法得到东南西北这种大致方向的文章,我在之前的预测船的具体朝向的期刊中,也是通过对已经回归出的任意矩形的四边分类得到的,相应的介绍在CSL论文中可以看到。
上面的工作无法像CSL这样分的这么细(比如,他们是将人脸以10度一个类,变成36分类问题),况且CSL还要考虑相邻类别之间的角度距离,预测容忍度,以及角度的周期性问题。虽然这个工作的效果还是挺不错的,但是还是存在一些问题,比如角度类别太多,会导致RetinaNet的head部分过于厚,所以我认为,CSL+anchor free可能是一个不错的研究方向,可以明显减小image-level预测方式的负担。
更新:CSL已被ECCV2020接受。
下载
在CVer公众号后台回复:ECCV2020,即可下载上述内容
https://github.com/amusi/ECCV2020-Code
重磅!CVer-目标检测 微信交流群已成立
扫码添加CVer助手,可申请加入CVer-目标检测 微信交流群,目前已汇集4100人!涵盖2D/3D目标检测、小目标检测、遥感目标检测等。互相交流,一起进步!
同时也可申请加入CVer大群和细分方向技术群,细分方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch和TensorFlow等群。
一定要备注:研究方向+地点+学校/公司+昵称(如目标检测+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群
▲长按加群
▲长按关注我们
整理不易,请给CVer点赞和在看!