Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression

2019-05-20 19:34:55

Paperhttps://arxiv.org/pdf/1902.09630.pdf

Project pagehttps://giou.stanford.edu/

Codehttps://github.com/generalized-iou

1. Background and Motivation:

IoU (Intersection over Union) 是物体检测领域最常用的评价指标,用于衡量任意两个形状之间的相似性。IoU 将物体的形状信息,如:width,height,and locations of two bounding boxes,编码为 region property,然后计算一个聚焦于该区域的度量。这个性质使得 IoU 对 scale 有不变性。由于具有这样的特点,IoU 被广泛的应用于物体检测,分割,跟踪等任务。

从上述内容可以发现,最小化常用的损失 与 改善他们的 IoU 值,之间并没有强烈的关系。如图 1(a)所示:(绿色的BBox 为真值黑色的为预测的结果

为了简化起见,我们假设两个 BBox 的一个角固定,所以,任何预测的 BBox,只要第二个角在圆周线上,将会产生相同的 l2-norm distance;然而,IoU值却明显的不同。可以发现,regression loss 的优化 和 IoU values 之间的 gap,并不能很简单的跨越。

本文针对该问题,探索了 IoU 的新的计算方法。作者这里借鉴了 UnitBox 的思想,直接将 BBox 作为优化目标进行回归。所以,将 IoU 作为 2D 物体检测任务的目标函数就更适合了。但是,IoU 作为 metric 和 loss 有如下的不足:如果两个物体根本没有重合,那么 IoU value 将会是 0,并且不会反应两个 BBox 到底有多远。在这种不重合的情况下,如果用了 IoU 作为损失函数,那么梯度将会为 0,无法进行优化

在本文中,作者通过解决这个不重合的问题,克服了 IoU 的弱点。作者确保其拓展版本的有如下的特性:

a). 与 IoU 一样,拥有相同的定义,即:将对比物体的形状属性编码为区域属性(region property);

b). 保持了 IoU 的尺寸不变性;

c). 确保了在重合物体上与 IoU 的强烈相关性;

我们引入该 generalized verison of IoU, named GIoU, 作为一种新的对比方式。也提供了一种分析性的方案,来计算 GIoU,允许其作为 loss function。将 GIoU loss 引入到顶尖的物体检测算法中,我们的方法稳定的提升了其在主流物体检测benchmark 上检测性能。

2. Generalized Intersection over Union :

常规的 IoU 的定义如下:

IoU 有如下的两个优势:

1). IoU 作为距离,可以看做是一种 metric;

2). IoU 对问题的尺寸具有不变性(Invariant to the scale of the problem);

与此同时,也有如下的一个劣势:如果两个 BBox 不重合,那么其 IoU 得分就是 0。那么,此时的 IoU 无法反映出两个BBox 真实的距离。

作者提出的 GIoU 可以很好的解决这个问题,具体的计算方式如下:

首先,计算两个 BBox  A 和 B 的 smallest convex shapes C, 同时包含 A and B;

然后,我们计算如下的比值:分子是 排除 A 和 B 后的 C的区域,分母是 C 的总面积;这个表达了 A 和 B 之间的空闲区域的大小比例;

最终,将 IoU 的值,减去上述的比值,就可以得到 GIoU 的值。

上图中的绿色区域,即展示了所要计算的区域 C 的面积。

3. Experiments

==== Core Code:

def bbox_transform(deltas, weights):
wx, wy, ww, wh = weights
dx = deltas[:, 0::4] / wx
dy = deltas[:, 1::4] / wy
dw = deltas[:, 2::4] / ww
dh = deltas[:, 3::4] / wh dw = torch.clamp(dw, max=cfg.BBOX_XFORM_CLIP)
dh = torch.clamp(dh, max=cfg.BBOX_XFORM_CLIP) pred_ctr_x = dx
pred_ctr_y = dy
pred_w = torch.exp(dw)
pred_h = torch.exp(dh) x1 = pred_ctr_x - 0.5 * pred_w
y1 = pred_ctr_y - 0.5 * pred_h
x2 = pred_ctr_x + 0.5 * pred_w
y2 = pred_ctr_y + 0.5 * pred_h return x1.view(-1), y1.view(-1), x2.view(-1), y2.view(-1) def compute_iou(output, target, bbox_inside_weights, bbox_outside_weights, transform_weights=None, batch_size=None):
   ## the output is predicted bounding box, the target is ground truth bbox. (you need to transform them into tensor, when use this function)
