参考代码:GFocal
这篇文章会探讨将目标检测中边界框的回归问题转换为概率分布的问题,因而需要从传统的边界框范数与IoU回归思想转换到边界框的概率分布上来。对此,对这方面内容不是很理解的朋友可以参考下面这篇文章的内容,从而对加深这篇文章提出GFocal优化方法的理解:
REF:一文了解目标检测边界框概率分布
同时,这篇文章的作者也有对这篇文章进行了说明,详见:大白话 Generalized Focal Loss
1. 概述
导读:让目标检测网络实现对检测质量的感知,是之前一些检测算法努力追求的目标。总结之前的工作,文章对于目标检测质量感知和边界框定位中存在的问题归纳为如下两点:
1)在之前的工作中有IoUNet使用IoU predictor,以及Focos使用Center-ness作为额外检测质量评估的参考维度之一。但是它们存在的共性都是在训练的时候单独进行训练,但是在测试的时候却联合起来,这并不是端到端的,因而其中难免会存在gap;
2)在之前的工作中普遍使用范数或是IoU作为监督度量,通过这些监督度量能够在大多数的场景下取得不错的结果,但是一些模糊或是存在歧义的场景下就会存在问题,导致定位不准确;
对此,文章的方法对检测质量感知的改进是通过将目标的类别与IoU预测结合起来作为检测质量评价,并带入网络进行联合学习。对于检测定位的过程中存在歧义的问题通过引入4个回归变量的概率分布进行表示,从而提升对于这些情况下的定位准确度,并且文章越策概率分布的时候并没有引入YOLO-Gaussian那样的强先验,从而增加了对于复杂概率分布建模的能力和灵活性。在优化的层面上文章引入Focal Loss中的优化策略,将原本离散的 { 0 , 1 } \{0,1\} { 0,1}Focal loss问题转化为连续的 [ 0 , 1 ] [0,1] [0,1]通用优化,从而构建对于目标检测框质量(QFL:Quality Focal Loss)和定位概率分布 (DFL:Distribution Focal Loss)的有效优化。并在它俩的基础上提出了一种具有统一泛化特性的Focal Loss形式,也即是文章中提到的GFL(Generalized Focal Loss)。
文章对于算法改进的Insight主要是基于如下的两点观察:
- 1)在使用IoU预测的网络中,会存在IoU预测值很大但是其分类置信度比较低的情况,也就是下图中的图a,对分类置信度和IoU预测值进行分布可视化得到图b:
从上图中可以看出在IoU预测值和分类置信度组合并不是一个严格的线性关系的,因而就存在一些低质量的预测结果存在与最后的检测算法输出结果中(组合起来的置信度使用NMS不能将其排除)。而这样的架构使用的IoU和分类分支是相互独立训练的,只是在测试的时候将其组合起来,其流程见下图a图。对此,文章将两者组合起来,这样端到端完成训练(见图b),排除训练与预测的gap;
- 2)在下图中一些目标边界模糊和歧义的场景下检测的边界并不是很好确定,对此文章将边界的回归问题转换为边界概率分布的估计问题,从边界概率分布的角度实现更加准确的目标边界预测;
2. 方法设计
2.1 整体pipline
下图左图中展示了常见的目标检测回归机制,边界框定位使用的是Dirac分布,类别是用的是one-hot形式,并没有与边界框的质量进行联合感知。
而上图的右图是文章提出的方案,对于边界框定位使用任意概率分布的形式拟合,并且在类别预测中添加了对IoU的感知能力,从而构造soft one-hot标签。
2.2 Focal Loss属性的实现与统一
2.2.1 QFL
按照文章的内容这部分是在原有分类任务的基础上添加对于检测质量(IoU)的感知,对此需要将分类与IoU度量组合起来。从值域来讲分类是 { 0 , 1 } \{0,1\} {
0,1}的离散变量,而IoU是 [ 0 , 1 ] [0,1] [0,1]的连续变量,则将其组合之后其值域也是 [ 0 , 1 ] [0,1] [0,1]的连续变量。参考原有Focal loss的范式:
F L ( p ) = − ( 1 − p t ) γ l o g ( p t ) FL(p)=-(1-p_t)^\gamma log(p_t) FL(p)=−(1−pt)γlog(pt)
其中,
p t = { p , if y=1 1 − p , if y=0 p_t = \begin{cases} p, & \text{if y=1} \\ 1-p, & \text{if y=0} \end{cases} pt={
p,1−p,if y=1if y=0
那么要将IoU与分类组合起来,原有的softmax激活就适合了,需要将其置换为sigmoid激活函数,其输出标记为 σ \sigma σ,则将其按照Focal Loss的思想添加Focal属性便得到:
Q F L ( σ ) = − ∣ y − σ ∣ β ( ( 1 − y ) l o g ( 1 − σ ) + y l o g ( σ ) ) QFL(\sigma)=-|y-\sigma|^\beta((1-y)log(1-\sigma)+ylog(\sigma)) QFL(σ)=−∣y−σ∣β((1−y)log(1−σ)+ylog(σ))
其中, β = 2 \beta=2 β=2是focal因子。
PS: 这里说到的组合是如下的形式:
y i = { I o U ( b p r e d , b g t ) , if i=c 0 , otherwise y_i = \begin{cases} IoU(b_{pred},b_{gt}), & \text{if i=c} \\ 0, & \text{otherwise} \end{cases} yi={
IoU(bp