ConvNeXt

ConvNeXt — классификатор изображений, целиком построенный на обычных свёртках: его блок за блоком модернизировали от ResNet в сторону проектных решений vision transformer. LibreYOLO поддерживает его для одной задачи — классификации.

Задачи
classify
Размеры
t, s, b at 224 px
Установка
pip install libreyolo
Уровень поддержки
Поддерживаемый, начиная с v. Дополнительные обучаемые модели: тесты CI поддерживаются в рабочем состоянии, а функции добавляются по возможности.
Исходный проект
ConvNeXt от Meta AI (FAIR), Apache-2.0. Статья, исходный код
Лицензии
Код: MIT, веса: Apache-2.0. Коммерческое использование

Установка

Для ConvNeXt не нужны дополнительные extra-зависимости. Всё, что он импортирует, входит в базовую установку.

bash
pip install libreyolo

Исключение — дообучение адаптерами с lora=True: ему нужен extra lora.

bash
pip install "libreyolo[lora]"

Предсказание

Веса скачиваются с Hugging Face при первом запуске и кэшируются локально.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreConvNeXtt-cls.pt")result = model(SAMPLE_IMAGE, save=True) print(result.probs.top1, result.probs.top1conf)print(result.probs.top5)
CLI
libreyolo predict model=LibreConvNeXtt-cls.pt source=cat.jpg save=True

Возвращаемый объект Results — тот же, что возвращает любое семейство, поэтому переход на другую модель сводится к правке в одну строку. У классификатора нет ни рамок, ни масок: result.probs содержит предсказание для всего изображения, с полями top1, top5, top1conf и top5conf. Аргументы conf, iou и max_det принимаются ради единообразия API, но ни на что не влияют: в одном векторе вероятностей нечего отсекать по порогу и нечего подавлять. Про источники, стриминг и обработку результатов — предсказание.

Варианты

Три размера, tiny/small/base, все обучены и оценены одинаково, поэтому выбор сводится к прямому размену числа параметров на точность. Задача зафиксирована: каждый размер закрывает только классификацию. Имя файла весов у всех размеров заканчивается на -cls.pt, и именно по этому суффиксу фабрика определяет семейство; аргумент task= не нужен.

Обучение

Дообучение стартует с опубликованного бэкбона ImageNet и автоматически перестраивает последний слой классификатора под число классов целевого датасета.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.train(data="imagenette160", epochs=5)
CLI
libreyolo train model=LibreConvNeXtt-cls.pt data=imagenette160 epochs=5
LoRA
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.train(data="imagenette160", epochs=5, lora=True)
Multi-GPU
libreyolo train model=LibreConvNeXtt-cls.pt data=imagenette160 \  epochs=50 device=0,1 batch=-1

Если ничего не менять, обучение идёт 100 эпох с lr0=1e-3 и AdamW, размером батча 64 и ранней остановкой после 50 эпох без улучшений. data принимает корень датасета (train/ и val/, по одной папке на класс), известное короткое имя вроде imagenette160 или URL на .zip. В блоках ConvNeXt есть MLP на nn.Linear, которые нужны LoRA, поэтому lora=True здесь поддерживается: адаптеры внедряются в MLP блоков, а не дообучается весь бэкбон.

Про датасеты, аугментацию, обучение на нескольких GPU и логгеры — обучение.

Валидация

val() возвращает словарь с ключами metrics/. Для классификации это top-1 и top-5 accuracy на валидационной выборке.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])
CLI
libreyolo val model=LibreConvNeXtt-cls.pt data=imagenette160

Экспорт

ЗадачаONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
classifyclassify to ONNX: поддерживаетсяclassify to TorchScript: поддерживаетсяclassify to ExecuTorch: поддерживаетсяclassify to TensorRT: поддерживаетсяclassify to OpenVINO: поддерживаетсяclassify to Paddle: не поддерживаетсяclassify to MNN: не поддерживаетсяclassify to RKNN: не поддерживаетсяclassify to ncnn: поддерживаетсяclassify to TFLite: поддерживаетсяclassify to CoreML: не поддерживаетсяclassify to Core AI: поддерживается

Экспортированный артефакт загружается обратно через LibreYOLO() по суффиксу файла, поэтому файл .onnx или .engine ведёт себя как чекпойнт и возвращает те же Results. В разделе экспорт перечислены аргументы, которые принимает каждый формат, и дополнительные, которые добавляют некоторые из них.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)
CLI
libreyolo export model=LibreConvNeXtt-cls.pt format=onnxlibreyolo export model=LibreConvNeXtt-cls.pt format=tensorrt half=True
Использование экспортированного файла
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика выбирает загрузчик по суффиксу файла, поэтому экспортированный# артефакт загружается как обычный чекпойнт и возвращает тот же Results.model = LibreYOLO("LibreConvNeXtt-cls.onnx")result = model(SAMPLE_IMAGE) print(result.probs.top1)

Чекпойнты

Все опубликованные файлы весов этого семейства.

ФайлВход (пикс.)Лицензия весов
classify
LibreConvNeXtt-cls.pt224apache-2.0
LibreConvNeXts-cls.pt224apache-2.0
LibreConvNeXtb-cls.pt224apache-2.0

Все перечисленные выше файлы уже доступны в организации LibreYOLO и скачиваются при первом использовании.

Лицензирование

Проверяйте лицензию в репозитории конкретных весов на Hugging Face. Она указана для каждого чекпойнта в организации LibreYOLO и может различаться даже внутри одного семейства. Этот репозиторий считается авторитетным источником, а сводка ниже описывает условия на момент последней проверки страницы.

Это описание соответствующих лицензий, а не юридическая консультация. Если ответ важен для коммерческого использования, прочитайте лицензии самостоятельно и проконсультируйтесь с юристом.

Оригинальная работа
ConvNeXt, Meta AI (FAIR)
Лицензия исходного проекта
Apache-2.0
Исходный код проекта
github.com/huggingface/pytorch-image-models
Код LibreYOLO
MIT
Веса
Apache-2.0, повторно опубликованы на huggingface.co/LibreYOLO
Толкование
Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code, and weights you train yourself on your own data are yours. The architecture is Meta AI's original design, released under MIT at facebookresearch/ConvNeXt; the block definitions, layer-scale parameter and module naming that LibreYOLO's implementation follows come from timm, whose convnext_{tiny,small,base}.fb_in1k ImageNet-1k weights are licensed Apache-2.0 and are what LibreYOLO ships. Only ConvNeXt V1 is shipped here: ConvNeXt-V2's small pretrained checkpoints are CC-BY-NC 4.0 and are deliberately excluded as not redistributable in a commercial library.

В этом семействе поставляется только ConvNeXt V1. Небольшие предобученные чекпойнты ConvNeXt-V2 распространяются под CC-BY-NC 4.0 и исключены намеренно: некоммерческие веса нельзя переопубликовать внутри библиотеки под MIT, пригодной для коммерческого использования.

Цитирование

@Article{liu2022convnet,
  author  = {Zhuang Liu and Hanzi Mao and Chao-Yuan Wu and Christoph Feichtenhofer and Trevor Darrell and Saining Xie},
  title   = {A ConvNet for the 2020s},
  journal = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
  year    = {2022},
}

Скопировано из блока цитирования авторов на странице github.com/facebookresearch/ConvNeXt#citation.

Проверено с LibreYOLO v1.5.0. Таблицы поддержки, чекпойнты и результаты бенчмарков на этой странице сгенерированы из выпущенной библиотеки и опубликованных весов, а не написаны вручную.