目标检测:Generalized Focal Loss(NIPS2020)

2023-11-15

Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Detection
CCF-A
Xiang Li/Wenhai Wang/Lijun Wu/Shuo Chen/Xiaolin Hu/JunLi/Jinhui Tang/Jian Yang
arXiv: Computer Vision and Pattern Recognition neural information processing systems Jun 2020

论文要解决单阶段目标检测中的两个问题:

1. 训练和推理时定位质量评估与分类分数是非一致的( Inconsistent usage of localization quality estimation and classification score between training and inference)

在这里插入图片描述
如上图左半边所示,现有方法对分类分数和iou感知分数的训练与推理策略是不一致的,这可能会导致推理时出现论文figure2中的极端情况。理论上预测的IoU很高时cls分数也应该很高(框得很准那分类判断也应该不差),反之同理。文章提出的解决办法就是将两者合并为一个统一的表达,即一个单变量。为了更有效优化这种新的表达方式,作者基于Focal loss提出了 Quality Focal Loss (QFL)。

2. 边界框的表征是不够灵活的(Inflexible representation of bounding boxes)

在这里插入图片描述

在边界框回归任务中,要回归的四个坐标是服从狄拉克δ分布(Dirac delta distribution)的网络的预测结果是这分布最高概率值所对应的横坐标,但由于遮挡阴影模糊等原因,groundtruth有时并不是那么可信,即其实边界应该是一种很模糊的情况,狄拉克δ分布不能很好表示这类情况,高斯分布也是同样的问题,无法应对所有情形。
作者提议通过直接学习边界框在其连续空间中四个离散化概率分布来表示边界框位置坐标的任意分布。这样可以得到更精准更可靠的边界框估计,同时学到更多潜在的分布。进而提出了 Distribution Focal Loss(DFL),基于任意和灵活的分布下,快速并专注于学习边界框连续位置周围的概率值。作者认为边界框的概率分布应该是如下图所示的:
在这里插入图片描述

作者根据两个问题所提出的解决方法统称为GFL,目前听着还是比较模糊,我们沿着文章思路对这两个问题继续进行更深入的解析:
在这里插入图片描述

Quality Focal Loss (QFL)

如上图中QFL所示,分类分支的标签 y y y是soft one-hot 标签,某类的概率值代表了该类下预测框与gt的IoU,即预测框的质量, y ∈ [0, 1]。
首先回顾Focal loss:
在这里插入图片描述
其中的缩放因子 ( 1 − p t ) γ (1−pt)^{\gamma} (1pt)γ在训练中自动降低简单例子的贡献,提高困难例子的比重。
作者把FL的两个部分进行了扩展, 以用于学习soft one-hot或者说连续的概率值:
(1)交叉熵部分 − log ⁡ ( p t ) - \log(p_{t}) log(pt) 扩展为了 − [ ( 1 − y ) log ⁡ ( 1 − σ ) + y log ⁡ ( σ ) ] -[(1-y) \log (1-\sigma)+y \log (\sigma)] [(1y)log(1σ)+ylog(σ)], 其中 σ是类别的输出概率,经sigmoid得到。可以看做是将原式做了分解加权,标签y越接近1, log ⁡ ( σ ) ) \log (\sigma)) log(σ)) 的权重就越大;y越接近0, log ⁡ ( 1 − σ ) \log (1-\sigma) log(1σ)的权重就越大,两项系数和为1。
(2) 缩放因子 ( 1 − p t ) (1−pt) (1pt)泛化为σ到y的绝对距离,这个很好理解,FL中是σ到0或1的绝对距离。

最终得到QFL表达式如下:
在这里插入图片描述
作者在对比实验中包含以下几种cls 分数表征的形式,第一种的代表应该是RetinaNet,还有YOLO v1,第二种代表就是FOCS,第三种有YOLOv2,v3,v4,v5,yolox应该也属于第三种,但多了一个obj分支。在figure7的对比实验结果中,QFL大多取得了最佳结果。总之,这个部分的改进能使得训练与推理时cls分数的产生完全一致,在NMS中能得到更好的BBox。
在这里插入图片描述

Distribution Focal Loss (DFL)

首先阐述传统的传统的BBox回归是将标签 y y y建模为狄拉克δ分布(一个冲激函数的分布):
在这里插入图片描述
y y y 可以根据下式重建:
在这里插入图片描述
将分布推广到 P ( x ) P(x) P(x),那么由上式,根据模型得到的任意分布 P ( x ) P(x) P(x) ,则可以得到预测值 y ^ \hat{y} y^
在这里插入图片描述
其中积分上下限是标签 y y y的范围,将 y y y的取值范围离散化为n+1个点,可得:
在这里插入图片描述
作者还说, P ( y i ) P(y_{i}) P(yi)可以很简单地由n+1个单元的Softmax层实现,记作 S ( i ) S(i) S(i)。 同时,由于 S ( i ) S(i) S(i)最终学到的主要是一个单峰值分布(大多数情况下gt的标签真实分布就是接近冲激函数的,只有较少情况比较模糊,分布会比较均匀)。因此,作者设计DFL迫使网络聚焦位于标签 y y y附近的两个预测值 y i y_{i} yi y i + 1 y_{i+1} yi+1对应的概率: S ( i ) S(i) S(i) S ( i + 1 ) S(i+1) S(i+1)
在这里插入图片描述
因为边界框回归只针对正样本进行学习,不存在类别不平衡的问题,所以没有缩放因子项。看到这个式子不禁感叹真的巧妙。作者还给出了S的两个全局最小值解,以验证该损失的准确性。

