tensorRT + yolov4 (2022/03/07)
- 目標:
- 了解如何使用gpu加速(tensorRT)
- 學如何訓練模型
實作成果
- 需購買web cam
- sd card 容量太小
- 走過官方給的demo流程,需要自己再熟悉一下
Cave education 對於jetson nano教學的系列文
開會筆記
- trace code
- 買兩台web cam
- 做hackMD下次咪挺報告
trace code(2022/03/21)
- 目標:
- 買web cam *2
- trace code
用pre-trained model做一遍由.weights to .trt的流程
1.訓練
了解如何用DarkNet做訓練
但這次時做是使用pre-trained model
2.weight -> ONNX -> tensorRT
i. 權重轉ONNX
卡在onnx轉成trt:
tensorRT在google collab安裝時遇到問題,但依據上禮拜我在jetson nano跑demo後,tensorRT是原本就被裝好的,在jetson nano不會遇到這個問題。
方法一: weight file轉onnx file
- 路線: .weights 轉成.pth再用pytorch的函式轉成onnx
1 |
|
方法二: pth file轉onnx file
- 使用Torch.onnx.export函式
1
2
3
4
5
6
7
8
9
10
11
12torch.onnx.export(model, args, f, export_params=True,
verbose=False, training=False,
input_names=None, output_names=None,
aten=False, export_raw_ir=False,
operator_export_type=None,
opset_version=None,
_retain_param_name=True,
do_constant_folding=False,
example_outputs=None,
strip_doc_string=True,
dynamic_axes=None,
keep_initializers_as_inputs=None) - 官方範例
使用pre-trained model AlexNet轉換成onnx檔案
1 | import torch |
ii. ONNX 轉 trt (還沒在google collab上實作過)
- builder
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# Builder:將模型導入TensorRT並且建構TensorRT的引擎。
def build_engine(onnx_path, shape = [1,224,224,3]):
with trt.Builder(TRT_LOGGER) as builder, builder.create_network(1) as network, trt.OnnxParser(network, TRT_LOGGER) as parser:
builder.max_workspace_size = (256 << 20)
# 256MiB model任一層的最大可用空間
#使用fp16的精度
builder.fp16_mode = True
# fp32_mode -> False
with open(onnx_path, 'rb') as model:
parser.parse(model.read())
engine = builder.build_cuda_engine(network)
return engine - main function
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if __name__ == "__main__":
onnx_path = '/content/yolov4_1_3_608_608_static.onnx'
trt_path = '/content/yolov4_1_3_608_608_static.trt'
input_shape = [1, 224, 224, 3]
build_trt = timer('Parser ONNX & Build TensorRT Engine')
engine = build_engine(onnx_path, input_shape)
build_trt.end()
save_trt = timer('Save TensorRT Engine')
save_engine(engine, trt_path)
save_trt.end()3.inference and visualize 成果
還沒看QQ
結論與問題
上週是使用google colab實作這個流程,這周在jetson nano裝好openCV,pytorch等套件後有根據google colab上的程式去跑跑看。
但是在跑DarkNet to ONNX的步驟沒辦法抓到onnx的library(已經有install過)還不確定是甚麼原因。
我有裝好archiconda,之後會用虛擬環境的方式再做一遍,也繼續看tensorrt_demos的程式和環境設定。不過jetson nano 裝那些套件比較麻煩,應該要先找好或自己寫script去跑。
Finish .weights to .trt(2022/03/28)
- 解決無法import onnx問題 –>輸出.onnx成功
- 使用trtexec 將.onnx轉成.trt
轉換完後 執行demo_trt.py無法框出物件位置
(2022/3/28已解決)
在跑.weights轉.onnx很常遇到的錯誤訊息
會導致程式中斷
1 | > - Can't parse 'pt2'. Sequence item with index 0 has a wrong type |
可能原因
cv2.rectangle(img,(x1,y1),(x2,y2),rgb,3);
其中x1,x2,y1,y2需要為type int
已解決
參考此連結修改類似的地方即可
1 | Try to change following lines in core/utils.py as defined below: |
.onnx轉.trt方法(可行)
1 | trtexec --onnx=resnet50/model.onnx --saveEngine=resnet_engine.trt |
下次進度:開始訓練
玩幾次kaggle object detect相關
讀yolo理論
問專題可以做出大概怎樣的東西?