ConvNeXt

ConvNeXt є класифікатором зображень, повністю побудованим зі стандартних згорток і модернізованим блок за блоком від ResNet до проєктних рішень візуального трансформера. 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 не потребує додаткових пакетів. Усі його імпорти входять до базового встановлення.

bash
pip install libreyolo

Винятком є донавчання адаптерів із lora=True, для якого потрібен додатковий пакет 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)
Кілька 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 на валідаційній вибірці.

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. Таблиці підтримки, контрольні точки й результати бенчмарків на цій сторінці згенеровано з випущеної бібліотеки та опублікованих ваг, а не написано вручну.