RTMDet

RTMDet es un detector de una etapa que predice a partir de un único prior basado en puntos por posición de la rejilla, sin anchors, a través de una cabeza cuyas convoluciones se comparten entre niveles de características. LibreYOLO lo admite para detección y para segmentación de instancias con RTMDet-Ins.

Tareas
detection, instance segmentation
Tamaños
t, s, m, l, x at 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
RTMDet de OpenMMLab, Apache-2.0. Artículo, fuente
Licencias
Código Apache-2.0, pesos Apache-2.0. Uso comercial

Instalación

RTMDet 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("LibreRTMDets.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreRTMDets.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Segmentación de instancias
from libreyolo import LibreYOLO, SAMPLE_IMAGE # El sufijo -seg en el nombre del archivo selecciona la cabeza de# máscaras de RTMDet-Ins, así que aquí no hace falta argumento task.model = LibreYOLO("LibreRTMDets-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.masks.data.shape)

El objeto Results devuelto es el mismo que devuelven todas las familias, así que cambiar a otro detector es un cambio de una línea. Un nombre de archivo con -seg se resuelve por sí solo a la tarea RTMDet-Ins, y entonces result.masks lleva las máscaras de instancia junto a los boxes. conf fija el umbral de confianza e iou el umbral de NMS. Consulta predicción para fuentes, streaming y manejo de resultados.

Variantes

Cinco tamaños, de t a x, comparten una misma arquitectura con una resolución de entrada común. Esta familia no trae aquí ninguna tabla de benchmarks: compara los tamaños por el tamaño de archivo de cada checkpoint en la tabla de abajo.

Entrenamiento

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

La detección se entrena con train(). Los componentes QualityFocalLoss, GIoU y DynamicSoftLabelAssigner están portados del mmdetection original, y el forward pass y la exportación a ONNX son bit a bit equivalentes a él, con un postprocesado que coincide con la salida de mmdet dentro de 0,001 mAP en subconjuntos de val2017.

Lo que no se ha comprobado, según el propio docstring de train(): la convergencia del fine-tuning en datasets pequeños, la paridad con el paper entrenando desde cero, el comportamiento multi-GPU, el rendimiento de Mosaic y MixUp con caché, el cambio estricto al pipeline de dos etapas del original, y los overrides de weight decay por parámetro que ponen a cero el decay en los parámetros de norm y bias.

RTMDet-Ins no tiene ruta de entrenamiento. Llamar a train() sobre un checkpoint -seg, o con task="segment", lanza NotImplementedError; la segmentación de instancias solo admite inferencia y validación.

train() también acepta un argumento pretrained, pero el valor nunca se lee dentro del método: el entrenamiento siempre continúa desde los pesos con los que se construyó el modelo, así que pretrained=False no reinicializa la red.

Si no se toca nada más, el entrenador ejecuta 300 épocas con AdamW a lr0=0.004 y weight_decay=0.05, un warmup de 1 época sobre un schedule coseno, y Mosaic y MixUp desactivados durante las últimas 20 épocas.

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("LibreRTMDets.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreRTMDets.pt data=my-dataset.yaml
Segmentación de instancias
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"])   # máscarasprint(metrics["metrics/mAP50-95(B)"])   # boxes

Sobre un checkpoint -seg, la clave metrics/mAP50-95 a secas contiene la puntuación de las máscaras, y la misma ejecución informa además de los boxes bajo (B) y de las máscaras bajo (M), de modo que ambos están disponibles en una sola pasada.

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: no compatibleDetection to TFLite: no compatibleDetection to CoreML: no compatibleDetection to Core AI: compatible
Instance segmentationInstance segmentation to ONNX: no compatibleInstance segmentation to TorchScript: no compatibleInstance segmentation to ExecuTorch: no compatibleInstance segmentation to TensorRT: no compatibleInstance segmentation to OpenVINO: no compatibleInstance segmentation to Paddle: no compatibleInstance segmentation to MNN: no compatibleInstance segmentation to RKNN: no compatibleInstance segmentation to ncnn: no compatibleInstance segmentation to TFLite: no compatibleInstance segmentation to CoreML: no compatibleInstance segmentation to Core AI: no compatible

La detección exporta a la mayoría de formatos; la segmentación de instancias no exporta ahora mismo a ninguno de ellos; la matriz de arriba refleja esa división. Un artefacto de detección exportado se vuelve a cargar con LibreYOLO() según la extensión del archivo, así que un archivo .onnx o .engine se comporta como un checkpoint y devuelve el mismo Results. También se admite ejecutar el grafo en un runtime pelado, sin LibreYOLO instalado, pero entonces el preprocesado y el postprocesado corren de tu cuenta.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreRTMDets.pt format=onnx imgsz=640libreyolo export model=LibreRTMDets.pt format=tensorrt imgsz=640 half=True
Usar el archivo exportado
from libreyolo import LibreYOLO, SAMPLE_IMAGE # La factoría enruta según la extensión del archivo, así que un artefacto# exportado se carga como cualquier checkpoint y devuelve el mismo# objeto Results.model = LibreYOLO("LibreRTMDets.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
LibreRTMDett.pt640apache-2.0
LibreRTMDets.pt640apache-2.0
LibreRTMDetm.pt640apache-2.0
LibreRTMDetl.pt640apache-2.0
LibreRTMDetx.pt640apache-2.0
Instance segmentation
LibreRTMDett-seg.pt640apache-2.0
LibreRTMDets-seg.pt640apache-2.0
LibreRTMDetm-seg.pt640apache-2.0
LibreRTMDetl-seg.pt640apache-2.0
LibreRTMDetx-seg.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
RTMDet, OpenMMLab
Licencia del proyecto original
Apache-2.0
Fuente del proyecto original
github.com/open-mmlab/mmdetection
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. The published RTMDet and RTMDet-Ins checkpoints are converted from mmdetection's own COCO weights, trained by OpenMMLab under the same license.

Cita

@misc{lyu2022rtmdet,
      title={RTMDet: An Empirical Study of Designing Real-Time Object Detectors},
      author={Chengqi Lyu and Wenwei Zhang and Haian Huang and Yue Zhou and Yudong Wang and Yanyi Liu and Shilong Zhang and Kai Chen},
      year={2022},
      eprint={2212.07784},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Copiado del bloque de cita de los autores en github.com/open-mmlab/mmdetection/tree/main/configs/rtmdet#citation.

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.