Generalized Focal Loss (GFL)

QFL和DFL可以统一为一种形式,作者命名为GFL。
假定网络预测两个概率值为 p y l , p y r p_{y_{l}}, p_{y_{r}} pyl,pyr,这两个p对应的y为 y l 和 y r y_{l}和y_{r} ylyr,那么最终的预测值可表示为:
y ^ = y l p y l + y r p y r ( y l ≤ y ^ ≤ y r ) \hat{y}=y_{l} p_{y_{l}}+y_{r} p_{y_{r}}\left(y_{l} \leq \hat{y} \leq y_{r}\right) y^=ylpyl+yrpyr(yly^yr)

那么GFL可写为:
在这里插入图片描述
作者在补充材料中证明了QFL和DFL是GFL的两个特例。我没看证明,写一下自己的理解,对于QFL
在这里插入图片描述
y l 和 y r y_{l}和y_{r} ylyr分别为0和1,预测的两个概率分别为1- σ \sigma σ σ \sigma σ来对应0和1的概率。
DFL很好理解,在这里插入图片描述
就是缩放系数项的幂次为0时的特例。
相比于传统的检测头,GFL对应的检测头有两大区别:

  • 在推理时直接将cls 分数作为NMS的排序分数,由于糅合了IoU感知,所以作为最后的NMS排序分数是很可靠的。
  • 回归分支的位置预测层不再是4个输出,而是4*(n+1)个数出,每(n+1)个输出预测一个位置信息的概率分布。

训练时的总损失函数定义为:

L = 1 N pos  ∑ z L Q + 1 N pos  ∑ z 1 { c z ∗ > 0 } ( λ 0 L B + λ 1 L D ) \mathcal{L}=\frac{1}{N_{\text {pos }}} \sum_{z} \mathcal{L}_{\mathcal{Q}}+\frac{1}{N_{\text {pos }}} \sum_{z} \mathbf{1}_{\left\{c_{z}^{*}>0\right\}}\left(\lambda_{0} \mathcal{L}_{\mathcal{B}}+\lambda_{1} \mathcal{L}_{\mathcal{D}}\right) L=Npos 1zLQ+Npos 1z1{cz>0}(λ0LB+λ1LD)

Q , B , D \mathcal{Q}, \mathcal{B},\mathcal{D} Q,B,D 分别为QFL,GIoU los和DFL。 N pos  N_{\text {pos }} Npos 为正样本数量, λ 0 和 λ 1 \lambda_{0}和\lambda_{1} λ0λ1是两个超参,文中取2和0.25,用来平衡GIoU los和DFL。
这个 1 { c z ∗ > 0 } \mathbf{1}_{\left\{c_{z}^{*}>0\right\}} 1{cz>0}是指在所有的z个多尺度特征图上只要cls分支的标签大于0该项就为1。

剩下部分主要是实验结果的展示了,就不赘述了。

我的理解:

对于文中的第一个问题,NMS时最佳的排序分数如果剔除类别置信度的影响,就应该是IoU,这样才能将回归最准确的框留下。关于这个问题VarifocalNet: An IoU-aware Dense Object Detector这篇21年的文章有更详细的相关实验设计。
对于第二个问题,之前没有意识到其实BBox回归预测的量其实就是个狄拉克δ分布,也没有看过将BBox回归量做为高斯分布的文章,这篇文章直接做成了任意分布的,而且还是用sofmax就能实现,还是蛮有趣的,感觉数学上很完整。同时很容易想到利用所得到的边界框离散概率分布进行回归质量评估,作者在GFL2中将其实现了。

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

目标检测:Generalized Focal Loss(NIPS2020) 的相关文章

