YOLOX: Exceeding YOLO Series in 2021 --- Study Notes

1 介绍

论文链接:YOLOX: Exceeding YOLO Series in 2021

2 译读笔记

摘要

在这篇报告中,作者将会展示关于提升YOLO系列模型精度的一些经验,从而构成一个高性能检测器——YOLOX。作者将YOLO检测器转换为anchor-free的形式,并采用了其他的检测技术,例如:解耦head和标签分配策略SimOTA,在一系列模型上实现了SOTA结果:对于YOLONano,参数量仅为0.91M,FLOPs=1.08G,此模型在COCO上获得了25.3%-mAP,超过NanoDet模型1.8%+AP;对于YOLOv3模型,产业界使用最为广泛的模型之一,我们将其在COCO数据集上提升至47.3%-mAP,超过了当前最好实现3.0%AP+;对于YOLOX-L,此模型与YOLOv4-CSP和YOLOv5-L参数量相当,我们在COCO上实现了50.0%mAP,其速度为68.9FPS,显卡为Tesla-V100,超过YOLOv5-L模型1.8%+AP。不仅如此,我们在 Streaming Perception Challenge(Workshop on Autonomous Driving at CVPR 2021)比赛上使用YOLOX-L模型(单模)获得了第一名。我们希望此次报告可以为开发者和研究者在实际场景的应用中提供有益的经验,我们也提供了此模型的部署版本,支持ONNX、TensorRT、NCNN和Openvino平台。源代码位于https://github.com/Megvii-BaseDetection/YOLOX

2.1 引言

  随着目标检测的发展,YOLO系列【23_YOLOv1, 24_YOLO9000, 25_YOLOv3, 1_YOLOv4, 7_YOLOv5】一直在追求实时应用中最佳的速度与精度的均衡。他们提取当前最先进的检测技术(例如:YOLOv2【24_YOLO9000】中的锚点【26_Faster_RCNN】和YOLOv3【25_YOLOv3】中的残差网络【9_ResNet】),并对实现进行优化从而获得最佳的实践效果。当前,YOLOV5【7_YOLOv5】以48.2%的mAP在COCO上保持了最佳的均衡性能,推理时间为13.7ms(FPS=73)。

3 模型设计

3.0 超参数选择

激活函数:SiLU (yolox/exp/yolox_base.py#L23)

3.2 Loss函数

损失函数 = 分类 + IoU-Loss
分类损失:BCE Loss (nn.BCEWithLogitsLoss
请参考YOLOX/yolox/models/yolo_head.py—self.bcewithlog_loss)

3 实现

3.1 Good Techniques

AMP训练——加快训练速度

参考https://github.com/Megvii-BaseDetection/YOLOX/blob/96b74a504f183801dc4831931930b821fbe9d95d/yolox/core/trainer.py#L101-L103

if self.amp_training:
	with amp.scale_loss(loss, self.optimizer) as scaled_loss:
	    scaled_loss.backward()

3.2 模型配置——YOLOX/yolox/exp/yolox_base.py

源代码请参考YOLOX/yolox/exp/yolox_base.py
模型配置在Exp类中声明,请参考Exp类说明;

3.3 项目安装

此repo安装方法请参考《YOLOX – Quick Start》

Step1. 安装YOLOX.

# 新建conda环境
conda create --name conda-yolox python=3.8
# 在PyCharm中配置conda环境
# 配置完成后,继续安装

# 安装项目的python包
pip3 install -U pip && pip3 install -r requirements.txt

3.3 代码说明

Exp: experiment, 实验类

def __init__(self): 初始化函数;定义了模型的基本配置

def __init__(self):
	super().__init__()
	
	# ---------------- model config ---------------- #
	self.num_classes = 80
	self.depth = 1.00
	self.width = 1.00
	
	# ---------------- dataloader config ---------------- #
	# set worker to 4 for shorter dataloader init time
	self.data_num_workers = 4
	self.input_size = (640, 640)
	self.random_size = (14, 26)
	self.train_ann = "instances_train2017.json"
	self.val_ann = "instances_val2017.json"
	
	# --------------- transform config ----------------- #
	self.degrees = 10.0
	self.translate = 0.1
	self.scale = (0.1, 2)
	self.mscale = (0.8, 1.6)
	self.shear = 2.0
	self.perspective = 0.0
	self.enable_mixup = True
	
	# --------------  training config --------------------- #
	# 预热epochs
	self.warmup_epochs = 5
	self.max_epoch = 300
	self.warmup_lr = 0
	self.basic_lr_per_img = 0.01 / 64.0
	# 学习率调度器
	self.scheduler = "yoloxwarmcos"
	self.no_aug_epochs = 15
	self.min_lr_ratio = 0.05
	self.ema = True
	
	self.weight_decay = 5e-4
	self.momentum = 0.9
	self.print_interval = 10
	self.eval_interval = 10
	self.exp_name = os.path.split(os.path.realpath(__file__))[1].split(".")[0]
	
	# -----------------  testing config ------------------ #
	self.test_size = (640, 640)
	self.test_conf = 0.01
	self.nmsthre = 0.65
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值