文章开始之前,推荐一些别人写的很好的文章!感兴趣的也可以去读一下哦!
今日推荐:Spring AI 再更新:如何借助全局参数实现智能数据库操作与个性化待办管理
文章链接:Spring AI 再更新:如何借助全局参数实现智能数据库操作与个性化待办管理-腾讯云开发者社区-腾讯云
这篇文章深入探讨了如何利用 Spring AI 的新功能,特别是全局参数和增强函数调用能力,来构建一个智能化的个人助理系统
💡💡💡本文改进:基于Wasserstein距离的小目标检测评估方法助力红外小目标检测
💡💡💡 Wasserstein Distance Loss | 亲测在红外弱小目标检测涨点明显,map@0.5 从0.755提升至0.784
Single-frame InfraRed Small Target
数据集大小:427张,进行3倍数据增强得到1708张,最终训练集验证集测试集随机分配为8:1:1
论文名称:《A Normalized Gaussian Wasserstein Distance for Tiny Object Detection》 作者:Jinwang Wang、Chang Xu、Chang Xu、Lei Yu 论文地址:https://arxiv.org/abs/2110.13389
小目标检测是一个非常具有挑战性的问题,因为小目标只包含几个像素大小。作者证明,由于缺乏外观信息,最先进的检测器也不能在小目标上得到令人满意的结果。作者的主要观察结果是,基于IoU (Intersection over Union, IoU)的指标,如IoU本身及其扩展,对小目标的位置偏差非常敏感,在基于Anchor的检测器中使用时,严重降低了检测性能。 为了解决这一问题,本文提出了一种新的基于Wasserstein距离的小目标检测评估方法。具体来说,首先将BBox建模为二维高斯分布,然后提出一种新的度量标准,称为Normalized Wasserstein Distance(NWD),通过它们对应的高斯分布计算它们之间的相似性。提出的NWD度量可以很容易地嵌入到任何基于Anchor的检测器的Assignment、非最大抑制和损失函数中,以取代常用的IoU度量。
1)分析了 IoU 对微小物体位置偏差的敏感性,并提出 NWD 作为衡量两个边界框之间相似性的更好指标;
2)通过将NWD 应用于基于锚的检测器中的标签分配、NMS 和损失函数来设计强大的微小物体检测器;
3)提出的 NWD 可以显着提高流行的基于锚的检测器的 TOD 性能,它在 AI-TOD 数据集上的 Faster R-CNN 上实现了从 11.1% 到 17.6% 的性能提升;
具体来说,对于6×6像素的小目标,轻微的位置偏差会导致明显的IoU下降(从0.53下降到0.06),导致标签分配不准确。然而,对于36×36像素的正常目标,IoU略有变化(从0.90到0.65),位置偏差相同。此外,图2给出了4条不同目标尺度的IoU-Deviation曲线,随着目标尺度的减小,曲线下降速度更快。值得注意的是,IoU的敏感性来自于BBox位置只能离散变化的特殊性。
Wasserstein distance的主要优点是:
NWD可应用于One-Stage和Multi-Stage Anchor-Based检测器。此外,NWD不仅可以替代标签分配中的IoU,还可以替代非最大抑制中的IoU(NMS)和回归损失函数。在一个新的TOD数据集AI-TOD上的大量实验表明,本文提出的NWD可以持续地提高所有检测器的检测性能。
AI-TOD数据集上基于IoU的检测器(第1行)和基于NWD的检测器(第2行)的可视化结果上图所示。可以观察到与IoU相比,NWD可显著降低假阴性(FN)。
核心源码
def Wasserstein(box1, box2, xywh=True):
box2 = box2.T
if xywh:
b1_cx, b1_cy = (box1[0] + box1[2]) / 2, (box1[1] + box1[3]) / 2
b1_w, b1_h = box1[2] - box1[0], box1[3] - box1[1]
b2_cx, b2_cy = (box2[0] + box2[0]) / 2, (box2[1] + box2[3]) / 2
b1_w, b1_h = box2[2] - box2[0], box2[3] - box2[1]
else:
b1_cx, b1_cy, b1_w, b1_h = box1[0], box1[1], box1[2], box1[3]
b2_cx, b2_cy, b2_w, b2_h = box2[0], box2[1], box2[2], box2[3]
cx_L2Norm = torch.pow((b1_cx - b2_cx), 2)
cy_L2Norm = torch.pow((b1_cy - b2_cy), 2)
p1 = cx_L2Norm + cy_L2Norm
w_FroNorm = torch.pow((b1_w - b2_w)/2, 2)
h_FroNorm = torch.pow((b1_h - b2_h)/2, 2)
p2 = w_FroNorm + h_FroNorm
return p1 + p2
map@0.5 从原始0.755提升至0.784
layers | parameters | GFLOPs | kb | mAP50 | |
---|---|---|---|---|---|
yolov8 | 168 | 3005843 | 8.1 | 6103 | 0.755 |
Wasserstein loss | 168 | 3005843 | 8.1 | 6103 | 0.784 |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。