结合YoloV8讲解论文:Gaussian Bounding Boxes and Probabilistic Intersection-over-Union for Object Detection
大多数物体检测方法使用边界框来编码和表示物体的形状和位置。在这项工作中,
我们探索了使用高斯分布的对象区域的模糊表示,它提供了一个隐式的二进制表示
(可能旋转)椭圆。我们还提出了一种基于海灵格距离的高斯分布的相似性度量,它
可以被看作是概率交集-过并(ProbIoU)。实验结果表明,本文提出的高斯表示更接
近公开数据集中带注释的分割掩码,并且基于ProbIoU的损失函数可以成功地用于
回归高斯表示的参数。此外,我们提出了一种简单的映射方案,从传统的(或旋转
的)边界框到高斯表示,允许提出的基于probiou的损失无缝集成到任何目标检测器
中。
Introduction
在这项工作中,我们探索了基于高斯边界框(GBBs)的物体形状参数化,并提出了一个“概率
IoU”(称为ProbIoU),它从使用高斯分布来比较物体之间的相似性中自然产生。所提出的参
数化允许将对象表示为(可能旋转的)椭圆,比传统的HBBs甚至OBBs更通用。例如,图1显示
了来自COCO 2017数据集Lin等人(2014)的一些图像,其中目标位置编码为HBB(红色),OBB
(蓝色)和提出的gbb诱导椭圆(绿色),以及相应的分割掩码。请注意,对于拉长和旋转的对象
(例如,中间图像对中的叉),OBBs确实比HBBs有所改进,但所提出的表示更适合分割掩码。
作为主要贡献,我们i)表明gbb诱导的椭圆表示倾向于提供比HBBs或OBBs更紧密的分割掩模
拟合;ii)引入基于ProbIoU的回归损失函数,该函数直观、可微、易于计算,并且可以无缝集成
到使用HBB或OBB的现有检测器中。

Related Work
- 最开始基于HBBs使用L1、L2范数构建损失,该类损失对数据规模高度敏感,
- 后面基于IOU计算损失(特性:尺度变化不变性及HBB参数联合回归)IOU基础知识了解推荐地址
Gaussian Bounding Boxes and ProbIoU
本文的核心思想是通过使用二维的、可能旋转的高斯分布以模糊的方式表示一个对象。
代码是理解理论最好的办法,以yolov8 obb采用的就是probIOU为例讲解是如何做的
- 完整代码
def probiou(obb1, obb2, CIoU=False, eps=1e-7):
"""
Calculate the prob IoU between oriented bounding boxes, https://arxiv.org/pdf/2106.06072v1.pdf.
Args:
obb1 (torch.Tensor): A tensor of shape (N, 5) representing ground truth obbs, with xywhr format.
obb2 (torch.Tensor): A tensor of shape (N, 5) representing predicted obbs, with xywhr format.
eps (float, optional): A small value to avoid division by zero. Defaults to 1e-7.
Returns:
(torch.Tensor): A tensor of shape (N, ) representing obb similarities.
"""
#从 obb1 和 obb2 中提取中心坐标
x1, y1 = obb1[..., :2].split(1, dim=-1)
x2, y2 = obb2[..., :2].split(1, dim=-1)
a1, b1, c1 = _get_covariance_matrix(obb1)
a2, b2, c2 = _get_covariance_matrix(obb2)
t1 = (
((a1 + a2) * (y1 - y2).pow(2) + (b1 + b2) * (x1 - x2).pow(2)) / ((a1 + a2) * (b1 + b2) - (c1 + c2).pow(2) + eps)
) * 0.25
t2 = (((c1 + c2) * (x2 - x1) * (y1 - y2)) / ((a1 + a2) * (b1 + b2) - (c1 + c2).pow(2) + eps)) * 0.5
t3 = (
((a1 + a2) * (b1 + b2) - (c1 + c2).pow(2))
/ (4 * ((a1 * b1 - c1.pow(2)).clamp_(0) * (a2 * b2 - c2.pow(2)).clamp_(0)).sqrt() + eps)
+ eps
).log() * 0.5
bd = (t1 + t2 + t3).clamp(eps, 100.0)
hd = (1.0 - (-bd).exp() + eps).sqrt()
iou = 1 - hd
- 1.从选择框得到中心坐标x1y1 x2y2
- 2.获取旋转框的协方差矩阵参数
a1, b1, c1 = _get_covariance_matrix(obb1)
a2, b2, c2 = _get_covariance_matrix(obb2)
def _get_covariance_matrix(boxes):
"""
Generating covariance matrix from obbs.
Args:
boxes (torch.Tensor): A tensor of shape (N, 5) representing rotated bounding boxes, with xywhr format.
Returns:
(torch.Tensor): Covariance metrixs corresponding to original rotated bounding boxes.
"""
# Gaussian bounding boxes, ignore the center points (the first two columns) because they are not needed here.
gbbs = torch.cat((boxes[:, 2:4].pow(2) / 12, boxes[:, 4:]), dim=-1)
a, b, c = gbbs.split(1, dim=-1)
cos = c.cos()
sin = c.sin()
cos2 = cos.pow(2)
sin2 = sin.pow(2)
return a * cos2 + b * sin2, a * sin2 + b * cos2, (a - b) * cos * sin
#首先构造高斯边界框参数,boxes[:, 2:4] 提取旋转框的宽 (w) 和高 (h)。boxes[:, 4:] 提取旋转角 (r)
#平方/12得到高斯分布下的边界框离散化的方差组成一个N,3张量
#split得到宽方向方差、高方向方差、旋转角度
#计算旋转角度的正弦和余弦以及平方
#协方差的三个参数计算公式为a * cos2 + b * sin2, a * sin2 + b * cos2, (a - b) * cos * sin分别表示宽和高方差经过旋转后的主要轴方向上的方差、表示宽和高方差经过旋转后的次要轴方向上的方差、表示主次方向上的相关性。
- 数学背景:
- 协方差矩阵 Σ 用于描述旋转边界框的形状和旋转关系,其结构如下:

