Detección de objetos de una sola etapa rápida y precisa con optimización de GPU de extremo a extremo.
ODTK es un detector de objetos de un solo disparo con varias columnas y cabezas de detección. Esto permite compensaciones de rendimiento/precisión.
Está optimizado para el procesamiento de GPU de extremo a extremo utilizando:
Este repositorio ahora admite detecciones de cajas limitadas rotadas. Consulte Documentos de detección de detecciones rotadas y detecciones de detecciones rotadas para obtener más información sobre cómo usar el comando --rotated-bbox .
Las anotaciones del cuadro delimitador se describen por [x, y, w, h, theta] .
La tubería de detección permite al usuario seleccionar una columna vertebral específica dependiendo de la compensación de accesorios de latencia preferida.
ODTK Retinanet Precisión e inferencia Latencia y FPS (marcos por segundo) para Coco 2017 (Train/Val) después del horario de entrenamiento completo. Los resultados de la inferencia incluyen cajas delimitadoras posteriores al procesamiento para un tamaño por lotes de 1. Inferencia medida en --resize 800 usando --with-dali en un motor Tensorrt FP16.
| Columna vertebral | mapa @[iou = 0.50: 0.95] | Tiempo de entrenamiento en DGX1V | Latencia de inferencia FP16 en V100 | Latencia de inferencia int8 en t4 | Latencia de inferencia FP16 en A100 | Latencia de inferencia int8 en A100 |
|---|---|---|---|---|---|---|
| Resnet18fpn | 0.318 | 5 horas | 14 ms; 71 fps | 18 ms; 56 fps | 9 ms; 110 fps | 7 ms; 141 fps |
| Mobilenetv2fpn | 0.333 | 14 ms; 74 fps | 18 ms; 56 fps | 9 ms; 114 fps | 7 ms; 138 fps | |
| Resnet34fpn | 0.343 | 6 horas | 16 ms; 64 fps | 20 ms; 50 fps | 10 ms; 103 fps | 7 ms; 142 fps |
| Resnet50fpn | 0.358 | 7 horas | 18 ms; 56 fps | 22 ms; 45 fps | 11 ms; 93 fps | 8 ms; 129 fps |
| Resnet101fpn | 0.376 | 10 horas | 22 ms; 46 fps | 27 ms; 37 fps | 13 ms; 78 fps | 9 ms; 117 fps |
| Resnet152fpn | 0.393 | 12 horas | 26 ms; 38 fps | 33 ms; 31 fps | 15 ms; 66 fps | 10 ms; 103 fps |
Para el mejor rendimiento, use el último contenedor Pytorch NGC Docker. Clone este repositorio, cree y ejecute su propia imagen:
git clone https://github.com/nvidia/retinanet-examples
docker build -t odtk:latest retinanet-examples/
docker run --gpus all --rm --ipc=host -it odtk:latest La capacitación, la inferencia, la evaluación y la exportación del modelo se pueden realizar a través de la utilidad odtk . Para obtener más detalles, incluida una lista de parámetros, consulte la documentación de capacitación e inferencia.
Entrena un modelo de detección en Coco 2017 desde la columna vertebral previa al entrenamiento:
odtk train retinanet_rn50fpn.pth --backbone ResNet50FPN
--images /coco/images/train2017/ --annotations /coco/annotations/instances_train2017.json
--val-images /coco/images/val2017/ --val-annotations /coco/annotations/instances_val2017.jsonAtrae un modelo previamente capacitado en su conjunto de datos. En el siguiente ejemplo, usamos Pascal VOC con anotaciones JSON:
odtk train model_mydataset.pth --backbone ResNet50FPN
--fine-tune retinanet_rn50fpn.pth
--classes 20 --iters 10000 --val-iters 1000 --lr 0.0005
--resize 512 --jitter 480 640 --images /voc/JPEGImages/
--annotations /voc/pascal_train2012.json --val-annotations /voc/pascal_val2012.json Nota: El lado más corto de las imágenes de entrada se cambiará el tamaño para resize siempre que el lado más largo no se vuelva más grande que max-size . Durante el entrenamiento, las imágenes se cambiarán al azar al azar a un nuevo tamaño dentro del rango jitter .
Evalúe su modelo de detección en Coco 2017:
odtk infer retinanet_rn50fpn.pth --images /coco/images/val2017/ --annotations /coco/annotations/instances_val2017.jsonEjecute la inferencia en su conjunto de datos:
odtk infer retinanet_rn50fpn.pth --images /dataset/val --output detections.jsonPara una inferencia más rápida, exporte el modelo de detección a un motor Tensorrt FP16 optimizado:
odtk export model.pth engine.planEvalúe el modelo con Tensorrt Backend en Coco 2017:
odtk infer engine.plan --images /coco/images/val2017/ --annotations /coco/annotations/instances_val2017.jsonPara una inferencia aún más rápida, haga la calibración INT8 para crear un motor INT8 Tensorrt optimizado:
odtk export model.pth engine.plan --int8 --calibration-images /coco/images/val2017/Esto creará un archivo int8calibrationTable que se puede usar para crear motores int8 tensort para el mismo modelo más adelante sin necesidad de hacer calibración.
O crear un motor Tensorrt int8 optimizado que use una tabla de calibración en caché:
odtk export model.pth engine.plan --int8 --calibration-table /path/to/INT8CalibrationTableRetinanet admite anotaciones en el formato Coco JSON. Al convertir las anotaciones de su propio conjunto de datos en JSON, se requieren las siguientes entradas:
{
"images": [{
"id" : int,
"file_name" : str
}],
"annotations": [{
"id" : int,
"image_id" : int,
"category_id" : int,
"bbox" : [x, y, w, h] # all floats
"area": float # w * h. Required for validation scores
"iscrowd": 0 # Required for validation scores
}],
"categories": [{
"id" : int
]}
}
Si usa el indicador --rotated-bbox para detecciones rotadas, agregue un theta flotante adicional a las anotaciones. Para obtener puntajes de validación, también debe llenar la sección segmentation .
"bbox" : [x, y, w, h, theta] # all floats, where theta is measured in radians anti-clockwise from the x-axis.
"segmentation" : [[x1, y1, x2, y2, x3, y3, x4, y4]]
# Required for validation scores.
Este es un proyecto de investigación, no un producto oficial de NVIDIA.
Esta rama usa Tensorrt 7. Si está entrenando e infiere modelos con Pytorch, o está creando motores Tensorrt en las GPU de Tesla (por ejemplo, V100, T4), entonces debe usar esta rama.
Si desea implementar su modelo en un dispositivo Jetson (por ejemplo, Jetson AGX Xavier) con Jetpack versión 4.3, entonces debe usar la rama de 19.10 de este repositorio.