Посмотреть как Markdown

Быстрый старт

Самый короткий путь через LibreYOLO: предсказание на одном изображении, обучение на небольшом датасете, затем экспорт результата. Все команды на этой странице работают на CPU.

Установка
pip install libreyolo
Чекпойнт
LibreYOLO9t.pt
Оборудование
Для всего на этой странице хватит CPU

Установка

bash
pip install libreyolo

Этого достаточно для разделов про предсказание и обучение ниже. Для экспорта в ONNX добавляется одна дополнительная зависимость; полный список — в разделе установка.

Предсказание

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 содержит boxes, а names сопоставляет индекс класса с его меткой. Путь к одному изображению возвращает один 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.pt и weights/last.pt. train() возвращает словарь, в котором есть save_dir, best_checkpoint, last_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 не требует ничего сверх базовой установки. У остальных целей есть своя дополнительная зависимость, а покрытие зависит от семейства и задачи и одинаково не для всех: см. экспорт и развёртывание.

Аргументы, которые принимают все форматы: imgsz (int или пара из высоты и ширины), batch (по умолчанию 1), half, int8 с YAML-файлом data для калибровки, dynamic (по умолчанию True), simplify (по умолчанию True), opset, device и output_path. Когда output_path не задан, файл пишется в weights/ с именем, производным от чекпойнта.

Что дальше

Проверено с LibreYOLO v1.5.0.