Посмотреть как Markdown

Основные понятия

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

Схема имени файла
Libre<FAMILY><size>[-<task>].pt
Канонические задачи
17
Уровни поддержки
Flagship, Core, Supported, Inference only, Museum, Sibling tier

Задачи

Задача — это то, что возвращает модель. В 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 — три разные задачи, а не три названия одной и той же. У масок экземпляров, у попиксельных меток и у объединённой карты «объекты плюс фон» разная эталонная разметка (ground truth), разные метрики и разные поля результата.

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

Семейство — это одна архитектурная линия со своим кодом загрузки, предобработки и постобработки. Каждое семейство объявляет идентификатор 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; коды составного масштабирования, такие как b0b3; или имя, которое обозначает единственный выпущенный чекпойнт. 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

Семейство, у которого нет задачи без суффикса, может требовать суффикс, так что имя без него не принимается как валидный чекпойнт этого семейства. Семейство, которое публикует веса, обученные на датасете, отличном от датасета по умолчанию, добавляет имя датасета ещё одним суффиксом, и этот вариант остаётся частью имени репозитория, откуда скачивается файл.

Три уровня остаются вне этой схемы. Семейства сегментации по промптам, семейства vision-language и детекторы с открытым словарём не зарегистрированы в фабрике чекпойнтов и не выпускают файла Libre<FAMILY><size>.pt. Вместо этого их префикс указывает на скачанный снапшот Hugging Face или на чекпойнт для работы по промптам, и регистр букв в исходном названии там сохраняется намеренно.

Как определяется задача

Когда задачу могут назвать сразу несколько сигналов, они проверяются в фиксированном порядке, и побеждает первый из присутствующих: аргумент task, который вы передали, затем задача, записанная в метаданных чекпойнта, затем суффикс задачи в имени файла, затем задача семейства по умолчанию. Результат сверяется с поддерживаемыми задачами семейства до того, как модель будет построена, поэтому при несовпадении загрузка падает сразу, а не выдаёт неправильный результат позже.

Уровни поддержки

Каждое семейство отнесено ровно к одному уровню. Уровень говорит о внимании разработчиков, а не о точности: он показывает, где новая возможность появляется первой и что держится зелёным.

УровеньЧто это значит
FlagshipВозможности сначала проектируются и полностью проверяются на GPU именно здесь
CoreОсновные обучаемые детекторы. Возможности приходят следом за flagship-семействами в той же волне релизов
SupportedВспомогательные обучаемые семейства. Держатся зелёными в CI, возможности добавляются при случае
Inference onlyПредсказание, валидация и экспорт. Возможности обучения неприменимы
MuseumЗамороженный экспонат. Только исправление багов
Sibling tierОтдельная часть продукта со своей фабрикой и своим контрактом

На каждой странице модели уровень её семейства указан в шапке. Два flagship-семейства — YOLOv9 для свёрточных детекторов и RF-DETR для трансформерных детекторов; начинайте с них, если нет причины поступить иначе.

Уровень Inference only говорит о том, чего нет: цикла обучения в LibreYOLO. Предсказание и валидация работают, как и экспорт там, где семейство его поддерживает. Вызов train() у такого семейства выбрасывает NotImplementedError с указанием причины.

Проверено с LibreYOLO v1.5.0.