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

Рівні стабільності

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

Рівні підтримки експорту

Цей рівень визначає, чи буде виклик успішним. Він застосовується до трійки (family, task, format), і кожне поєднання має рівно одне значення.

РівеньЗначенняЩо відбувається під час export()
validatedЧислову відповідність перевіряє CI або задокументований нічний запускВиконується
availableПеретворення реалізовано, але докази числової відповідності в середовищі виконання ще не зафіксованоВиконується
blockedПідтримуваного шляху немаєПід час попередньої перевірки спричиняє NotImplementedError із поясненням

validated і available виконуються без підтвердження чи загального попередження. Відмінність полягає в доказах, а не в дозволі: запис validated має перевірку відповідності та випуск since, а available поки що не має. Наприклад, перетворення CoreML без запуску передбачення в macOS є доступним, але не перевіреним.

Заблоковане поєднання завершується помилкою до перевірки залежностей, завантаження калібрування, трасування чи створення артефакту, тому частковий файл не записується.

Кожна перевірена комірка має обмеження, яке описує конфігурацію виміряної відповідності, зазвичай фіксоване полотно входу, пакет 1, FP32 і названу версію середовища виконання. Сприймайте його як твердження про цю конфігурацію, а не про формат загалом. Правила заповнення комірок без явного запису наведено на сторінці матриці експорту.

Читання обох класифікацій одного сімейства
from libreyolo.models.registry import GROUPS, group_offrom libreyolo.export.support import get_support, validated_alternatives family = "yolo9" group = group_of(family)print(group, GROUPS[group]) print(get_support(family, "detect", "onnx").tier)print(validated_alternatives(family, "detect"))

Рівні API

Цей рівень визначає вигляд виклику. Сімейство належить рівно до одного рівня, вибраного за контрактом викликів, а не за архітектурою.

РівеньФабрикаКонтракт
Фабрика детекторівLibreYOLOОдин прямий прохід без підказки повертає всі знайдені об'єкти з каліброваними оцінками. Учасники реєструються самі через розпізнавання контрольної точки
Сегментація з підказкамиLibreSAMПрямий прохід не має сенсу без просторової або концептуальної підказки для кожного зображення під час виклику. Інтерактивний і зі станом: один раз закодувати, багато разів підказувати
Виявлення з відкритим словникомLibreOpenVocabДискримінативні детектори з текстовими умовами. Список класів є підказкою, яку задає set_classes
Моделі зору й мовиLibreVLMГенеративна модель, якою керують як детектором. Список класів є підказкою, а впевненість, умовним значенням

Три суміжні рівні навмисно не реєструються у фабриці детекторів, тому LibreYOLO("some-alias") до них не доходить. Вони завантажуються за псевдонімом розміру з автоматичним отриманням, а не через розпізнавання контрольної точки.

Усі чотири повертають однаковий Results, тому подальший код для них не змінюється. Відрізняється доступність методів: суміжні рівні спричиняють NotImplementedError для train(), val() і export(), а рівні SAM і відкритого словника також для track(). Кожна сторінка рівня перелічує власні винятки.

Групи покриття

Ця класифікація визначає, які сімейства включає міжсімейний тестовий запуск, і саме її читач найімовірніше побачить на сторінці моделі. Кожне зареєстроване сімейство зараховано рівно до однієї групи, а тест завершується помилкою, якщо зареєстрованого сімейства немає в розподілі. GROUPS у libreyolo/models/registry.py, це джерело стовпця Значення нижче; MODEL_GROUPS у тому самому файлі призначає кожне сімейство, а стовпець Сімейства безпосередньо підраховує цей розподіл. Стовпець Мітка містить коротшу назву тієї самої групи, яку сайт використовує в заголовку сторінки моделі.

ГрупаМіткаСімействЗначення
g0Flagship2Основні опорні сімейства, обов'язкові для покриття спільних функцій
g1Core10Набір покриття детекторів із навчанням
g2Supported14Додатковий набір покриття сімейств із навчанням
g3Inference only35Сімейства без реалізації навчання
g4Museum5Історичні сімейства з покриттям інференсу
sSibling tier21Суміжні API (SAM, відкритий словник, VLM, zero-shot), що перевіряються окремо

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

Для читача, який вибирає модель, група вказує, де очікувати інженерної уваги, а не точність сімейства. У g0 і g1 нову функцію проєктують і впроваджують першою; g2 підтримується справною в CI, але функція потрапляє туди за можливості, а не в тій самій хвилі випуску. g3 означає відсутність, а не обмеження: передбачення, валідація та, якщо сімейство підтримує, експорт і далі працюють, а train() для сімейства g3 або g4 спричиняє NotImplementedError із поясненням замість неповної неявної роботи. Сімейства s взагалі не беруть участі в цьому компромісі, оскільки завантажуються через власну фабрику, а не LibreYOLO(). У основних поняттях пояснено місце групи поруч із задачею, сімейством і розміром під час читання імені контрольної точки.

Група сама собою не надає й не обмежує можливості для користувача. Підтримку визначають реалізований API сімейства та перевірки можливостей конкретного формату, а не належність до групи. Групи класифікують сімейства, а не задачі, тому запуск покриття для задачі явно називає її, як у "g1 detect".

У двох місцях група читається під час виконання, а не лише в тестах. collect_model_inventory() у libreyolo/models/inventory.py додає групу до кожного запису переліку CLI, а pretrained=False запускає спеціальний шлях повторної ініціалізації з нуля лише для сімейств у g0 і g1. Поза цими двома групами перевірка в libreyolo/models/base/model.py повністю пропускається, тому pretrained=False доходить до власного train() сімейства як звичайне ключове слово.

Навчання

Сімейство у g3 або g4 не має реалізації навчання, і виклик train() спричиняє помилку. Це властивість коду сімейства, а не групи: група фіксує цей факт, а не спричиняє його.

Для сімейства з навчанням застосування окремого параметра аугментації до конвеєра є іншим питанням із власним набором із трьох значень: used, gated_by_mosaic і ignored. Дивіться матрицю аугментацій.

Чого рівень не повідомляє

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

Рівень також не є твердженням про ліцензію. Ліцензії ваг відрізняються в межах сімейства, а визначальним є репозиторій конкретної контрольної точки. Належність сімейства до фабрики детекторів нічого не говорить про дозвіл на комерційне використання його опублікованих ваг.

Рівні експорту взято з docs/adr/0011-export-support-tiers.md і libreyolo/export/support.py; групи покриття й кількість сімейств із MODEL_GROUPS у libreyolo/models/registry.py; умову навчання з нуля з libreyolo/models/base/model.py і libreyolo/cli/commands/train.py; перелік CLI з libreyolo/models/inventory.py; рівні API з рядків документації пакетів libreyolo/models/sam/, openvocab/ і vlm/ та контрактів base.py, усе у версії v1.5.0. Зручні для читача назви груп (Flagship, Core, Supported, Inference only, Museum, Sibling tier) є власною термінологією сайту для тих самих груп із src/data/docs/registry.json.