YOLOv7
O YOLOv7 é um detector de estágio único baseado em âncoras, cuja cabeça soma offsets de conhecimento implícito aprendidos antes da convolução final. O LibreYOLO suporta seu único tamanho publicado para detecção.
- Tarefas
- detection
- Tamanhos
- b at 640 px
- Instalação
pip install libreyolo- Nível de suporte
- Compatível, desde a v. Modelos treináveis complementares: mantidos verdes na CI, com recursos incorporados quando há oportunidade.
- Origem
- YOLOv7 por MultimediaTechLab, MIT. Artigo, código-fonte
- Licenças
- Código MIT, pesos MIT. Uso comercial
Instalação
O YOLOv7 não precisa de nenhum extra além do pacote base.
pip install libreyoloPredição
Os pesos são baixados do Hugging Face no primeiro uso e ficam em cache local.
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=TrueO objeto Results retornado é o mesmo que todas as famílias retornam, então
trocar por outro detector é uma mudança de uma linha. conf define o limiar de
confiança e iou, o limiar do NMS aplicado depois que a cabeça baseada em
âncoras é decodificada. Veja predição para fontes, streaming e
tratamento de resultados.
Variantes
O LibreYOLO traz um tamanho, b. O upstream publica um único modelo YOLOv7,
então não há tamanho a escolher.
Treinamento
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 sempre carrega o checkpoint LibreYOLO7b.pt publicado,# independentemente dos pesos com que esta instância foi construída.# Construir a classe diretamente, em vez de passar pelo LibreYOLO(),# começa sem nenhum peso carregado.model = LibreYOLO7(None, size="b")model.train(data="my-dataset.yaml", epochs=300, pretrained=True)O pretrained é lido aqui, diferente do no-op de mesmo nome em algumas outras
famílias: passe True para dar warm start a partir do checkpoint
LibreYOLO7b.pt publicado (baixado automaticamente), ou um caminho ou nome para
qualquer outro. Esse checkpoint publicado é COCO de 80 classes, então, se você o
pedir em um modelo já reconstruído para outra contagem de classes, ele primeiro
reconstrói de volta para 80, carrega o checkpoint e depois transfere todo tensor
de shape compatível para a contagem da cabeça alvo assim que a contagem de
classes do dataset é lida. resume=True não pode ser combinado com
pretrained. Deixado no padrão None, o treinamento continua a partir dos
pesos com que o modelo foi construído, ou de uma inicialização aleatória se nada
foi carregado.
Sem mexer em nada, o trainer roda 300 épocas em lr0=0.01 com SGD de momentum
0.937, um warmup de 3 épocas, e a mesma atribuição SimOTA e a mesma fase final
de 15 épocas sem data augmentation que o YOLOX usa, adaptadas à cabeça baseada
em âncoras. A única diferença: o YOLOX adiciona um refinamento L1 da regressão
de caixas durante essas épocas finais, que o v7 pula, porque a loss SimOTA do v7
não tem um branch L1 de offsets brutos para refinar.
Veja treinamento para datasets, data augmentation, multi-GPU e loggers.
Validação
O val() retorna um dicionário de chaves metrics/ cobrindo precisão, recall,
mAP 50 e mAP 50-95, medidos contra qualquer dataset no formato em que você
treinou.
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.yamlExportação
| Tarefa | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX: compatível | Detection to TorchScript: compatível | Detection to ExecuTorch: compatível | Detection to TensorRT: compatível | Detection to OpenVINO: compatível | Detection to Paddle: incompatível | Detection to MNN: incompatível | Detection to RKNN: incompatível | Detection to ncnn: compatível | Detection to TFLite: incompatível | Detection to CoreML: incompatível | Detection to Core AI: compatível |
Um artefato exportado é recarregado pelo LibreYOLO() a partir do sufixo do
arquivo, então um arquivo .onnx ou .engine se comporta como um checkpoint e
devolve o mesmo Results. Rodar o grafo em um runtime puro, sem o LibreYOLO
instalado, também é suportado, mas aí o pré-processamento e o pós-processamento
ficam por sua conta.
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 # A factory decide pelo sufixo do arquivo, então um artefato exportado# carrega como qualquer checkpoint e devolve o mesmo objeto Results.model = LibreYOLO("LibreYOLO7b.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)Checkpoints
Todos os arquivos de pesos publicados desta família.
| Arquivo | Entrada (px) | Licença dos pesos |
|---|---|---|
| Detection | ||
| LibreYOLO7b.pt | 640 | mit |
Todos os arquivos acima existem hoje na organização LibreYOLO e são baixados no primeiro uso.
Licenciamento
Confira a licença no repositório do Hugging Face correspondente aos pesos que você baixar. Cada checkpoint na organização LibreYOLO tem uma licença, e ela nem sempre é a mesma em toda a família. Esse repositório é a fonte oficial. O resumo abaixo descreve o que se aplicava na última verificação desta página.
Esta é uma descrição das licenças envolvidas, não uma orientação jurídica. Se a resposta tiver importância comercial, leia as licenças e procure sua própria assessoria.
- Trabalho original
- YOLOv7, MultimediaTechLab
- Licença original
- MIT
- Código-fonte original
- github.com/MultimediaTechLab/YOLO
- Código do LibreYOLO
- MIT
- Pesos
- MIT, republicado em huggingface.co/LibreYOLO
- Interpretação
- 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.
Citação
@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)},
}Copiado do bloco de citação dos autores em github.com/MultimediaTechLab/YOLO#citations.