返回文章列表

SuperGradients 替代方案:用 LibreYOLO 运行 YOLO-NAS 并继续训练

Xuban

SuperGradients 是 Deci 的开源训练库,也是 YOLO-NAS 的所在地。YOLO-NAS 是迄今发布的精度最高的实时检测器之一。2024 年 5 月,英伟达收购了 Deci,SuperGradients 随后便没了动静。最后一个版本 3.7.1 于 2024 年 4 月 8 日发布。supergradients.com 上的文档已经下线。大约 120 个问题仍处于未解决状态,其中一个问题的标题是「这个项目是不是已经没人维护了?」,维护者对此没有回应,而这本身就是一种回答。

仓库没有归档,所以乍看之下似乎还在维护。实际安装时,你马上就会感受到它已经被弃置:super-gradients 固定依赖 torchmetrics==0.8,这与当前的 PyTorch 技术栈冲突,还会一并引入 hydra、omegaconf、boto3 和 tensorboard。每过一个月,这些固定版本就会更难与其余环境兼容,而且不会有修复。

这并不意味着 YOLO-NAS 模型变差了。大型变体在 COCO 上仍能达到 52.2 mAP,同时保持实时速度。模型本身没问题,只是它的家已经烧毁了。

在 LibreYOLO 中运行相同的权重

LibreYOLO 会直接从 Deci 的 CDN 加载 YOLO-NAS 检查点,并使用适用于所有其他模型家族的同一套 API。你不需要编写 hydra 配置,也不需要再拆开一层预测封装:

from libreyolo import LibreYOLO

model = LibreYOLO("LibreYOLONASs.pt")  # 首次运行时自动下载
results = model("image.jpg", save=True)
print(results[0].boxes.xyxy)
print(results[0].boxes.conf)

S、M 和 L 三种检测变体都能运行,姿态模型也可以:换成 LibreYOLONASs-pose.pt,就能得到 COCO 关键点。所有模型家族都返回相同的 Results 对象,因此要在自己的数据上比较 YOLO-NAS 与 RF-DETR 或 D-FINE,只需改一行代码,无需另建一套代码库。

不止推理,还能训练和导出

SuperGradients 首先是一个训练库,所以真正的替代方案必须支持训练。LibreYOLO 使用与其他地方相同的调用方式,在你的数据集上微调 YOLO-NAS:

from libreyolo import LibreYOLO

model = LibreYOLO("LibreYOLONASs.pt")
model.train(data="my-dataset.yaml", epochs=100, imgsz=640, batch=16)

你也可以从随机初始化的模型开始训练,这一点与许可有关(下文详述)。验证会针对任何符合你格式的数据集返回 mAP 指标,导出则支持 ONNX、TorchScript、OpenVINO、NCNN 和 TFLite。这套导出支持范围比原始库曾为 YOLO-NAS 提供的更广。完整详情见 YOLO-NAS 文档页,另有一篇简短说明介绍了 YOLO-NAS 仍在持续维护。

旧仓库仍然适用的场景

坦诚地说,以下三种情况下,你应该继续安装 SuperGradients:

CoreML。 LibreYOLO 不能将 YOLO-NAS 导出为 CoreML。如果你要在 Apple 设备上发布产品,并且需要 .mlpackage,SuperGradients 仍有可用的路径。

TensorRT。 SuperGradients 为 YOLO-NAS 记录并测试了 TensorRT 流程,包括批大小方面的细节。LibreYOLO 对这个模型家族的 TensorRT 支持尚未验证。

量化感知训练配置。 YOLO-NAS 专为 INT8 设计,SuperGradients 提供的 QAT 配置让它在这方面表现出色。LibreYOLO 支持以 INT8 和 FP16 量化导出,但没有对应的训练配置。

如果你把环境固定在 2024 年左右的版本,仓库仍然可以运行。只是不要再基于一个无人维护的基础构建新东西。

关于权重的说明

预训练 YOLO-NAS 权重属于 Deci,以非商业许可发布;无论哪个库加载这些权重,该许可都随之适用。LibreYOLO 不托管也不镜像这些权重;下载直接来自 Deci 的公共 CDN,并会在开始前显示 Deci 的条款。用于研究和非商业用途时,两种方式都可以。

如果你需要用于商业用途的 YOLO-NAS,现在有一条清晰的路径:架构本身采用宽松许可,因此用自己的数据从头训练,就能得到一个没有派生自任何 Deci 检查点的模型。LibreYOLO 正好支持通过 LibreYOLONAS(None, size="s") 来实现这一点。

试试看

pip install libreyolo
from libreyolo import LibreYOLO

model = LibreYOLO("LibreYOLONASl.pt")
results = model("image.jpg", save=True)

LibreYOLO 采用 MIT 许可,可在 Linux、Mac 和 Windows 上运行,并且在 GPU、Apple Silicon 和普通 CPU 上都无需修改代码即可使用。一套 API 覆盖 YOLO-NAS、RF-DETR、D-FINE、DEIM、YOLOX、RTMDet 等更多模型,支持目标检测、分割、姿态、分类、深度和跟踪等任务。

在 GitHub 上点个 star:github.com/LibreYOLO/libreyolo | 文档:libreyolo.com/docs