YOLOX
YOLOX є одностадійним детектором без якорів із відокремленою головою класифікації та регресії, навченим із призначенням міток SimOTA. LibreYOLO підтримує його для виявлення.
- Задачі
- detection
- Розміри
- n, t, s, m, l, x at 416 to 640 px
- Встановлення
pip install libreyolo- Рівень підтримки
- Підтримуваний, починаючи з v. Додаткові придатні до навчання моделі: тести CI підтримують справними, а функції додають за нагоди.
- Ліцензії
- Код: Apache-2.0, ваги: Apache-2.0. Комерційне використання
Встановлення
Для YOLOX не потрібні додаткові залежності понад базовий пакет.
pip install libreyoloПередбачення
Під час першого використання ваги завантажуються з Hugging Face і кешуються локально.
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLOXs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreYOLOXs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=TrueПовернений об'єкт Results є однаковим для всіх сімейств, тому заміна
детектора потребує зміни одного рядка. conf задає поріг упевненості, а
iou задає поріг NMS, застосований до трьох відокремлених масштабів
передбачення. Типи джерел, потокове передбачення та обробку результатів
описано в розділі передбачення.
Варіанти
Шість розмірів мають спільний бекбон CSP і neck PAFPN. Два найменші, n і
t, працюють із меншою фіксованою вхідною роздільною здатністю, ніж інші
чотири; у таблиці бенчмарків нижче наведено точне значення для кожного.
| Контрольна точка | Вхід (пікс.) | mAP 50-95 | Параметри (млн) |
|---|---|---|---|
| LibreYOLOXnano | 416 | 28.8 | 0.91 |
| LibreYOLOXtiny | 416 | 35.1 | 5.06 |
| LibreYOLOXl | 640 | 53.9 | 54.21 |
| LibreYOLOXm | 640 | 50.9 | 25.33 |
| LibreYOLOXs | 640 | 43.0 | 8.97 |
| LibreYOLOXx | 640 | 56.3 | 99.07 |
COCO val2017, 500 images. Виміряно засобами бенчмарку LibreYOLO й опубліковано на сторінці Vision Analysis, де порівнюють затримку на різному обладнанні та в різних середовищах виконання, а також зберігають повні записи запусків.
Навчання
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)libreyolo train model=LibreYOLOXs.pt data=my-dataset.yaml \ epochs=300 imgsz=640 batch=16 lr0=0.01Без додаткових налаштувань тренер виконує 300 епох із lr0=0.01,
імпульсом SGD 0.9, прогріванням протягом 5 епох і вимкненими аугментаціями
mosaic та mixup на останніх 15 епохах. train() також приймає аргумент
pretrained, але його значення ніколи не читається всередині методу:
навчання завжди продовжується з ваг, з якими створено модель, тому
pretrained=False не ініціалізує мережу повторно.
imgsz типово має фіксоване значення з базової конфігурації навчання, а не
початкову роздільну здатність завантаженої контрольної точки. Це особливо
впливає на контрольні точки n і t: продовження навчання будь-якої з
них без явного imgsz перемикає її на більший типовий розмір замість
меншого опублікованого.
Датасети, аугментацію, кілька GPU та логери описано в розділі навчання.
Валідація
val() повертає словник ключів metrics/ із точністю, повнотою, mAP 50 та
mAP 50-95, виміряними на будь-якому датасеті у форматі, на якому проводилося
навчання.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreYOLOXs.pt data=my-dataset.yaml# Комплектний YAML COCO містить вбудований скрипт завантаження, тому потрібен# явний дозвіл, якщо датасет ще не доступний локально.libreyolo val model=LibreYOLOXn.pt data=coco.yaml imgsz=416 \ allow_download_scripts=TrueЕкспорт
| Задача | 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, але тоді
попередню та подальшу обробку потрібно реалізувати самостійно. Експорт CoreML
може вбудувати NMS у граф за допомогою nms=True; наразі цей прапорець
приймають лише YOLOX і YOLOv9.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)libreyolo export model=LibreYOLOXs.pt format=onnx imgsz=640libreyolo export model=LibreYOLOXs.pt format=tensorrt imgsz=640 half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика маршрутизує за суфіксом файлу, тому експортований артефакт# завантажується як будь-яка контрольна точка й повертає той самий об'єкт Results.model = LibreYOLO("LibreYOLOXs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)Контрольні точки
Усі опубліковані файли ваг цього сімейства.
| Файл | Вхід (пікс.) | Ліцензія ваг |
|---|---|---|
| Detection | ||
| LibreYOLOXn.pt | 416 | apache-2.0 |
| LibreYOLOXt.pt | 416 | apache-2.0 |
| LibreYOLOXs.pt | 640 | apache-2.0 |
| LibreYOLOXm.pt | 640 | apache-2.0 |
| LibreYOLOXl.pt | 640 | apache-2.0 |
| LibreYOLOXx.pt | 640 | apache-2.0 |
Кожен наведений вище файл уже доступний у організації LibreYOLO і завантажується під час першого використання.
Ліцензування
Перевіряйте ліцензію в репозиторії Hugging Face конкретних ваг, які завантажуєте. Кожна контрольна точка в організації LibreYOLO має ліцензію, і вона не завжди однакова для всього сімейства. Цей репозиторій є авторитетним джерелом, а наведене нижче резюме описує умови на момент останньої перевірки сторінки.
Це опис відповідних ліцензій, а не юридична консультація. Якщо відповідь має комерційне значення, самостійно прочитайте ліцензії та зверніться по юридичну консультацію.
- Оригінальна робота
- YOLOX, Megvii
- Ліцензія першоджерела
- Apache-2.0
- Джерело першоджерела
- github.com/Megvii-BaseDetection/YOLOX
- Код LibreYOLO
- MIT
- Ваги
- Apache-2.0, повторно опубліковано на huggingface.co/LibreYOLO
- Тлумачення
- Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code, and weights you train yourself on your own data are yours.
Цитування
@article{yolox2021,
title={YOLOX: Exceeding YOLO Series in 2021},
author={Ge, Zheng and Liu, Songtao and Wang, Feng and Li, Zeming and Sun, Jian},
journal={arXiv preprint arXiv:2107.08430},
year={2021}
}Скопійовано з блоку цитування авторів на сторінці github.com/Megvii-BaseDetection/YOLOX#cite-yolox.