ConvNeXt

ConvNeXt est un classifieur d'images construit entièrement à partir de convolutions standard, modernisé bloc par bloc depuis un ResNet vers les choix de conception d'un vision transformer. LibreYOLO le prend en charge pour une seule tâche : la classification.

Tâches
classify
Tailles
t, s, b at 224 px
Installer
pip install libreyolo
Niveau de support
Pris en charge, depuis v. Modèles entraînables complémentaires : maintenus au vert dans la CI, avec des fonctionnalités ajoutées selon les occasions.
Origine
ConvNeXt par Meta AI (FAIR), Apache-2.0. Article, source
Licences
Code MIT, poids Apache-2.0. Usage commercial

Installation

ConvNeXt ne demande aucun extra optionnel. Tout ce qu'il importe fait partie de l'installation de base.

bash
pip install libreyolo

Le fine-tuning par adaptateurs avec lora=True fait exception et demande l'extra lora.

bash
pip install "libreyolo[lora]"

Prédire

Les poids sont téléchargés depuis Hugging Face au premier usage, puis mis en cache localement.

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

L'objet Results renvoyé est celui que renvoie chaque famille, si bien que passer à un autre modèle tient en une ligne. Un classifieur ne porte ni boîtes ni masques : result.probs contient la prédiction sur l'image entière, avec top1, top5, top1conf et top5conf. conf, iou et max_det sont acceptés par parité d'API mais n'ont aucun effet, puisqu'il n'y a rien à seuiller ni à supprimer sur un simple vecteur de probabilités. Voir la prédiction pour les sources, le streaming et le traitement des résultats.

Variantes

Trois tailles, tiny/small/base, toutes entraînées et évaluées de la même manière : en choisir une revient donc à arbitrer directement entre nombre de paramètres et exactitude. La tâche est fixe : chaque taille ne couvre que la classification. Le nom du fichier de poids se termine par -cls.pt à toutes les tailles, et c'est ce suffixe que lit la factory pour router vers cette famille ; aucun argument task= n'est nécessaire.

Entraîner

Le fine-tuning part du backbone ImageNet publié et reconstruit automatiquement la couche de classification finale au nombre de classes du dataset cible.

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

Sans réglage particulier, l'entraînement fait 100 époques à lr0=1e-3 avec AdamW, un batch de 64 et un early stopping après 50 époques sans amélioration. data accepte une racine de dataset (train/ et val/, un dossier par classe), un nom court connu comme imagenette160, ou une URL .zip. Les blocs de ConvNeXt portent les MLP nn.Linear dont LoRA a besoin, donc lora=True est pris en charge ici, et injecte des adaptateurs dans les MLP des blocs plutôt que de faire du fine-tuning sur l'ensemble du backbone.

Voir l'entraînement pour les datasets, l'augmentation, le multi-GPU et les loggers.

Valider

val() renvoie un dictionnaire de clés metrics/. Pour la classification, il s'agit de l'exactitude top-1 et top-5 sur le split de validation.

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

Exporter

TâcheONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
classifyclassify to ONNX : pris en chargeclassify to TorchScript : pris en chargeclassify to ExecuTorch : pris en chargeclassify to TensorRT : pris en chargeclassify to OpenVINO : pris en chargeclassify to Paddle : non pris en chargeclassify to MNN : non pris en chargeclassify to RKNN : non pris en chargeclassify to ncnn : pris en chargeclassify to TFLite : pris en chargeclassify to CoreML : non pris en chargeclassify to Core AI : pris en charge

Un artefact exporté se recharge via LibreYOLO() selon son extension de fichier, si bien qu'un fichier .onnx ou .engine se comporte comme un checkpoint et renvoie le même Results. L'export liste les arguments que chaque format accepte, ainsi que les extras que quelques-uns ajoutent.

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
Utiliser le fichier exporté
from libreyolo import LibreYOLO, SAMPLE_IMAGE # La factory s'appuie sur l'extension du fichier, donc un artefact# exporté se charge comme n'importe quel checkpoint et renvoie le# même objet Results.model = LibreYOLO("LibreConvNeXtt-cls.onnx")result = model(SAMPLE_IMAGE) print(result.probs.top1)

Checkpoints

Tous les fichiers de poids publiés de cette famille.

FichierEntrée (px)Licence des poids
classify
LibreConvNeXtt-cls.pt224apache-2.0
LibreConvNeXts-cls.pt224apache-2.0
LibreConvNeXtb-cls.pt224apache-2.0

Tous les fichiers ci-dessus sont actuellement disponibles dans l<link>organisation LibreYOLO</link> et sont téléchargés à la première utilisation.

Licence

Vérifiez la licence dans le dépôt Hugging Face des poids précis que vous téléchargez. Chaque checkpoint de l<link>organisation LibreYOLO</link> en possède une, et elles ne sont pas toujours identiques au sein dune même famille. Ce dépôt fait autorité ; le résumé ci-dessous décrit les conditions applicables lors de la dernière vérification de cette page.

Ceci décrit les licences concernées et ne constitue pas un conseil juridique. Si la réponse a une importance commerciale, lisez vous-même les licences et consultez votre propre avocat.

Travail d'origine
ConvNeXt, Meta AI (FAIR)
Licence du projet d'origine
Apache-2.0
Code de LibreYOLO
MIT
Poids
Apache-2.0, republiés sur huggingface.co/LibreYOLO
Interprétation
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.

Seul ConvNeXt V1 est fourni dans cette famille. Les petits checkpoints pré-entraînés de ConvNeXt-V2 sont sous CC-BY-NC 4.0 et sont délibérément exclus, puisqu'un poids non commercial ne peut pas être redistribué au sein d'une bibliothèque MIT/commerciale.

Citation

@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},
}

Copié depuis le bloc de citation des auteurs sur github.com/facebookresearch/ConvNeXt#citation.

Vérifié avec LibreYOLO v1.5.0. Les tableaux de support, les checkpoints et les chiffres de benchmark de cette page sont générés à partir de la bibliothèque publiée et des poids publiés, et non rédigés à la main.