【IoU Loss】《UnitBox: An Advanced Object Detection Network》

2023-11-13

在这里插入图片描述

在这里插入图片描述
ACM MM-2016(Proceedings of the 24th ACM international conference on Multimedia)



1 Background and Motivation

基于 CNN 的 object detection 方法,在各种应用中大显身手,当前的方法基本都遵循着如下的 pipeline

  • 提取 region proposals,eg,Selective Search, EdgeBoxes
  • 用 CNN 对 region proposals 进行 recognition and categorization
  • bounding box regression methods 来精修 localization

遵循这样的 pipeline,object detector 往往由于 region proposals methods 的effectiveness(仅利用 low-level feature 来产生,质量往往不行,sensitive to the local appearance changes) 和 efficiency(多,密集—慢) 而表现不佳

为了克服上述困难,

  • faster rcnn 用 RPN 网络来提速,但由于 ratio 和 scale 是 pre-designed and fixed,很难处理 large shape variations 和 small objects

  • DenseBox 直接回归 pixel 与 gt 的四个边界距离,然后用 l2 loss!如下图

在这里插入图片描述
缺点是,孤立的来优化 four-side distances. It goes against the intuition that those variables are correlated and should be regressed jointly.

2 Advantages / Contributions

提出 IoU loss,

  • faster training convergence
  • enabled with variable-scale training
  • best performance among all published methods on the FDDB benchmark

3 Method

任意的 pixel ( i , j ) (i,j) (i,j),GT 可以定义如下为 4-d 的向量

x ~ i , j = ( x ~ t i , j , x ~ b i , j , x ~ l i , j , x ~ r i , j ) \widetilde{x}_{i,j} = (\widetilde{x}_{t_{i,j}},\widetilde{x}_{b_{i,j}},\widetilde{x}_{l_{i,j}},\widetilde{x}_{r_{i,j}}) x i,j=(x ti,j,x bi,j,x li,j,x ri,j)

如图1 所示, t , b , l , r t,b,l,r tblr 分别上下左右, x ~ t i , j , x ~ b i , j , x ~ l i , j , x ~ r i , j \widetilde{x}_{t_{i,j}},\widetilde{x}_{b_{i,j}},\widetilde{x}_{l_{i,j}},\widetilde{x}_{r_{i,j}} x ti,j,x bi,j,x li,j,x ri,j 表示当前像素到GT的上下左右四个边界的距离!

3.1 L2 Loss Layer

被用在 DenseBox 中

在这里插入图片描述
有两个缺点

  • bbox 是用四个独立的变量,没有大局观和整体性(优化的时候,可能一两个变量优化的完美,其它的不太行,整体效果可能也不行),有的 bbox 和 GT loss 很小,但定位的很不准,例如下面这种情况

在这里插入图片描述
如果当前像素在两个矩形的中间,一个矩形是 GT,一个矩形是预测的 bbox,那么 loss 为 0

  • unnormalized,没有归一化,相同 IoU 情况下,大 bbox 定位的不准确带来的损失惩罚可能比小 bbox 的多(绝对大小——像素角度、相对大小 IoU 角度)

3.2 IoU Loss Layer: Forward

在这里插入图片描述
这就是给的图一 IoU loss 的细节版,

x ~ ≠ 0 \widetilde{x} \neq 0 x =0 很关键,只统计落在 GT 范围内的 pixel

I I I 是交集, U U U 是并集,最后 IoU Loss 为交并比的负对数,

负对数的函数曲线如下所示,

import numpy as np
import matplotlib.pyplot as plt 

def log2x(x):
    return -np.math.log2(x)

x = np.arange(0.01,1,0.01)
y = [log2x(i) for i in x]

# gca = get current axis
ax = plt.gca() # x,y

# spines = 上下左右四条黑线
ax.spines['right'].set_color('none') # 让右边的黑线消失
ax.spines['top'].set_color('none')  # 让上边的黑线消失

