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.

bash
pip install libreyolo

Predição

Os pesos são baixados do Hugging Face no primeiro uso e ficam em cache local.

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

O 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

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
Warm start a partir de um modelo novo
from 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.

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

Exportação

TarefaONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: compatívelDetection to TorchScript: compatívelDetection to ExecuTorch: compatívelDetection to TensorRT: compatívelDetection to OpenVINO: compatívelDetection to Paddle: incompatívelDetection to MNN: incompatívelDetection to RKNN: incompatívelDetection to ncnn: compatívelDetection to TFLite: incompatívelDetection to CoreML: incompatívelDetection 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.

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
Usar o arquivo exportado
from 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.

ArquivoEntrada (px)Licença dos pesos
Detection
LibreYOLO7b.pt640mit

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.

Verificado com o LibreYOLO v1.5.0. As tabelas de suporte, os checkpoints e os números de benchmark desta página são gerados a partir da biblioteca lançada e dos pesos publicados, não escritos à mão.