Быстрое и точное обнаружение единостановки объекта с оптимизацией сквозного графического процессора.
ODTK - это один детектор объекта с одним выстрелом с различными основаниями и головками обнаружения. Это позволяет компромиссы производительности/точности.
Он оптимизирован для обработки сквозной графической помощи, используя:
Это репо теперь поддерживает повернутые определения ограничивающих коробок. См. Документы по выводам «Повернутые обнаружения» и «Поворотные документы --rotated-bbox .
Аннотации ограничивающей коробки описаны [x, y, w, h, theta] .
Трубопровод обнаружения позволяет пользователю выбирать определенную основу в зависимости от предварительного компромисса задержки и точкой.
Точность модели odtk retinanet и задержка вывода и FPS (кадры в секунду) для Coco 2017 (Train/Val) после полного графика обучения. Результаты вывода включают в себя ограничительные ящики после обработки для размера партии 1. Вывод, измеренный при --resize 800 с использованием --with-dali на двигателе Tensorrt FP16.
| Магистраль | Карта @[iou = 0,50: 0,95] | Время обучения на DGX1V | Задержка вывода FP16 на V100 | Задержка вывода Int8 на T4 | Задержка вывода FP16 на A100 | Задержка вывода Int8 на A100 |
|---|---|---|---|---|---|---|
| Resnet18fpn | 0,318 | 5 часов | 14 мс; 71 кадры в секунду | 18 мс; 56 кадров в секунду | 9 мс; 110 кадров в секунду | 7 мс; 141 кадры в секунду |
| Mobilenetv2fpn | 0,333 | 14 мс; 74 кадров в секунду | 18 мс; 56 кадров в секунду | 9 мс; 114 кадров в секунду | 7 мс; 138 кадров в секунду | |
| Resnet34fpn | 0,343 | 6 часов | 16 мс; 64 кадров в секунду | 20 мс; 50 кадров в секунду | 10 мс; 103 кадров в секунду | 7 мс; 142 кадров в секунду |
| RESNET50FPN | 0,358 | 7 часов | 18 мс; 56 кадров в секунду | 22 мс; 45 кадров в секунду | 11 мс; 93 кадров в секунду | 8 мс; 129 кадров в секунду |
| RESNET101FPN | 0,376 | 10 часов | 22 мс; 46 кадров в секунду | 27 мс; 37 кадров в секунду | 13 мс; 78 кадров в секунду | 9 мс; 117 кадров в секунду |
| RESNET152FPN | 0,393 | 12 часов | 26 мс; 38 кадров в секунду | 33 мс; 31 кадры в с | 15 мс; 66 кадров в секунду | 10 мс; 103 кадров в секунду |
Для достижения наилучшей производительности используйте новейший контейнер Pytorch NGC Docker. Клонировать это хранилище, создайте и запустите свое собственное изображение:
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 Обучение, вывод, оценка и экспорт модели могут быть проведены через утилиту odtk . Для получения более подробной информации, включая список параметров, обратитесь к документации по обучению и выводу.
Обучить модель обнаружения на Coco 2017 от предварительно обученной основы:
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.jsonНастройте предварительно обученную модель в вашем наборе данных. В приведенном ниже примере мы используем Pascal VOC с аннотациями 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 ПРИМЕЧАНИЕ. Более короткая сторона входных изображений будет изменен, чтобы resize до тех пор, пока более длинная сторона не становится больше, чем max-size . Во время тренировки изображения будут случайным образом случайным образом изменен до нового размера в диапазоне jitter .
Оцените свою модель обнаружения на Coco 2017:
odtk infer retinanet_rn50fpn.pth --images /coco/images/val2017/ --annotations /coco/annotations/instances_val2017.jsonЗапустите вывод на своем наборе данных:
odtk infer retinanet_rn50fpn.pth --images /dataset/val --output detections.jsonДля более быстрого вывода, экспортируйте модель обнаружения в оптимизированный двигатель Tensorrt FP16:
odtk export model.pth engine.planОцените модель с помощью Backend Tensorrt на Coco 2017:
odtk infer engine.plan --images /coco/images/val2017/ --annotations /coco/annotations/instances_val2017.jsonДля еще более быстрых выводов, сделайте калибровку Int8, чтобы создать оптимизированный двигатель Tensorrt Int8:
odtk export model.pth engine.plan --int8 --calibration-images /coco/images/val2017/Это создаст файл int8calibrationtable, который можно использовать для создания двигателей Tensorrt Int8 для той же модели позже, не требуя калибровки.
Или создайте оптимизированный двигатель Tensorrt Int8 с использованием таблицы калибровки кэша:
odtk export model.pth engine.plan --int8 --calibration-table /path/to/INT8CalibrationTableRetinanet поддерживает аннотации в формате Coco Json. При преобразовании аннотаций из вашего собственного набора данных в JSON требуются следующие записи:
{
"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
]}
}
При использовании флага --rotated-bbox для повернутых обнаружений добавьте дополнительную плавуческую theta в аннотации. Чтобы получить оценки проверки, вам также необходимо заполнить раздел 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.
Это исследовательский проект, а не официальный продукт NVIDIA.
В этой ветви используется Tensorrt 7. Если вы тренируете и выводите модели с использованием Pytorch или создаете двигатели с тензирной косой на графических процессорах Tesla (например, V100, T4), то вам следует использовать эту ветвь.
Если вы хотите развернуть свою модель на устройстве Jetson (например, Jetson Agx Xavier), используя JetPack версию 4.3, то вам следует использовать 19.10 филиала этого репо.