查看 Markdown

快速开始

走通 LibreYOLO 的最短路径:在一张图片上预测,在小数据集上训练,然后导出结果。这里的每条命令都能在 CPU 上跑。

安装
pip install libreyolo
检查点
LibreYOLO9t.pt
硬件
本页的所有内容用 CPU 就够了

安装

bash
pip install libreyolo

下面的预测和训练两节需要的就这些。导出为 ONNX 要多装一个 extra;完整列表见安装

预测

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE # 首次使用时下载检查点,之后缓存在 weights/ 下model = LibreYOLO("LibreYOLO9t.pt") # 单张图片返回一个 Results 对象result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(result.names[int(box.cls)], float(box.conf), box.xyxy.tolist())
CLI
libreyolo predict model=yolo9-t save=True \  source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg
视频与流
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9t.pt") # stream=True 每帧产出一个 Results,而不是先构建一个列表# 把路径换成摄像头编号、RTSP URL 或一个文件夹for result in model.predict("clip.mp4", stream=True, save=True):    print(len(result.boxes))

LibreYOLO() 是一个工厂函数。它读取文件,判断这份权重属于哪个家族,然后返回该家族的模型,所以换用另一个检测器只是改一行的事。传入不带目录的 LibreYOLO9t.pt,会相对工作目录去找 weights/LibreYOLO9t.pt,文件不在时就下载到那里。下载规则和离线使用方式见检查点与权重

save=True 会在 runs/detect/ 下写出一份带标注的副本,放进每次运行递增编号的 predict 目录。返回的 Results 带有 boxesnames 把类别索引映射到它的标签。单张图片路径返回一个 Results;目录、图片列表或 stream=True 返回它们的列表或生成器。

训练

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9t.pt") # coco8 是库自带的 8 张图片的数据集,首次使用时从 URL 下载,# 因此不需要执行任何脚本results = model.train(    data="coco8.yaml",    epochs=1,    imgsz=640,    batch=4,    device="cpu",) print(results["save_dir"])print(results["best_checkpoint"])
CLI
libreyolo train model=yolo9-t data=coco8.yaml \  epochs=1 imgsz=640 batch=4 device=cpu
验证
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9t.pt") # val() 返回一个普通 dict,不是对象metrics = model.val(data="coco8.yaml", device="cpu") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])print(metrics["metrics/precision"], metrics["metrics/recall"])

data 是一份数据集 YAML。coco8.yaml 随库一起提供,所以这段代码片段粘贴过去就能跑;不是自带的名字会按路径读取。数据集在 ~/datasets 下解析,设置了 LIBREYOLO_DATASETS_DIR 时则在该变量指向的位置解析。

一次运行写到 project/name,默认是 runs/train 下的一个目录,里面有 weights/best.ptweights/last.pttrain() 返回一个字典,包含 save_dirbest_checkpointlast_checkpoint、每轮的损失和每轮的验证指标。训练得到的检查点(checkpoint)通过 LibreYOLO() 加载,和预训练的完全一样。

并不是每个家族都能训练。只提供推理的家族在调用 train() 时会抛出 NotImplementedError 并说明这一点。核心概念解释了各个支持等级分别代表什么。

导出

TorchScript
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLO9t.pt") # export() 返回它写出的路径path = model.export(format="torchscript")print(path) # 工厂函数按文件后缀分发,所以导出产物可以像检查点一样加载回来,# 并返回同样的 Results 对象exported = LibreYOLO(path)result = exported(SAMPLE_IMAGE)print(len(result.boxes))
ONNX
pip install "libreyolo[onnx]"libreyolo export model=yolo9-t format=onnx imgsz=640

TorchScript 除了基础安装之外不需要任何东西。其他目标各有自己的 extra,而且覆盖范围是按家族、按任务来的,并不统一:见导出与部署

每种格式都接受的参数包括 imgsz(一个整数,或者高和宽一对值)、batch(默认 1)、halfint8(配合一份用于校准的 data YAML)、dynamic(默认 True)、simplify(默认 True)、opsetdeviceoutput_path。省略 output_path 时,文件写到 weights/ 下,名字从检查点派生。

下一步看什么

已针对 LibreYOLO v1.5.0 验证。