ax.xaxis.set_ticks_position('bottom') # 把下面的黑线设置为x轴
ax.yaxis.set_ticks_position('left')   #  把左边的黑线设置为y轴

ax.spines['bottom'].set_position(('data',0)) # 移动x轴到指定位置,本例子为0
ax.spines['left'].set_position(('data',0))   # 移动y轴到指定位置,本例子为0

    
plt.plot(x,y)
plt.show()

在这里插入图片描述

【python】matplotlib(上)

IoU越大,loss越小,重合的话,loss为 0,

优点,IoU Loss 把 bbox 当成一个整体,IoU本身就属于 [0,1] 之间,自带归一化性质

3.3 IoU Loss Layer: Backward

配合算法1 的公式,我们来看看 IoU Loss 的反向传播

  • X = ( x t + x b ) ∗ ( x l + x r ) X = (x_t +x_b) * (x_l + x_r) X=(xt+xb)(xl+xr)

在这里插入图片描述

  • I = I h ∗ I w = [ m i n ( x t , x ~ t ) + m i n ( x b , x ~ b ) ] ∗ [ m i n ( x l , x ~ l ) + m i n ( x r , x ~ r ) ] I = I_h*I_w=[min(x_t,\widetilde{x}_t)+min(x_b,\widetilde{x}_b)]*[min(x_l,\widetilde{x}_l)+min(x_r,\widetilde{x}_r)] I=IhIw=[min(xt,x t)+min(xb,x b)][min(xl,x l)+min(xr,x r)]

在这里插入图片描述

  • U = X + X ~ − I U = X+\widetilde{X}-I U=X+X I I o U = I U IoU = \frac{I}{U} IoU=UI L = − l n ( I o U ) L=-ln(IoU) L=ln(IoU)

在这里插入图片描述
可以看到,反向传播时候, ▽ x X \bigtriangledown_xX xX 是惩罚预测 bbox 的面积的,面积越大,梯度越大,要更新的越多,说明错误的越多,反过来,面积越小,梯度越小! ▽ x I \bigtriangledown_xI xI 是惩罚重叠区域的,重叠的越多,梯度越小,重叠越少,梯度越大!从反向传播可以看出,bbox 面积越小越好,重叠区域越大越好!,极限情况下重叠,上面的公式是等于 0 的

3.4 UnitBox Network

在这里插入图片描述
两个分支,每个 pixel 有对应的4个坐标,和对应的 score

网络模仿 VGG,有三个输入

  • 原图
  • con fidence heatmap:GT 覆盖范围内外 positive 和 negative!与原图大小一样,二值mask,positive 区域应该是 FDDB 标签中的椭圆区域
  • bounding box heatmaps:positive 区域中,与 GT 上下左右的距离

预测的时候,confidence heatmap 接的是 sigmoid activation function

4 Experiments

4.1 Datasets

  • FDDB

在这里插入图片描述
http://vis-www.cs.umass.edu/fddb/samples/

这个数据集是用椭圆来标注人脸的,以椭圆的中心为中心,生成 bbox

4.2 Effectiveness of IoU Loss

VGG 初始化,WideFace 数据集 fine-tune

  • Convergence

在这里插入图片描述
可以看到 IoU loss 比 L2 loss 收敛的更快、更稳,miss rate 也更低

  • FP-recall Curves

在这里插入图片描述

  • Scale Variation

在这里插入图片描述
把测试图片 resize 60-960 pixel 不等,比较 IoU loss 与 L2 loss 的 scale variation,可以看出,IoU 很强

4.3 Performance of UnitBox

在这里插入图片描述
ROC 曲线可以看出,领先还是挺明显的

