Pytorch机器学习(十一)—— Anchor Free与SimOTA

Anchor Free与SimOTA

目录

Anchor Free与SimOTA

前言

二、Anchor Based工作机制

二、Anchor Free工作机制

三、Anchor Free需要解决的问题

Center-ness

OTA

1.初步筛选

2. 对候选框计算代价cost

 3.针对每个真实框动态确定分配预测框个数


前言

最近两年目标检测领域逐渐向anchor free发展。而作为anchor based的代表YOLO系列也有anchor free的YOLOX作为代表。因为同为YOLO架构,学习起来也比较方便和容易,这里就以YOLOV3和YOLOX作为对比,学习一下什么是anchor free及其需要解决问题。

作为Anchor Based的基础知识锚框的概念不清楚的,可以看看下面这篇文章。

YOLO中对于锚框,预测框,产生候选区域及对候选区域进行标注详解


一、Anchor Based与Anchor Free区别

Anchor Based和Anchor Free本质上的区别即网络对于真实框回归方式的不同。

Anchor Based方法简单的说即:使用预先设置好的锚框作为要训练的对象,以真实框为目标,网络输出锚框对于真实框来说需要偏移的tx,ty,tw,th进行预测。

红色为真实框,绿色框为预测框。这里输出偏移x,y是相对与预先对图片划分格子交点的偏移量,这里没有画出来格子。

                                  

而Anchor Free则是抛弃锚框,但同样是以真实框为目标,利用特征图上感受野的概念,使用每个特征图上的点进行回归,网络则输出特征点映射回原图区域中的点距离真实框四个边的相对距离l,t,r,b(细节下面说)。

二、Anchor Based工作机制

我们以YOLOV3中一个尺度的输出来讲解一下,anchor based的网络是怎么工作的。

这里以YOLOV3中最后一层举例,最后一层的特征图大小为13X13,相对于原图的感受野为32,也即13X13的特征图上的每一个点,都可以映射为32X32大小的区域,而每个区域中均会生成3个锚框,每个锚框都需要使用(4+1)Xclass_num数量的变量去描述。4为前面说的xywh,1则为判断这个框内是否有物体,class_num则为去判断具体属于哪个物体。

根据上面的描述,我们只需要对上面每个点中每个锚框中的(4+1)xclass_num个预测值建立损失函数,即可一步步的优化每个锚框的,去逼近真实框。

二、Anchor Free工作机制

Anchor Free要实现起来也十分的简单,形式上即简单把最后输出的维度中的anchor_num去掉就好了。

在Anchor Free里,对于特征图中13X13的每个点,都可以通过感受野的概念映射回原图中的点,然后我们直接在这个点上回归出一个预测框,而不是像anchor based的方法,是在锚框的基础上进行调整。在YOLOX里,同样每个点预测出来的框,(4+1)xclass_num个变量表示,但这里的4个坐标信息为回归点距离预测框四个边的距离,其他变量是一样的。

建立损失的方法也是和anchor_based是一样的。 

三、Anchor Free需要解决的问题

Anchor Free其实和Anchor based的情况,都需要解决一个预测出来的框太多,如何去除低质量框的问题,也称为正负样本分配的问题。(只有正样本才会真正参与loss的计算

在Anchor based的方法里,大多是使用预测出来的框和真实框直接算IOU或者GIOU等根据阈值去划分正负样本的,大于某阈值的为正样本,低于某阈值的则视为负样本。

而在Anchor Free里呢下面介绍两种方法,一是FCOS中介绍的使用centerness的概念来筛选掉低质量框,另一是YOLOX中提出的SimOTA来筛选

Center-ness

Center-ness的方法是FCOS中提出的,其主要思想其实也十分简单,就是根据回归的点距离本身真实框中心距离来进行筛选。根据下面的公式,可以看出回归点越接近真实框的中心,那么min(l,r)和max(l,r)的比值应该是越接近1的。

然后会通过预测出来框的centerness值和这个框的分类得分相乘作为这个框的得分,最终分数低于一定阈值的则为负样本。

OTA

simOTA只是OTA的一个精简提升版本,而OTA算法本是解决最优传输问题的一种方法。在OTA里,作者认为此前的方法根据阈值去直接判断一个预测框是否为正样本或者负样本,太过粗暴,有些物体被遮挡时,势必会造成一些模糊的框被筛选掉,导致模型的泛化能力不强。

而作者提出将真实框与背景当作传输问题中的供应端,预测框则为需求端,所以如果能求出供应端到需求端的代价,则可以应用OTA的思想解决正负样本的问题。

在这里,作者将两者的代价定义如下

                                        

即作者将预测框和真实框之间的IOU损失和当前预测框预测类别和真实框实际类别的损失当作两者之间的代价。那么至此就可以建立最优传输的数学模型求解。下面简单讲解SimOTA工作部分。

1.初步筛选

第一步比较简单,就是根据预测点是否在真实框中间进行筛选,其实有一点类似Center-ness的做法,先把剩下的框称为候选框。

2. 对候选框计算代价cost

根据我们上面所说的,我们需要对候选框计算其代价以便建立最优传输模型。我们对候选区域里的预测框和真实框分别计算IOU损失与分类损失,相加得到此预测框的代价cost

 3.针对每个真实框动态确定分配预测框个数

 作者针对每个真实框,都选取前10个IOU最大的目标框进行下一步的计算。对于每个真实框中的10个预测框,将与其的IOU相加取整,即得到需要分配的个数k。前k个预测框则会被当做正样本处理。

 举例像上图,只有1和2号框会被当作正样本处理。


总结

本文只是简单介绍Anchor Free的设计思想,其实十分的简单,个人觉得anchor free最大的好处在与,传统anchor based的方法,如何去设计锚框的尺寸,其实是十分关键都一个事情。但很多场景下,许多聚类方法产生的anchor并不能满足实际需求,而anchor free就避免了这个问题。

猜你喜欢

转载自blog.csdn.net/lzzzzzzm/article/details/123133069