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挑选候选框
  • 第三步:过滤共用的候选框