查看 Markdown

模型 API

已加载的 LibreYOLO 模型是 BaseModel 的一个实例。本页列出该实例携带的方法,签名与默认值读取自 libreyolo/models/base/model.py。

构造

工厂返回的是一个家族类实例。直接构造该类接受同样的参数,只是 size 是必填的:

python
Family(model_path, size, nb_classes=80, device="auto", task=None, **kwargs)

device="auto" 在 CUDA 可用时选 CUDA,其次是 MPS,再次是 CPU。整数或数字字符串会被当作 CUDA 序号,所以 device=0device="0" 都表示 cuda:0task 会按家族的 SUPPORTED_TASKS 校验。传 model_path=None 只构建架构并让它留在训练模式;传一个 dict 则直接加载该 state dict。

predict 与 __call__

predict__call__ 的别名。

python
model(
    source=None,
    *,
    conf=0.25,
    iou=0.45,
    imgsz=None,
    device=None,
    classes=None,
    max_det=300,
    augment=False,
    save=False,
    batch=1,
    stream=False,
    stream_buffer=False,
    vid_stride=1,
    show=False,
    output_path=None,
    color_format="auto",
    tiling=False,
    overlap_ratio=0.2,
    output_file_format=None,
    cuda_graph=False,
    **kwargs,
)
参数默认值含义
sourceNone图像、内存中图像的列表或元组、目录、视频文件,或者屏幕源,例如 "screen""screen 1""screen 1 100 200 512 256"
conf0.25置信度阈值
iou0.45NMS 的 IoU 阈值
imgszNone覆盖输入尺寸;None 使用模型的原生尺寸
deviceNone覆盖本次调用的设备
classesNone只保留这些类别 ID
max_det300每张图像的最大检测数
augmentFalse测试时增强
saveFalse写出带标注的图像或视频
batch1目录与列表源每次前向传播处理的图像数
streamFalse返回生成器,而不是已经生成好的列表
stream_bufferFalse保留采集到的每一帧实时画面,而不是只保留最新的一帧
vid_stride1每隔 N 帧处理一次视频或屏幕画面
showFalse在窗口中显示带标注的帧
output_pathNonesave=True 时的输出路径
color_format"auto"内存数组的颜色格式提示
tilingFalse对大图做切片推理
overlap_ratio0.2切片重叠比例
output_file_formatNone"jpg""png""webp"
cuda_graphFalseTrue 为每种输入形状在首次使用时捕获,"auto" 会等到某个形状重复出现

单张图像的源返回一个 Results。列表、元组或目录返回它们的列表,而 stream=True 在所有情况下都返回生成器。

实时流源是无界的,必须用 stream=Truetilingaugment 不能同时使用。对 embedpointedge 任务,测试时增强会抛错。

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLO9t.pt") model.info()result = model(SAMPLE_IMAGE, conf=0.25, iou=0.45) print(result.boxes.xyxy)print(result.speed)

batch > 1 时,SUPPORTS_BATCHED_PREDICT 为真的家族每个分块跑一次堆叠后的前向;batch=1 则每张图像跑一次前向。

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLO9t.pt") # stream=True 返回一个生成器,每帧或每张图像一个 Resultsfor result in model([SAMPLE_IMAGE, SAMPLE_IMAGE], stream=True):    print(len(result))

embed

python
model.embed(source=None, **kwargs) -> torch.Tensor

predict 的便捷封装,把每一行嵌入向量堆叠成一个 (N_total, D) 张量。模型必须以 task="embed" 构造,否则会抛出 NotImplementedError

track

python
model.track(
    source,
    *,
    track_conf=0.25,
    iou=0.45,
    imgsz=None,
    classes=None,
    max_det=300,
    save=False,
    show=False,
    vid_stride=1,
    output_path=None,
    tracker="bytetrack",
    tracker_config=None,
    augment=False,
    **tracker_kwargs,
) -> Generator[Results, None, None]

每帧产出一个设置了 track_idResultstracker"bytetrack""botsort""ocsort""deepocsort",给了 tracker_config 时它会被忽略,因为配置类型决定用哪个跟踪器。track_conf 对 ByteTrack 和 BoT-SORT 映射到 track_high_thresh,对 OC-SORT 和 Deep OC-SORT 映射到 det_threshoutput_path 默认是 runs/track/<video_stem>.mp4

val

python
model.val(
    data=None,
    batch=16,
    imgsz=None,
    conf=0.001,
    iou=0.6,
    workers=4,
    allow_download_scripts=False,
    device=None,
    split="val",
    augment=False,
    save_json=False,
    verbose=True,
    *,
    plots=None,
    **kwargs,
) -> Dict

返回一个指标字典,键取决于任务;检测返回 metrics/precisionmetrics/recallmetrics/mAP50metrics/mAP50-95imgsz 接受表示正方形的整数或一个 (height, width) 元组,默认使用模型的原生输入尺寸。plotssave_plots 的别名。allow_download_scripts 控制数据集 YAML 可能在 download 字段里携带的内嵌 Python。

