Як запускати 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, після чого під час виконання виникає помилка assertion. Версію доводиться фіксувати вручну.
Та є й більша проблема. Найновіша збірка mmcv має версію 2.2.0, випущену у квітні 2024 року, і відтоді її не оновлювали. Вона містить готові бінарні файли лише для torch до 2.4 / CUDA 12.1. Свіжа команда pip install torch сьогодні встановлює PyTorch 2.12. Через цю різницю mmcv доводиться збирати з вихідного коду разом із C++/CUDA-операціями: це займає від 10 до 30 хвилин і потребує сумісного CUDA Toolkit, nvcc та компілятора C++. Саме тут накопичуються задокументовані помилки:
-
ModuleNotFoundError: No module named 'mmcv._ext'-- скомпільовані операції не зібралися або несумісні, -
nvcc fatal: Unsupported gpu architecture 'compute_86'на будь-якій відеокарті RTX 30-series, -
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