ConvNeXt
ConvNeXt є класифікатором зображень, повністю побудованим зі стандартних згорток і модернізованим блок за блоком від ResNet до проєктних рішень візуального трансформера. LibreYOLO підтримує його для одного завдання: класифікації.
- Задачі
- classify
- Розміри
- t, s, b at 224 px
- Встановлення
pip install libreyolo- Рівень підтримки
- Підтримуваний, починаючи з v. Додаткові придатні до навчання моделі: тести CI підтримують справними, а функції додають за нагоди.
- Ліцензії
- Код: MIT, ваги: Apache-2.0. Комерційне використання
Встановлення
ConvNeXt не потребує додаткових пакетів. Усі його імпорти входять до базового встановлення.
pip install libreyoloВинятком є донавчання адаптерів із lora=True, для якого потрібен додатковий
пакет lora.
pip install "libreyolo[lora]"Передбачення
Під час першого використання ваги завантажуються з Hugging Face та кешуються локально.
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)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, а останній шар класифікатора автоматично перебудовується відповідно до кількості класів цільового датасету.
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.train(data="imagenette160", epochs=5)libreyolo train model=LibreConvNeXtt-cls.pt data=imagenette160 epochs=5from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.train(data="imagenette160", epochs=5, lora=True)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 на валідаційній вибірці.
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])libreyolo val model=LibreConvNeXtt-cls.pt data=imagenette160Експорт
| Задача | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| classify | classify 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. На сторінці Експорт наведено аргументи, які
приймає кожен формат, і додаткові пакети, потрібні деяким із них.
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibreConvNeXtt-cls.pt format=onnxlibreyolo export model=LibreConvNeXtt-cls.pt format=tensorrt half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика виконує маршрутизацію за суфіксом файлу, тому експортований артефакт# завантажується як будь-яка контрольна точка й повертає той самий об'єкт Results.model = LibreYOLO("LibreConvNeXtt-cls.onnx")result = model(SAMPLE_IMAGE) print(result.probs.top1)Контрольні точки
Усі опубліковані файли ваг для цього сімейства.
| Файл | Вхід (пікс.) | Ліцензія ваг |
|---|---|---|
| classify | ||
| LibreConvNeXtt-cls.pt | 224 | apache-2.0 |
| LibreConvNeXts-cls.pt | 224 | apache-2.0 |
| LibreConvNeXtb-cls.pt | 224 | apache-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.