YOLOX

YOLOX — одностадийный детектор без якорей (anchor-free) с разделённой головой классификации и регрессии, который обучается с назначением меток по SimOTA. LibreYOLO поддерживает его для детекции.

Задачи
detection
Размеры
n, t, s, m, l, x at 416 to 640 px
Установка
pip install libreyolo
Уровень поддержки
Поддерживаемый, начиная с v. Дополнительные обучаемые модели: тесты CI поддерживаются в рабочем состоянии, а функции добавляются по возможности.
Исходный проект
YOLOX от Megvii, Apache-2.0. Статья, исходный код
Лицензии
Код: Apache-2.0, веса: Apache-2.0. Коммерческое использование

Установка

YOLOX не требует никаких extra сверх базового пакета.

bash
pip install libreyolo

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

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

Python
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)
CLI
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Параметры (млн)
LibreYOLOXnano41628.80.91
LibreYOLOXtiny41635.15.06
LibreYOLOXl64053.954.21
LibreYOLOXm64050.925.33
LibreYOLOXs64043.08.97
LibreYOLOXx64056.399.07

COCO val2017, 500 images. Измерено системой бенчмарков LibreYOLO и опубликовано на Vision Analysis, где сравниваются задержки на разном оборудовании и в разных средах выполнения и хранятся полные записи запусков.

Обучение

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)
CLI
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, измеренные на любом датасете в том формате, в котором вы обучали модель.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreYOLOXs.pt data=my-dataset.yaml
Валидация на COCO
# Встроенный yaml для COCO содержит скрипт скачивания, поэтому нужно# явное разрешение, если датасет ещё не лежит локально.libreyolo val model=LibreYOLOXn.pt data=coco.yaml imgsz=416 \  allow_download_scripts=True

Экспорт

Задача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, тоже поддерживается, но тогда предобработку и постобработку придётся писать самостоятельно. Экспорт в CoreML умеет вшивать NMS в граф с nms=True; YOLOX и YOLOv9 — единственные два семейства, для которых этот флаг сейчас принимается.

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

Чекпойнты

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

ФайлВход (пикс.)Лицензия весов
Detection
LibreYOLOXn.pt416apache-2.0
LibreYOLOXt.pt416apache-2.0
LibreYOLOXs.pt640apache-2.0
LibreYOLOXm.pt640apache-2.0
LibreYOLOXl.pt640apache-2.0
LibreYOLOXx.pt640apache-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.

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