Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Detection

个人感觉从理论上在实际场景下应该很有效,在自己的数据集上使用也涨了2个点。现实中标注的数据大部分不确定性都很很强、场景也更复杂。引入Generalized Focal Loss可以有效的提升鲁棒性。

一、主要贡献

作者认为现有的密集检测器存在问题(以FCOS为例):

image.png

1、 classification scoreiou/centerness score的训练过程和推理过程不一致

  • 在训练过程中两个分支各自独立进行训练,但是在推理阶段,却相乘作为nms score,这中间必然会存在一个gap
  • 训练阶段使用的监督信号不同,classification score使用正负样本进行训练;iou/centerness score仅仅使用正样本进行训练。就很有可能引发这么一个情况:一个classification score相对低的真正的负样本,由于预测了一个不可信的极高的centerness score,而导致它可能排到一个真正的正样本的前面。
    image.png

2、bounding box regression的表示不够灵活

  • 目前的广泛使用的方法是将target box coordinates视作一个Dirac delta分布。
  • Gaussian YOLOV3中将其视作一个Gaussian分布。
    但是在实际场景下,真实的分布有很强的不确定性。如下图所示,在不确定的边界处,分布比较平坦。
    image.png

因此作者将classification scoreiou score合并在一个分支,将target box coordinates使用任意分布进行建模来表示回归框,提出了Generalized Focal Loss,由Quality Focal LossDistribution Focal Loss组成。

  • QFL:保留Focal Loss平衡正负、难易样本的特性,又需要让其支持连续数值的监督。
  • DFL:使用任意分布进行建模来表示回归框。

二、具体方法

image.png

可以看出GFL和之前方法的不同之处。

1、Focal loss

FL(p) = {-(1-p_t)}^{\gamma}\log(p_t),p_t=\begin{cases} p,\quad when \quad y=1\\ 1-p, \quad when \quad y=0\\ \end{cases} \\y \in [0,1],\quad p_t \in [0,1]

2、QFL

QFL(\sigma)=-|y-\sigma|^{\beta}[(1-y)\log(1-\sigma)+y\log(\sigma)]
完整的保留了focal loss的结构,为了支持连续值监督,将{(1-p_t)}^{\gamma}变成|y-\sigma|^{\beta},全局最小解即是\sigma = y时。实际场景下测试\beta=2时,效果最好。
以下参考mmdetection中的实现,先将所有样本都视作negative samples计算loss,再计算positive samplesloss

  • 多类别分类使用sigmoid
  • y = iou score * one hot label,作者称之为soft one hot label
  • 损失最后除以正样本数量进行平均
@weighted_loss
def quality_focal_loss(pred, target, beta=2.0):
    r"""Quality Focal Loss (QFL) is from `Generalized Focal Loss: Learning
    Qualified and Distributed Bounding Boxes for Dense Object Detection
    <https://arxiv.org/abs/2006.04388>`_.

    Args:
        pred (torch.Tensor): Predicted joint representation of classification
            and quality (IoU) estimation with shape (N, C), C is the number of
            classes.
        target (tuple([torch.Tensor])): Target category label with shape (N,)
            and target quality label with shape (N,).
        beta (float): The beta parameter for calculating the modulating factor.
            Defaults to 2.0.

    Returns:
        torch.Tensor: Loss tensor with shape (N,).
    """
    assert len(target) == 2, """target for QFL must be a tuple of two elements,
        including category label and quality label, respectively"""
    # label denotes the category id, score denotes the quality score
    label, score = target

    # negatives are supervised by 0 quality score
    pred_sigmoid = pred.sigmoid()
    scale_factor = pred_sigmoid
    zerolabel = scale_factor.new_zeros(pred.shape)
    loss = F.binary_cross_entropy_with_logits(
        pred, zerolabel, reduction='none') * scale_factor.pow(beta)

    # FG cat_id: [0, num_classes -1], BG cat_id: num_classes
    bg_class_ind = pred.size(1)
    pos = ((label >= 0) & (label < bg_class_ind)).nonzero().squeeze(1)
    pos_label = label[pos].long()
    # positives are supervised by bbox quality (IoU) score
    scale_factor = score[pos] - pred_sigmoid[pos, pos_label]
    loss[pos, pos_label] = F.binary_cross_entropy_with_logits(
        pred[pos, pos_label], score[pos],
        reduction='none') * scale_factor.abs().pow(beta)

    loss = loss.sum(dim=1, keepdim=False)
    return loss

