YOLO X 改进详解
创始人
2024-03-02 03:03:41
0

YOLO X

主要改进:

  1. Anchor-Free: FCOS
  2. Decoupled detection head
  3. Advanced label assigning strategy

Network structure improvement

Decoupled detection head

对比于YOLO V5, YOLO X 在detection head上有了改进。YOLO V5中,检测头是通过卷积同时预测分类以及定位任务,即通过同一个卷积来处理。
在这里插入图片描述

YOLO X 则使用了解耦的检测头,即,分类,定位,置信度预测由不同的卷积层来处理。同时,YOLO X 是anchor free的检测器,因此对于定位的输出仅仅只有4个参数,这个区别于YOLO V5 anchor-based 检测,每个cell 是基于3个anchor进行定位预测。YOLO X的三个检测头的权重不共享。文中实验表明,采用解耦的检测头,网络更容易收敛且准确率有了一定的提高。
在这里插入图片描述

Anchor-free

对于定位模型预测4个数 (tx,ty,tw,th)(t_x, t_y, t_w, t_h)(tx​,ty​,tw​,th​). 因为是anchor-free,所以对于预测框的高度和宽度区别于YOLO V5基于anchor的缩放,在YOLO X中则是直接输出预测框的高和宽。
在这里插入图片描述

Loss Function

Loss function 包括三个部分,Class loss function, Region loss function, IoU loss function (置信度). 其中 class loss function 和 region class function 只计算正样本的损失。

LOSS=Lcls+λLreg+LobjNposLOSS = \frac{L_{cls} + \lambda L_{reg} + L_{obj}}{N_{pos}} LOSS=Npos​Lcls​+λLreg​+Lobj​​
其中NposN_{pos}Npos​表示这个feature map中被分为正样本的个数。λ\lambdaλ 是平衡系数,代码中给出的是5.0.

正负样本匹配 (SimOTA)

SimOTA 将匹配正负样本的过程看作最优传输的过程。通过cost function来筛选正样本。预测样本和GT之间的cost计算如下:
Cij=Lijcls+λLijregC_{ij} = L^{cls}_{ij} + \lambda L^{reg}_{ij}Cij​=Lijcls​+λLijreg​

  1. 初筛
    在计算cost之前,会对样本进行一次初步的筛选,得到正样本的候选区域。正样本的候选区域是以GT中心点围成的 5×5 的区域。

在这里插入图片描述

对于这个条件,在代码中也体现在cost function中,因此代码实现中的cost function如下,
Cij=Lijcls+λLijreg+γ(not_in_GTbox_and_center_area)C_{ij} = L^{cls}_{ij} + \lambda L^{reg}_{ij} + \gamma (not\_in\_GTbox\_and\_center\_area)Cij​=Lijcls​+λLijreg​+γ(not_in_GTbox_and_center_area)
代码中的,λ,γ\lambda, \gammaλ,γ 分别为3,100000。对于不在GT box以及候选框内的预测点给予一个很大的cost.

  1. 获取n_candidate_k,这个值是在10和预选框候选数中取最小
    n_candiate_k=min(10,in_Box_num)n\_candiate\_k=min(10, in\_Box\_num)n_candiate_k=min(10,in_Box_num)
  2. 计算预选的正样本与当前gtbox的IoU. 按从大到小的顺序排列选择前 n_candiate_kn\_candiate\_kn_candiate_k 个预选框的IoU值作为 topk_ioustopk\_ioustopk_ious。
  3. 通过IoU值计算dynamic_ks,这是一个动态的预选框选择,不同的GT这个值是不一样的。
    dynamic_ks=torch.clamp(topk_ious.sum(1).int(),min=1)dynamic\_ks = torch.clamp(topk\_ious.sum(1).int(), min=1)dynamic_ks=torch.clamp(topk_ious.sum(1).int(),min=1)
  4. 计算预选正样本的cost,并从小到大进行排序,选择topdynamic_kstop \ dynamic\_kstop dynamic_ks 个样本作为正样本。
  5. 如果同一个预选正样本分配给了不同的GT,则选择最小cost的那一个,其他的忽略。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...