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.
- Licenze
- Codice MIT, pesi MIT. Uso commerciale
Installazione
YOLOv7 non richiede nessun extra oltre al pacchetto 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("LibreYOLO7b.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreYOLO7b.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=TrueL'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
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)libreyolo train model=LibreYOLO7b.pt data=my-dataset.yaml \ epochs=300 imgsz=640 batch=16 lr0=0.01from 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreYOLO7b.pt data=my-dataset.yamlEsportazione
| Task | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX: supportato | Detection to TorchScript: supportato | Detection to ExecuTorch: supportato | Detection to TensorRT: supportato | Detection to OpenVINO: supportato | Detection to Paddle: non supportato | Detection to MNN: non supportato | Detection to RKNN: non supportato | Detection to ncnn: supportato | Detection to TFLite: non supportato | Detection to CoreML: non supportato | Detection 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)libreyolo export model=LibreYOLO7b.pt format=onnx imgsz=640libreyolo export model=LibreYOLO7b.pt format=tensorrt imgsz=640 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("LibreYOLO7b.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)Checkpoint
Tutti i file di pesi pubblicati per questa famiglia.
| File | Ingresso (px) | Licenza dei pesi |
|---|---|---|
| Detection | ||
| LibreYOLO7b.pt | 640 | mit |
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
- Sorgente upstream
- github.com/MultimediaTechLab/YOLO
- 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.