YOLOv7
YOLOv7 — одностадийный детектор на якорях, голова которого перед финальной свёрткой добавляет обучаемые сдвиги неявного знания (implicit knowledge). LibreYOLO поддерживает его единственный опубликованный размер для детекции.
- Задачи
- detection
- Размеры
- b at 640 px
- Установка
pip install libreyolo- Уровень поддержки
- Поддерживаемый, начиная с v. Дополнительные обучаемые модели: тесты CI поддерживаются в рабочем состоянии, а функции добавляются по возможности.
- Исходный проект
- YOLOv7 от MultimediaTechLab, MIT. Статья, исходный код
- Лицензии
- Код: MIT, веса: MIT. Коммерческое использование
Установка
Для YOLOv7 не нужны дополнительные зависимости сверх базового пакета.
pip install libreyoloПредсказание
Веса скачиваются с Hugging Face при первом запуске и кэшируются локально.
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)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, поэтому выбирать размер не из чего.
Обучение
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)libreyolo train model=LibreYOLO7b.pt data=my-dataset.yaml \ epochs=300 imgsz=640 batch=16 lr0=0.01from 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, измеренные на любом датасете в том формате, в котором вы
обучали модель.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreYOLO7b.pt data=my-dataset.yamlЭкспорт
| Задача | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection 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, тоже поддерживается, но тогда предобработку и постобработку придётся
писать самостоятельно.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)libreyolo export model=LibreYOLO7b.pt format=onnx imgsz=640libreyolo export model=LibreYOLO7b.pt format=tensorrt imgsz=640 half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика выбирает путь по суффиксу файла, поэтому экспортированный# артефакт загружается как любой чекпойнт и возвращает тот же Results.model = LibreYOLO("LibreYOLO7b.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)Чекпойнты
Все опубликованные файлы весов этого семейства.
| Файл | Вход (пикс.) | Лицензия весов |
|---|---|---|
| Detection | ||
| LibreYOLO7b.pt | 640 | mit |
Все перечисленные выше файлы уже доступны в организации 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.