if transform_weights is None:
transform_weights = (1., 1., 1., 1.) if batch_size is None:
batch_size = output.size(0) x1, y1, x2, y2 = bbox_transform(output, transform_weights)
x1g, y1g, x2g, y2g = bbox_transform(target, transform_weights) x2 = torch.max(x1, x2)
y2 = torch.max(y1, y2) xkis1 = torch.max(x1, x1g)
ykis1 = torch.max(y1, y1g)
xkis2 = torch.min(x2, x2g)
ykis2 = torch.min(y2, y2g) xc1 = torch.min(x1, x1g)
yc1 = torch.min(y1, y1g)
xc2 = torch.max(x2, x2g)
yc2 = torch.max(y2, y2g) intsctk = torch.zeros(x1.size()).to(output)
mask = (ykis2 > ykis1) * (xkis2 > xkis1)
intsctk[mask] = (xkis2[mask] - xkis1[mask]) * (ykis2[mask] - ykis1[mask])
unionk = (x2 - x1) * (y2 - y1) + (x2g - x1g) * (y2g - y1g) - intsctk + 1e-7
iouk = intsctk / unionk area_c = (xc2 - xc1) * (yc2 - yc1) + 1e-7
miouk = iouk - ((area_c - unionk) / area_c)
iou_weights = bbox_inside_weights.view(-1, 4).mean(1) * bbox_outside_weights.view(-1, 4).mean(1)
iouk = ((1 - iouk) * iou_weights).sum(0) / batch_size
miouk = ((1 - miouk) * iou_weights).sum(0) / batch_size return iouk, miouk ## the iouk is regular IoU value, the miouk is the GIoU value.

Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression的更多相关文章

  1. 论文阅读笔记四十七:Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression(CVPR2019)

    论文原址:https://arxiv.org/pdf/1902.09630.pdf github:https://github.com/generalized-iou 摘要 在目标检测的评测体系中,I ...

  2. 『计算机视觉』Generalized Intersection over Union: A Metric and A Loss for Bounding BoxRegression

    论文地址:Generalized Intersection over Union 一.相关工作 目标检测精度标准 度量检测优劣基本基于 IOU,mAP 是典型的基于 IOU 的标准,但是 mAP 仅有 ...

  3. 目标识别(object detection)中的 IoU(Intersection over Union)

    首先直观上来看 IoU 的计算公式: 由上述图示可知,IoU 的计算综合考虑了交集和并集,如何使得 IoU 最大,需要满足,更大的重叠区域,更小的不重叠的区域. 两个矩形窗格分别表示: 左上点.右下点 ...

  4. Intersection over Union(IoU) algorithms

    IoU算法可用与评估两个多维度数据的相似度,举一个实际应用,做CV,目标检测,我们需要评估模型的识别准确率,不同于二元类问题,普通的评估算法不合适,于是用到了这个算法,这个算法简单易懂,评估效果也不错 ...

  5. CVPR2019目标检测方法进展综述

    CVPR2019目标检测方法进展综述 置顶 2019年03月20日 14:14:04 SIGAI_csdn 阅读数 5869更多 分类专栏: 机器学习 人工智能 AI SIGAI   版权声明:本文为 ...

  6. IoU、GIoU、DIoU、CIoU损失函数

    IoU.GIoU.DIoU.CIoU损失函数 目标检测任务的损失函数由Classificition Loss和Bounding Box Regeression Loss两部分构成.目标检测任务中近几年 ...

  7. CVPR2019目标检测论文看点:并域上的广义交

    CVPR2019目标检测论文看点:并域上的广义交 Generalized Intersection over Union Generalized Intersection over Union: A ...

  8. 非极大抑制睔PYTHON实现

    非极大抑制(Non-maximum suppression)python代码实现原创Butertfly 发布于2018-11-20 18:48:57 阅读数 293 收藏展开定位一个物体,最后算法就找 ...

  9. 大规模视觉识别挑战赛ILSVRC2015各团队结果和方法 Large Scale Visual Recognition Challenge 2015

    Large Scale Visual Recognition Challenge 2015 (ILSVRC2015) Legend: Yellow background = winner in thi ...

随机推荐

  1. 浅析MySQL使用 GROUP BY 分组聚合与细分聚合

    原创文章,转载请注明出处:http://www.cnblogs.com/weix-l/p/7521278.html: 若有错误,请评论指出,谢谢! 1. 聚合函数(Aggregate Function ...

  2. WCF 学习系列——WCF的学习基础

    这个系列的博客由WCF4 高级编程学习记录,如有错误请指正. 首先介绍一些概念: SOA: (Service-Oriented Architecture 面向服务架构),一种架构方法,也是一种编程模式 ...

  3. 分布式调度平台XXL-JOB源码分析-执行器端

    上一篇文章已经说到调度中心端如何进行任务管理及调度,本文将分析执行器端是如何接收到任务调度请求,然后执行业务代码的. XxlJobExecutorApplication为我们执行器的启动项,其中有个X ...

  4. redis 缓存问题,转载:https://www.cnblogs.com/liangsonghua/p/www_liangsonghua_me_22.html

    缓存穿透: 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且处于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义 ...

  5. Python程序格式规范

    Python是一种计算机编程语言.计算机编程语言和我们日常使用的自然语言有所不同,最大的区别就是,自然语言在不同的语境下有不同的理解,而计算机要根据编程语言执行任务,就必须保证编程语言写出的程序决不能 ...

  6. 学习Spring-Data-Jpa(五)---可嵌入对象和元素集合的使用

    1.场景一:地址信息(省.市.县.详细地址)在很多实体中都需要,比如说作者有地址,订单也有地址,但是他们的地址并不能独立与他们存在,所以地址不能映射为实体,那么我们就需要在作者实体和订单实体中都添加这 ...

  7. VS - Microsoft.Practices.Unity

    PM>  Install-Package Unity Web.config <configSections> <section name="unity" t ...

  8. The Last Goodbye 电影《霍比特人3:五军之战》插曲

    https://music.163.com/#/song?id=29755223 I saw the light fade from the sky我看到天空褪去色彩On the wind I hea ...

  9. Linux学习建议[转]

    端正学习态度学linux不会为了当黑客或者骇客,如果你为了当黑客或骇客而学习Linux,那么你离进监狱不远了,只是时间早晚而已.很多小白都知道“黑客攻击工具”很多来源与Linux平台上的,我也曾指导过 ...

  10. mysqli扩展有一系列的优势,相对于mysql扩展的提升主要优势有哪些?

    mysqli扩展有一系列的优势,相对于mysql扩展的提升主要优势有哪些? 面向对象接口 prepared语句支持(译注:关于prepare请参阅mysql相关文档) 多语句执行支持 事务支持 增强的 ...