NVIDIA Jetson Nano — 02 執行深度學習範例:影像辨識、物件偵測、影像分割、人體姿勢預測

張家銘
9 min readJul 14, 2020

--

我們使用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
預設的下載模型列表

若之後還想再啟動 模型下載器 (Model Downloader) 來下載所需的模型,可以使用以下指令

$ cd jetson-inference/tools
$ ./download-models.sh

下載完後,會顯示是否要安裝PyTorch,按空白鍵選取要安裝,之後按Enter鍵就會開始安裝了

PyTorch Installer

在 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
98.19%的機率是橘子

下指令呼叫 實時影像辨識程式,可以依需求選擇模型與解析度,在這裡我們模型使用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

--

--