ResNet
ResNet є класифікатором зображень на основі залишкових блоків і пропускних з'єднань, які дають мережі змогу додавати значно більше шарів без втрати правильності, якої інакше зазнають глибокі звичайні згорткові стеки. LibreYOLO підтримує її для одного завдання: класифікації.
- Задачі
- classify
- Розміри
- 18, 34, 50, 101 at 224 px
- Встановлення
pip install libreyolo- Рівень підтримки
- Підтримуваний, починаючи з v. Додаткові придатні до навчання моделі: тести CI підтримують справними, а функції додають за нагоди.
- Ліцензії
- Код: Apache-2.0, ваги: Apache-2.0. Комерційне використання
Встановлення
ResNet не потребує додаткових залежностей. Усе, що вона імпортує, входить до базового встановлення.
pip install libreyoloПередбачення
Під час першого використання ваги завантажуються з Hugging Face і кешуються локально.
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreResNet50-cls.pt")result = model(SAMPLE_IMAGE, save=True) print(result.probs.top1, result.probs.top1conf)print(result.probs.top5)libreyolo predict model=LibreResNet50-cls.pt source=cat.jpg save=TrueПовернений об'єкт Results є однаковим для всіх сімейств, тому заміна моделі
потребує зміни одного рядка. Класифікатор не містить рамок або масок:
result.probs містить передбачення для всього зображення з top1,
top5, top1conf і top5conf. conf, iou і max_det
приймаються для узгодженості API, але не впливають на результат, оскільки в
одному векторі ймовірностей немає чого порогувати чи придушувати. Типи джерел,
потокове передбачення та обробку результатів описано в розділі
передбачення.
Варіанти
Доступні чотири глибини, усі з однаковим процесом навчання та оцінювання, тому
вибір прямо зіставляє кількість параметрів із правильністю. Завдання
фіксоване: кожен розмір охоплює лише класифікацію. Назва файлу ваг кожного
розміру завершується на -cls.pt, і за цим суфіксом фабрика маршрутизує до
сімейства; аргумент task= не потрібен.
Навчання
Донавчання починається з опублікованого бекбона ImageNet і автоматично перебудовує завершальний шар класифікатора під кількість класів цільового датасету.
from libreyolo import LibreYOLO model = LibreYOLO("LibreResNet50-cls.pt")model.train(data="imagenette160", epochs=5)libreyolo train model=LibreResNet50-cls.pt data=imagenette160 epochs=5libreyolo train model=LibreResNet50-cls.pt data=imagenette160 \ epochs=50 device=0,1 batch=-1Без додаткових налаштувань тренер виконує 100 епох із lr0=1e-3,
оптимізатором AdamW, батчем 64 і ранньою зупинкою після 50 епох без покращення.
data приймає кореневий каталог датасету (train/ і val/, по одній
папці на клас), відому коротку назву на кшталт imagenette160 або URL
.zip. lora=True тут не підтримується; його передавання спричиняє
помилку, оскільки LoRA в LibreYOLO націлена на трансформерні компоненти із
шарами nn.Linear, яких немає в ResNet.
Датасети, аугментацію, кілька GPU та логери описано в розділі навчання.
Валідація
val() повертає словник ключів metrics/. Для класифікації це правильність
top-1 і top-5 на валідаційному поділі.
from libreyolo import LibreYOLO model = LibreYOLO("LibreResNet50-cls.pt")metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])libreyolo val model=LibreResNet50-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("LibreResNet50-cls.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibreResNet50-cls.pt format=onnxlibreyolo export model=LibreResNet50-cls.pt format=tensorrt half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика маршрутизує за суфіксом файлу, тому експортований артефакт# завантажується як будь-яка контрольна точка й повертає той самий об'єкт Results.model = LibreYOLO("LibreResNet50-cls.onnx")result = model(SAMPLE_IMAGE) print(result.probs.top1)Контрольні точки
Усі опубліковані файли ваг цього сімейства.
| Файл | Вхід (пікс.) | Ліцензія ваг |
|---|---|---|
| classify | ||
| LibreResNet18-cls.pt | 224 | apache-2.0 |
| LibreResNet34-cls.pt | 224 | apache-2.0 |
| LibreResNet50-cls.pt | 224 | apache-2.0 |
| LibreResNet101-cls.pt | 224 | apache-2.0 |
Кожен наведений вище файл уже доступний у організації LibreYOLO і завантажується під час першого використання.
Ліцензування
Перевіряйте ліцензію в репозиторії Hugging Face конкретних ваг, які завантажуєте. Кожна контрольна точка в організації LibreYOLO має ліцензію, і вона не завжди однакова для всього сімейства. Цей репозиторій є авторитетним джерелом, а наведене нижче резюме описує умови на момент останньої перевірки сторінки.
Це опис відповідних ліцензій, а не юридична консультація. Якщо відповідь має комерційне значення, самостійно прочитайте ліцензії та зверніться по юридичну консультацію.
- Оригінальна робота
- ResNet, Microsoft Research Asia
- Ліцензія першоджерела
- 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 the original Microsoft Research Asia design; the pretrained weights LibreYOLO ships are timm's resnet{18,34,50,101}.a1_in1k reproduction (the "ResNet Strikes Back" A1 recipe), trained by Ross Wightman and the timm contributors on ImageNet-1k and licensed Apache-2.0 there. LibreYOLO's module and attribute names mirror timm so the state dict loads unchanged and inference matches bit-identically.
Цитування
@article{He2015,
author = {Kaiming He and Xiangyu Zhang and Shaoqing Ren and Jian Sun},
title = {Deep Residual Learning for Image Recognition},
journal = {arXiv preprint arXiv:1512.03385},
year = {2015}
}Скопійовано з блоку цитування авторів на сторінці github.com/KaimingHe/deep-residual-networks#citation.