YOLOv7

YOLOv7 є одностадійним детектором на основі якорів, голова якого додає навчені зсуви неявних знань перед завершальною згорткою. 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 (завантажується автоматично) або шлях чи назву для іншої. Опублікована контрольна точка має 80 класів COCO, тому її запит для моделі, уже перебудованої під іншу кількість класів, спочатку перебудовує модель назад до 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. Таблиці підтримки, контрольні точки й результати бенчмарків на цій сторінці згенеровано з випущеної бібліотеки та опублікованих ваг, а не написано вручну.