YOLOv7

YOLOv7 — одностадийный детектор на якорях, голова которого перед финальной свёрткой добавляет обучаемые сдвиги неявного знания (implicit knowledge). LibreYOLO поддерживает его единственный опубликованный размер для детекции.

Задачи
detection
Размеры
b at 640 px
Установка
pip install libreyolo
Уровень поддержки
Поддерживаемый, начиная с v. Дополнительные обучаемые модели: тесты CI поддерживаются в рабочем состоянии, а функции добавляются по возможности.
Исходный проект
YOLOv7 от MultimediaTechLab, MIT. Статья, исходный код
Лицензии
Код: MIT, веса: MIT. Коммерческое использование

Установка

Для YOLOv7 не нужны дополнительные зависимости сверх базового пакета.

bash
pip install libreyolo

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

Веса скачиваются с Hugging Face при первом запуске и кэшируются локально.

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

Возвращаемый объект Results — тот же, что возвращают все семейства, поэтому замена на другой детектор — правка в одну строку. conf задаёт порог уверенности, а iou — порог NMS, который применяется после декодирования головы на якорях. Про источники, стриминг и обработку результатов — в разделе предсказание.

Варианты

LibreYOLO поставляет один размер — b. В апстриме опубликована единственная модель YOLOv7, поэтому выбирать размер не из чего.

Обучение

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)
CLI
libreyolo train model=LibreYOLO7b.pt data=my-dataset.yaml \  epochs=300 imgsz=640 batch=16 lr0=0.01
Тёплый старт новой модели
from libreyolo import LibreYOLO7 # pretrained=True всегда загружает опубликованный чекпойнт# LibreYOLO7b.pt, независимо от того, с чем был создан этот экземпляр.# Если создавать класс напрямую, а не через LibreYOLO(), то веса не# загружаются вообще.model = LibreYOLO7(None, size="b")model.train(data="my-dataset.yaml", epochs=300, pretrained=True)

pretrained здесь действительно читается, в отличие от одноимённой заглушки у некоторых других семейств: передайте True, чтобы сделать тёплый старт с опубликованного чекпойнта LibreYOLO7b.pt (скачивается автоматически), либо путь или имя, если нужен любой другой. Этот опубликованный чекпойнт — COCO на 80 классов, поэтому если запросить его для модели, уже перестроенной под другое число классов, она сначала перестраивается обратно под 80, чекпойнт загружается, а затем каждый совпадающий по форме тензор переносится в голову с целевым числом классов — как только прочитано число классов датасета. resume=True нельзя сочетать с pretrained. Если оставить значение по умолчанию None, обучение продолжается с тех весов, с которыми была создана модель, или со случайной инициализации, если ничего не загружалось.

Если больше ничего не задавать, обучение идёт 300 эпох с lr0=0.01, SGD с моментом 0.937, прогревом на 3 эпохи, тем же назначением SimOTA и той же финальной фазой из 15 эпох без аугментаций, что и в YOLOX, адаптированными под голову на якорях. Единственное отличие: YOLOX добавляет в эти финальные эпохи уточнение регрессии рамок по L1, а v7 его пропускает, потому что в функции потерь SimOTA у v7 нет L1-ветки по сырым сдвигам, которую можно было бы уточнять.

Про датасеты, аугментации, несколько GPU и логгеры — в разделе обучение.

Валидация

val() возвращает словарь с ключами metrics/, покрывающими точность, полноту, mAP 50 и mAP 50-95, измеренные на любом датасете в том формате, в котором вы обучали модель.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreYOLO7b.pt data=my-dataset.yaml

Экспорт

Задача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, тоже поддерживается, но тогда предобработку и постобработку придётся писать самостоятельно.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreYOLO7b.pt format=onnx imgsz=640libreyolo export model=LibreYOLO7b.pt format=tensorrt imgsz=640 half=True
Использование экспортированного файла
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика выбирает путь по суффиксу файла, поэтому экспортированный# артефакт загружается как любой чекпойнт и возвращает тот же Results.model = LibreYOLO("LibreYOLO7b.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Чекпойнты

Все опубликованные файлы весов этого семейства.

ФайлВход (пикс.)Лицензия весов
Detection
LibreYOLO7b.pt640mit

Все перечисленные выше файлы уже доступны в организации LibreYOLO и скачиваются при первом использовании.

Лицензирование

Проверяйте лицензию в репозитории конкретных весов на Hugging Face. Она указана для каждого чекпойнта в организации LibreYOLO и может различаться даже внутри одного семейства. Этот репозиторий считается авторитетным источником, а сводка ниже описывает условия на момент последней проверки страницы.

Это описание соответствующих лицензий, а не юридическая консультация. Если ответ важен для коммерческого использования, прочитайте лицензии самостоятельно и проконсультируйтесь с юристом.

Оригинальная работа
YOLOv7, MultimediaTechLab
Лицензия исходного проекта
MIT
Исходный код проекта
github.com/MultimediaTechLab/YOLO
Код LibreYOLO
MIT
Веса
MIT, повторно опубликованы на huggingface.co/LibreYOLO
Толкование
MIT is a permissive license, so these weights can be used in commercial and closed-source products. The one standing obligation is to keep the license text and the copyright notice, Kin-Yiu Wong and Hao-Tang Tsui, with any copy you redistribute. It places no condition on your own application code, and a model you train yourself on your own data is yours. The port follows the authors' MIT re-release of YOLOv7, not the GPL-3.0 WongKinYiu/yolov7 repository that carries the same model, so the permissive terms come from the source LibreYOLO actually derives from.

Цитирование

@inproceedings{wang2022yolov7,
      title={{YOLOv7}: Trainable Bag-of-Freebies Sets New State-of-the-Art for Real-Time Object Detectors},
      author={Wang, Chien-Yao and Bochkovskiy, Alexey and Liao, Hong-Yuan Mark},
      year={2023},
      booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
}

Скопировано из блока цитирования авторов на странице github.com/MultimediaTechLab/YOLO#citations.

Проверено с LibreYOLO v1.5.0. Таблицы поддержки, чекпойнты и результаты бенчмарков на этой странице сгенерированы из выпущенной библиотеки и опубликованных весов, а не написаны вручную.