通過端到端GPU優化的快速準確的單階段對象檢測。
ODTK是一個具有各種骨架和檢測頭的單射擊對象檢測器。這允許性能/準確性權衡。
它經過優化用於端到端GPU處理:
現在,此存儲庫支持旋轉的邊界框檢測。有關如何使用--rotated-bbox命令,請參見旋轉的檢測訓練和旋轉檢測推理文檔。
邊界框註釋由[x, y, w, h, theta]描述。
檢測管道允許用戶根據延遲準確性權衡選擇特定的主鏈。
經過完整的培訓時間表後,ODTK視網膜模型的準確性和推理潛伏期和FPS(每秒幀)(火車/瓦爾)。推理結果包括批量尺寸為1的邊界框,以1的批量處理。在fp16張力的發動機上使用--with-dali在--resize 800測量的推理。
| 骨幹 | 地圖 @[iou = 0.50:0.95] | DGX1V的培訓時間 | V100的推理延遲fp16 | T4上的推理潛伏期INT8 | A100的推理延遲fp16 | A100上的推理潛伏期INT8 |
|---|---|---|---|---|---|---|
| resnet18fpn | 0.318 | 5小時 | 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小時 | 16 ms; 64 fps | 20毫秒; 50 fps | 10 ms; 103 fps | 7 ms; 142 fps |
| RESNET50FPN | 0.358 | 7小時 | 18 ms; 56 fps | 22 ms; 45 fps | 11 ms; 93 fps | 8 ms; 129 fps |
| resnet101fpn | 0.376 | 10小時 | 22 ms; 46 fps | 27 ms; 37 fps | 13 ms; 78 fps | 9 ms; 117 fps |
| resnet152fpn | 0.393 | 12小時 | 26 ms; 38 fps | 33毫秒; 31 fps | 15 ms; 66 fps | 10 ms; 103 fps |
為了獲得最佳性能,請使用最新的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實用程序來完成培訓,推理,評估和模型導出。有關更多詳細信息,包括參數列表,請參閱培訓和推理文檔。
從預訓練的骨幹鏈上訓練2017年可可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注意:只要較長的側面不大於max-size ,輸入圖像的較短側將調整resize 。在訓練過程中,圖像將隨機調整到jitter範圍內的新尺寸。
在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為了更快的推斷,請將檢測模型導出到優化的FP16張力引擎:
odtk export model.pth engine.plan用Tensorrt後端在2017年使用Tensorrt後端評估模型:
odtk infer engine.plan --images /coco/images/val2017/ --annotations /coco/annotations/instances_val2017.json為了更快的推斷,請執行INT8校準以創建優化的INT8 Tensorrt引擎:
odtk export model.pth engine.plan --int8 --calibration-images /coco/images/val2017/這將創建一個可用於INT8CALIBRATIONT的文件,該文件可用於以後為同一型號創建INT8 Tensorrt引擎而無需進行校準。
或使用緩存的校準表創建優化的INT8張力發動機:
odtk export model.pth engine.plan --int8 --calibration-table /path/to/INT8CalibrationTable視網膜支持可可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標誌進行旋轉檢測,請在註釋中添加額外的float 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 GPU(例如V100,T4)上創建Tensorrt引擎,則應使用此分支。
如果您希望將模型部署到運行JetPack 4.3版的Jetson設備(例如-Jetson agx Xavier),則應使用此存儲庫的19.10分支。