PIoU Loss论文阅读
(一)Title
前言:作者改变前人在进行OBB回归时,使用水平anchor+angle 以及 distance Loss的范式,而是采用直接最大化IoU作为回归目标,为了计算的方便,作者这里使用Pixels是否在bounding box 内来计算IoU,作者称之为Pixels-IoU。从Method来看,需要对在bounding box内的点进行遍历,来计算两个bounding box的交集和并集。
(二)Summary
使用oriented bounding box(OBB)-带有方向的bounding box进行目标检测可以通过减少与背景区域的重叠来更好地定位目标。
现有的OBB方法大多建立在水平bounding box检测器上,通过引入一个由distance loss来优化的附加角度维度。
这样存在的问题是,由于distance loss只能最小化OBB的角度误差,它与IoU之间的关联并不是很密切,尤其是对于高宽长比的目标不敏感。
作者在文中提出了一种新的损失:Pixels-IoU (PIoU) Loss,同时利用上了角度和IoU进行精确的OBB回归。
PIoU损失是从IoU像素形式的变体,简单且适用于水平和带方向边界框。
性能表现:
我们评估了基于锚和无锚框架的PIoU损失。实验结果表明,PIoU损失可以显著提高OBB探测器的性能,特别是在高纵横比和复杂背景的物体上。
文章的主要贡献点:
- 提出了一种新的损失函数PIoU损失,以提高高长宽比以及复杂环境下的性能
- 提出了一个新的OBB数据集:Retail50K
- PIoU Loss在anchor free或者anchor based方法上都能够提升性能。
(三)Research Object
作者并不希望对angle进行distance regression,而是选择直接计算IoU Loss进行目标回归,在旋转框IoU的计算上作者采用像素IoU进行近似。
(四)Problem Statement
目前大多数检测OBB的框架是在水平anchor上增加一个angle预测分支,利用distance loss来优化angle,由于angle distance Loss和IoU之间的关系并不相关,因此,使用distance loss进行回归时,可能会出现我们对应的损失值是相同的,但是在IoU上的值却不同,因此,作者这里利用IoU来替代回归损失,直接训练IoU Loss使得网络能够更好地学习到高IoU的预测。
但是,旋转框IoU计算很复杂,两个bounding box的交集可能不超过7边形。因此,作者提出计算Pixels来代替真实的IoU值。在anchor-based方法以及anchor-free的方法上对PIoU进行了验证。
(五)Method
5.1 Pixels-IoU(PIoU) Loss
一个理想的Loss function应该有效地引导网络最大化IoU,从而使b的误差最小化,IoU的计算应该是使用相交的面积进行计算,不过,图像上的点都是像素点,这里PIoU使用的就是像素点来计算的IoU。
Notations
- 带方向的bounding box b = ( c x , c y , w , h , θ ) \mathbf{b} = (c_x,c_y,w,h,\theta) b=(cx,cy,w,h,θ)
- b ′ \mathbf{b^{'}} b′ Ground Truth Bounding box
推导PIoU的过程
给定下图,判断 p i , j \boldsymbol{p}_{i, j} pi,j是否在OBB b \boldsymbol{b} b中,OBB的中心点为 c \boldsymbol{c} c:
点 p i , j \boldsymbol{p}_{i, j} pi,j沿着 h \boldsymbol{h} h轴做垂线,和 h \boldsymbol{h} h轴相交点为 t i , j \boldsymbol{t}_{i, j} ti,j,此时 c \boldsymbol{c} c, p i , j \boldsymbol{p}_{i, j} pi,j以及 t i , j \boldsymbol{t}_{i, j} ti,j构成了直角三角形,其中各个边的长度如上图所示,为 d i , j w d_{i, j}^{w} di,jw, d i , j h d_{i, j}^{h} di,jh以及 d i , j d_{i, j} di,j,此时,我们可以利用下面的公式判断点 p i , j \boldsymbol{p}_{i, j} pi,j是否在bounding box b \boldsymbol{b} b中:
δ ( p i , j ∣ b ) = { 1 , d i , j w ≤ w 2 , d i , j h ≤ h 2 0 , otherwise \delta\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}\right)=\left\{\begin{array}{ll} 1, & d_{i, j}^{w} \leq \frac{w}{2}, d_{i, j}^{h} \leq \frac{h}{2} \\ 0, & \text { otherwise } \end{array}\right. δ(pi,j∣b)={1,0,di,jw≤2w,di,jh≤2h otherwise
从上式的关系中,我们可以看出需要计算三角形3个边的长度:我们现在可以利用上的有:bounding box的label ( c x , c y , w , h , θ ) (c_x,c_y,w,h,\theta) (cx,cy,w,h,θ)以及点 p i , j \boldsymbol{p}_{i, j} pi,j的坐标 ( i , j ) (i,j) (i,j):根据这些信息,可以计算出3条边的长度分别为:
d i j = d ( i , j ) = ( c x − i ) 2 + ( c y − j ) 2 d i j w = ∣ d i j cos β ∣ d i j h = ∣ d i j sin β ∣ β = { θ + arccos c x − i d i j , c y − j ≥ 0 θ − arccos c x − i d i j , c y − j < 0 \begin{aligned} d_{i j} &=d(i, j)=\sqrt{\left(c_{x}-i\right)^{2}+\left(c_{y}-j\right)^{2}} \\ d_{i j}^{w} &=\left|d_{i j} \cos \beta\right| \\ d_{i j}^{h} &=\left|d_{i j} \sin \beta\right| \\ \beta &=\left\{\begin{array}{ll} \theta+\arccos \frac{c_{x}-i}{d_{i j}}, & c_{y}-j \geq 0 \\ \theta-\arccos \frac{c_{x}-i}{d_{i j}}, & c_{y}-j<0 \end{array}\right. \end{aligned} dijdijwdijhβ=d(i,j)=(cx−i)2+(cy−j)2=∣dijcosβ∣=∣dijsinβ∣={θ+arccosdijcx−i,θ−arccosdijcx−i,cy−j≥0cy−j<0
到目前这里的疑问是:这里的 θ \theta θ的定义是什么?以及 θ \theta θ的取值范围是什么?从上面计算 β \beta βd的情况来看, θ \theta θ貌似是 h \boldsymbol{h} h轴和x轴方向夹角,逆时针为正(不过这仅仅是博主个人理解,详细的需要查看代码)
作者在这里指出,当计算PIoU时,仅仅需要计算的是包含bounding box b \boldsymbol{b} b以及Ground Truth b ′ \boldsymbol{b^{'}} b′的最小水平框 B b , b ′ B_{b, b^{\prime}} Bb,b′中的点就行了,但是这种情况下对于计算丝毫不想交的有劣势,对应的面积会很大,不过可以做一个预处理看包含bounding box b \boldsymbol{b} b的最小水平框,以及包含Ground Truth b ′ \boldsymbol{b^{'}} b′最小水平框的两个是否存在交集。
接着得到了 S b ∩ b ′ S_{b \cap b^{\prime}} Sb∩b′和 S b ∪ b ′ S_{b \cup b^{\prime}} Sb∪b′的计算方法:
S b ∩ b ′ = ∑ p i , j ∈ B b , b ′ δ ( p i , j ∣ b ) δ ( p i , j ∣ b ′ ) S b ∪ b ′ = ∑ p i , j ∈ B b , b ′ δ ( p i , j ∣ b ) + δ ( p i , j ∣ b ′ ) − δ ( p i , j ∣ b ) δ ( p i , j ∣ b ′ ) \begin{array}{c} S_{b \cap b^{\prime}}=\sum_{p_{i, j} \in B_{b, b^{\prime}}} \delta\left(p_{i, j} \mid b\right) \delta\left(p_{i, j} \mid b^{\prime}\right) \\ S_{b \cup b^{\prime}}=\sum_{p_{i, j} \in B_{b, b^{\prime}}} \delta\left(p_{i, j} \mid b\right)+\delta\left(p_{i, j} \mid b^{\prime}\right)-\delta\left(p_{i, j} \mid b\right) \delta\left(p_{i, j} \mid b^{\prime}\right) \end{array} Sb∩b′=∑pi,j∈Bb,b′δ(pi,j∣b)δ(pi,j∣b′)Sb∪b′=∑pi,j∈Bb,b′δ(pi,j∣b)+δ(pi,j∣b′)−δ(pi,j∣b)δ(pi,j∣b′)
但是上面的 δ \delta δ函数是不可导的,作者这里使用核函数来替换 δ \delta δ函数
δ ( p i , j ∣ b ) ≈ F ( p i , j ∣ b ) = K ( d i , j w , w ) K ( d i , j h , h ) \delta\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}\right) \approx F\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}\right)=K\left(d_{i, j}^{w}, w\right) K\left(d_{i, j}^{h}, h\right) δ(pi,j∣b)≈F(pi,j∣b)=K(di,jw,w)K(di,jh,h)
其中核函数 K ( d , s ) K(d, s) K(d,s)的表达形式如下所示:
K ( d , s ) = 1 − 1 1 + e − k ( d − s ) K(d, s)=1-\frac{1}{1+e^{-k(d-s)}} K(d,s)=1−1+e−k(d−s)1
其中 F ( p i , j ∣ b ) F\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}\right) F(pi,j∣b)满足当 p i , j p_{i,j} pi,j在 b \boldsymbol b b中时,取值接近于1,当不在 b \boldsymbol b b中时,取值接近0.因此将原来式子中的 δ \delta δ用 F F F函数替换得到:
S b ∩ b ′ ≈ ∑ p i , j ∈ B b , b ′ F ( p i , j ∣ b ) F ( p i , j ∣ b ′ ) S b ∪ b ′ ≈ ∑ p i , j ∈ B b , b ′ F ( p i , j ∣ b ) + F ( p i , j ∣ b ′ ) − F ( p i , j ∣ b ) F ( p i , j ∣ b ′ ) \begin{array}{c} S_{b \cap b^{\prime}} \approx \sum_{p_{i, j} \in B_{b, b^{\prime}}} F\left(p_{i, j} \mid b\right) F\left(p_{i, j} \mid b^{\prime}\right) \\ S_{b \cup b^{\prime}} \approx \sum_{p_{i, j} \in B_{b, b^{\prime}}} F\left(p_{i, j} \mid b\right)+F\left(p_{i, j} \mid b^{\prime}\right)-F\left(p_{i, j} \mid b\right) F\left(p_{i, j} \mid b^{\prime}\right) \end{array} Sb∩b′≈∑pi,j∈Bb,b′F(pi,j∣b)F(pi,j∣b′)Sb∪b′≈∑pi,j∈Bb,b′F(pi,j∣b)+F(pi,j∣b′)−F(pi,j∣b)F(pi,j∣b′)
接着我们可以利用交集和并集之间的关系,计算 S b ∪ b ′ \mathrm{S}_{b \cup b^{\prime}} Sb∪b′,从而减小一定的计算量
S b ∪ b ′ = w × h + w ′ × h ′ − S b ∩ b ′ S_{\boldsymbol{b} \cup \boldsymbol{b}^{\prime}}=w \times h+w^{\prime} \times h^{\prime}-S_{\boldsymbol{b} \cap \boldsymbol{b}^{\prime}} Sb∪b′=w×h+w′×h′−Sb∩b′
其中 ( w , h ) (w,h) (w,h)和 ( w ′ , h ′ ) (w^{'},h^{'}) (w′,h′)分别是OBB b \boldsymbol {b} b和OBB b ‘ \boldsymbol {b^{‘}} b‘的长宽值,因此,作者提出的PIoU的计算可以表示为:
P I O U ( b , b ′ ) = S b ∩ b ′ S b ∪ b ′ P I O U\left(\boldsymbol{b}, \boldsymbol{b}^{\prime}\right)=\frac{S_{\boldsymbol{b} \cap \boldsymbol{b}^{\prime}}}{S_{\boldsymbol{b} \cup \boldsymbol{b}^{\prime}}} PIOU(b,b′)=Sb∪b′Sb∩b′
这里作者将positive anchor定义为和Ground Truth之间IoU超过0.5框,将集合M计作所有positive anchor以及其对应的Ground Truth anchor的二元组 ( b , b ‘ ) (\boldsymbol{b},\boldsymbol {b^{‘}}) (b,b‘),计算M中所有对的PIoU,求和取平均,取负号得到了最终的pious损失:
L piou = − ∑ ( b , b ′ ) ∈ M ln P I o U ( b , b ′ ) ∣ M ∣ L_{\text {piou}}=\frac{-\sum_{\left(\boldsymbol{b}, \boldsymbol{b}^{\prime}\right) \in M} \ln P I o U\left(\boldsymbol{b}, \boldsymbol{b}^{\prime}\right)}{|M|} Lpiou=∣M∣−∑(b,b′)∈MlnPIoU(b,b′)
作者指出,这里使用的PIoU同样可以对不相交的bounding box使用,因为 K ( d , s ) = 1 − 1 1 + e − k ( d − s ) K(d, s)=1-\frac{1}{1+e^{-k(d-s)}} K(d,s)=1−1+e−k(d−s)1始终为一正值,此时依然会有梯度反传。除此之外,PIoU同样在非旋转框上使用,只需要将 θ = 0 \theta = 0 θ=0即可。
(六)Experiment
6.1 实验细节
Anchor-based 方法使用RefineDet,Anchor-free的方法使用CenterNet,硬件条件i7-6850K CPU,64GB installed memory,1080Ti GPU显卡,batchsize训练为8,测试时为1
Anchor-based OBB检测器
这里将回归损失完全用IoU Loss来代替,同时保留原来的分类损失,使用ResNet以及VGG作为backbone,带方向的anchor通过旋转水平anchor
k
π
/
6
k \pi / 6
kπ/6,其中
0
≤
k
<
6
0 \leq k<6
0≤k<6,这里的anchor指的是预设anchor吗?
实验设置:
- input image resize到512*512
- 2个GPU,每一个GPU上使用8张图,
- SGD,momentum 0.9,weight decay 0.0005,一共训练了120个epoch,初始学习率为0.0001,在60个epoch以及90个epoch分别缩小了10倍,
Anchor-free 旋转框目标检测
- 增加了一个角度分支,使用L1 Loss作为baseline,
- 修改回归损失为PIoU loss,使用DLA以及ResNet作为backbone模型,
- 训练阶段,输入图像倍resized到512*512,采用mini-batch训练,两块GPU,每一块GPU上16张图片,
- 采用ADAM进行训练,学习率0.0005,总共训练120个epoch,其中学习率在60个epoch以及90个epoch分别下降了10倍。
6.2 Ablation Study
对核函数中的超参数k进行Ablation Study
对损失函数的Ablation 实验
我觉得这里的区别会不会是HPIOU Loss的 S b ∪ b ′ = w × h + w ′ × h ′ − S b ∩ b ′ S_{b \cup b^{\prime}}=w \times h+w^{\prime} \times h^{\prime}-S_{b \cap b^{\prime}} Sb∪b′=w×h+w′×h′−Sb∩b′,而PIoU Loss是利用 S b ∪ b ′ ≈ ∑ p i , j ∈ B b , b ′ F ( p i , j ∣ b ) + F ( p i , j ∣ b ′ ) − F ( p i , j ∣ b ) F ( p i , j ∣ b ′ ) S_{b \cup b^{\prime}} \approx \sum_{p_{i, j} \in B_{b, b^{\prime}}} F\left(p_{i, j} \mid b\right)+F\left(p_{i, j} \mid b^{\prime}\right)-F\left(p_{i, j} \mid b\right) F\left(p_{i, j} \mid b^{\prime}\right) Sb∪b′≈∑pi,j∈Bb,b′F(pi,j∣b)+F(pi,j∣b′)−F(pi,j∣b)F(pi,j∣b′)得到的。
在水平bounding box回归损失函数上的实验
PIoU Loss在水平框上同样具有较高的AP值
6.3 Benchmark
PIoU损失下实现了显著的改进,并且零售50K中PIoU损失的改善比DOTA中的改善更明显,这意味着所提出的PIoU损失对于具有高纵横比和复杂环境的对象非常有用
在HRSC2016数据集上的表现
在DOTA数据集上的表现
Smooth L1和 PIoU在3个数据集结果的可视化表现
(七)Conclusion
作者在本文中提出使用PIoU Loss代替传统的回归损失(包括,w,h以及角度回归),并通过在anchor-based 以及anchor-free的框架上实现了上述的PIoU Loss。
(八)Notes
8.1 现有的OBB角度回归做法以及我们的做法
现有的OBB方法
现有的基于OBB的方法大多建立在基于锚的框架上,通过引入一个额外的角度维度,表示为参数元组 ( c x , c y , w , h , θ ) (c_x,c_y,w,h,\theta) (cx,cy,w,h,θ),OBB主要用于航空图像简单旋转目标检测,但是检测性能有限,其中一个原因就是这些方法中的距离损失Smooth L1,主要集中在最小化角度误差,而不是全局IoU
当长宽比非常大时,即使我们的角度差异很小,但是IoU上的差异还是非常大的,IoU上的差异受到长宽比的影响较大。从下图中可以看出,直接使用距离损失很容易造成IoU和损失函数之间相关性很差的问题,再加上classification score和IoU之间相关性很差的问题,效果就会更加糟糕。这里使用PIoU Loss解决distance loss和IoU之间相关性很差的问题
作者这里提出的PIoU Loss可以直接反映IoU相关性,可是,因为相交的OBB的形状可能是小于8变形的任意形状,在计算上要比BB复杂的多,PioU Loss是连续可导函数,并且联合关联了OBB的五个参数
作者OBB方法
变换损失函数,使用IoU损失,由于IoU的计算对于旋转框来说十分复杂,因此,作者采用了利用像素是否在bounding box中才近似IoU,使用核函数代替
δ
\delta
δ函数。具体的实现过程,可以参考(五)小节中关于PIoU的推导。
8.2 Retail50K 数据集介绍
OBB检测器已经被积极地研究了很多年,大多数数据集只关注航空图像,如下图中的a,b所示,而少数基于现有数据集(MSOCO,PASCAL VOC,ImageNet )进行注释。
Retail50K和现有一些OBB数据集之间的情况展示
作者通过Retail50K研究OBB在复杂场景下的表现。
Retail50K中的图片是从中国和美国的20家超市商店收集的。数十名志愿者使用他们的个人手机摄像头获取数据。为了增加数据的多样性,在多个城市从不同的志愿者那里收集了图像。图像质量和视图设置不进行要求,因此收集的图像代表不同的比例、视角、照明条件、噪声水平和其他可变性来源。我们还记录了原始图像的(meta data)元数据,如拍摄时间、志愿者姓名、商店名称和MD5 校验和,以过滤掉重复的图像。
在RetailNet中仅仅有一个类别,在标注之前,图像被统一地调整到600×800。作者使用一半数据作为训练数据,1/6数据作为验证集,1/3数据作为测试集。