OBB中的连续性问题
首先,我们要明白为什么obb检测中不连续问题会一直无法得到根本解决。
在传统的obb表示方法中,由五个变量来确定一个正确的obb框,即(x,y,w,h,θ)
而obb的不连续性就来源于角度的周期性和边长的交换性
角度的周期性
我们定义角度的范围是-90~90°之间,当一个obb框的角度从-90旋转到1°时,我们肉眼来看两个obb框其实是没有任何区别的,也就是说可以认为这两个框是一样的。但是在我们的编码中,θ确产生了很大的变化。角度由-90°到1°之间跨越了一个周期,在损失函数中,神经网络会认为第二个框产生了相当大的误差,从而对第二个框进行剧烈的惩罚,但实际上两个框就是紧挨着的,完全可以认为是正确的框。
边长的交换性
先介绍计算机中为什么需要边长的交换性
在我们人类的几何知识中,一个矩形的长和宽是固定不动的。宽就是短的边,高就是长的边。但是在计算机的定义中,我们表示一个矩阵是由宽高和角度来定义的。假定一个细长的矩阵里在水平面上,我们通常就可以用w ,h ,θ=0°来对这个矩阵来定义。如果这个矩阵旋转到水平状态,如果依然保持原来的宽高来定义,那么此时的θ就会来到90°。但是在opencv的定义中,你的角度都是有范围的,比如-9090 甚者090 。为了保证你的θ不超过这个范围,计算机就会自动交换宽高的定义。宽变高,高变宽,θ也就从90降到了0,规避了角度超出范围的风险。
然后是为什么边长交换性会带来不连续性问题
正是因为这个特性,当一个矩阵在旋转过程中触发了旋转交换性,w h sigema三个数的数值都会发生很大的变化,和角度周期性一致,明明两个矩阵只是旋转了一点点,但是俩者表示的编码却相差极大,如果这个时候依然使用传统的L1loss,那么就会对矩阵产生很大的惩罚,不利于模型的训练。