目标检测之深度学习专题(一)FCOS-“抛砖引玉“!验证检测模型理解的最好”试金石“——细节决定成败,不看就会败北!

目标检测之深度学习专题(一)FCOS-“抛砖引玉”!验证检测模型理解的最好”试金石“——细节决定成败,不看就会败北!

本系列只针对当前文章内容进行解析,避免出现耦合太多相关内容,方便大家理解快速学习!很多人都知道Fcos的结论和意义,但是知道和理解完全是两回事,爆肝7小时,奉献7个月的功力!


FCOS(Fully Convolutional One-Stage Object Detection )——全卷积目标检测

论文地址:https://arxiv.org/abs/1904.01355
代码:git 代码


前言

全卷积的One stage-anchor free目标检测器(FCOS), 做检测的朋友和同学们大致也了解FOCS,今天本着自己复习的原则,也分享下我对于FCOS的理解,以及一些更深层次的思考和解释,欢迎指点和交流。

以下是本篇文章正文内容

一、Fcos的重要特点简述

1.作为Anchor-free,FCOS采用了全卷积对feature map逐点像素的方式去进行回归预测: 该point点到GT的上、下、左、右边界的4个距离值(l,r,t,d)

2.融合多尺度特征的FPN,解决样本尺度不平衡问题。

3.解耦的预测分支Centerness和其BCE-loss,帮助模型提高预测目标的质量。

一、“抛砖”

借此对FCOS,给读者们扔几个小问题,这也是我所说的检测模型检测你检测模型掌握的程度~
1.为什么检测头是共享参数?这样是否合理?
2.在分类分支上,初步版本的Centerness分支是在分类的,为什么后来要改到回归分支上?背后的设计意义是何?
3.Centerness到底为什么能够有效且具备合理性?那为什么SOTA的模型里至今没有普及?
看到这里,如果你回答不出这些问题,那么证明对目标检测模型的理解还是远远不够,希望关注该文章和我的算法系列,继续耐心读完本篇文章,自有分晓,共同进步下去!

三、“引玉”

1.模型结构-解释

请添加图片描述
可以看到FCOS的结构非常清晰,注意这里!就是在每个特征尺度上的共享head(P3-P7是一套权重!至于为什么要共享这个问题基本是考量你检测模型的研究深度的一个很重要的问题,后面说)上,都有1个扩充分支Centerness(其实就是表示objectness的程度),这也是FCOS做为anchor-free检测的一个核心思想,先讲一下HEAD。

2.从检测Head的演化说起——一阶段head的痛点

众所周知,在NMS中需要用到的Score就是Head的分类预测概率,其实意味着objectness的表征,这里可能又多少涉及到,读过我之前Yolov5的博客的朋友们知道,我总是提到的检测"老大难"问题(分类得分高并不一定预测的BBOX或者目标质量高)——分类和回归/质量的冲突问题,这里我说下自己的理解:

1.由于使用方式引发的问题:
我们知道在每一个Head上,训练的分类和回归两个分支是相对独立的,在常规的一阶段检测器中推理使用后处理NMS时候,每个BBOX的SCORE排序是按照是乘上分类的SCORE( 比如YOLO系列将前景置信度objectness=centerness=quality)作为依据,纵然在分类LOSS上有Focal Loss缓解正负样本比例问题和变向提高难分样本比重作用,但是quality分支质量估计就只针对正样本训练。那么,对于one-stage的检测器在NMS score排序的时候,所有的样本按上面的操作:都会将分类score和质量预测score相乘用于排序,总是会出现score分数较低的“负样本”的质量分支预测是没有在训练过程中进行反向传播,那么这样导致结果:预测一个不可靠的极高质量score,而导致它可能排到一个真正的正样本(分类score不够高且质量score高)的前面。
一句话理解”分类得分高但是质量且不一定高“!!!
因此,centerness它们都是作为quality的一种选择,其实就是为了改善这点做出的,提高预测的质量所设计的。

那么读到这里,相信你明白了centerness为了什么才被设计的,那么接下来继续~
2. 分类和回归也存在冲突
这里只能说同理,分类其实BOX的回归也是类似,"分较低但BBOX定位准确的框很可能会被过滤掉。因此,无论是Centerness也好还是IOU-score也好,都是为了解决这个”矛盾“,使用预测的IoU的IoU-aware,检测quality分数是分类分数与预测的IoU相乘。
在这里插入图片描述

总结下:因此,centerness也好,IOU-SCORE的IOU-aware也好,或者是百度的ppyolo,最近的YOLOX,解耦头的操作其实是老生常谈,它们都是作为quality的一种选择,其实就是为了改善这点做出的。

3.思考下分类和回归的冲突,其实读到这里,知道了iou-aware也应该明白了为何要把centerness这个分支开在回归分支上了,这样使得centerness的设计更加合理,因为借此来引导回归和分类的平衡,但是不论是从个人角度还是现今的研究情况,这两种方式显然谈不上最优,分类和回归的本质冲突依然没有得到最优解决!这里多唠叨几句,其实为了改进YOLOV5我曾经也想做类似的解耦添加分支,但是为了这一点性能把计算量搞上去,明显是得不偿失的!我在自己的实验代码上,head输出开了1个维度的tensor,去做一个压缩iou预测,因为根据我的学习研究,iou的得分在我的经验上是优于centerness的这个最后再讲。

