YOLOX:Exceeding YOLO Series in 2021
YOLOX 抛 YOLOv 4、YOLOv 5 众多的 tricks,基 YOLOv 3,解耦头 (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 选择正样本
YOLOX 如何应用动态样本匹配 (SimOTA)?
- YOLOX 有 8400 个 Anchor 锚框后,这里的每一个锚框都对应 85 特征向量中的预测框信息。 不过需要知道,这些预测框只有少部分是正样本,绝大多数是负样本。SimOTA 用于动态将 8400 个锚框,和图片上所有的目标框进行关联,挑选出正样本锚框
- 第一步:设置候选框数量
- 第二步:通过 cost 挑选候选框
- 第三步:过滤共用的候选框