Try   HackMD

Nvidia Nano + Tensor RT + Tiny YOLOv3

資料來源: https://github.com/zombie0117/yolov3-tiny-onnx-TensorRT

不過有些參數要修一下 XD

這個code使用Python2, 前面的 TRT + YOLOv3 是用Python3, 剛好沒影響

git clone https://github.com/zombie0117/yolov3-tiny-onnx-TensorRT
cd yolov3-tiny-onnx-TensorRT

sudo apt-get install python-pip  #如果沒有pip再執行這個

# 原本的req.txt是寫onnx>=1.1.1, 可是後面又說onnx==1.4.1, 建議先修改這個txt檔
pip install -r requirements.txt

# 如果已經裝好onnx, 可以用下面指令刪掉重裝
pip uninstall onnx
pip install onnx==1.4.1

相關套件裝完後, 要先去改一下py裡面的參數. 主要是路徑的部分, 原本是寫絕對路徑, 可以照自己的環境修改 or 改成相對路徑

1. [yolov3-tiny.cfg]
檢查最後一行是不是空白的, 如果沒有的話要自己手動加一行空白進去
The cfg-file's last line must be a blank line. 
You should press Enter to add a blank line if there is no blank line at the end of the file.
2. [data_processing.py] 改路徑名稱
line14: LABEL_FILE_PATH = '/home/nvidia/yolov3-tiny2onnx2trt/coco_labels.txt'
line19: CATEGORY_NUM = 80
3. [yolov3_to_onnx.py] 改路徑名稱
line778: img_size = 416
line784: cfg_file_path = '/home/nvidia/yolov3-tiny2onnx2trt/yolov3-tiny.cfg'
line811: weights_file_path = '/home/nvidia/yolov3-tiny2onnx2trt/yolov3-tiny.weights'
line826: output_file_path = 'yolov3-tiny.onnx'
4. [onnx_to_tensorrt.py] 原本是imagelist.txt, 實際檔名是imageslist.txt, 記得一致 XD
還有改路徑名稱, output_shapes的語法也要改
line39: input_size = 416
line40: batch_size = 1
line42~line46:
    onnx_file_path = 'yolov3-tiny.onnx'
    engine_file_path = 'yolov3-tiny.trt'
    input_file_list = '/home/nvidia/yolov3-tiny2onnx2trt/imagelist.txt'
    IMAGE_PATH = '/home/nvidia/yolov3-tiny2onnx2trt/images/'
    save_path = '/home/nvidia/yolov3-tiny2onnx2trt/'

line 168:
    output_shapes = output_shapes_dic[str(input_size)]  # 這是原本的, 執行後會出現錯誤訊息. 可以改成下面這個
    output_shapes = [(batch_size, 255, 13, 13), (batch_size, 255, 26, 26)]  # 改成這樣可以跑出結果

PS. Line 168的來源: https://github.com/zombie0117/yolov3-tiny-onnx-TensorRT/issues/2

這些步驟準備完後, 應該就可以跑了

python yolov3_to_onnx.py    # 這個跑完會產生 yolov3-tiny.onnx 檔

python onnx_to_tensorrt.py  # 這個跑完後, 終端機會有辨識結果, 辨識完的圖片會儲存起來

那個常見的 dog.jpg 辨識結果:

Reading engine from file yolov3-tiny.trt
(416, 416)
time spent: 0.147424221039
2
test
boxes size: 3
[[123.64821648 219.95425227 258.68489429 295.94818745]
 [465.01741724  81.80695242 221.00351968  89.57543333]
 [530.07878114  93.9602292   99.6300466   67.47742823]] [0.81647941 0.68578115 0.628142  ] [16  2  7]
Saved image with bounding boxes of detected objects to save/dog_416_bboxes.png.