Schnelle und genaue Einzelstufe-Objekterkennung mit End-to-End-GPU-Optimierung.
ODTK ist ein einzelner Schussobjektdetektor mit verschiedenen Rückgratern und Erkennungsköpfen. Dies ermöglicht die Kompromisse für Leistung/Genauigkeit.
Es ist für die End-to-End-GPU-Verarbeitung mithilfe von: optimiert:
Dieses Repo unterstützt nun gedrehte Begrenzungsbox -Erkennungen. Weitere Informationen zur Verwendung des Befehls --rotated-bbox finden Sie unter Dreherkennungstraining und Dreherkennungsdokumenten.
Begrenzungskastenanmerkungen werden von [x, y, w, h, theta] beschrieben.
Mit der Erkennungspipeline kann der Benutzer je nach dem bevorzugten Kompromiss der Latenz-Genauigkeit ein bestimmtes Rückgrat auswählen.
ODTK -Retinanet -Modellgenauigkeit und Inferenzlatenz & FPS (Frames pro Sekunden) für Coco 2017 (Zug/Val) nach vollem Trainingsplan. Inferenzergebnisse umfassen Begrenzungsboxen nach der Verarbeitung für eine Chargengröße von 1. Inferenz, gemessen bei --resize 800 mit --with-dali auf einem FP16 Tensorrt-Motor.
| Rückgrat | Karte @[iou = 0,50: 0,95] | Trainingszeit auf DGX1V | Inferenzlatenz FP16 auf V100 | Inferenzlatenz int8 auf T4 | Inferenzlatenz FP16 auf A100 | Inferenzlatenz int8 auf A100 |
|---|---|---|---|---|---|---|
| Resnet18fpn | 0,318 | 5 Stunden | 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 Stunden | 16 ms; 64 fps | 20 ms; 50 fps | 10 ms; 103 fps | 7 ms; 142 fps |
| Resnet50fpn | 0,358 | 7 Std | 18 MS; 56 fps | 22 ms; 45 fps | 11 ms; 93 fps | 8 ms; 129 fps |
| Resnet101fpn | 0,376 | 10 Std | 22 ms; 46 fps | 27 MS; 37 fps | 13 ms; 78 fps | 9 ms; 117 fps |
| Resnet152fpn | 0,393 | 12 Stunden | 26 ms; 38 fps | 33 ms; 31 fps | 15 ms; 66 fps | 10 ms; 103 fps |
Verwenden Sie für die beste Leistung den neuesten Pytorch NGC Docker -Container. Klonen Sie dieses Repository, erstellen und führen Sie Ihr eigenes Bild aus:
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 Training, Inferenz, Bewertung und Modellexport können durch das odtk -Dienstprogramm durchgeführt werden. Weitere Informationen, einschließlich einer Liste von Parametern, finden Sie in der Schulung und Inferenzdokumentation.
Trainieren Sie ein Erkennungsmodell auf Coco 2017 aus vorgebildetem Rückgrat:
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.jsonFein ein vorgebildetes Modell auf Ihrem Datensatz. Im folgenden Beispiel verwenden wir Pascal VOC mit JSON -Anmerkungen:
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 HINWEIS: Die kürzere Seite der Eingangsbilder wird geändert, um die Größe zu resize , solange die längere Seite nicht größer ist als max-size . Während des Trainings werden die Bilder nach dem Zufallsprinzip in einer neuen Größe innerhalb des jitter -Bereichs nach dem Zufallsprinzip gegründet.
Bewerten Sie Ihr Erkennungsmodell auf Coco 2017:
odtk infer retinanet_rn50fpn.pth --images /coco/images/val2017/ --annotations /coco/annotations/instances_val2017.jsonFühren Sie die Schlussfolgerung in Ihrem Datensatz aus:
odtk infer retinanet_rn50fpn.pth --images /dataset/val --output detections.jsonExportieren Sie das Erkennungsmodell für eine schnellere Inferenz in einen optimierten FP16 Tensorrt -Motor:
odtk export model.pth engine.planBewerten Sie das Modell mit Tensorrt Backend auf Coco 2017:
odtk infer engine.plan --images /coco/images/val2017/ --annotations /coco/annotations/instances_val2017.jsonFür eine noch schnellere Inferenz führen Sie die INT8 -Kalibrierung durch, um einen optimierten INT8 Tensorrt -Motor zu erstellen:
odtk export model.pth engine.plan --int8 --calibration-images /coco/images/val2017/Dadurch wird eine Int8CalibrationTable -Datei erstellt, mit der int8 Tensorrt -Motoren für dasselbe Modell später ohne Kalibrierung erstellt werden können.
Oder erstellen Sie einen optimierten INT8 Tensorrt -Motor mit einer zwischengespeicherten Kalibrierungstabelle:
odtk export model.pth engine.plan --int8 --calibration-table /path/to/INT8CalibrationTableRetinanet unterstützt Anmerkungen im Coco JSON -Format. Bei der Konvertierung der Anmerkungen aus Ihrem eigenen Datensatz in JSON sind folgende Einträge erforderlich:
{
"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
]}
}
Wenn Sie das Flag --rotated-bbox für gedrehte Erkennungen verwenden, fügen Sie den Anmerkungen einen zusätzlichen Schwimmer theta hinzu. Um Validierungsbewertungen zu erhalten, müssen Sie auch den segmentation füllen.
"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.
Dies ist ein Forschungsprojekt, kein offizielles NVIDIA -Produkt.
Dieser Zweig verwendet Tensorrt 7. Wenn Sie mit Pytorch Modelle trainieren und abschließend abschließen oder Tensorrt -Motoren auf Tesla gpus (z. B. V100, T4) erstellen, sollten Sie diesen Zweig verwenden.
Wenn Sie Ihr Modell auf einem Jetson -Gerät (z. B. Jetson Agx Xavier) bereitstellen möchten, das Jetpack Version 4.3 ausführt, sollten Sie den 19.10 -Zweig dieses Repo verwenden.