YOLOX:Exceeding YOLO Series in 2021
YOLOX 抛YOLOv4、YOLOv5众多的 tricks,基 YOLOv3,解耦头 (decoupled head)+Free anchor 设计目标检测网络
什么是 YOLOX?
- YOLOX 抛 YOLOv4、YOLOv5众多的 tricks,基 YOLOv3,解耦头 (decoupled head)+Free anchor 设计目标检测网络
- 除此之外,通动态样本匹配(SimOTA)动态决定预测框的正负,并根据正负样本计算损失
YOLOX的网络结构?
- 输入端: Mosaic数据增强、Mixup数据增强
- BackBone 主干网络: 和 YOLOv3 一样,使用 Darknet53
- Neck: 和 YOLOv3 一样,使用特征金字塔网络(FeaturePyramidNetwork,FPN)
- Prediction: Decoupled Head、Anchor-free、Multi positives
YOLOX的解耦头(decoupled head)?
- YOLOv3 head 的预测将定位任务和分类任务糅合在一起,但是由于两者的偏好不同,强行组合在一起导致学习时相互干扰,因此在Yolox中,增加了三个Decoupled Head,俗称“解耦头”
- 1)cls_output(HxWxC): 主要对目标框的类别,预测分数
- 2)obj_output(HxWx1): 主要判断目标框是前景还是背景,因此经sigmoid处理
- 3)reg_output(HxWx4): 主要对目标框的坐标信息(x,y,w,h)进行预测
YOLOX的标签分配?
- 1)确定的正样本的候选区域
- 2)计算anchor与gt的iou
- 3)在候选区内计算cost
- 4)使用iou确定每个gt的dynamic_k
- 5)为每个gt取cost排名最小的前dynamic_k个anchor做正样本,其余作负样本
- 6)使用正负样本计算loss
YOLOX的损失函数?
- 分类损失:使用focal loss计算,仅计算正样本的损失
- 置信度损失:使用二值交叉熵计算损失,计算所有样本的损失
- 框损失:使用iou loss计算损失,并且仅计算正样本的损失
YOLOX的正样本"初步筛选 "?
- 初步筛选的方式主要有两种:根据中心点来判断、根据目标框来判断
- 根据中心点来判断: 即计算锚框中心点(x_center,y_center),和人脸标注框左上角(gt_l,gt_t),右下角(gt_r,gt_b)两 个角点的相应距离。通过计算将中心点落在groundtruth矩形框内的锚框挑选出来
- 根据目标框来判断: 除了根据锚框中心点,和groundtruth两边距离判断的方式外,作者还设置了根据目标框判断的方法。以groundtruth中心点为基准,设置边长为5的正方形,挑选在正方形内的所有锚框
YOLOX的正样本"精细化筛选"
- 1)初筛正样本信息提取:初筛出的1000个正样本锚框的位置
- 2)Loss函数计算:针对筛选出的1000个候选检测框,和3个groundtruth计算Loss函数
- 3)cost成本计算:有了reg_loss和cls_loss,就可以将两个损失函数加权相加,计算cost成本函数了
- 4)SimOTA:根据cost选择正样本
什么是动态样本匹配 (SimOTA)?
- YOLOX有8400个Anchor锚框后,这里的每一个锚框都对应85特征向量中的预测框信息。 不过需要知道,这些预测框只有少部分是正样本,绝大多数是负样本。SimOTA用于动态将8400个锚框,和图片上所有的目标框进行关联,挑选出正样本锚框
- 第一步:设置候选框数量
- 第二步:通过cost挑选候选框
- 第三步:过滤共用的候选框