随机推荐

  • C/C++: 生成不重复的一组随机数

    在程序编写过程中 很多情况下回用到随机数 然而单纯的随机数不能保证每一次的数据都不同 下面方法返回一组不重复的数据 1 方法 随机一组数据 std vector
  • 432. 全 O(1) 的数据结构

    题目 请你设计一个用于存储字符串计数的数据结构 并能够返回计数最小和最大的字符串 实现 AllOne 类 AllOne 初始化数据结构的对象 inc String key 字符串 key 的计数增加 1 如果数据结构中尚不存在 key 那么
  • kubernetes最佳实践(二) - dashboard ui和heapster监控部署

    前言 本章节主要包行两个部分 官方dashboard部署 版本是1 6 3 1 5 0我也试过成功的 给dashboard加上仪表盘监控 我们安装heapster为dashboard安装统计功能和仪表盘 如下图 1 安装dashboard
  • kubeadm搭建k8s高可用集群(keepalived+nginx+3master)

    目录 前言 服务器准备 架构讲解 环境初始化 安装keepalived软件 安装nginx软件 初始化k8s节点 安装docker 初始化master01节点的控制面板 master02 master03节点加入集群 node01 node
  • Java中进行H264数据的I帧判断

    要判断从编码器中获取到的一帧Byte数组是I帧还是P帧 首先需要了解H264数据的基本格式 I帧 帧内编码 P帧 前向预测编码 与前一个I帧比较差异 B帧 双向预测编码 与前后帧比较差异 H264流 首帧数据为SPS和PPS 后面为IPPP
  • 旅行售货员问题-回溯法

    排列树问题 问题描述 某售货员要到若干城市去推销商品 已知各城市之间的路程 旅费 他要选定一条从驻地出发 经过每个城市一遍 最后回到驻地的路线 使总的路程 总旅费 最小 输出结果
  • Android傻瓜式脚本录制

    网易游戏的AirtestIDE是目前比较优秀的脚本录制工具 它不需要手机ROOT 也不需要其他的任何操作 直接普通的手机就可以在线调试 执行脚本 而且支持跨平台 也就是说PC WEB IOS它一样行 如上图 Airtest 是图像匹配的方式
  • 解决goland代码全部莫名报错 找不到依赖的问题

    我遇到的问题是 代码在一台电脑上完全能够运行 切到另一台电脑 git pull之后 代码依旧能运行 但goland识别到依赖全部报错 找不到各种依赖 go mod download未能解决问题 因为代码能跑 说明第三方包都安装了 解决方案
  • matlab实现RCNN(二)

    本文在MatlabR2016b上使用自带的深度学习工具实现RCNN来进行车辆检测 实验环境 训练图片数量 825 网上收集 部分公共数据集 图片车辆数量 2300 对每张图片手工标注label得到 实验环境 MatlabR2016b 自带深
  • Matlab实现自适应动态规划多层神经网络的算例汇总

    使用MATLAB实现自适应动态规划 ADP 多层神经网络的算例 包括扭摆系统 仿射非线性算例以及 质量 弹簧 阻尼 系统 扭摆系统 torsional pendulum system 文献出处 1 Liu D Wei Q Policy It
  • 大数据模型部署思路

    提出问题 以神经网络为例 MATLAB可以用训练集来训练数据 随后用测试集来检测模型准确度 最后用该模型来决策新数据 在大数据平台下如何训练数据呢 又如何用训练好的模型对新数据进行决策呢 方法1 spark自带机器学习库mlib 用原生机器
  • bootstrap-table按住Shift多选设计思路-优化

    在网上找到bootstra table按住shift实现多选的思路后 进行改进 实现批量选中 批量取消选中 批量选中后取消部分选中并保留剩下选中项 向上 向下批量操作 参考地址 https blog csdn net qq 36360308
  • 计算机二级Java(第一份)

    1 1 第三范式是在第二范式的基础上消除了 非主属性对键的传递函数依赖 第三范式是为了消除数据库中关键字之间的依赖关系 2 冯诺依曼 输入 存储 运算 控制 输出 3 一般情况下 划分计算机四个发展阶段的主要依据是 计算机所采用的基本元器件
  • PPTP协议简述

    http jiaoyu 3158 cn 20121128 n4230270592726 html PPTP Point to Point Tunnel Protocol 点对点隧道协议 是建立在PPP Point to Point 点对点协
  • c#泛型

    参考博文 http www cnblogs com 1175429393wljblog p 5519701 html 泛型类型参数 其是一个占位符 不是一个真正的类型 而更像是一个类型的蓝图 当我们在声明 实例化该类型的变量时 则把T改为指
  • c#中字符串编码方式的转换,附带程序uft8到gb2312的互换

    前面做一个基于sybase的mis系统 由于sybase的后台是cp850编码 而 net平台不支持cp850编码 所以在程序中所有从数据库读出的中文都显示为 于是考虑在 net 平台中转换字符编码 于是查看了 net中字符编码的类Syst
  • error C4996: ‘strcpy‘: This function or variable may be unsafe. Consider using strcpy_s instead.

    Hello everyone 我是鲁班 一个热衷于科研和软开的胖子 出现这个错误时 是因为strcpy函数不安全造成的溢出 解决方法是 找到 项目属性 点击 C 里的 预处理器 对 预处理器 进行编辑 在里面加入一段代码 CRT SECUR
  • Error:Cannot build artifact xxx:war exploded' because it is included into a circular dependency

    Error Cannot build artifact xxx war exploded because it is included into a circular dependency 解决方案 IDEA 项目报错 Error Cann
  • python遍历目录压缩文件夹_干货

    如何遍历查找出某个文件夹内所有的子文件呢 并且找出某个后缀的所有文件 walk功能简介 os walk 方法可以用于在文件目录中进行查找和遍历操作 os walk 方法是一个简单易用的文件 目录遍历器 可以帮助我们高效的处理文件 目录方面的
  • 目标检测:Generalized Focal Loss(NIPS2020)

    Generalized Focal Loss Learning Qualified and Distributed Bounding Boxes for Dense Object Detection CCF A Xiang Li Wenha