ResNet
ResNet è un classificatore di immagini costruito con blocchi residui, connessioni skip che permettono a una rete di aggiungere molti più layer senza la perdita di accuratezza di cui soffrono altrimenti le pile convoluzionali profonde e semplici. LibreYOLO lo supporta per un solo task: la classificazione.
- Task
- classify
- Dimensioni
- 18, 34, 50, 101 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.
- Licenze
- Codice Apache-2.0, pesi Apache-2.0. Uso commerciale
Installazione
ResNet non richiede nessun extra opzionale. Tutto ciò che importa è già nell'installazione di base.
pip install libreyoloPredizione
I pesi vengono scaricati da Hugging Face al primo utilizzo e restano nella cache locale.
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=TrueL'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
Quattro profondità, 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.
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=-1Se 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. Qui
lora=True non è supportato; passarlo solleva un errore, dato che in LibreYOLO
LoRA agisce sui componenti transformer con layer nn.Linear, che ResNet non
ha.
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.
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=imagenette160Esportazione
| Task | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| classify | classify to ONNX: supportato | classify to TorchScript: supportato | classify to ExecuTorch: supportato | classify to TensorRT: supportato | classify to OpenVINO: supportato | classify to Paddle: non supportato | classify to MNN: non supportato | classify to RKNN: non supportato | classify to ncnn: supportato | classify to TFLite: supportato | classify to CoreML: non supportato | classify 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.
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 # 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("LibreResNet50-cls.onnx")result = model(SAMPLE_IMAGE) print(result.probs.top1)Checkpoint
Tutti i file di pesi pubblicati per questa famiglia.
| File | Ingresso (px) | Licenza dei pesi |
|---|---|---|
| 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 |
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
- ResNet, Microsoft Research Asia
- Licenza upstream
- Apache-2.0
- Sorgente upstream
- github.com/huggingface/pytorch-image-models
- 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 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.
Citazione
@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}
}Copiato dal blocco di citazione degli autori disponibile su github.com/KaimingHe/deep-residual-networks#citation.