【论文阅读】【二维目标检测】Generalized Focal Loss
发布日期:2021-09-16 07:31:54 浏览次数:1 分类:技术文章

本文共 2316 字,大约阅读时间需要 7 分钟。

文章目录

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

地址:https://arxiv.org/pdf/2006.04388.pdf

Motivation

物体分类

在object detection任务中,是存在分类和回归的两个结果的。为了减少冗余检测,通常使用NMS来消除低质量的框,那么NMS用的分数最直接想到的就是分类分数。(其实也是因为object detection中最后出来也只有这一个分数)

但上述方法就会出现一个问题,分类问题的分数只受类别监督,是与框的定位无关的。也就是说,有可能出现一个预测框,它的IoU比较小但分类分数很高,这样经过NMS就会保留下来,而且抑制掉IoU大但分类分数低的框。这是我们不想见到的,而且评价一个框的好坏标准其实就是IoU。换一种说法,也就是用分类分数做NMS这个过程,是与IoU割裂的,因为分类分数在训练过程中是与IoU无关的。

那这就有个想法:除了分类分数,再预测一个IoU分数,在预测过程中,将分类分数和IoU分数相乘,得到的分数送入NMS。这样NMS过程中,就会引入IoU,从而解决上面的问题。这就是FCOS(FCOS: Fully Convolutional One-Stage Object Detection)所做的事情。

但本文提出,这仍然有个问题,在训练的时候,IoU分数都是用正样本训练的,也就是说正样本的IoU分数可以很好的被预测。但负样本的IoU分数则是一个未定义的问题,在inference过程中,负样本也会被预测一个IoU分数,这个分数可能很大,也可能很小,这就会出现问题:一个IoU分数很高的负样本最终的得分高于一个IoU分数较低的正样本,经过NMS就会出错。就例如下图中的AB样例:

在这里插入图片描述

也就是说,FCOS这种预测一个IoU分数的带来的问题,是负样本的IoU分数未定义,在训练过程中未参与训练。那我这里提出一个想法:将负样本的IoU分数置0,也参与训练,正负样本数量平衡用对负样本数量降采样的方式进行训练。这种方式也可以解决负样本IoU分数未定义的问题,不知道效果如何?但就解决方法而言,并不如本问提出方法美观。

框回归

作者提出,之前文章均是将框的边界的分布看作为Dirac delta分布,这种分布并未建模框边界的不确定性。作者提出,使用更通用的分布来建模框的边界。

Method

物体分类

对于物体分类这个问题,传统的方法是网络输出一个vector,vector中每个元素是代表预测为该类的概率值,这个vector的监督是由物体真是类别生成的one-hot vector。作者提出,一种新的表示方法,输出仍然是一个vector,只不过vector储存的是物体类别概率值乘以框的质量得分。这个vector的监督也随之改变,也是在类别生成的one-hot vector上乘以一个框的质量得分,由于物体只有一个类别,所以其实监督vector中也只有一个值是不等于0的,在0~1之间。

那这个表示有了,loss该怎么写?传统的01分类问题,可以使用focal loss,在新的表示中,vector中的值变成了一个连续变量。作者提出,每个类别分别应用一个sigmoid focal loss。然后再将focal loss改写,使得focal loss可以适用于连续变量:

在这里插入图片描述

框回归

之前的方法均是将框的边界看为Dirac delta分布,然后用L1 Loss构建loss,使得预测值逼近真实值。作者提出了,学习框边界更为一般的分布。这里不讲是怎么推导出来的,只讲是怎么实现的,怎么推导还是推荐看原文。

举例来说,在feature map上,对于一个要预测的物体的左边界,根据物体的中心,选取 [ y 0 , y 1 , . . . , y n ] [y_0, y_1, ... , y_n] [y0,y1,...,yn]个格子,对于每个格子预测一个score。这个socre就是每个格子对应位置是左边界的概率值。那么如果想要求左边界具体位置,就用格子的位置与预测的score做一个加权平均就可以,其实也就是取期望。

在神经网络结构中,这个对应着regression输出n+1维的vector,然后对vector做softmax,使得所有位置的score加起来等于1。

这个n个格子的score的监督如下设计:根据左边界具体位置,寻找与其最近的两个格子,然后按照距离反比设计权重,其他的n-2个格子的score监督设计为0。这样,这种监督保证了对边界预测的能够收敛到真值上。

这样,边界框回归的问题也转为了分类问题,而且监督是在两个格子上不等于0。那既然上面已经给出了对于连续变量的generalized focal loss的形式,那么这个也是类似,也可以写成如下:

在这里插入图片描述

generalized focal loss

把上面两者,可以统一格式进行表示,实质内容不变,就可以写出generalized focal loss。

在这里插入图片描述

实验效果

效果仍然是很厉害,具体详见论文。

总结

这里贴一个知乎回答:https://zhuanlan.zhihu.com/p/147691786

分类分数不适用于NMS这个问题其实很早学术界就有关注,IoU分支的想法,其实可以从yolov1就可以想到。但本文所想的问题,进一步深入,训练和预测过程中的不匹配的问题。除了问题切中要害,解决方式也非常优美,我觉得是一篇很好的文章。

转载地址:https://blog.csdn.net/wqwqqwqw1231/article/details/117424389 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【代码阅读】PointNet++中ball query的CUDA实现
下一篇:【论文阅读】解决类别分布严重不均衡

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年03月01日 18时42分16秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

python 获取到控制符串时跳过_url短链接Python也能制作哦,方便的多! 2019-04-21
python岗位 上海_深扒程序员招聘需求:哪个岗位更好就业,哪个城市薪资更高?... 2019-04-21
java配置d盘绝对路径_Java开发环境安装配置,这些小技能,你get到了吗? 2019-04-21
extjs store 复杂json_ARTS Tips:Java中Json的利器JsonPath 2019-04-21
beetl 页面标签_后台如何传值到beetl的自定义标签? 2019-04-21
maven 打包数据库加密_maven项目实现properties文件加密 2019-04-21
java合肥工业大学考试题库_合肥工业大学java程序设计实验二 2019-04-21
霍尼236主机说明书_霍尼韦尔236 plus报警主机 常见问题 2019-04-21
计算机二级access选择题题库_2019计算机二级access真题题库试题精选(附答案) 2019-04-21
python设计模式案例分析_python-patterns 2019-04-21
shell散点图_Matplotlib中的散点图轮廓 2019-04-21
.stream()获取list的指定两列值_JDK1.8新特性(六):Stream终极操作,轻松解决集合分组等复杂操作... 2019-04-21
ashx 上传文件功能 httppostfile 获取不到_Bootstrap Fileinput上传控件示例 2019-04-21
mysql a b c_实现mysql的a-b-b ,a-b-c结构 2019-04-21
eclipse mysql源码_在eclipse中配置MySQL源码环境(r12笔记第14天) 2019-04-21
mysql和oracle锁_Mysql 锁原理很多和Oracle 相似 2019-04-21
owncloud的安装部署的具体操作方法_Linux系统实战部署私有云网盘 2019-04-21
mysql 主从热备 锁表_用XtraBackup实现MySQL的主从复制快速部署【主不锁表】 2019-04-21
linux mysql 1055_mysql异常ERROR 1055 (42000)说明 2019-04-21
一个交换机下的设备设置2个网段 再下接一个同网段的路由器_5G干货分享 | 爱陆通5G工业路由器端到端通信 (电力环网柜场景应用)... 2019-04-21