YOLOv8独家原创改进:提出一种新的Shape IoU,小目标检测实现暴力涨点 | 2023.12.29收录

举报
AI小怪兽 发表于 2024/01/02 16:29:10 2024/01/02
【摘要】 一种新的Shape IoU方法,该方法可以通过关注边界框本身的形状和尺度来计算损失,解决边界盒的形状和规模等固有属性对边界盒回归的影响。

  💡💡💡本文改进:一种新的Shape IoU方法,该方法可以通过关注边界框本身的形状和尺度来计算损失,解决边界盒的形状和规模等固有属性对边界盒回归的影响。

  💡💡💡对小目标检测涨点明显,在VisDrone2019、PASCAL VOC均有涨点

1.Shape-IoU介绍

论文:https://arxiv.org/pdf/2312.17663.pdf 

 摘要:边界盒回归损失作为检测器定位分支的重要组成部分,在目标检测任务中起着重要的作用。现有的边界盒回归方法通常考虑GT盒与预测盒之间的几何关系,利用边界盒的相对位置和形状来计算损失,而忽略了边界盒的形状和规模等固有属性对边界盒回归的影响。为了弥补已有研究的不足,本文提出了一种关注边界盒本身形状和尺度的边界盒回归方法。首先,我们分析了边界框的回归特征,发现边界框本身的形状和尺度因素都会对回归结果产生影响。基于以上结论,我们提出了Shape IoU方法,该方法可以通过关注边界框本身的形状和尺度来计算损失,从而使边界框回归更加准确。最后,我们通过大量的对比实验验证了我们的方法,结果表明,我们的方法可以有效地提高检测性能,并且优于现有的方法,在不同的检测任务中达到了最先进的性能。

本文贡献:

1.我们分析了边界盒回归的特点,得出边界盒回归过程中,边界盒回归样本本身的形状和尺度因素都会对回归结果产生影响。

2.在已有的边界盒回归损失函数的基础上,考虑到边界盒回归样本本身的形状和尺度对边界盒回归的影响,提出了shape- iou损失函数,针对微小目标检测任务提出了 the shape-dotdistance and shape-nwd loss

3.我们使用最先进的单级探测器对不同的检测任务进行了一系列的对比实验,实验结果证明本文方法的检测效果优于现有的方法来实现sota。

如图2所示,边界框回归样本A和B中的GT盒尺度相同,而C和D中的GT盒尺度相同。A和D中的GT盒形状相同,B和C中的GT盒形状相同。C和D中的边界框的尺度大于A和b中的边界框的尺度。图2a中所有边界框的回归样本具有相同的偏差,形状偏差为0。Fig.2a与Fig.2b的不同之处在于Fig.2b中所有边界框回归样本的形状偏差相同,偏差均为0。

图a中的A与B的deviation相同但IoU值存在差异。

图a中的C与D的deviation相同但IoU值存在差异,并且与a中的A与B相比,其IoU值差异并不显著。

图b中的A与B的shape-deviation相同但IoU值存在差异。

图b中的C与D的shape-deviation相同但IoU值存在差异,并且与b中的A与B相比,IoU值差异并不显著。

基于上述分析,得出的结论:

1)假设GT盒不是正方形,有长边和短边,回归样本中边界盒形状和尺度的不同,在偏差和形状偏差相同且不全为0时,其IoU值也会不同。

2)对于相同尺度的边界盒回归样本,当回归样本的偏差和形状偏差相同且不均为0时,边界盒的形状会对回归样本的IoU值产生影响。沿边界盒短边方向偏移和形状偏移所对应的IoU值变化更为显著。

3)对于相同形状边界框的回归样本,当回归样本偏差与形状偏差相同且不均为0时,相对于较大尺度的回归样本,较小尺度边界框回归样本的IoU值受GT盒形状的影响更为显著。

1.1 Shape-IoU介绍

​其中scale为尺度因子,与数据集中目标的尺度有关,ww与hh分别为水平方向与竖直方向的权重系数,其取值与GT框的形状有关。其对应的边框回归损失如下: 

1.2 Shape-IoU 在小目标的应用

Shape-Dot Distance:我们将ShapeIoU的思想融入到Dot Distance中,得到Shape-Dot Distance,定义如下:


1.3 Shape-NWD

Shape-NWD:同样,我们将ShapeIoU的思想融入到NWD中,得到Shape-NWD,其定义如下: 

1.4 实验结果

PASCAL VOC 数据集在 YOLOv8 and YOLOv7的性能

VisDrone2019 on YOLOv8

AI-TOD on YOLOv5

2.如何将Shape-IoU添加在YOLOv8 

def shape_iou(box1, box2, xywh=True, scale=0, eps= 1e-7):
    (x1, y1, w1, h1), (x2, y2, w2, h2) = box1.chunk(4, -1), box2.chunk(4, -1)
    w1_, h1_, w2_, h2_ = w1 / 2, h1 / 2, w2 / 2, h2 / 2
    b1_x1, b1_x2, b1_y1, b1_y2 = x1 - w1_, x1 + w1_, y1 - h1_, y1 + h1_
    b2_x1, b2_x2, b2_y1, b2_y2 = x2 - w2_, x2 + w2_, y2 - h2_, y2 + h2_

    # Intersection area
    inter = (torch.min(b1_x2, b2_x2) - torch.max(b1_x1, b2_x1)).clamp(0) * \
             (torch.min(b1_y2, b2_y2) - torch.max(b1_y1, b2_y1)).clamp(0)

    # Union Area
    union = w1 * h1 + w2 * h2 - inter + eps

    # IoU
    iou = inter / union

    # Shape-Distance    #Shape-Distance    #Shape-Distance    #Shape-Distance    #Shape-Distance    #Shape-Distance    #Shape-Distance
    ww = 2 * torch.pow(w2, scale) / (torch.pow(w2, scale) + torch.pow(h2, scale))
    hh = 2 * torch.pow(h2, scale) / (torch.pow(w2, scale) + torch.pow(h2, scale))
    cw = torch.max(b1_x2, b2_x2) - torch.min(b1_x1, b2_x1)  # convex width
    ch = torch.max(b1_y2, b2_y2) - torch.min(b1_y1, b2_y1)  # convex height
    c2 = cw ** 2 + ch ** 2 + eps  # convex diagonal squared
    center_distance_x = ((b2_x1 + b2_x2 - b1_x1 - b1_x2) ** 2) / 4
    center_distance_y = ((b2_y1 + b2_y2 - b1_y1 - b1_y2) ** 2) / 4
    center_distance = hh * center_distance_x + ww * center_distance_y
    distance = center_distance / c2

    # Shape-Shape    #Shape-Shape    #Shape-Shape    #Shape-Shape    #Shape-Shape    #Shape-Shape    #Shape-Shape    #Shape-Shape
    omiga_w = hh * torch.abs(w1 - w2) / torch.max(w1, w2)
    omiga_h = ww * torch.abs(h1 - h2) / torch.max(h1, h2)
    shape_cost = torch.pow(1 - torch.exp(-1 * omiga_w), 4) + torch.pow(1 - torch.exp(-1 * omiga_h), 4)

    # Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU
    iou = iou - distance - 0.5 * (shape_cost)
    return iou  # IoU

by CSDN AI小怪兽

个人主页:https://blog.csdn.net/m0_63774211?type=lately

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。