YOLOX

YOLOX es un detector de una sola etapa sin anchors, con una cabeza desacoplada de clasificación y regresión, entrenado con asignación de etiquetas SimOTA. LibreYOLO lo soporta para detección.

Tareas
detection
Tamaños
n, t, s, m, l, x at 416 to 640 px
Instalación
pip install libreyolo
Nivel de compatibilidad
Compatible, desde v. Modelos entrenables de apoyo: se mantienen operativos en CI y reciben funciones cuando surge la oportunidad.
Proyecto original
YOLOX de Megvii, Apache-2.0. Artículo, fuente
Licencias
Código Apache-2.0, pesos Apache-2.0. Uso comercial

Instalación

YOLOX no necesita ningún extra más allá del paquete base.

bash
pip install libreyolo

Predicción

Los pesos se descargan de Hugging Face en el primer uso y se guardan en la caché 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

El objeto Results devuelto es el mismo que devuelve cada familia, así que cambiar a otro detector es un cambio de una línea. conf fija el umbral de confianza e iou el umbral de NMS que se aplica sobre las tres escalas de predicción desacopladas. Consulta predicción para fuentes, streaming y manejo de resultados.

Variantes

Seis tamaños comparten el mismo backbone CSP y el mismo neck PAFPN. Los dos más pequeños, n y t, funcionan con una resolución de entrada fija menor que los otros cuatro; la tabla de benchmark de abajo recoge la cifra exacta de cada uno.

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 con el sistema de benchmarks de LibreYOLO y publicado en Vision Analysis, donde se comparan la latencia entre distintos hardwares y runtimes y se conservan los registros completos de las ejecuciones.

Entrenamiento

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

Si no se toca nada, el entrenador ejecuta 300 épocas con lr0=0.01, SGD con momentum 0.9, un warmup de 5 épocas y el aumento de datos de mosaic y mixup desactivado durante las últimas 15 épocas. train() también acepta un argumento pretrained, pero su valor nunca se lee dentro del método: el entrenamiento continúa siempre desde los pesos con los que se construyó el modelo, así que pretrained=False no reinicializa la red.

imgsz toma por defecto un valor fijo de la configuración base de entrenamiento, no la resolución nativa del checkpoint cargado. Eso afecta en concreto a los checkpoints n y t: seguir entrenando cualquiera de los dos sin fijar imgsz explícitamente lo sube al valor por defecto, mayor, en lugar del tamaño menor con el que se publicó.

Consulta entrenamiento para datasets, aumento de datos, multi-GPU y loggers.

Validación

val() devuelve un diccionario de claves metrics/ que cubren precisión, recall, mAP 50 y mAP 50-95, medidas contra cualquier dataset en el formato con el que entrenaste.

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 COCO
# El yaml de COCO incluido lleva un script de descarga embebido, así que# necesita permiso explícito salvo que el dataset ya esté en local.libreyolo val model=LibreYOLOXn.pt data=coco.yaml imgsz=416 \  allow_download_scripts=True

Exportación

TareaONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: compatibleDetection to TorchScript: compatibleDetection to ExecuTorch: compatibleDetection to TensorRT: compatibleDetection to OpenVINO: compatibleDetection to Paddle: no compatibleDetection to MNN: no compatibleDetection to RKNN: no compatibleDetection to ncnn: compatibleDetection to TFLite: compatibleDetection to CoreML: compatibleDetection to Core AI: compatible

Un artefacto exportado se vuelve a cargar a través de LibreYOLO() por su sufijo de archivo, así que un archivo .onnx o .engine se comporta como un checkpoint y devuelve el mismo Results. Ejecutar el grafo en un runtime desnudo, sin LibreYOLO instalado, también está soportado, pero entonces el preprocesamiento y el postprocesamiento corren de tu cuenta. Una exportación a CoreML puede meter NMS dentro del grafo con nms=True; YOLOX y YOLOv9 son las dos únicas familias que ese flag acepta actualmente.

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 el archivo exportado
from libreyolo import LibreYOLO, SAMPLE_IMAGE # La factoría enruta según el sufijo del archivo, así que un artefacto# exportado se carga como cualquier checkpoint y devuelve el mismo objeto Results.model = LibreYOLO("LibreYOLOXs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpoints

Todos los archivos de pesos publicados de esta familia.

ArchivoEntrada (px)Licencia de los 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 los archivos anteriores existen hoy en la organización de LibreYOLO y se descargan la primera vez que se usan.

Licencia

Comprueba la licencia en el repositorio de Hugging Face de los pesos concretos que descargues. Cada checkpoint de la organización de LibreYOLO incluye una, y no siempre es la misma en toda una familia. Ese repositorio es la fuente autorizada; el resumen siguiente describe qué se aplicaba cuando se verificó esta página por última vez.

Esta es una descripción de las licencias implicadas, no asesoramiento legal. Si la respuesta es importante a nivel comercial, lee las licencias y busca tu propio asesoramiento.

Trabajo original
YOLOX, Megvii
Licencia del proyecto original
Apache-2.0
Fuente del proyecto original
github.com/Megvii-BaseDetection/YOLOX
Código de LibreYOLO
MIT
Pesos
Apache-2.0, republicados en huggingface.co/LibreYOLO
Interpretación
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

@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 del bloque de cita de los autores en github.com/Megvii-BaseDetection/YOLOX#cite-yolox.

Verificado con LibreYOLO v1.5.0. Las tablas de compatibilidad, los checkpoints y las cifras de rendimiento de esta página se generan a partir de la biblioteca publicada y los pesos publicados; no se escriben a mano.