# Ubuntu18.04 yolov3 tiny 轉 onnx 使用 Python 3.6.9 ###### tags: `Python` ## 資料參考 * [jkjung-avt/tensorrt_demos](https://github.com/jkjung-avt/tensorrt_demos#demo-5-yolov4) * [Ubuntu18.04安装CUDA10.2+cuDNN8](https://zhuanlan.zhihu.com/p/210268160)(已備份到 archive.is 跟 web.archive.org 上) * [在Ubuntu18.04上编译和测试TensorRT](https://zhuanlan.zhihu.com/p/181274475)(已備份到 archive.is 跟 web.archive.org 上) ## 環境準備 * Ubuntu 18.04 * Python 3.6.9 * CUDA-10.2 * GNU Make 4.1 * cuDNN-8.0.3 * TensorRT 7.1.3.4 * pycuda 2019.1.2 * Python 套件:onnx 1.4.1 ### Ubuntu18.04 安装CUDA10.2+cuDNN8.0.3 參考:[Ubuntu18.04安装CUDA10.2+cuDNN8](https://zhuanlan.zhihu.com/p/210268160) 通常Nvidia 會要求登入。 #### 安裝 CUDA 10.2 下载地址:[CUDA Toolkit 10.2 Download](https://developer.nvidia.com/cuda-10.2-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=deblocal) 也可以直接執行下面的命令,不用登入。 ```shell= wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600 wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb sudo dpkg -i cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb sudo apt-key add /var/cuda-repo-10-2-local-10.2.89-440.33.01/7fa2af80.pub sudo apt-get update sudo apt-get -y install cuda-10-2 ``` #### 安裝 cuDNN8.0.3 下载地址:[cuDNN Archive](https://developer.nvidia.com/rdp/cudnn-archive) 下載時必須要登入。 如下圖: ![](https://i.imgur.com/g9EK0zY.png) 也可以去鏡像站下載會比較快:[Index of /nvidia-machine-learning/ubuntu1804/x86_64/](https://mirrors.cloud.tencent.com/nvidia-machine-learning/ubuntu1804/x86_64/) 如下圖: ![](https://i.imgur.com/10Hub2C.png) 下載完成後一次安裝這兩個文件就可以了(先安裝runtime library,再安裝developer library)。 指令如下: ``` sudo dpkg -i libcudnn8_8.0.3.33-1+cuda10.2_amd64.deb sudo dpkg -i libcudnn8-dev_8.0.3.33-1+cuda10.2_amd64.deb ``` 安裝完CUDA10.2和cuDNN8後,需要將cuda目錄下的bin目錄加入到PATH環境變量中。 ``` vim ~/.bashrc ``` 在最後一行,加入: ``` export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH" ``` 然後輸入指令:`source ~/.bashrc` 在正確的設置了PATH變量後,在命令行中執行 nvcc --version 有應該類似下面的輸出 ``` >> nvcc --version nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2019 NVIDIA Corporation Built on Wed_Oct_23_19:24:38_PDT_2019 Cuda compilation tools, release 10.2, V10.2.89 ``` 至此,CUDA10.2+cuDNN8就成功的在Ubuntu18.04上安裝成功了。 ### Ubuntu 18.04 安装配置TensorRT 7.1 參考:[在Ubuntu18.04上编译和测试TensorRT](https://zhuanlan.zhihu.com/p/181274475) 下載地址:[NVIDIA TensorRT 7.x Download](https://developer.nvidia.com/nvidia-tensorrt-7x-download#) 選擇 TensorRT 7.1.3.4 for Ubuntu 18.04 and CUDA 10.2 TAR package ,如下圖: ![](https://i.imgur.com/7ifAt8P.png) 下載結束後解壓: ``` sudo tar -xvzf TensorRT-7.1.3.4.Ubuntu-18.04.x86_64-gnu.cuda-10.2.cudnn8.0.tar.gz ``` 安装pip: ``` sudo apt-get install python3-dev python3-pip ``` 切換到 TensorRT 的 python 目錄下,安裝對應 Python 版本的 python 套件,因為是 python 3.6 選 cp36的那個: ``` cd TensorRT-7.1.3.4/python/ sudo pip3 install tensorrt-7.1.3.4-cp36-none-linux_x86_64.whl ``` 加入環境變數(這邊要看你的 TensorRT 放在哪): ``` vim ~/.bashrc export LD_LIBRARY_PATH="/mnt/c/Users/p2330/Desktop/yolov3_onnx/TensorRT-7.1.3.4/targets/x86_64-linux-gnu/lib:$LD_LIBRARY_PATH" source ~/.bashrc ``` 驗證 TensorRT 的 python 套件安裝,如下圖: ![](https://i.imgur.com/1aFz9f2.png) 安裝 uff: ``` cd ../uff sudo pip3 install uff-0.6.9-py2.py3-none-any.whl ``` 安裝 graphsurgeon: ``` cd ../graphsurgeon/ sudo pip3 install graphsurgeon-0.4.5-py2.py3-none-any.whl ``` ### 安裝 pycuda 2019.1.2 & onnx 1.4.1 參考:[tensorrt_demos](https://github.com/jkjung-avt/tensorrt_demos#demo-5-yolov4) 如下圖,雖然 tensorrt_demos 專案中有提供作者自己寫的 pycuda 安裝腳本,但執行之後,報出了奇怪的錯誤,所以這裡會用 pip 安裝。 ![](https://i.imgur.com/HsFGU2d.png) (因為 pycuda 安裝時,會需要用到 cuda 和 TensorRT,所以才需要安裝前面那些,不然安裝過程會報錯) 安裝 pycuda 2019.1.2: ``` sudo pip3 install pycuda==2019.1.2 ``` 安裝 onnx 1.4.1: ``` sudo pip3 install onnx==1.4.1 ``` ## yolov3 tiny 轉 onnx 參考:[tensorrt_demos Demo #5: YOLOv4](https://github.com/jkjung-avt/tensorrt_demos#demo-5-yolov4) 取得 tensorrt_demos 專案: ``` git clone https://github.com/jkjung-avt/tensorrt_demos.git ``` 切換到 tensorrt_demos/plugins 目錄下,修改 Makefile 中的TENSORRT_INCS 跟 TENSORRT_LIBS 的路徑(用 vim 或 nano 皆可),如下圖: ![](https://i.imgur.com/86kwvRD.png) 修改為 TensorRT-7.1.3.4 所在位置,如下圖(我放在了一個神奇的位置,不要在意): ![](https://i.imgur.com/FiStpIt.png) 然後執行 make: ![](https://i.imgur.com/oa3tU7c.png) 會多出兩個檔案(會噴一堆警告,不用管它): ![](https://i.imgur.com/CgsfhUP.png) 切換到 tensorrt_demos/yolo/ 目錄下,執行作者寫的 yolo 下載腳本,指令如下: ``` cd ../yolo/ ./download_yolo.sh ``` ### 執行 yolo_to_onnx.py yolov3 tiny 轉 onnx : ``` python3 yolo_to_onnx.py -m yolov3-tiny-416 ``` 除了 yolov3 tiny ,還支援很多 model ,如下圖: ![](https://i.imgur.com/nID8Oh8.png) 可參考:[tensorrt_demos Demo #5: YOLOv4](https://github.com/jkjung-avt/tensorrt_demos#demo-5-yolov4)