【目标检测】AAAI20 - 提升边界框回归《Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression》

本文主要是介绍【目标检测】AAAI20 - 提升边界框回归《Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 初识
    • 相知
    • 回顾
    • 参考

初识

目标检测框有分割和定位两个任务,其中对于定位任务采用的损失通常为 l n l_n ln范式,但这种形式的损失并不是最佳选择(无法达到最优的IoU指标)。那是不是可以直接采用IoU作为损失呢?其损失函数形式如下所示:

在这里插入图片描述
看起来不错,直接针对关注的指标进行优化,但实际上IoU损失的应用范围有限,其只能在gt与预测框重叠的时候有效。因为如果两个框不重叠,无论它们距离多远,其值永远为0,无法为网络更新提供有效的梯度

因此在2019年的CVPR会议上提出了GIoU损失,其在IoU损失的基础上额外增加了一个损失项,如下所示:
在这里插入图片描述
其中 B ∪ B g t B∪B^{gt} BBgt分别表示预测框和GT的并,C表示两者最小外接矩形的面积(闭包区域)。在采用GIoU损失之后,如果两个框不重叠,它们之间也会计算出损失,并且距离越远损失值越大,这样为优化提供了方向。

那这样总行了吧?不论什么情况都可以进行优化了。但作者通过实验发现GIoU仍存在需要限制,在一些特殊情况下表现不好,并且收敛很慢。而本文提出的DIoU损失可以解决这些问题,其提出了一种新的损失项,直接最小化两个框中心之间的归一化距离
在这里插入图片描述
其中 ρ \rho ρ表示欧式距离, c c c为两框之间的对角线长度,如下图所示。
在这里插入图片描述
作者做了一个小实验,如下所示,其中绿色框表示GT,黑色框表示预测框(anchor),蓝色框表示用GIoU损失优化得到结果,红色框表示用本文提出的DIoU损失优化的结果。从图上可以看出来,GIoU损失会先想办法增加预测框的大小,使其与目标框重叠,然后再最大化边界框的重叠面积【退化到IoU损失】。而DIoU损失直接优化两个框之间的距离,能够更快的收敛(120个epoch)。

在这里插入图片描述
并且还可以进一步引入了长宽比信息,在DIoU的基础上提出了CIoU(Complete IoU)损失,进一步加速收敛和提升性能。并且DIoU还可以用于NMS中的评价指标【代替IoU计算重叠率】,使得对遮挡的情况更鲁棒。DIoUCIoU很容易嵌入到当前的SOTA检测方法中,作者实验证明在各种网络和数据集上均得到了提升。

相知

进一步分析IoU和GIoU损失

实验挺有趣的,大家可以去读一下原文这一段:简单点来说,就是预设了一些检测框和目标框,用不同损失去进行优化,统计他们损失信息进行分析。

在这里插入图片描述

作者通过实验进一步分析了IoUGIoU存在的不足,如下图所示(x,y表示每个候选框的位置,GT的坐标为(10,10),纵轴表示loss)。IoU损失只对那些与GT重叠的候选框优化比较好;GIoU对于那些落于水平方向和垂直方向上的检测框优化得不够好(容易退化到IoU Loss,虽然用足够的训练轮次和合适的学习率能够让其优化到目标框,但这会导致训练非常慢);而本文提出的DIoU对于各种情况的候选框都能优化得很好。
在这里插入图片描述
DIoU损失和GIoU损失

DIoU的具体形式在上文中已经表述的非常清楚了,在IoU损失的基础上增加了一个与GIoU不同的惩罚项,去优化两个框之间的归一化中心距离。
在这里插入图片描述
它即继承了IoU,GIoU的一些很好的特性【尺度不变性(无视检测框的尺寸),能够处理不重叠的情况,损失范围在[0,2)之间(0最优,2表示无限远)】,也解决了GIoU存在的一些问题【收敛慢,对于水平/垂直方向的候选框优化得不够好】。
在这里插入图片描述
作者分析,对于检测框回归任务来说,一个好的损失函数必须考虑三个方面:重叠率、中心点距离以及长宽比。DIoU已经考虑了前两个方面,作者进一步加入了长宽比的限制,提出了CIoU损失:
在这里插入图片描述
其中 v v v用于衡量目标框和预测框之间的长宽比一致性, α α α表示权衡参数,使得在优化过程中,重叠率的优先级更高。
在这里插入图片描述
在这里插入图片描述
还有一点需要注意的就是,在优化过程中, v v v中的 w , h w,h w,h的梯度计算需要指定,如下所示。为了解决梯度弥散的问题,将 1 w 2 + h 2 \frac{1}{w^2+h^2} w2+h21置为1。

在这里插入图片描述
将DIoU用于NMS

NMS是用于处理预测结果中的重叠框,通常使用IoU来进行判断(根据阈值从高到低选择,每次选择一个后,排除与其IoU在某个范围内的其他框)。但使用IoU只考虑重叠率,对于遮挡的情况处理得不够好,导致错误的抑制。因此可以将DIoU代替IoU,因为其不仅考虑重叠面积,还考虑了两框中心的归一化距离【两个中心点很远的检测框可能定位了不同的物体,不应将其移除】:
在这里插入图片描述
部分实验

下图展示了各种损失在YOLOv3和Faster RCNN上进行的实验,其中将损失替换成CIoU以及加上DIoU-NMS之后,整体的性能提升了非常多。
在这里插入图片描述
在这里插入图片描述

其中可以看到,加入长宽比约束之后对于小目标的检测性能有所下降,但是整体性能仍然是提升的。小目标下降也可以理解,这是因为对于小目标的检测来说,中心点之间的距离更重要,而引入长宽比会弱化中心距离的重要性。

下图展示了faster rcnn网络在COCO数据集上用不同损失训练得到的可视化效果
在这里插入图片描述
下图展示了普通NMS和DIoU-NMS之间的区别
在这里插入图片描述

回顾

这篇文章发表于AAAI2020,作者团队来自由天津大学和中国人民公安大学。整体方案的创新思路非常简单,改进很直观易懂,并且效果确实很好,让我觉得有意思的是,作者做了许多仿真实验,从不同的角度分析了当前方案存在的问题,以读者能够更直观感受到,喔!这确实是一个问题,然后提出的方法又正好解决了这个问题!如果一上来就直接介绍方法和实验结果,虽然让人感到很惊讶,但肯定没有这么让人印象深刻。

方法简单,又很容易嵌入到各种的检测模型当中,不管是对于比赛还是实际工业应用中都是一个可以尝试的trick。

参考

[1] https://zhuanlan.zhihu.com/p/94799295

这篇关于【目标检测】AAAI20 - 提升边界框回归《Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/427973

相关文章

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