【论文】YOLOX: Exceeding YOLO Series in 2021

一、 引言

  • 近两年,大多数算法聚焦于anchor-free的检测器、先进的标签分配策略以及端对端(无NMS)的检测。本文旨在通过经验性的改进将这些技术应用在YOLO算法上。
  • 以YOLOv3 (YOLOv3-SPP)为起点,进行对比实验

二、 YOLOX

1. 基准模型YOLOv3-DarkNet53

  • 与原始设置相比,增加了EMA权重更新,cosine 学习率,IoU损失和IoU-aware 分支。
  • 只进行了随机水平翻转、colorJitter,以及多尺度数据增广,去除了RandomResizedCrop。

2. Decoupled head

  • 分类和回归任务的矛盾是一直存在的
  • 分类和回归耦合的检测对结果的影响:
    • 将YOLO系列的头部解耦,模型收敛更快
    • 解耦头对于端对端的检测非常重要
  • 解耦头包括一个用于减少通道数的1×1的卷积层,随后是两个采用了3×3卷积的平行分支

3. 强数据增广

  • Mosaic:随机选取四张图片进行组合
  • Mixup:将随机的两张样本按比例混合,分类的结果按比例分配

4. Anchor-free

  • anchor存在的不足:
    • 为了达到最优的检测性能,需要在训练前进行聚类分析,确定一组最优的锚点,这种聚类的锚点缺乏泛化能力,没有通用性
    • 增加了检测头的复杂性以及每张影像的预测数量
  • 将每个位置的预测值有3个降为1个,并使其直接预测四个值,即与左上角的两个偏差值和预测框的宽和高
  • 将每个目标的中心点所在位置作为正样本,并预设一个尺度范围

5. Multi positives

  • 上述anchor-free模型只选择了中心点位置作为正样本标签,而忽略了其他高质量的预测值
  • 本研究将中心3×3的区域作为正样本,类似于FCOS的中心采样

6. SimOTA

  • 逐像素分类存在标签分配的问题,多类别交叉的时候容易产生歧义
  • 本研究从全局角度出发,根据loss值的变化,采用一对多的方式动态(top-k)的分配标签数量,即最优传输问题(Optimal Transport (OT) )
  • 如果一个anchor从gt中得到足够多的正标签的话,就将其称为正anchor,并将gt逐个与之匹配得到anchor-gt pair
  • 实践发现,通过Sinkhorn-Knopp算法来解决OT问题会带来25%的额外训练时间,因此这里将其简化为动态top-k策略,命名为SimOTA,以得到近似解
  • 将前k个代价最小的选择作为正样本

7. End-to-end YOLO

  • 没有NMS的过程

总结:感觉。。。就是在YOLO系列算法的基础上,采用了一堆常用于优化的tip

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
YOLOvX结合Transformer是一种将YOLOvX目标检测算法与Transformer模型相结合的方法,旨在提高目标检测的性能和准确性。Transformer是一种基于自注意力机制的神经网络模型,它在自然语言处理领域取得了巨大成功,并逐渐应用于计算机视觉任务。 在YOLOvX结合Transformer的方法中,Swin Transformer是其中一种常用的Transformer模型。Swin Transformer是一种基于窗口注意力机制的Transformer模型,它通过将图像分割为多个窗口,并在每个窗口上应用自注意力机制来捕捉图像中的全局上下文信息。这种窗口注意力机制使得Swin Transformer能够处理大尺寸的图像,并在目标检测任务中取得了很好的效果。 下面是一个示例代码,展示了如何使用Swin Transformer结合YOLOvX进行目标检测: ```python # 导入必要的库和模块 import torch from torchvision.models import detection from swin_transformer import SwinTransformer # 加载YOLOvX模型和Swin Transformer模型 yolovx_model = detection.yolovx(pretrained=True) swin_transformer_model = SwinTransformer() # 将YOLOvX模型的特征提取部分替换为Swin Transformer模型 yolovx_model.backbone = swin_transformer_model # 输入图像 image = torch.randn(1, 3, 224, 224) # 使用YOLOvX结合Swin Transformer进行目标检测 output = yolovx_model(image) # 打印检测结果 print(output) ``` 这段代码首先导入了必要的库和模块,然后加载了预训练的YOLOvX模型和Swin Transformer模型。接着,将YOLOvX模型的特征提取部分替换为Swin Transformer模型。最后,输入图像并使用YOLOvX结合Swin Transformer进行目标检测,输出检测结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李AI飞刀^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值