Переглянути як Markdown

Основні поняття

Кожну модель у LibreYOLO описують чотири поняття: задача, яку вона виконує, сімейство, до якого вона належить, розмір у межах сімейства та рівень підтримки сімейства. Назва файла контрольної точки кодує перші три.

Схема назви файла
Libre<FAMILY><size>[-<task>].pt
Канонічні задачі
17
Рівні підтримки
Флагманський, основний, підтримуваний, лише інференс, музейний, споріднений рівень

Задачі

Задача визначає, що повертає модель. LibreYOLO має сімнадцять канонічних назв задач, і кожна з них називає поле об'єкта Results, яке містить вихідні дані.

ЗадачаПовертає
detectВирівняні за осями рамки з класом та упевненістю
segmentМаски окремих екземплярів, по одній масці для кожного виявленого об'єкта
semanticОдну мітку класу для кожного пікселя без розділення екземплярів
panopticОдну мітку без перекриття для кожного пікселя, що поєднує злічувані об'єкти з аморфним фоном
poseКлючові точки кожного екземпляра, рядки яких вирівняно з рамками
classifyРозподіл імовірностей за набором міток для всього зображення
obbОрієнтовані рамки з кутом обертання
pointОдну координату зображення для кожного виявлення замість рамки
depthЩільну карту відносної оберненої глибини
normalЩільне поле одиничних векторів нормалей поверхні
edgeЩільну карту ймовірностей країв
restoreВідновлене зображення RGB для усунення розмиття, шуму або підвищення роздільної здатності
matteМ'яку карту переднього плану від 0 до 1 для видалення тла
ocrЧотирикутники тексту з транскрипціями в порядку читання
embedL2-нормалізований вектор, скалярний добуток якого вимірює подібність
gazeНапрямок погляду для кожного виявленого обличчя
meshТривимірне тіло в певній позі для кожної виявленої людини

Саме ці назви трапляються в метаданих контрольних точок і назвах файлів. Звичні псевдоніми приймаються скрізь, де передається задача, і нормалізуються до виконання будь-яких інших дій: detection і det стають detect, keypoints стає pose, cls стає classify, deblur, denoise і super-resolution стають restore, а face-recognition і reid стають embed. Нерозпізнана назва спричиняє помилку замість непомітного вибору типового значення.

segment, semantic і panoptic є трьома різними задачами, а не трьома назвами однієї. Маски екземплярів, попіксельні мітки та об'єднана карта об'єктів і фону мають різні еталонні дані, метрики й поля результатів.

Сімейства моделей

Сімейство є однією лінією розвитку архітектури з власним кодом завантаження, попереднього та подальшого оброблення. Кожне сімейство оголошує ідентифікатор FAMILY, наприклад yolo9, rfdetr або dfine, підтримувані задачі й роздільну здатність входу для кожного доступного розміру.

LibreYOLO() є фабрикою, а не класом. Отримавши шлях, вона завантажує файл, визначає сімейство за метаданими контрольної точки або, якщо це не вдається, за самими ключами тензорів і повертає екземпляр моделі цього сімейства. Тому для заміни детектора достатньо змінити один рядок: повернений об'єкт надає той самий інтерфейс predict, train, val та export і повертає той самий тип Results.

Перелічити сімейства
# Задачі, розміри та роздільна здатність входу для кожного зареєстрованого сімейства.libreyolo models
Одна модель
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9t.pt") print(model.family, model.size, model.task)print(model.input_size)print(model.nb_classes, model.names[0])
Вибрати задачу
from libreyolo import LibreYOLO # Псевдоніми нормалізуються на межі API: "keypoints" перетворюється на# "pose", "det" на "detect", а "semantic-segmentation" на "semantic".model = LibreYOLO("LibreYOLO9t.pt", task="det")print(model.task)

Сімейство, що обслуговує кілька задач, зазвичай публікує окрему контрольну точку для кожної задачі, часто з різним набором розмірів; деякі сімейства натомість використовують один артефакт для двох задач середовища виконання. У будь-якому разі підтримувані задачі утворюють фіксований список, і запит задачі поза ним спричиняє помилку з переліком підтримуваних задач у повідомленні замість завантаження приблизного відповідника.

