ConvNeXt

ConvNeXt è un classificatore di immagini costruito interamente con convoluzioni standard, modernizzato blocco per blocco a partire da una ResNet fino alle scelte progettuali di un vision transformer. LibreYOLO lo supporta per un solo task: la classificazione.

Task
classify
Dimensioni
t, s, b at 224 px
Installa
pip install libreyolo
Livello di supporto
Supportato, dalla v. Modelli addestrabili di supporto: mantenuti funzionanti nella CI, ricevono nuove funzionalità quando possibile.
Origine
ConvNeXt di Meta AI (FAIR), Apache-2.0. Articolo, sorgente
Licenze
Codice MIT, pesi Apache-2.0. Uso commerciale

Installazione

ConvNeXt non richiede nessun extra opzionale. Tutto ciò che importa è già nell'installazione di base.

bash
pip install libreyolo

Il fine-tuning con adattatori tramite lora=True è l'eccezione, e richiede l'extra lora.

bash
pip install "libreyolo[lora]"

Predizione

I pesi vengono scaricati da Hugging Face al primo utilizzo e restano nella cache locale.

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'oggetto Results restituito è lo stesso che restituisce ogni famiglia, quindi passare a un altro modello è una modifica di una riga. Un classificatore non porta con sé box né maschere: result.probs contiene la predizione sull'intera immagine, con top1, top5, top1conf e top5conf. conf, iou e max_det sono accettati per parità di API ma non hanno effetto, dato che su un singolo vettore di probabilità non c'è nulla da sogliare o sopprimere. Vedi predizione per sorgenti, streaming e gestione dei risultati.

Varianti

Tre dimensioni, tiny/small/base, tutte addestrate e valutate allo stesso modo, quindi sceglierne una è un semplice scambio tra numero di parametri e accuratezza. Il task è fisso: ogni dimensione copre solo la classificazione. Il nome del file dei pesi termina in -cls.pt per tutte le dimensioni, ed è quel suffisso che la factory legge per smistare verso questa famiglia; non serve nessun argomento task=.

Addestramento

Il fine-tuning parte dal backbone ImageNet pubblicato e ricostruisce automaticamente il layer finale del classificatore sul numero di classi del dataset di destinazione.

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

Se non tocchi nulla, il trainer esegue 100 epoche a lr0=1e-3 con AdamW, un batch di 64 ed early stopping dopo 50 epoche senza miglioramenti. data accetta la radice di un dataset (train/ e val/, una cartella per classe), un nome breve noto come imagenette160, oppure l'URL di un .zip. I blocchi di ConvNeXt contengono gli MLP nn.Linear di cui LoRA ha bisogno, quindi qui lora=True è supportato e inietta gli adattatori negli MLP dei blocchi invece di fare fine-tuning dell'intero backbone.

Vedi addestramento per dataset, data augmentation, multi-GPU e logger.

Validazione

val() restituisce un dizionario di chiavi metrics/. Per la classificazione sono l'accuratezza top-1 e top-5 sullo split di validazione.

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

Esportazione

TaskONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
classifyclassify to ONNX: supportatoclassify to TorchScript: supportatoclassify to ExecuTorch: supportatoclassify to TensorRT: supportatoclassify to OpenVINO: supportatoclassify to Paddle: non supportatoclassify to MNN: non supportatoclassify to RKNN: non supportatoclassify to ncnn: supportatoclassify to TFLite: supportatoclassify to CoreML: non supportatoclassify to Core AI: supportato

Un artefatto esportato si ricarica con LibreYOLO() in base al suffisso del file, quindi un file .onnx o .engine si comporta come un checkpoint e restituisce lo stesso Results. Esportazione elenca gli argomenti accettati da ogni formato e gli extra che alcuni di essi aggiungono.

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
Usare il file esportato
from libreyolo import LibreYOLO, SAMPLE_IMAGE # La factory smista in base al suffisso del file, quindi un artefatto# esportato si carica come qualsiasi checkpoint e restituisce lo stesso# oggetto Results.model = LibreYOLO("LibreConvNeXtt-cls.onnx")result = model(SAMPLE_IMAGE) print(result.probs.top1)

Checkpoint

Tutti i file di pesi pubblicati per questa famiglia.

FileIngresso (px)Licenza dei pesi
classify
LibreConvNeXtt-cls.pt224apache-2.0
LibreConvNeXts-cls.pt224apache-2.0
LibreConvNeXtb-cls.pt224apache-2.0

Oggi tutti i file elencati sopra sono presenti nell<link>organizzazione LibreYOLO</link> e vengono scaricati al primo utilizzo.

Licenze

Controlla la licenza nel repository Hugging Face degli specifici pesi che scarichi. Ogni checkpoint nell<link>organizzazione LibreYOLO</link> ne include una e non è sempre la stessa per tutta la famiglia. Quel repository è la fonte autorevole; il riepilogo seguente descrive le condizioni applicabili al momento dellultima verifica di questa pagina.

Questa è una descrizione delle licenze coinvolte, non una consulenza legale. Se la risposta è importante a fini commerciali, leggi personalmente le licenze e chiedi una consulenza indipendente.

Lavoro originale
ConvNeXt, Meta AI (FAIR)
Licenza upstream
Apache-2.0
Codice LibreYOLO
MIT
Pesi
Apache-2.0, ripubblicati su huggingface.co/LibreYOLO
Interpretazione
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.

In questa famiglia viene distribuito solo ConvNeXt V1. I checkpoint preaddestrati piccoli di ConvNeXt-V2 sono CC-BY-NC 4.0 e sono esclusi deliberatamente, dato che dei pesi non commerciali non possono essere ridistribuiti dentro una libreria MIT/commerciale.

Citazione

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

Copiato dal blocco di citazione degli autori disponibile su github.com/facebookresearch/ConvNeXt#citation.

Verificato con LibreYOLO v1.5.0. Le tabelle di supporto, i checkpoint e i dati dei benchmark in questa pagina vengono generati dalla libreria rilasciata e dai pesi pubblicati, non scritti a mano.