RTMDet без mmdetection: как запустить модель
RTMDet — детектор реального времени от OpenMMLab. Он обеспечивает высокую точность на COCO и при этом достаточно быстр для развёртывания. Архитектура продумана. Установка — нет.
Чтобы запустить RTMDet из официального источника, нужно собрать стек OpenMMLab из четырёх уровней:
pip install -U openmim
mim install mmengine
mim install "mmcv>=2.0.0"
mim install mmdet
Диапазоны версий здесь узкие. Для mmdet 3.3.0 требуется mmcv < 2.2.0, но команда mim install mmcv>=2.0.0 без проблем устанавливает 2.2.0, после чего срабатывает ошибка проверки версии при запуске. Версию приходится фиксировать вручную.
Дальше возникает более серьёзная проблема. Самая новая версия mmcv — 2.2.0, выпущенная в апреле 2024 года и с тех пор не обновлявшаяся. Готовые бинарные файлы доступны только для torch 2.4 / CUDA 12.1 и более ранних версий. Сейчас при свежей установке pip install torch устанавливается PyTorch 2.12. Из-за этого разрыва приходится собирать операции C++/CUDA в mmcv из исходного кода: на это уйдёт от 10 до 30 минут, а ещё понадобятся подходящий CUDA Toolkit, nvcc и совместимый компилятор C++. Именно так возникают описанные ошибки:
-
ModuleNotFoundError: No module named 'mmcv._ext'— операции не собрались или не подходят к установленной версии, -
nvcc fatal: Unsupported gpu architecture 'compute_86'на любой карте RTX 30-й серии, -
AttributeError: module 'pkgutil' has no attribute 'ImpImporter'— стек вынуждает вернуться к Python 3.8, -
ошибка сегментации при импорте из-за несовпадения версий GCC.
В собственном FAQ OpenMMLab советует устанавливать mmcv через pip, а не mim, чтобы избежать несовпадения версий. На странице Get Started советуют использовать mim. Оба документа официальные, но противоречат друг другу.
Даже после запуска стека для инференса всё ещё нужно выбрать файл конфигурации, название которого кодирует рецепт обучения, отдельно скачать чекпойнт с именем, содержащим хеш, и подключить его через реестр, с которым сначала придётся разобраться.
LibreYOLO заменяет всё это:
from libreyolo import LibreYOLO
model = LibreYOLO("LibreRTMDets.pt") # auto-downloads on first run
results = model("image.jpg", save=True)
Никаких mim, матриц совместимости четырёх пакетов, сборки из исходного кода, файлов конфигурации, поиска чекпойнта по хешу или привязки к Python 3.8. Веса преобразованы из исходных чекпойнтов OpenMMLab, а инференс на одном и том же чекпойнте побитово эквивалентен mmdetection.
Доступны пять размеров: Tiny, Small, Medium, Large и X. Все работают при разрешении 640 px.
print(results[0].boxes.xyxy) # xyxy coordinates
print(results[0].boxes.conf) # confidence scores
В каких случаях лучше выбрать оригинал
Если нужно обучать RTMDet или дообучать его с полным пайплайном аугментации MMDetection либо вы уже глубоко используете экосистему OpenMMLab и у вас работает mmcv, оставайтесь в ней. Для инференса и развёртывания лучше выбрать LibreYOLO.
О лицензии
MMDetection и RTMDet распространяются под Apache 2.0. Код LibreYOLO распространяется под MIT. На веса распространяются те же условия Apache 2.0, что и на исходные веса. Коммерческих ограничений нет.
Попробуйте
pip install libreyolo
from libreyolo import LibreYOLO
model = LibreYOLO("LibreRTMDetl.pt")
results = model("image.jpg", save=True)
print(results[0].boxes.xyxy)
print(results[0].boxes.conf)
LibreYOLO распространяется под MIT, работает в Linux, Mac и Windows, а также поддерживает GPU, Apple Silicon и обычный CPU без изменений кода. Один API охватывает RTMDet, RT-DETR, RF-DETR, D-FINE, YOLOX, YOLO-NAS, сегментацию, оценку позы, оценку глубины и другие задачи.
Поставьте звезду на GitHub: github.com/LibreYOLO/libreyolo | Документация: libreyolo.com/docs