𝑎,𝑏:表示旋转后轴方向上的方差。
𝑐:表示两个轴之间的相关性。
- 协方差矩阵 Σ 用于描述旋转边界框的形状和旋转关系,其结构如下:
- 3.计算t1,t2,t3
- t1:中心点位置差异的惩罚,该项衡量两个旋转框中心点之间的差异,主要由 x 和 y 的欧式距离决定。用 (a1 + a2) 和 (b1 + b2) 对应旋转框的宽高进行加权。分母包含 (a1 + a2) * (b1 + b2) - (c1 + c2)^2,确保结果是稳定的,避免数值不稳定。
- t2:中心点相关性的惩罚,该项衡量旋转框中心点的相互关系,尤其是横纵坐标之间的交叉影响。通过乘积 (x2 - x1) 和 (y1 - y2) 加入了中心点之间的交叉项,量化其相似性。
- t3:形状和大小的相似性,该项衡量旋转框的形状相似性,特别是宽高比例和旋转角度的匹配程度。分母中的 (a1 * b1 - c1^2) 表示协方差矩阵的行列式,对应旋转框的面积。分母部分计算框的标准化形状,最终取对数,反映它们的差异程度。
- 4.最后计算bd表示旋转框之间距离的度量是t123的和,通过 (-bd).exp() 和平方根运算,将距离转化为一种平滑的相似性度量,最终得到 hd,iou=1-hd,值越大表示两个旋转框越相似
实验


局限性
尽管使用GBBs和提出的基于probiou的回归损失函数取得了令人满意的结果,但我们的方法存在一些理论和实践局限性。GBBs中的方向继承自椭圆表示,因此各向同性高斯不能定向(不像方形obb)。因此,使用GBBs无法确定形状大致为正方形的物体的方向(例如DOTA数据集中的一些飞机)。另一方面,没有明显方向的圆形物体(例如,球)使用obb编码为人工方向, 这在GBBs中不会发生。
另一个问题涉及非常细的细长对象,对于这些对象,a或b可能非常小(为了简单起见,考虑轴对齐的GBB)。在这些情况下,当比较的GBBs不对齐时,bhatacharya Distance可能会对a或b产生非常大的梯度(参见Eq.(16)中的第一项及其导数w.r.t. a和b),这可能会导致训练步骤中的不 稳定,并损害这类对象的收敛性。
总结
其局限性让我读了这篇文章,因为在我们日常中正方形的目标一定是到处可见的,但是yolo选择这个iou作为模型肯定是为了整体考虑的,但是如果我们目标中大部分正方形目标就需要引入其他损失或者替换计算方法来提升网络性能。
- 增加角度损失可以很大解决正方形目标角度问题
- 替换probiou为其他iou
更多推荐



所有评论(0)