3、DFL

考虑到真实的分布通常不会距离标注的位置太远,所以作者又额外加了个DFL,希望网络能够快速地聚焦到标注位置附近的数值,使得他们概率尽可能大。以下为推导过程:

概率密度函数:
\int_{-\infty}^{+\infty} \delta(x-y) \mathrm{d} x=1
因此,y可以理解对应的期望
y=\int_{-\infty}^{+\infty} \delta(x-y) \mathrm{d} x
根据ATSS中的结论,易求得其值域,在COCO数据集上是16,y\in[0,16],因此可得下式。
\hat{y}=\int_{-\infty}^{+\infty} P(x) x \mathrm{~d} x=\int_{y_{0}}^{y_{n}} P(x) x \mathrm{~d} x
使用离散值进行近似:
\hat{y}=\sum_{i=0}^{n} P\left(y_{i}\right) y_{i}
所以,在经过softmax函数后,可以保证\sum_{i=0}^{n} y_{i}=1,可以进行端到端的训练。为了使网络快速地聚焦到目标位置的邻近区域的分布中,最终DFL为:
\operatorname{DFL}\left(\mathcal{S}_{i}, \mathcal{S}_{i+1}\right)=-\left(\left(y_{i+1}-y\right) \log \left(\mathcal{S}_{i}\right)+\left(y-y_{i}\right) \log \left(\mathcal{S}_{i+1}\right)\right)
因为DFL仅仅使用positive samples进行训练,因此不存在不平衡的问题,只需要用简单的cross entroy

以下参考mmdetection中的实现:

@weighted_loss
def distribution_focal_loss(pred, label):
    r"""Distribution Focal Loss (DFL) is from `Generalized Focal Loss: Learning
    Qualified and Distributed Bounding Boxes for Dense Object Detection
    <https://arxiv.org/abs/2006.04388>`_.

    Args:
        pred (torch.Tensor): Predicted general distribution of bounding boxes
            (before softmax) with shape (N, n+1), n is the max value of the
            integral set `{0, ..., n}` in paper.
        label (torch.Tensor): Target distance label for bounding boxes with
            shape (N,).

    Returns:
        torch.Tensor: Loss tensor with shape (N,).
    """
    dis_left = label.long()
    dis_right = dis_left + 1
    weight_left = dis_right.float() - label
    weight_right = label - dis_left.float()
    loss = F.cross_entropy(pred, dis_left, reduction='none') * weight_left \
        + F.cross_entropy(pred, dis_right, reduction='none') * weight_right
    return loss

由于y已经被离散化,但是实际y应该是一个连续值,因此作者使用了左右取整得到y_iy_{i+1},然后用距离进行加权,计算DFL

4、GIOU

box的损失函数使用了GIOU,这里不再赘述。

最后可得GFL损失函数:由QFLDFLGIOU组成。
\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)

三、相关的实验结果

1、和不同的质量表示的方法进行对比、cls loss替换成QFL的涨点、\beta系数的选择

image.png

2、针对框回归不同建模方法的可视化差异

image.png

3、DFL的有效性, n的选择、n间隔的选择

image.png

4、QFLDFL的增益是正交的

image.png

5、和别的方法进行对比

image.png

四、补充实验

1、不同分布的建模方法

image.png

2、相比Dirac delta分布建模,General更稳定更鲁棒
加入0.1的扰动,对比两种方法的误差

image.png

3、使用iou label比使用centerness label更加稳定

image.png

4、可视化图片

image.png

image.png

五、对应yolo系列中的改动

yolo系列中obj loss是正负样本参与训练,cls和box只有正样本参与训练,在推理时会取obj score和cls score的乘积判断是否是正例。因此需要将obj 和 cls进行合并,并且乘以iou,计算QFL损失;box改成DFL loss。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容