Détection d'objets à étape rapide rapide et précise avec optimisation GPU de bout en bout.
ODTK est un détecteur d'objets à un seul tir avec divers squelettes et têtes de détection. Cela permet des compromis de performance / de précision.
Il est optimisé pour le traitement du GPU de bout en bout en utilisant:
Ce référentiel prend désormais en charge les détections de boîtes de délimitation tournées. Voir les documents d'inférence des détections tournées et tournées pour plus d'informations sur la façon d'utiliser la commande --rotated-bbox .
Les annotations de boîte de délimitation sont décrites par [x, y, w, h, theta] .
Le pipeline de détection permet à l'utilisateur de sélectionner une colonne vertébrale spécifique en fonction du compromis de la latence-précision préférée.
Précision du modèle ODTK Retinanet et latence d'inférence et FPS (cadres par seconde) pour Coco 2017 (Train / Val) après un calendrier de formation complet. Les résultats de l'inférence incluent les boîtes de délimitation après le traitement pour une taille de lot de 1. Inférence mesurée à --resize 800 en utilisant --with-dali sur un moteur Tensorrt FP16.
| Colonne vertébrale | map @ [iou = 0,50: 0,95] | Temps de formation sur DGX1V | Latence d'inférence FP16 sur V100 | Latence d'inférence Int8 sur T4 | Latence d'inférence FP16 sur A100 | Inférence latence Int8 sur A100 |
|---|---|---|---|---|---|---|
| Resnet18fpn | 0,318 | 5 heures | 14 MS; 71 ips | 18 MS; 56 ips | 9 ms; 110 ips | 7 ms; 141 ips |
| Mobilenetv2fpn | 0,333 | 14 MS; 74 ips | 18 MS; 56 ips | 9 ms; 114 ips | 7 ms; 138 ips | |
| Resnet34fpn | 0,343 | 6 heures | 16 MS; 64 ips | 20 ms; 50 ips | 10 ms; 103 ips | 7 ms; 142 ips |
| Resnet50fpn | 0,358 | 7 heures | 18 MS; 56 ips | 22 ms; 45 ips | 11 ms; 93 ips | 8 ms; 129 ips |
| Resnet101fpn | 0,376 | 10 heures | 22 ms; 46 ips | 27 MS; 37 ips | 13 MS; 78 ips | 9 ms; 117 ips |
| Resnet152fpn | 0,393 | 12 heures | 26 MS; 38 ips | 33 ms; 31 ips | 15 ms; 66 ips | 10 ms; 103 ips |
Pour les meilleures performances, utilisez le dernier conteneur Pytorch NGC Docker. Clone ce référentiel, construire et exécuter votre propre image:
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 formation, l'inférence, l'évaluation et l'exportation du modèle peuvent être effectuées via l'utilitaire odtk . Pour plus de détails, y compris une liste de paramètres, veuillez vous référer à la documentation de formation et d'inférence.
Former un modèle de détection sur Coco 2017 à partir de l'épine dorsale pré-formée:
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.jsonAffinez un modèle pré-formé sur votre ensemble de données. Dans l'exemple ci-dessous, nous utilisons Pascal COV avec des annotations 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 Remarque: Le côté plus court des images d'entrée sera redimensionné pour resize tant que le côté le plus long ne devient pas plus grand que max-size . Pendant l'entraînement, les images seront redimensionnées au hasard à une nouvelle taille dans la gamme jitter .
Évaluez votre modèle de détection sur Coco 2017:
odtk infer retinanet_rn50fpn.pth --images /coco/images/val2017/ --annotations /coco/annotations/instances_val2017.jsonExécutez l'inférence sur votre ensemble de données:
odtk infer retinanet_rn50fpn.pth --images /dataset/val --output detections.jsonPour une inférence plus rapide, exportez le modèle de détection vers un moteur Tensorrt FP16 optimisé:
odtk export model.pth engine.planÉvaluez le modèle avec Tensorrt Backend sur Coco 2017:
odtk infer engine.plan --images /coco/images/val2017/ --annotations /coco/annotations/instances_val2017.jsonPour une inférence encore plus rapide, faites l'étalonnage INT8 pour créer un moteur Tensorrt Int8 optimisé:
odtk export model.pth engine.plan --int8 --calibration-images /coco/images/val2017/Cela créera un fichier Int8CalibrationTable qui peut être utilisé pour créer des moteurs Tensorrt INT8 pour le même modèle plus tard sans avoir besoin de faire l'étalonnage.
Ou créez un moteur Tensorrt Int8 optimisé à l'aide d'une table d'étalonnage en cache:
odtk export model.pth engine.plan --int8 --calibration-table /path/to/INT8CalibrationTableRetinanet soutient les annotations au format Coco JSON. Lors de la conversion des annotations de votre propre ensemble de données en JSON, les entrées suivantes sont nécessaires:
{
"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 vous utilisez l'indicateur --rotated-bbox pour les détections tournées, ajoutez un theta flottant supplémentaire aux annotations. Pour obtenir des scores de validation, vous devez également remplir la section 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.
Il s'agit d'un projet de recherche, pas d'un produit NVIDIA officiel.
Cette branche utilise Tensorrt 7. Si vous entraînez et déduisez des modèles à l'aide de Pytorch, ou créez des moteurs Tensorrt sur des GPU Tesla (par exemple V100, T4), vous devez utiliser cette branche.
Si vous souhaitez déployer votre modèle sur un appareil Jetson (par exemple - Jetson Agx xavier) exécutant Jetpack version 4.3, vous devez utiliser la branche 19.10 de ce référentiel.