YOLOX

YOLOX 是一个无锚框(anchor-free)单阶段检测器,带一个分类与回归解耦的 head,用 SimOTA 标签分配训练。LibreYOLO 支持它做目标检测。

任务
detection
尺寸
n, t, s, m, l, x at 416 to 640 px
安装
pip install libreyolo
支持层级
已支持,自 v 起。起支撑作用的可训练家族:在 CI 里保持绿色,功能视情况落地。
上游
YOLOX,由 Megvii 发布,采用 Apache-2.0 许可。论文源码
许可
代码采用 Apache-2.0,权重采用 Apache-2.0。商用

安装

YOLOX 在基础包之外不需要任何 extra。

bash
pip install libreyolo

预测

权重在首次使用时从 Hugging Face 下载,并缓存在本地。

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLOXs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreYOLOXs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

返回的 Results 对象就是每个家族都会返回的那一个,所以换成另一个检测器只是改一行 的事。conf 设置置信度阈值,iou 设置在三个解耦的预测尺度之间施加的 NMS 阈值。 数据源、流式处理和结果处理见预测

变体

六种尺寸共用同一个 CSP 骨干和 PAFPN neck。最小的两个 nt 跑在比另外四个更小 的固定输入分辨率上;下面的基准测试表格给出了每一个的确切数值。

检查点输入(px)mAP 50-95参数量(M)
LibreYOLOXnano41628.80.91
LibreYOLOXtiny41635.15.06
LibreYOLOXl64053.954.21
LibreYOLOXm64050.925.33
LibreYOLOXs64043.08.97
LibreYOLOXx64056.399.07

COCO val2017, 500 images。数据由 LibreYOLO 基准测试工具测得,并发布在 Vision Analysis 上,可在此比较不同硬件和运行时的延迟,并查看完整的运行记录。

训练

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)
CLI
libreyolo train model=LibreYOLOXs.pt data=my-dataset.yaml \  epochs=300 imgsz=640 batch=16 lr0=0.01

保持默认时,训练器以 lr0=0.01 跑 300 轮,用 SGD 动量 0.9、5 轮预热,并在最后 15 轮关掉 mosaic 和 mixup 数据增强。train() 还接受一个 pretrained 参数,但方法内部 从不读取这个值:训练总是从构造模型时所用的那份权重继续,所以 pretrained=False 并不会重新初始化网络。

imgsz 在基础训练配置文件里默认取一个固定值,而不是取加载的检查点(checkpoint) 的原生分辨率。这尤其影响 nt 这两个检查点:不显式设置 imgsz 就继续训练其中 任何一个,都会把它抬到更大的那个默认值,而不是它发布时所用的更小的尺寸。

数据集、数据增强、多卡训练和日志记录器见训练

验证

val() 返回一个由 metrics/ 键组成的字典,涵盖查准率、查全率、mAP 50 和 mAP 50-95,在任何采用你训练时所用格式的数据集上测量。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreYOLOXs.pt data=my-dataset.yaml
在 COCO 上验证
# 自带的 coco.yaml 带着一个内嵌的下载脚本,所以除非数据集已经在# 本地,否则需要显式放行libreyolo val model=LibreYOLOXn.pt data=coco.yaml imgsz=416 \  allow_download_scripts=True

导出

任务ONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX:支持Detection to TorchScript:支持Detection to ExecuTorch:支持Detection to TensorRT:支持Detection to OpenVINO:支持Detection to Paddle:不支持Detection to MNN:不支持Detection to RKNN:不支持Detection to ncnn:支持Detection to TFLite:支持Detection to CoreML:支持Detection to Core AI:支持

导出的产物按文件后缀经由 LibreYOLO() 重新加载,所以一个 .onnx.engine 文件的表现和检查点一样,返回同样的 Results。在不装 LibreYOLO 的裸运行时里跑这张 计算图也是支持的,但那样预处理和后处理就得你自己写。CoreML 导出可以用 nms=True 把 NMS 内嵌进计算图;YOLOX 和 YOLOv9 是目前这个参数唯一接受的两个家族。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreYOLOXs.pt format=onnx imgsz=640libreyolo export model=LibreYOLOXs.pt format=tensorrt imgsz=640 half=True
使用导出的文件
from libreyolo import LibreYOLO, SAMPLE_IMAGE # 工厂按文件后缀分发,所以导出的产物加载方式和任何检查点一样,# 返回的也是同一个 Results 对象model = LibreYOLO("LibreYOLOXs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

检查点

这个家族已发布的全部权重文件。

文件输入(px)权重许可
Detection
LibreYOLOXn.pt416apache-2.0
LibreYOLOXt.pt416apache-2.0
LibreYOLOXs.pt640apache-2.0
LibreYOLOXm.pt640apache-2.0
LibreYOLOXl.pt640apache-2.0
LibreYOLOXx.pt640apache-2.0

上面的每个文件目前都在 LibreYOLO 组织中,并会在首次使用时下载。

许可证

请检查你所下载的具体权重在 Hugging Face 仓库中的许可。LibreYOLO 组织里的每个检查点都附有许可,同一家族内也不一定相同。该仓库是权威来源;以下摘要说明本页上次验证时适用的情况。

这里只说明涉及的许可证,不构成法律意见。如果答案对商用很重要,请自行阅读许可证并咨询法律顾问。

原始工作
YOLOX, Megvii
上游许可
Apache-2.0
LibreYOLO 代码
MIT
权重
采用 Apache-2.0 许可,重新发布在 huggingface.co/LibreYOLO
解读
Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code, and weights you train yourself on your own data are yours.

引用

@article{yolox2021,
  title={YOLOX: Exceeding YOLO Series in 2021},
  author={Ge, Zheng and Liu, Songtao and Wang, Feng and Li, Zeming and Sun, Jian},
  journal={arXiv preprint arXiv:2107.08430},
  year={2021}
}

复制自作者在 github.com/Megvii-BaseDetection/YOLOX#cite-yolox 上提供的引用块。

已针对 LibreYOLO v1.5.0 验证。本页的支持表、检查点和基准测试数据由已发布的库和权重生成,并非手工编写。