anchor和anchor free方法---关于目标(类别)分类、坐标框回归、置信度处理方法的差异

anchor方法:

    代替滑窗方法取到目标周围可能的目标框

    通过将真实标注、认为正确的坐标框与预测的结果进行对比、计算损失,损失包括目标类别、目标框位置、特征图相应位置是否有目标,通过将三者的损失进行加权求和反向传播,反向传播求出每一层权重对形成这些误差的贡献(偏导),并进行权重纠正。

    在训练时的损失计算:

    目标类别损失,如果训练图像中有target,则找到target的类别,特征图中找到对应图像索引、对应网格位置的信息,如该网格处对应的类别信息,将网格对应的类别信息与target类别信息进行交叉熵计算求得损失(变换target中的类别格式,使与prediction的类别格式相同,除了正样本的,其余都应该标志为负样本)。

 

 目标框坐标回归损失,如果训练图像中有target,则找到target的类别,特征图中找到对应图像索引、对应网格位置的信息,把网格坐标进行回归(激活函数和anchor处理)与target坐标框计算iou,(1-iou)作为目标框回归损失。

    特征图相应位置是否有目标损失,已知模型输出的特征图尺寸,将target初始化为特征图obiness尺寸,然后根据真实target的目标所在img_index, anchor,网格位置,将重新赋值的target的位置赋值为与预测框相应的iou值,其余值为0,与预测结果的objness计算交叉熵损失。

objness存在的意义是为了区别正样本和负样本两种大类,增加模型的泛化能力,不因修改了背景就误检。

clsness是为了区别具体的正样本的众多类别

boxness是为了更新权重、使坐标回归

以上以yolov5为例

anchor free 方法:

    模型输出特征图与原图尺寸相差倍数较小,通过特征图映射原图,特征图上的每个点位置视为目标中心点,每个点的值用于判断是否有目标,特征图所在通道决定目标所属类别。另起额外的分支用来判断目标中心的偏移量和宽高。

    以centernet为例,图像从backbone出来后,经过三个分支class(64->80),wh(64->2),xy(64->2),需要计算类别损失、目标框宽高损失、目标点中心坐标偏移量损失。

    损失计算:

    目标类别损失,centernet将原图中target bbox的中点映射到heatmap中的某一高斯核区域内,高斯核中心位置,赋值为1,次中心位置赋值依次递减,然后利用focal loss(按照类别,即通道)计算损失

 其中为网络输出的heatmap,为ground_truth信息

    目标宽高损失,将target bbox的宽高信息按照该映射关系,等同地映射到Height&Width特征图中,利用L1Loss计算损失

 

 目标点中心坐标偏移量损失,类别损失的特征图代表中心点坐标,通过计算偏移量损失准确目标中心点位置。将target bbox的偏移信息等同地映射到Offset特征图中,利用L1Loss计算损失

 

总结:

    anchor和anchor free方法,候选目标框的选取和设定、类别判断方法不同,使最后使用的损失函数不同,从而达到最后功能完善。

anchor free方法中截取的图像参考网址:

https://zhuanlan.zhihu.com/p/187577938

原文地址:https://www.cnblogs.com/xiaoheizi-12345/p/14406138.html