YOLOX
简介
前面讲介绍过yolov5, 这里再来介绍YOLOX, YOLOx是旷视科技在2021年发表的一篇论文, 当时对标的网络就是YOLOv5。YOLOx从YOLOv5中引入如下三点:decoupled head, anchor-free以及advanceed label assigning strategy(SimOTA)。
在自己的项目中YOLOv5和YOLOx到底如何选择呢, 如果你的数据集分辨率不是很高, 比如640x640, 二者都可以试试, 如果你的图像分辨率很高, 比如1280x1280, 那么建议使用yolov5, 因为yolov5官方仓库提供了更大尺度的预训练权重, 而YOLOx当前只有640x640的预训练权重。
网络结构
下图是根据源码绘制的YOLOX-L网络结构, 因为它是基于YOLO v5构建的, 所以Backbone以及PAN部分和YOLO v5是一模一样的, 注意这里说的YOLO v5对应的是tag:v5.0版本, 而我们之前的yolov5对应的是tag:v6.1版本, 所以在backbone部分有细微区别。
yolox与yolo v5在结构上有什么差异呢, 主要区别在于检测头head部分, 之前的检测头就是通过一个卷积核大小为1x1的卷积层实现的, 即这个卷积层要同时预测类别分数, 边界框回归参数以及object ness, 这种方式在文章中称为coupled detection head(耦合检测头)。作者说采用coupled detection head对网络是有害的, 如果将coupled detection head换成decoupled detection head (解耦的检测头)能够大幅提升网络的收敛速度。论文中也对比了yolov3中使用couple detection和decouple detection head的训练收敛情况, 明显采用decoupled detection head后收敛速度会更快。
原论文给出的decouple detection head结构到底是啥样的, 作图如下, 在decoupled detection head中对预测Cls, Reg以及IoU参数分别使用三个不同的分支, 这样就将三者进行了解耦, 需要注意的是, 在YOLOx中对不同的预测特征图采用不同的head, 即参数不共享。
Anchor-Free
近几年关于Anchor-Free的网络也较多, 比如之前的FCOS, YOLOx也是一个Anchor-Free的网络, 并且借鉴了FCOS中的思想。上面提到YOLOx中的decouple detection head,它对预测特征图(feature map/Grid网络)上的每个位置都预测了num_cls + 4 + 1参数, 其中num_cls代表检测的目标类别数, 4代表网络预测的目标边界框参数, 1代表object ness(图中标的是IoU)
由于YOLOX是Anchor-Free的网络, 所以head在每个位置处直接预测4个目标边界框参数[t_x, t_y, t_w, t_h], 如下图所示, 这4个参数分别对应预测目标中心点相对Grid Cell左上角(c_x, c_y)的偏移量, 以及目标的宽度、高度因子,注意这些值都是相对预测特征图尺度上的, 如果要映射回原图需要乘上当前特征图相对原图的步距stride。
损失计算
在网络的检测头中有Cls.分支, Reg.分支以及IoU.分支(其实是Obj.分支), 所以损失由Lcls, Lreg以及Lobj三部分组成, 其中Lcls和Lobj采用的是二值交叉熵损失(BCELoss)而Lreg采用的是IoULoss, 还要注意的是Lcls以及Lreg只计算正样本的损失, 而Lobj既计算正样本也计算负样本的损失。
其中,
L_cls代表分类损失
L_reg代表定位损失
L_obj代表损失
λ代表定位损失的平衡系数, 源码中设置的是5.0
Npos代表被分为正样本的Anchor Point数
正负样本匹配策略SimOTA
训练网络时通过SimOTA来匹配正负样本, 而SimOTA是由OTA(Optimal Transport Assignment)简化得到, OTA也是旷视科技同年出的一篇文章(《Optimal transport assignment for object detection》)。在yolov3的基准上使用SimOTA能够给AP带来2.3个点的提升。
什么是OTA, 下面是论文中的原话
Specifically, OTA analyzes the label assignment from a global perspective and formulate the assigning processdure as an Optimal Transport (OT) problem, producing the SOTA performance among the current assigning startegies
简单来说就是将匹配正负样本的过程看成一个最优传输过程。以给牛奶基地给城市配送牛奶为例。
在SimOTA正负样本匹配过程中, 城市对应的是每个样本(对应论文中的anchor point, 其实就是隔日达网格中的每个cell), 牛奶基地对应的是标注好的GT Bbox, 那现在的目标是怎样以最低的成本(cost)将GT分配给对应的样本。根据论文公式, cost的计算公式如下, λ为平衡系数, 源码中设置为3.0。
可以看到损失由分类损失和回归损失两部分组成,并且网络预测的类别越准确cost越小,网络预测的目标边界框越准确cos越小。那么最小化cost可以理解为让网络以最小的学习成本学习到有用的知识。举例如下:
上面提到, 城市对应的是每个样本(对应论文中的anchor point, 其实就是grid网络中的每个cell), 那是不是所有的样本都参与cost的计算呢, 当然不是。先回顾一下FCOS网络, 它是如何匹配正负样本?它是将那些落入GT中心sub-box范围内的样本视为正样本, 其他的为负样本。那么在SimOTA中, 也有类似的筛选过程, 通过源码可知它首先会将落入目标GT Bbox内或落入fixed center area内的样本给筛选出来, 在源码中作者将center_ratius设置为2.5, 即fixed center area是5x5大小的box, 如下图, feature map中所有打勾的位置都是通过筛选得到的样本(anchor point), 注意, 这里将落入GT Bbox与fixed center area相交区域内的样本用橙色的勾表示。
然后计算网络在这些样本(anchor point)位置处的预测值(目标类别以及目标边界框)和每个GT的Lcls以及Lij_reg(由于回归损失时IoULoss, 所以这里也知道每个杨和每个GT的IoU),然后再计算每个样本和每个GT之间的cost, 这里需要注意一下, 在代码中每个cost的过程如下, 和论文中的公式有一点点区别。
1 | cost = ( |
其中, pair_wise_cls_loss就是每个样本与GT之间的分类损失Lij_cls
pair_wise_ious_loss是每个样本与每个GT之间的回归损失Lij_reg
is_in_boxes_and_center代表那些落入GT Bbox与fixed center area交集内的样本, 即图中橙色对应的样本, 然后~取反表示不在GT Bbox与fixed center area交集内的样本。乘以10000.0也就是说对于GT Bbox与fixed center area交集外的样本cost加上了一个非常大的数, 这里在最小化cost过程中会优先选择GT Bbox与fixed center area交集内的样本。
下面介绍如何利用cost匹配正负样本
首先构建两个矩形框, 一个是之前筛选处的anchor point与每个GT之间的cost矩阵, 另一个是Anchor Point与每个GT之间的IoU矩阵, 接着计算n_candidate_k并结合IoU对Anchor Point做进一步筛选(保留IoU大的Anchor point), n_candidate_K取10和Anchor point 数量之间的最小值,在下面给出的实力由于Anchor point的数量为6, 所以n_candidate_k=6。
然后对每个GT计算剩下所有的anchor point的IoU之和然后向下取整得到针对每个GT所采用的正样本数量, 即代码中计算得到的dynamic_ks(这个计算过程对应论文中的Dynamic k Estimation Strategy)。对于下面的示例, GT1的所有Anchor Point的IoU之和为3.0向下取整就是3, 所以对于GT1有3个正样本, 同理GT2也有3个正样本。
根据计算得到的dynamic_ks(每个GT对应几个正样本)和cost矩阵找出所有的正样本(根据cost的数值大小)。比如实例中的GT1, 刚计算采用3个正样本, 然后GT1和所有的Anchor point的cost按照从小到大的顺序将千3小的anchor point找出来,即实例中的A1, A2, A5。同理对于GT2, cost排前3的是A3, A4和A5。根据以上结果, 再构建一个anchor point分配矩阵, 记录每个GT对应哪些正样本, 对应的位置标记1, 其余位置标记0.
然后会发现GT1和GT2同时分配给了A5, 为解决这种带有歧义的问题, 又增加了一个判断, 如果多个GT同时分配给一个Anchor Point, 那么只选cost最小的GT, 所以只将GT2分配给A5。