faster_coco_eval 通过 **kwargs 接受,默认为 True,包没安装时回退到 pycocotools。实际运行的后端记录在 model.last_eval_backend 上。

obbpose 任务,带增强的验证会抛错。

train

train 由每个家族各自定义,所以参数各不相同。有两个行为是共通的,因为基类包装了每个家族的 train

  • cfg= 接受一个 YAML 路径,其中的键会合并进本次调用。显式传入的关键字参数优先于文件。
  • 在覆盖分组 g0g1 的家族上传 pretrained=False,会在训练前把模型从头重新初始化,并且不能与 resume=True 同时使用。

一个家族实际会遵循哪些数据增强开关是逐家族的问题;见数据增强矩阵

export

python
model.export(format="onnx", **kwargs) -> str

返回写出产物的路径。format 通过导出器注册表(registry)解析,其中 enginetensorrt 的别名,literttflite 的别名。所有导出器共有的参数:

参数默认值含义
output_pathNone输出文件路径;省略时在 weights/ 下生成
imgszNone(height, width) 元组或单个整数;默认用原生尺寸
opsetNoneONNX opset 版本
simplifyTrue运行 ONNX 图简化
dynamicTrue启用动态轴
halfFalseFP16 精度
int8FalseINT8 精度
batch1固化进产物的批大小
deviceNone用于 trace 的设备
dataNone用于 INT8 校准的 data.yaml
fraction1.0使用校准数据集的比例
allow_download_scriptsFalse允许数据集 YAML 下载中的内嵌 Python
verboseFalse导出器的详细日志

被禁止的组合会在 trace 之前的预检里抛出 NotImplementedError。覆盖情况及其规则见导出矩阵页面。存在活跃的 LoRA 适配器时,它们会被折叠进稠密权重,而这个合并只在所有请求拒绝之后才发生。

save

python
model.save(path) -> str

写出一个 schema v1.0 的 LibreYOLO 检查点(checkpoint):state dict 加上检查点 schema 里描述的元数据。量化后的模型还会额外带上它的 quant 清单,所以 LibreYOLO(path) 能恢复量化结构与缩放系数。

quantize、quant_info 与 dequantize

python
model.quantize(
    recipe,
    calib="coco128.yaml",
    samples=128,
    batch=8,
    algorithm="auto",
    keep_high_precision=None,
    allow_download_scripts=False,
    verbose=True,
)

原地量化并返回模型。recipe 可以是类型转换 fp16bf16,作用于 Conv 与 Linear 的配方 int8fp8,或者只作用于 Linear 的配方 w4a16w4a8nvfp4mxfp4int2——后者由 RF-DETR 这类 transformer 家族支持。int2 需要 QAT。calib 接受一个 data.yaml 路径或内置数据集名称,只做前向读取图像;标注从不读取。传 calib=None 可跳过校准。algorithm"minmax""percentile""auto"

model.quant_info() 返回量化状态摘要,浮点模型则返回 Nonemodel.dequantize() 原地恢复浮点模块,同时保留量化训练得到的主权重,这是从 QAT 通往 export(format="onnx", int8=True, data=...) 的桥梁。

info 与层

python
model.info(detailed=False, verbose=True) -> Dict[str, Any]
model.get_available_layer_names() -> List[str]
model.get_distill_config() -> Dict

info 返回一个对 JSON 友好的字典,并在 verbose 为真时打印一份人类可读的摘要。get_available_layer_names 列出蒸馏或特征提取配置可以指定的层。

CUDA 图

SUPPORTS_CUDA_GRAPH 类属性为真的家族上可用。回放与 eager 执行逐位一致。

python
model.capture_graph(imgsz=None, batch=1, dtype=None) -> None
model.cuda_graph_scope(mode=True)          # 上下文管理器
model.graph_info() -> Dict[str, Any]
model.release_graphs() -> None

捕获下来的图只对捕获时的那个确切形状有效,所以 batchimgsz 必须与之后的 predict 调用一致。capture_graph 把捕获开销从首次请求里挪走。mode 接受 True"on" 表示首次使用时捕获,"auto" 表示等到某个形状重复出现,False 表示不做任何事。家族没有开启支持时 capture_graph 抛出 NotImplementedError,捕获失败时抛出 CudaGraphUnavailable

设备与 dtype

Results 对象带有 .to().cpu().cuda().numpy();见 Results 类型。模型本身通过给 predictdevice=,或在构造时移动。

签名与默认值读取自 v1.5.0 的 libreyolo/models/base/model.py 和 libreyolo/models/base/inference.py。家族类可能收窄或扩展它们;train() 由每个家族各自定义,这里只记录共通的 cfg= 包装。