YOLOX

O YOLOX é um detector de estágio único e sem âncoras (anchor-free), com uma cabeça desacoplada de classificação e regressão, treinado com atribuição de rótulos SimOTA. O LibreYOLO o suporta para detecção.

Tarefas
detection
Tamanhos
n, t, s, m, l, x at 416 to 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
YOLOX por Megvii, Apache-2.0. Artigo, código-fonte
Licenças
Código Apache-2.0, pesos Apache-2.0. Uso comercial

Instalação

O YOLOX 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("LibreYOLOXs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreYOLOXs.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 de NMS aplicado nas três escalas de predição desacopladas. Veja predição para fontes, streaming e tratamento de resultados.

Variantes

Seis tamanhos compartilham o mesmo backbone CSP e o mesmo neck PAFPN. Os dois menores, n e t, rodam em uma resolução de entrada fixa menor que a dos outros quatro; a tabela de benchmark abaixo traz o número exato de cada um.

CheckpointEntrada (px)mAP 50-95Parâmetros (M)
LibreYOLOXnano41628.80.91
LibreYOLOXtiny41635.15.06
LibreYOLOXl64053.954.21
LibreYOLOXm64050.925.33
LibreYOLOXs64043.08.97
LibreYOLOXx64056.399.07

COCO val2017, 500 images. Medido pelo conjunto de testes de benchmark do LibreYOLO e publicado no Vision Analysis, onde a latência entre hardwares e runtimes é comparada e os registros completos das execuções ficam disponíveis.

Treinamento

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)
CLI
libreyolo train model=LibreYOLOXs.pt data=my-dataset.yaml \  epochs=300 imgsz=640 batch=16 lr0=0.01

Sem nenhum ajuste, o treinador roda 300 épocas com lr0=0.01, SGD com momentum 0.9, um warmup de 5 épocas e o data augmentation de mosaic e mixup desligado nas últimas 15 épocas. train() também aceita um argumento pretrained, mas o valor nunca é lido dentro do método: o treinamento sempre continua a partir dos pesos com que o modelo foi construído, então pretrained=False não reinicializa a rede.

imgsz assume por padrão um valor fixo da configuração base de treinamento, e não a resolução nativa do checkpoint carregado. Isso afeta especificamente os checkpoints n e t: continuar a treinar qualquer um dos dois sem definir imgsz explicitamente o eleva ao padrão maior, em vez do tamanho menor com que foi publicado.

Veja treinamento para datasets, data augmentation, multi-GPU e loggers.

Validaçã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("LibreYOLOXs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreYOLOXs.pt data=my-dataset.yaml
Contra o COCO
# O yaml do COCO incluído carrega um script de download embutido, então# precisa de permissão explícita a menos que o dataset já esteja local.libreyolo val model=LibreYOLOXn.pt data=coco.yaml imgsz=416 \  allow_download_scripts=True

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: compatívelDetection to CoreML: compatívelDetection to Core AI: compatível

Um artefato exportado carrega de volta através de LibreYOLO() pela extensão do arquivo, então um arquivo .onnx ou .engine se comporta como um checkpoint e retorna 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. Uma exportação para CoreML pode embutir o NMS no grafo com nms=True; YOLOX e YOLOv9 são as duas únicas famílias que essa flag aceita atualmente.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLOXs.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreYOLOXs.pt format=onnx imgsz=640libreyolo export model=LibreYOLOXs.pt format=tensorrt imgsz=640 half=True
Usar o arquivo exportado
from libreyolo import LibreYOLO, SAMPLE_IMAGE # A factory roteia pela extensão do arquivo, então um artefato exportado# carrega como qualquer checkpoint e retorna o mesmo objeto Results.model = LibreYOLO("LibreYOLOXs.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
LibreYOLOXn.pt416apache-2.0
LibreYOLOXt.pt416apache-2.0
LibreYOLOXs.pt640apache-2.0
LibreYOLOXm.pt640apache-2.0
LibreYOLOXl.pt640apache-2.0
LibreYOLOXx.pt640apache-2.0

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
YOLOX, Megvii
Licença original
Apache-2.0
Código do LibreYOLO
MIT
Pesos
Apache-2.0, republicado em huggingface.co/LibreYOLO
Interpretação
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.

Citação

@article{yolox2021,
  title={YOLOX: Exceeding YOLO Series in 2021},
  author={Ge, Zheng and Liu, Songtao and Wang, Feng and Li, Zeming and Sun, Jian},
  journal={arXiv preprint arXiv:2107.08430},
  year={2021}
}

Copiado do bloco de citação dos autores em github.com/Megvii-BaseDetection/YOLOX#cite-yolox.

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.