我們使用NVIDIA提供的 jetson-inference 範例,其中實現了三種不同的深度學習應用,包含影像辨識 (Image Recognition)、物件偵測 (Object Detection)、影像分割 (Image Segmentation),另外我們還試跑了 Jetson Zoo 所提供的 trt_pose 他實現了人體姿勢預估 (Pose Estimation)。
Hello AI World
我們先去 github 裡下載專案到我們的 Jetson Nano 裡
# 下載專案並讀進資料夾裡
$ git clone --recursive https://github.com/dusty-nv/jetson-inference
$ cd jetson-inference# 創建build資料夾並讀進資料夾裡
$ mkdir build
$ cd build# 使用CMake編譯所需的相依套件
$ cmake ../
編譯到一半時會啟動 模型下載器 (Model Downloader) 問你要下載什麼模型,以下是 TensorRT 有支援的模型,可以根據預設來下載,也可以選擇自己所需的模型來下載
若之後還想再啟動 模型下載器 (Model Downloader) 來下載所需的模型,可以使用以下指令
$ cd jetson-inference/tools
$ ./download-models.sh
下載完後,會顯示是否要安裝PyTorch,按空白鍵選取要安裝,之後按Enter鍵就會開始安裝了
在 jetson-inference/build 下使用 make 編譯並安裝,最後完整的輸出檔案將會在 jetson-inference/build/aarch64 這個資料夾中, 接下來所有要執行的範例程式都存放在 jetson-inference/build/aarch64/bin 資料夾中,這樣我們就完成安裝了
$ cd jetson-inferece/build
$ make -j4
$ sudo make install
$ sudo ldconfig
接下來我們開始使用NVIDIA提供的圖片來進行各種深度學習,圖片預設路徑在 jetson-inference/data/images/,也可使用camera來進行實時辨識,使用camera的操作畫面需要在 Jetson Nano 上接螢幕才可以看到鏡頭的畫面,SSH連線時會無法顯示。我的camera是使用 IMX219–120,可以使用以下指令查看自己的camera支援什麼樣的解析度與FPS
$ sudo apt-get install v4l-utils
$ v4l2-ctl --list-formats-ext
1. 影像辨識 (Image Recognition):
下指令呼叫 靜態影像辨識程式,可以依需求選擇模型,在這裡我們使用GoogleNet
$ cd jetson-inference/build/aarch64/bin
$ ./imagenet-console.py --network=googlenet images/orange_0.jpg orange_0_output.jpg
下指令呼叫 實時影像辨識程式,可以依需求選擇模型與解析度,在這裡我們模型使用ResNet-18,解析度設為1280x720
$ ./imagenet-camera.py --network=resnet-18 --width=1280 --height=720
2. 物件偵測 (Object Detection):
下指令呼叫 靜態影像辨識程式,可以依需求選擇模型,在這裡我們使用coco-dog
$ cd jetson-inference/build/aarch64/bin
$ ./detectnet-console.py --network=coco-dog images/dog_1.jpg dog_1_output.jpg
下指令呼叫 實時影像辨識程式,可以依需求選擇模型與解析度,在這裡我們模型使用SSD-Mobilenet-v2,解析度設為1280x720
$ ./detectnet-camera.py --network=SSD-Mobilenet-v2 --width=1280 --height=720
3. 影像分割 (Image Segmentation):
下指令呼叫 靜態影像辨識程式,可以依需求選擇模型,在這裡我們使用FCN-ResNet18-Cityscapes
$ cd jetson-inference/build/aarch64/bin
$ ./segnet-console.py --network=fcn-resnet18-cityscapes images/city_0.jpg city_0_output.jpg
下指令呼叫 實時影像辨識程式,可以依需求選擇模型與解析度,在這裡我們模型使用FCN-ResNet18-MHP,解析度設為1280x720
$ ./segnet-camera.py --network=fcn-resnet18-mhp --width=1280 --height=720
trt_pose
安裝相依套件與 trt_pose
$ sudo -H pip3 install tqdm jupyter pycocotools cython# jetpack4.4.1 的 numpy 預設版本為 1.19.5,會和 torch 起衝突,因此需要降版至 1.19.4
$ pip3 install numpy==1.19.4
$ git clone https://github.com/NVIDIA-AI-IOT/trt_pose
$ cd trt_pose
$ sudo python3 setup.py install
安裝 torch2trt,這個套件可以將 PyTorch 的 pth 檔轉成 TensorRT 的 trt 檔
$ git clone https://github.com/NVIDIA-AI-IOT/torch2trt
$ cd torch2trt
$ sudo python3 setup.py install
安裝 jetcam,這個套件可以在 jupyter notebook 上開啟 camera
$ git clone https://github.com/NVIDIA-AI-IOT/jetcam
$ cd jetcam
$ sudo python3 setup.py install
4. 人體姿勢預估 (Pose Estimation):
下載 resnet18_baseline_att_224x224_A 的權重並放到 trt_pose/tasks/human_pose 的資料夾裡
$ cd trt_pose/tasks/human_pose
$ wget -O resnet18_baseline_att_224x224_A_epoch_249.pth https://drive.google.com/u/0/uc?id=1XYDdCUdiF2xxx4rznmLb62SdOUZuoNbd&export=download
開啟 jupyter notebook 並開啟 live_demo.ipynb 並依序執行指令即可
$ jupyter notebook