YOLOv7

YOLOv7 è un rilevatore single-stage basato su anchor, la cui testa aggiunge offset di conoscenza implicita appresi prima della convoluzione finale. LibreYOLO ne supporta l'unica dimensione pubblicata per il rilevamento.

Task
detection
Dimensioni
b at 640 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
YOLOv7 di MultimediaTechLab, MIT. Articolo, sorgente
Licenze
Codice MIT, pesi MIT. Uso commerciale

Installazione

YOLOv7 non richiede nessun extra oltre al pacchetto base.

bash
pip install libreyolo

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("LibreYOLO7b.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreYOLO7b.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

L'oggetto Results restituito è quello che restituisce ogni famiglia, quindi passare a un rilevatore diverso è una modifica di una riga. conf imposta la soglia di confidenza e iou la soglia di NMS applicata dopo la decodifica della testa basata su anchor. Vedi predizione per sorgenti, streaming e gestione dei risultati.

Varianti

LibreYOLO include una sola dimensione, b. Upstream pubblica un unico modello YOLOv7, quindi non c'è nessuna dimensione tra cui scegliere.

Addestramento

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)
CLI
libreyolo train model=LibreYOLO7b.pt data=my-dataset.yaml \  epochs=300 imgsz=640 batch=16 lr0=0.01
Partenza a caldo da un modello nuovo
from libreyolo import LibreYOLO7 # pretrained=True carica sempre il checkpoint pubblicato LibreYOLO7b.pt,# indipendentemente da come è stata costruita questa istanza. Costruire# la classe direttamente, invece che tramite LibreYOLO(), parte senza# nessun peso caricato.model = LibreYOLO7(None, size="b")model.train(data="my-dataset.yaml", epochs=300, pretrained=True)

pretrained viene letto davvero, a differenza dell'argomento omonimo che non fa niente in alcune altre famiglie qui presenti: passa True per partire a caldo dal checkpoint pubblicato LibreYOLO7b.pt (scaricato automaticamente), oppure un percorso o un nome per qualsiasi altra cosa. Quel checkpoint pubblicato è COCO a 80 classi, quindi richiederlo su un modello già ricostruito per un numero di classi diverso prima lo ricostruisce di nuovo a 80, lo carica e poi trasferisce ogni tensore con forma corrispondente nel numero di classi della testa di destinazione, una volta letto il numero di classi del dataset. resume=True non si può combinare con pretrained. Lasciato al valore predefinito None, l'addestramento continua da ciò con cui il modello è stato costruito, o da un'inizializzazione casuale se non è stato caricato niente.

Se non tocchi altro, il trainer esegue 300 epoche con lr0=0.01 e SGD con momentum 0.937, un warmup di 3 epoche, e la stessa assegnazione SimOTA e la stessa fase finale di 15 epoche senza data augmentation che usa YOLOX, adattate alla testa basata su anchor. L'unica differenza: durante quelle epoche finali YOLOX aggiunge un raffinamento L1 della regressione dei box che v7 salta, perché la loss SimOTA di v7 non porta un ramo L1 sugli offset grezzi da raffinare.

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

Validazione

val() restituisce un dizionario di chiavi metrics/ che coprono precisione, recall, mAP 50 e mAP 50-95, misurate su qualsiasi dataset nel formato con cui hai addestrato.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreYOLO7b.pt data=my-dataset.yaml

Esportazione

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

Un artefatto esportato si ricarica tramite LibreYOLO() in base al suffisso del file, quindi un file .onnx o .engine si comporta come un checkpoint e restituisce lo stesso Results. È supportata anche l'esecuzione del grafo in un runtime nudo, senza LibreYOLO installato, ma allora il preprocessing e il postprocessing sono a carico tuo.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreYOLO7b.pt format=onnx imgsz=640libreyolo export model=LibreYOLO7b.pt format=tensorrt imgsz=640 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("LibreYOLO7b.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpoint

Tutti i file di pesi pubblicati per questa famiglia.

FileIngresso (px)Licenza dei pesi
Detection
LibreYOLO7b.pt640mit

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
YOLOv7, MultimediaTechLab
Licenza upstream
MIT
Codice LibreYOLO
MIT
Pesi
MIT, ripubblicati su huggingface.co/LibreYOLO
Interpretazione
MIT is a permissive license, so these weights can be used in commercial and closed-source products. The one standing obligation is to keep the license text and the copyright notice, Kin-Yiu Wong and Hao-Tang Tsui, with any copy you redistribute. It places no condition on your own application code, and a model you train yourself on your own data is yours. The port follows the authors' MIT re-release of YOLOv7, not the GPL-3.0 WongKinYiu/yolov7 repository that carries the same model, so the permissive terms come from the source LibreYOLO actually derives from.

Citazione

@inproceedings{wang2022yolov7,
      title={{YOLOv7}: Trainable Bag-of-Freebies Sets New State-of-the-Art for Real-Time Object Detectors},
      author={Wang, Chien-Yao and Bochkovskiy, Alexey and Liao, Hong-Yuan Mark},
      year={2023},
      booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
}

Copiato dal blocco di citazione degli autori disponibile su github.com/MultimediaTechLab/YOLO#citations.

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.