5 Conclusion(own)

  • 从反向传播的角度来解释 Loss 的作用,很不错哟

  • 记住 FDDB 人脸数据集的标签是椭圆,有章子怡和巩俐

  • bbox 是用四个独立的变量来 learning 的缺点,没有大局观和整体性(优化的时候,可能一两个变量优化的完美,其它的不太行,整体效果可能也不行)

  • 顺便再回忆一下 P-R 曲线,ROC 曲线

  • 缺点(摘抄自深入浅出Yolo系列之Yolov3&Yolov4&Yolov5核心基础知识完整讲解
    在这里插入图片描述
    问题1: 即状态 1 的情况,当预测框和目标框不相交时,IOU=0,无法反应两个框距离的远近,此时损失函数不可导,IOU_Loss无法优化两个框不相交的情况。
    问题2: 即状态 2 和状态 3 的情况,当两个预测框大小相同,两个 IOU 也相同,IOU_Loss 无法区分两者相交情况的不同。
    因此 2019 年出现了 GIOU_Loss来进行改进。

  • 发展:Smooth L1 Loss-> IoU Loss(2016)-> GIoU Loss(2019)-> DIoU Loss(2020)->CIoU Loss(2020)

附录 A—— IoU Coding

def compute_iou(rec1, rec2):
    """
    computing IoU
    :param rec1: (y0, x0, y1, x1), which reflects
            (top, left, bottom, right)
    :param rec2: (y0, x0, y1, x1)
    :return: scala value of IoU
    """
    areas1 = (rec1[3] - rec1[1]) * (rec1[2] - rec1[0])
    areas2 = (rec2[3] - rec2[1]) * (rec2[2] - rec2[0])
    left = max(rec1[1],rec2[1])
    right = min(rec1[3],rec2[3])
    top = max(rec1[0], rec2[0])
    bottom = min(rec1[2], rec2[2])
    w = max(0, right-left)
    h = max(0, bottom-top)
    return w*h/(areas2+areas1-w*h)


if __name__ == '__main__':
    rect1 = [661, 27, 679, 47]
    # (top, left, bottom, right)
    rect2 = [662, 27, 682, 47]
    iou = compute_iou(rect1, rect2)
    print(iou)

来自 目标检测算法中规则矩形和不规则四边形IOU的Python实现

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【IoU Loss】《UnitBox: An Advanced Object Detection Network》 的相关文章

随机推荐

  • aix date 脚本_AIX下取前一天时间

    AIX的默认dtae命令是不支持 d参数的 导致大家写脚本很痛苦 没法简单取得前一天的时间 下面有简单方式可以取得 YESTERDAY TZ aaa24 date Y m d echo YESTERDAY 或者是 bin sh TZ TZ
  • Java基础面试题

    怎么理解栈 堆 堆中存什么 栈中存什么 栈是运行时的单位 而堆是存储的单位 栈解决程序的运行问题 即程序如何执行 或者说如何处理数据 堆解决的是数据存储的问题 即数据怎么放 放在哪儿 堆中存的是对象 栈中存的是基本数据类型和堆中对象的引用
  • docker,nvidia-docker安装

    卸载先前的docker Docker 的旧版本被称为 docker docker io 或 docker engine 如果已安装 请卸载它们 sudo apt get remove docker docker engine docker
  • 操作系统笔记整理11——文件和文件系统

    点此链接可跳转到 操作系统笔记整理 目录索引页 参考书籍 计算机操作系统 第四版 汤小丹等编著 文章目录 点此链接可跳转到 操作系统笔记整理 目录索引页 数据项 记录和文件 数据项 记录 文件 文件系统 对象及其属性 对对象操纵和管理的软件
  • 【SP】SubstancePainter安装相关问题

    SP SubstancePainter安装相关问题 安装成功后主要有两个配置问题 驱动和TDR问题 GPU驱动更新 1 从设备管理器中联网搜索驱动会提示以更新至最新版本等类似话语 因此从官网下载驱动 以1050ti显卡为例 下载地址 英伟达
  • 深度学习和图像识别:使用R语言的深入指南

    目录 深度学习简介 准备工作 数据集 构建模型 训练模型 评估模型 结论
  • unity 实现多个物体或单个物体 让其单击物体让其显示再次单击让其隐藏

    unity 实现单击物体让其显示或隐藏 再次单击显示或隐藏 using System Collections using System Collections Generic using Unity Burst CompilerServic
  • SpringBoot去掉jackson并整合Gson

    SpringBoot去掉jackson并整合Gson
  • 微信公众平台——获取用户信息

    第一次握手 获取code code根据用户随机产生 在网页中缓存 注意这个code并不是微信的id 访问 https open weixin qq com connect oauth2 authorize appid redirect ur
  • ngrok服务实现内网穿透

    自建ngrok服务实现内网穿透 名词解释 内网穿透 又叫NAT穿透 是计算机用语 翻译过来就是你的电脑可以直接被你朋友访问 通常我们的电脑是无法自己被访问的 因为我们的电脑缺少自己的独立的ip地址 现在ip稀缺 电信运营商已经不会随便分配固
  • 对手机制造行业供应链系统的一些需求的情景模拟分析

    手机制造行业供应链系统的一些需求的情景模拟分析 一 关键应用列表 关键应用点 管理诉求简述 终端客户的发运管理 客户代管库的管理 在对大的代理商销售过程中 和代理商签订合同后 需要分批分次发运到代理商的各零售终端去 同时还要对未发运部分进行
  • 超文本标记语言(HyperText Markup Language,简称HTML)

    1 什么是HTML HTML是用来描述网页的一种语言 HTML指的是超文本标记语言 HyperText Markup Language 是一种用于创建网页的标准标记语言 HTML不是一种编程语言 而是一种标记语言 标记语言是一套标记标签 H
  • Python最强知识点整理:面向对象封装案例

    面向对象封装案例 目标 封装 小明爱跑步 存放家具 01 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象 然后 让对象调用方法 对象方法的细节 都被
  • BGP基础配置——路由反射器

    目录 前言 一 实验拓扑图 二 实验需求 三 配置步骤 1 AS内建立邻居 2 AS间建立邻居 3 验证邻居关系 4 建立路由反射 五 实验观察 六 总结 前言 网盘资源 https wwa lanzoub com iV6eR0qjhhvg
  • discuz 首页无法打开,报错500错误

    在网上看了好多的案例 都没有很好的解答 刚才研究了下 发现只有首页无法打开 报出http500错误 打开index php后 发现原来是中了木马病毒了 被恶意插入了一段html的淘宝代码 删除了之后 就可以访问了
  • Qt5 信号-槽内容总结

    文章目录 信号与槽 signals slots 简介 信号与槽 信号和槽机制是类型安全 type safe 的 信号 Signal 槽 Slots QObject connect 函数 ConnectionType 参数说明 字符串风格的
  • Linux上查找最大文件的 3 种方法

    Linux上查找最大文件的 3 种方法 第一种 ls 最简单的方法就是借助 ls 命令 因为 ls 命令本身输出是带文件大小信息的 比如 我要列出 bin 目录中的 5 个最大文件 可以 ls lSh bin head 5 第二种 find
  • 2020年网络系统管理改革试点评分标准二

    CII云教学领航中心 题库管理 技术方向 B Windows环境 所属分类 2021 是否样题 否 难易程度 中级 试题类型 项目案例 Windows环境002 试题总分 300分 点击查看试题 考核点1 Dcserver 查看服务器的主机
  • maven下jar包冲突—SLF4J: Class path contains multiple SLF4J bindings

    问题描述 新项目首次部署到linux环境时 tomcat启动成功 startup bat窗口无报错 能访问到8080端口tomcat页面 访问项目所有接口均为404 定位过程 查看webapps logs下catalina日志 启动过程中其
  • 【IoU Loss】《UnitBox: An Advanced Object Detection Network》

    ACM MM 2016 Proceedings of the 24th ACM international conference on Multimedia 文章目录 1 Background and Motivation 2 Advant