可是啊,你的想法别人也会想到这并不奇怪,最近发现今年已经有了类似的成果,这里就不细讲了,不然又是一篇解析,来自2021的CVPR不仅实现了一个分支预测IOU,还对BOX分支进行了改进(一般修改添加head往往Loss也跟着修改),提升了性能,这里就不喧宾夺主了!

3.Centerness的合理性解释

其实前面有点剧透,但是看到这里,起码第二个问题,大家已经有了80%的答案!Centerness的目的我们知道,计算形式也知道,那么它为何是有效?针对第三个问题,下面2个小节来解释:
Centerness的设计合理性,在于作者有一个前提:中心度描绘从该位置到该位置负责的目标的真实中心的标准化(量化)距离,换句话说作者是有个前提理论设定的:目标在BOBOX的中心附近!

那么在此前提下,centerness描述的是负责预测某个gt box的点与该gt box中心点的距离大小,范围在0~1之间,公式如下:
在这里插入图片描述
当 feature map上的特征点映射回原图后,得到对应的GT Bounding box以及距离该box边界的距离(l,t,r,b),直接计算就能得到该特征点对应的centerness权重值。(看到计算,也应该知道是和回归更密切),第二个问题应该不是问题了!
至于LOSS还是BCE二值交叉熵~
表面看其实,置信度 = (类别概率)* (center-ness权重)就是注意力加权的理解,模型更关注距离真实目标中心点近的BOX!
再细的理解就是, 在我们的上面提到的前提设定下:
Centerness的本质含义:感受野的中心也就是特征图的point,越靠近目标物体的中心,那么centerness值得分越高!因为有效感受野永远在感受野的中心,那么感受野中心point越靠近BBOX中心,对应有效感受野也就覆盖越多!如果Point和BBOX中心完全重合,那么就是"满分",所以根据距离分布,centerness的得分通过距离呈现具备不同的分布,以此来作为注意力权重去度量!

4.Centerness-始终有限

这点就对应第三个问题,为什么centerness没有普及?因为它有着明显的缺陷,甚至不如IOU,因为经过很多研究者的实验证明,大多对象检测中,IOU是更佳的选择,这两年有不少论文都提到了类似的验证,下面举个例子:
在fpn或者panet等,多尺度特征层下采样的某一个层中,由于小物体在featuremap上的恰好可能造成与gt的centerness值偏小比如0.1,那么在推理的时候乘上分数那么就很可能被别的分类相对较小但是centerness相对大的样本抢先,那么就降低了性能!这个道理类比于l2-loss为什么被iou loss取代是差不多的。还是数值计算的量级比较无法具有普适性!在某种极端情况下,弊端被扩大了!正因如此。centerness的取值范围总是相对小于用iou作为质量预测的取值范围(有兴趣可以看下generalized focal loss的论文附录,其中有做过实验来说明这个情况,这里我就放结论了),因为在metrcis中iou具备更好的平面几何表征性。

5.共享Head浅谈

至于回归分支上,使用exp(s i* x),其中可训练标量 si被用来自动调整不同层级特征的指数函数的基数,从而稍微提高检测性能,这个计算步骤代码中有体现。但是最大的问题在于如下:
有太多的深度学习使用者认为"不同的特征层级使用相同的head是不合理的"这句话乍看是有道理的,但是作者却表示可以提升性能这是为什么呢?这是一个很优秀的问题!所以我把它作为了第1个问题!下面说下我的理解,主要就是以下三点:
1.共享head解决不同特征层上的多尺度样本数量不平衡的问题
我们假设,上述不共享使用独立head进行训练,那么是否会出现以下情况:
那么每个不同尺度层的head都有独立的权值和参数,这样每个不同的head都需要足够多的对应其不同尺度的样本,否则由于尺度不平衡问题,你的独立head无法保证全部都训练到位,相当于一个偏科的学生,那么回过头来,最合理的解决方式就是参数共享,保证了不同尺度的样本在哪个head上,参数都可以得到共同学习。
2.明白参数共享的目的,自然带来了计算量减少,且能够有效提升性能
3.接着就是为何能够提升性能,需要一个合理的解释性:

那就是cnn的特点—平移不变性,cnn在图像不同位置进行卷积运算,因此扩展到,多个head层的结构,cnn在不同feature map层存在高级特征-语义信息的平移不变性,也就是多个尺度的head上语义信息由于head参数共享,所以语义随不同尺度具备平移不变形!那么以上就是提升精度的原因。

总结

看到这里,开篇的3个小问题应该不难回答,希望我的分享能够提升读者的算法理解和热情!站在前人的基础上,学到的东西要充满感激!~所以如果你涨知识了,希望关注点赞,对于yolov5的完结篇还在筹划中,所以开了此系列,帮助大家和我一起巩固基础,对于目标检测我还有很多干货分享,我的每一个博客都希望越写越好~2021年8月的最后1天,希望热爱算法的你我共同进步~
  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值