iT邦幫忙

2022 iThome 鐵人賽

DAY 12
2
AI & Data

就用 Jetson Nano 來實作 Edge AI 吧!系列 第 12

【Day 12】Getting Started with AI on Jetson Nano (一): 環境準備與 hello Camera

  • 分享至 

  • xImage
  •  

NVIDIA 線上學習資源 DLI (Deep Learning Institute) 有個非常實用的入門課程- Getting Started with AI on Jetson Nano ,在這免費課程中將使用 JupyterLab 介面快速進入 Edge AI 領域,完成課程還可獲得 NVIDIA 線上課程證書喔!今天我們將做第一部分的入門介紹以及避坑指引。

https://ithelp.ithome.com.tw/upload/images/20220923/20152064DWUNReWSPG.png

事先準備

Camera

開始之前需要先準備一個 Camera,過程會做 Camera 擷取即時影像做為訓練與推論用。Camera 可以使用 CSI 介面的 IMX-219 樹莓派 Camera V2 或是 USB 介面的羅技 C270 Webcam。這邊推薦使用 C270,因為 USB 介面插拔比較不會有問題,CSI 介面對硬體新手較不友善,不小心可能就會接觸不良甚至造成硬體損毀。而 USB Webcam 只要是標準 UVC(USB video class) 介面在 Linux 有驅動的裝置皆可使用,各位手上有既有的 UVC Webcam 可以拿來使用,沒有的話推薦 C270 比較不會有問題,價錢也可以接受。

註冊課程

註冊 Getting Started with AI on Jetson Nano 課程並非必要,因為只要啟動 Docker 容器就可以自行在 JupyterLab 進行操作。但是完成課程可以換一張電子證書來滿足自己的虛榮心,好像蠻值得的!前往課程頁進行註冊,裡面也有官方教學可以參考。

安裝與啟動 Docker(坑)

在現行版本沒辦法像 DLI 課程中可以直接啟動 Docker image,會發生錯誤,必須安裝對應的套件並且參考 NVIDIA 論壇討論串來進行解決。這邊已整理為以下流程:

安裝對應套件

sudo apt-get install nvidia-container-toolkit nvidia-container-runtime nvidia-container-csv-*

重新安裝指定版本 docker

wget https://launchpad.net/ubuntu/+source/docker.io/20.10.2-0ubuntu1~18.04.2/+build/21335731/+files/docker.io_20.10.2-0ubuntu1~18.04.2_arm64.deb
sudo dpkg -i docker.io_20.10.2-0ubuntu1~18.04.2_arm64.deb
rm docker.io_20.10.2-0ubuntu1~18.04.2_arm64.deb
sudo apt-get install containerd

建立 package 對應版本文件,使用圖形介面的文字編輯器 gedit 編輯。若熟悉 vi 或是 nano 終端機的文字編輯器可以自行調整。

sudo gedit /etc/apt/preferences

填入以下內容並存檔

Package: docker.io
Pin: version 20.10.2*
Pin-Priority: 1001

Package: containerd
Pin: version 1.5.2*
Pin-Priority: 1001

重新啟動系統

sudo reboot

建立資料存放目錄

mkdir -p ~/nvdli-data

執行啟動 docker,第一次執行會到 NVDIA NGC 下載 DLI Getting Started with AI on Jetson Nano 的課程 docker image,並且啟動。其中最後一段的 v2.0.1-r32.6.1tw 指的是版本以及 ipynb 筆記本中的說明語言,我們要指定 Jetpack 4.6 版本前輟 v2.0.1-r32.6.1 加上 tw 是繁體中文說明。若要閱讀英文的內容則是把最後的 tw 刪去。完整 image tag 可參閱說明頁。注意 Jetpack 4.6 與 4.6.1 兩個版本所對應的 docker image 有所不同,輸入前務必再次確認。

sudo docker run --runtime nvidia -it --rm --network host \
     --volume ~/nvdli-data:/nvdli-nano/data \
     --device /dev/video0 \
     nvcr.io/nvidia/dli/dli-nano-ai:v2.0.1-r32.6.1tw