Повний список із бенчмарками кожного сімейства та опублікованими вагами наведено на сторінці всіх моделей.

Розміри

Розмір є варіантом у межах сімейства, записаним як код у нижньому регістрі, безпосередньо приєднаний до префікса сімейства. Поширені літери: n для nano, t для tiny, s для small, m для medium, l для large і x для xlarge. Однак коди залежать від сімейства, і кілька сімейств використовують цілком інші позначення: коди з назвою бекбона, наприклад r50 або r101, де розмір відповідає глибині ResNet, коди складеного масштабування від b0 до b3 або назву, що визначає єдину опубліковану контрольну точку. YOLOv9 використовує c для compact там, де інші сімейства використовують l.

Розмір також фіксує роздільну здатність входу, а в сімействах із кількома задачами вона може відрізнятися для кожної задачі. Обидва значення завжди зчитуються із сімейства й ніколи не припускаються; команда libreyolo models виводить їх.

Назви файлів контрольних точок

Кожен опублікований файл ваг відповідає одній схемі:

Libre<FAMILY><size>[-<task>].pt

Префікс сімейства є фіксованим рядком для кожного сімейства, розмір записується в нижньому регістрі без роздільника, а суфікс задачі починається з дефіса. За усталеною домовленістю контрольних точок YOLO виявлення не має суфікса, тому LibreYOLO9t.pt є детектором, а LibreRFDETRn-seg.pt є моделлю сегментації того самого сімейства.

ЗадачаСуфікс
detect
segment-seg
semantic-sem
panoptic-panoptic
pose-pose
classify-cls
gaze-gaze
obb-obb
point-point
depth-depth
edge-edge
normal-normal
restore-restore
matte-matte
ocr-ocr
embed-embed
mesh-mesh

Для сімейства без задачі, що не має суфікса, суфікс може бути обов'язковим, тому назва без нього не вважається коректною контрольною точкою цього сімейства. Сімейство, що публікує ваги, навчені на датасеті, відмінному від типового, додає назву датасету як додатковий суфікс; цей варіант залишається частиною назви репозиторію, з якого завантажується файл.

Три рівні не використовують цю схему. Сімейства сегментації за підказками, візуально-мовні сімейства та детектори з відкритим словником не реєструються у фабриці контрольних точок і не створюють файл Libre<FAMILY><size>.pt. Їхній префікс натомість називає завантажений знімок Hugging Face або контрольну точку з підказками, а регістр upstream-бренду навмисно зберігається.

Як визначається задача

Коли задачу можуть визначати кілька сигналів, вони перевіряються у фіксованому порядку, і перемагає перший наявний: переданий аргумент task, потім задача, записана в метаданих контрольної точки, далі суфікс задачі в назві файла, а потім типова задача сімейства. Результат перевіряється за списком підтримуваних задач сімейства до створення моделі, тому невідповідність спричиняє помилку під час завантаження, а не неправильні вихідні дані згодом.

Рівні підтримки

Кожне сімейство належить рівно до одного рівня. Рівень описує увагу розробників, а не правильність моделі: він указує, де нова функція з'являється першою і що постійно підтримується в робочому стані.

РівеньЗначення
ФлагманськийФункції спочатку проєктують і повністю перевіряють на GPU тут
ОсновнийОсновні придатні до навчання детектори. Функції надходять після флагманських у тій самій хвилі релізу
ПідтримуванийДодаткові придатні до навчання сімейства. CI підтримується в робочому стані, функції додаються за можливості
Лише інференсПередбачення, валідація та експорт. Функції навчання не застосовуються
МузейнийЗаморожений експонат. Лише виправлення помилок
Споріднений рівеньОкремий інтерфейс продукту з власною фабрикою та контрактом

На сторінці кожної моделі в заголовку вказано рівень її сімейства. Два флагманські сімейства: YOLOv9 для CNN-детекторів і RF-DETR для трансформерних детекторів; починайте з них, якщо немає причини вибрати інше.

Рівень «лише інференс» указує на відсутність циклу навчання в LibreYOLO. Передбачення, валідація та, якщо сімейство підтримує, експорт працюють. Виклик train() для такого сімейства спричиняє NotImplementedError із поясненням причини.

Перевірено з LibreYOLO v1.5.0.