目标检测算法:anchor_free系列解读

目标检测算法:anchor_free解读

说明

​ anchor free系列是单阶段检测算法另外的一个发展分支,了解anchor free常见的算法是非常有必要的。

免责申明

​ 有误写/错写/错误观点/错误解读,或者大家有其它见解,都可以在评论区指出,博主会认真学习的。

原始论文下载链接

CornerNetCenterNetFCOS

目录结构

1. 基础认知

1.1 什么是anchor free

​ anchor free就是不使用anchor的意思。其它类似的xxx free也是不使用xxx的意思。

1.2 anchor机制的缺点

​ 使用anchor机制主要存在两个缺点:

扫描二维码关注公众号,回复: 16299013 查看本文章
  • 正负样本不均衡
    • 因为anchor机制是对每一个点生成k个box,这样注定了一张图像中没有对象的box占据绝大都数
  • 引入了较多的先验参数
    • 比如anchor box的大小、比例、个数等都是难以决定的先验参数

2. CornetNet

CornerNet的关键就是通过对象左上和右下两个角点来定位。

2.1 模型架构

​ 论文中的模型架构如下图所示:

在这里插入图片描述

​ 上述架构主要分为三个部位:输入图像 + hourglass网络 + 预测模块

  • Hourglass网络 = N个Hourglass Module,而一个Hourglass Module通常由上采样和下采样的结构构成。这个网络其实由另外一篇论文提出,具体的可以看原始论文。
  • Prediction Module(预测模块),结构图如下所示:

在这里插入图片描述

​ 这个预测模块很简单,但是有两点需要注意,即corner pooling 和 三个输出值

2.2 corner pooling

​ 首先,看下图:

在这里插入图片描述

​ 对于这些对象,并不是方方正正的,而为了保证获取的角点(左上点和右下点)是该对象最上面或最下面的点,就需要进行corner pooling。

​ 原理如下图所示:

在这里插入图片描述

​ 首先分两个方向进行单方向的最大池化操作,最后将两个方向相同位置的值相加即可。举个例子如下:

在这里插入图片描述

2.3 三个输出值

HeatMaps

​ 输出预测角点信息,可以这么理解,heatmaps既包含了关键点信息,同时包含了概率值。另外,heatmap每个点都是关键点,可以通过将关键点映射到原图与真实box计算损失,也可以将真实box映射到与heatmap相同尺寸计算损失

​ 损失公式:

在这里插入图片描述

​ 这个公式是Focal Loss的改版,其中α控制样本的难易程度、C表示目标类别(不包含背景)。

Offsets

​ 输出回归偏移量,用于微调预测框,因为特征图转为原图时会造成取整误差。

​ 损失公式:

在这里插入图片描述

​ 公式为常用的目标检测回归偏移损失,其中ok为:

在这里插入图片描述

​ 其中n表示缩放因子。

Embedding

​ 一个图像不只一个对象,那么就不只一对角点,那么问题就是不同的角点如何匹配?因此,作者给定第三个输出,用一个间距向量来表示,向量间距越小,匹配程度越高。

​ 其损失公式分为两个部分,一个是缩小相同角点的间距,另外一个是放大不同角点间距:

在这里插入图片描述

2.4 高斯圆

​ 看下图:

在这里插入图片描述

​ 其实上面的预测框已经很不错了,但是网络仍然会计入损失。因此,我们需要引入一个阈值来控制损失值,这个阈值的方法就叫做高斯圆。

​ 原理如图所示:以临界情况为例子,分为三个情况
在这里插入图片描述

​ 我们可以假设临界情况IOU为0.7或者某个值,然后通过上面三幅图计算出高斯圆的半径r为多少

3. CenterNet

CenterNet是通过中心点来检测目标的。

3.1 模型架构

​ CenterNet的架构和CornerNet的架构都类似,分为三个部位:

  • 输入图像
  • backbone
    • 可以采用hourglass、ResNet等等
  • prediction module
    • 具体的结构与采用的backbone有关,但是可以确定的一点是输出三个值

以resNet为backbone展示其流程

1. image resize 为 512*512,则输入shape为【1,3,512,512】
2. ResNet输出【1,2048,16,16】
3. 将输出特征图反卷积上采样为【1,64,128,128】
4. 送入三个预测分支:
	heatmaps : 【1,80,128,128】 (80表示类别个数)
	sizes : 【1,2,128,128】	(2=w+h,图像尺寸)
	offsets : 【1,2,128,128		(2=x、y的偏移值)

3.2 损失函数

​ centerNet的损失函数和CornerNet的损失函数大体类似,只是细节有点差别:

在这里插入图片描述

​ 具体的公式如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

​ 其中N是关键点个数、sk表示目标预测尺寸,p是中心点坐标,R是缩放因子,p-是缩放后的中心点的近似整数目标(这一点和corner net一样)。

3.3 三个输出值

sizes

​ 这个是box的尺寸大小,配合中心关键点来确定整个box。

offsets

​ 这个是偏移量,主要是因为真实框落于特征图上时,由于取整操作会导致误差存在,因此引入了该误差。

heatmaps

​ 这个是为每个类别生成一个heatmap图,用于确定中心点位置和目标概率值。

4. FCOS

FCOS不像cornernet、centernet,它是预测关键点到预测框的四个距离值来实现检测的。

4.1 模型架构

​ 模型架构如下图所示:(论文原图)
在这里插入图片描述

​ 架构很容易读懂,但是有几个关键点:

  • FPN、PAN引入的原因
  • 三个输出值
  • 损失函数

4.2 FPN、PAN的引入

​ 首先,要知道什么是模糊样本,即关键点同时落入多个GT内的点。

​ 针对这些点,引入FPN和PAN的作用就是利用不同的大小的特征图,去预测不同大小的对象,这样可以尽量去避免模糊样本的存在。同时,还可以提高模型的精度。

4.3 三个输出值

  • classes:H、W、C
    • 类别输出值,其中C表示类别个数
  • Regression:H、W、4
    • 坐标回归值,其中4表示关键点到box的四条边的距离值
  • Center-ness:H、W、1
    • 中心输出,作用是筛选出误检框,其度量关键点(随机点,不一定是中心点)到GT中心点的距离值

4.4 损失函数

​ 公式如下:

在这里插入图片描述

​ 其中,Lcls采用的BCELoss和Focal loss(正负样本都参加计算)、lreg采用IOU loss(正样本才参加)。

​ 另外,其实还有一部分损失,就是中心损失,公式如下:
在这里插入图片描述

​ 其中,Sx,y就是特征图上(x,y)这个点的center-ness值,作者在论文中给出了其公式和含义,即用于衡量关键点到中心点的距离:

在这里插入图片描述

4.5 回归

​ 在FCOS中,由于回归得到的值是关键点到box的四条边的距离。因此,原理如下图所示:

在这里插入图片描述

​ 计算公式如下:

在这里插入图片描述

​ 因此,模型能够输出的四个距离值与真实距离值越接近效果越好。

5. 总结

​ 上面简单解读了三个经典的anchor free算法,这些anchor free算法都是基于某个关键点去检测目标,虽然没有利用anchor机制,但是关键点的生成其实与anchor思想有点类似之处(anchor为特征图每个特征点生成一定数量的建议框,而anchor free则是生成了一个热图,热图的每个点都是关键点,然后再利用这些关键点和真实box映射的值对比进行训练模型)。

猜你喜欢

转载自blog.csdn.net/weixin_46676835/article/details/131837282