此外,如果開發者是使用 CSI Camera,需要額外加一個 voulme 參數,完整指令如下:

sudo docker run --runtime nvidia -it --rm --network host \
 --volume ~/nvdli-data:/nvdli-nano/data \
 --volume /tmp/argus_socket:/tmp/argus_socket \
 --device /dev/video0 \ 
 nvcr.io/nvidia/dli/dli-nano-ai:v2.0.1-r32.6.1tw

下載image進度顯示

https://ithelp.ithome.com.tw/upload/images/20220923/20152064VjagG7Guoz.png

啟動完成就會看到以下提示訊息。

https://ithelp.ithome.com.tw/upload/images/20220923/20152064npOXaGr9GV.png

這時我們就可以到相同區域網路內的任何一台電腦,在瀏覽器輸入 Jetson Nano 的 IP 位置,並指定埠號 8888,就會看到 JupyterLab 登入畫面,輸入預設密碼 dlinano 即可完成登入!筆者建議可以在 PC 上操作 JupyerLab 會比較順暢,若真不得已才在 Jetson Nano 的瀏覽器操作。

https://ithelp.ithome.com.tw/upload/images/20220923/201520648cYO6QwKxH.png

媽!我上電視啦!?

登入後就會看到標準的 JupyterLab 介面,這部分的操作我們就不贅述了,若沒有使用過可自行摸索或是上網找相關資料應該是相當豐富。

https://ithelp.ithome.com.tw/upload/images/20220923/20152064JzVwWRM8hP.png

左側欄位的目錄結構可以看到幾個目錄:

  • classification - 影像分類的 ipynb 筆記本
  • data - 存放擷取的影像資料
  • hello_camera - Camera 測試用的 ipynb 筆記本
  • regression - 影像資料回歸的 ipynb 筆記本

點進去 hello_camera 目錄,有存放兩個檔案-csi_camera.ipynbusb_camera.ipynb。依據我們接上的 Camera 是 CSI 界面或是 USB 界面來做選擇,筆者這邊就選擇開啟 usb_camera.ipynb

https://ithelp.ithome.com.tw/upload/images/20220923/20152064ObsFvlj5JX.png

開啟後會到可愛的繁體中文說明以及對應的程式碼,依序執行各個程式碼 cell,執行到下方這一段

camera.running = True

def update_image(change):
    image = change['new']
    image_widget.value = bgr8_to_jpeg(image)
    
camera.observe(update_image, names='value')

就會看到 ipynb 上所建立的 camera widget 會將 camera 串流即時顯示在畫面上,就代表設備已經準備就緒囉!因為程式碼都有中文的說明內文,筆者就不再額外贅述了,針對幾點重點做補充:

  • 當有多個 camera 裝置的話,務必指定到正確的裝置名稱。
  • 顯示的影像會這麼小而且變形的原因是已經被壓縮成 224x224 像素了,這是因為後面要使用的深度學習模型 shape 就是 224x224 RGB,當然你也可以自行修改參數玩玩看。
  • 關閉 ipynb 前務必依定要釋放 camera 硬體資源,否則可能會造成系統資源卡死, camera 無法再被別處的程式碼使用,必須重新啟動才能復原。

https://ithelp.ithome.com.tw/upload/images/20220923/20152064fZiPoWtuKq.png

小結

這個 DLI 課程不斷的在進化,最早在 NVIDIA Jetson Nano Developer Kit 上只要燒錄完提供的 image 到 SD 就可以使用了,後來則是改用 docker 的方式來啟動 JupyterLab,並且還增加了多國語言的說明,真是非常便利。但筆者在測試時發現新版 Docker 套件有相容性問題,好在網路上已經有人提供解法,只要按照上述內容操作就沒問題了。接下來就可以開始做 AI 影像分類囉, see you tomorrow!


上一篇
【Day 11】快訊!Jetson Orin Nano 發表!
下一篇
【Day 13】Getting Started with AI on Jetson Nano (二): Image Classification 影像分類
系列文
就用 Jetson Nano 來實作 Edge AI 吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言