reComputer Jetson 運行 YOLOv5 教學全攻略 1 – 安裝與測試

一、前言

如何將 AI 模型部屬到適合的裝置上並發揮最大效能,一直都是近期流行的話題。隨著小型單板電腦不斷推陳出新,神經網路框架的支援度越來越廣,要將常見的分類模型、物件偵測模型、語意分割模型……等,放到 Raspberry PiNVIDIA Jetson 系列或其他搭載 Intel 處理器的電腦,已不再是困難事。

當然,不同的核心、不一樣的框架、甚至是系統不同與版本差異,在安裝環境時必然不盡相同,這往往也是讓新手退卻的原因。原先在 PC 上跑得好好的模型,一旦想移植到手上的單板電腦,就是惡夢的開始!常常停在環境建置的部份,好不容易花了大把時間訓練模型,卻卡在這裡,好讓人灰心!ಥ_ಥ

筆者特地挑選了大家近幾年最喜愛的 NVIDIA Jetson 系列,以最多人擁有的 Jetson Nano 4GB 做示範,文章中筆者將使用 Seeed 推出的reComputer Jetson 系列的 J1010 (核心就是 Jetson Nano 4GB ),讀者使用原廠 Jetson Nano Developer Kit 4GB 也行。模型選用無人不知無人不曉的 YOLOv5 模型。雖然落筆時我們的台灣之光 YOLOv7 已問世,但筆者尚未參透其中的奧秘,就不在此誤人子弟了。

YOLOv5 的官方文件相當完整,對於各框架的支援也是數一數二,一個 export.py 文件無痛轉換各種格式,可說是近幾年筆者使用起來最無痛的模型,誠摯推薦。

二、目標

全攻略系列分成三個部份,本篇文章將介紹如何在 reComputer J1010 安裝 YOLOv5 運行的環境。第二篇則是學習使用自己想要辨識的資料,一步步訓練一個自己的 YOLOv5 模型。第三篇教大家發揮 NVIDIA GPU 的優勢,使用 TensorRT 進一步加速模型推論的速度。

三、安裝 YOLOv5 運行的環境

安裝系統跟使用者資訊設置的部份,就不多作介紹了。筆者的 Jetson Nano 環境,是使用 NVIDIA 提供映像檔安裝的 Ubuntu 18.04,JetPack 的版本是 4.6,經實測過如果 JetPack 的版本是 4.6.1 也是沒問題的呦。

若您跟筆者一樣是使用 reComputer J1010 或是 reComputer J1020,出廠時其內建的 EMMC 所安裝的系統就是 Ubuntu 18.04,JetPack 的版本是 4.6,但 EMMC 的容量只有 16GB,扣除系統保守計算大概也只剩 2GB,建議可以透過 32、64GB 的 USB隨身碟擴充,並將系統移至隨身碟開機。相關作法可以參考「reComputer Jetson 系列-擴充儲存空間

建議擴充後再來進行以下的操作,若您是使用 Jetson Nano Developer Kit,原先使用的 SD 卡容量夠大的話就沒問題。請配置電腦螢幕,鍵盤滑鼠與網路,並準備一個網路攝影機(拍攝照片與錄製影像使用),一切準備就緒後,就讓我們開始吧。

1. 設置 Swap 空間

建立 Swap 虛擬記憶體儲存空間,主要是用來輔助實體記憶體的不足,雖然說是輔助,但它並不能取代實體記憶體,速度上也較慢。但當記憶體不足時,可以多多少少幫上點忙。

請打開終端機,依序輸入下方指令,輸入一行就按一下 Enter。過程中,可能會需要輸入密碼,賦予執行權限,密碼輸入過程並不會顯示,輸入完畢請按下 Enter 繼續執行。

全部輸入完畢將可獲得額外 4GB 的虛擬儲存空間,如果想要更大,可以更換第一行的「4G」。

sudo fallocate -l 4G /var/swapfile
sudo chmod 600 /var/swapfile
sudo mkswap /var/swapfile
sudo swapon /var/swapfile
sudo bash -c 'echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab'

操作如下圖所示:

reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

輸入「free -m」指令將可察看現有空間配置,原先 Swap 已有一些空間,再加上我們方才配置的 4G,如下圖所示:

reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

2. 取得套件更新清單

在開始安裝套件之前,我們需要輸入下列指令,並按下 Enter,這個指令會取得遠端更新伺服器的套件檔案清單。

sudo apt update
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

取得遠端更新清單,過程並不會太久,不到 20 秒即可完成,完成後如下圖。可以看到訊息中有提示能更新的套件有 310 個。

reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

3. 安裝 pip

接著安裝Python3版本的軟體包管理系統「pip」,功能是幫我們管理 python3 相關的套件包與安裝,我們需要透過它安裝執行 YOLOv5 所需要的套件。

sudo apt install -y python3-pip
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

一樣是輸入後按下 Enter 鍵,完成後如下圖所示:

reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

4. 更新 pip

安裝完畢後為了確保版本為最新,我們可以輸入以下指令更新 pip,pip 的版本將會左右我們能否下載到新的套件,所以建議更新到最新。

pip3 install --upgrade pip
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

更新完成後即可在畫面中看到裝好的版本,如下圖所示,更新後的版本是「21.3.1」。

reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

5. 下載 YOLOv5

透過「git」工具,我們將從 YOLOv5 官方 github 下載所有程式到我們的 Jetson Nano 裡。

git clone https://github.com/ultralytics/yolov5
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

下載完成,如下圖所示:

reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

6. 開始安裝 YOLOv5

6-1. 移動路徑

首先我們將路徑移至方才下載的「yolov5」資料夾底下,透過下列指令可以讓我們移動到目的地。

cd yolov5
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

6-2. 修改安裝文件

yolov5 資料夾內有個「requirements.txt」文件,這份文件內有安裝 YOLOv5 所需要的全部套件指令,只要透過 pip 安裝執行這個文件,就可以將 YOLOv5 裝好。但這僅限在 PC 上,Jetson Nano 這邊並沒有辦法這樣處理,我們需要修改一些項目。

請輸入下列指令啟動文字編輯器「gedit」來修改 requirements.txt 文件,若您有習慣的編輯器如 nano 或是 vi,宜可透過這些編輯器修改。

gedit requirements.txt
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

首先是修改「matplotlib」與「numpy」的版本,原先只要求要大過多少版本即可,這樣的設定會讓系統從最新的版本開始嘗試安裝,但新的版本沒辦法相容 Jetson Nano,導致安裝時因為新版本不行,系統就會降版後繼續嘗試安裝,降版後不行就再繼續降版,直到對應到的版本支援為止,過程中相當耗時且無意義,所以在此我們直接指定它們的版本。

matplotlib==3.2.2
numpy==1.19.4
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

接著註解掉「torch」與「torchvision」的安裝,在指令的前方加上「#」在 python 裡面表示忽略。

YOLOv5 使用的神經網路框架是 Pytorch,在 Jetson Nano 上並沒有辦法單純用 pip 安裝,所以將它們註解掉,之後再依照 Jetson Nano 的規則安裝。

# torch>=1.7.0 
# torchvision>=0.8.1
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

修改完畢後請按下右上角的儲存按鈕,並關閉文件。

6-3. 單獨安裝必要套件

在安裝 requirements.txt 文件之前,需要搶先安裝「libfreetype6-dev」這個套件,以便過程中不會因為缺少相依的套件而失敗,請輸入以下指令安裝。

sudo apt install -y libfreetype6-dev
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

6-4. 安裝執行 requirements.txt

接著就讓我們下指令啟動 requirements.txt 文件進行套件的安裝,過程中會需要一段時間,因為要安裝的套件相當多。

pip3 install -r requirements.txt
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

安裝完成後可能會出現紅色字的提示,一旦出現紅字需要特別閱讀,查看是哪邊有問題並解決,但這邊描述的內容無傷大雅,且必要套件皆安裝成功,所以可以忽略。

reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

7. 安裝 Pytorch 與 Torchvision

接下來我們將用符合 Jetson Nano 的方式安裝 Pytorch 與 Torchvision,讓我們依照下列步驟安裝。

7-1. 安裝 Pytorch

首先打開一個新的終端機,並輸入以下指令安裝必要的套件軟體,過程中可能會需要輸入密碼,賦予執行權限。

sudo apt-get install -y libopenblas-base libopenmpi-dev
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

接著透過「wget」指令下載適合 Jetson Nano 的 Pytorch 安裝檔案。

wget https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl -O torch-1.10.0-cp36-cp36m-linux_aarch64.whl
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

下載完畢後即可使用 pip 指令安裝 Pytorch。

pip3 install torch-1.10.0-cp36-cp36m-linux_aarch64.whl
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

安裝完畢後如下圖所示:

reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

7-2. 安裝 Torchvision

與安裝 Pytorch 一樣,在安裝主要套件之前,需要安裝相依的套件。

sudo apt install -y libjpeg-dev zlib1g-dev
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

接著使用「git」指令下載 Torchvision 的程式碼。

git clone --branch v0.9.0 https://github.com/pytorch/vision torchvision
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

透過「cd」指令移動到剛剛下載的 torchvision 資料夾內。

cd torchvision
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

最後透過下列指令安裝 Torchvision。

sudo python3 setup.py install
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

完成後如下圖所示:

reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

經由上述步驟,所有套件就都安裝完畢了。

四、測試安裝的 YOLOv5

首先打開新的終端機,在 yolov5 的資料夾內除了安裝文件 requirements.txt 之外,還有官方已經寫好的程式可以供使用者使用,現在讓我們透過指令進到「yolov5」資料夾內。

cd yolov5
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

資料夾內有一個「detect.py」程式,可以讓使用者依照自己使用的模型,與要辨識的來源做設定,並呈現推論的結果。

首先將準備好的網路攝影機插上 Jetson Nano 的 USB 插槽,接著輸入以下指令:

python3 detect.py --weights yolov5n6.pt --nosave --source 0
reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

意思是使用 python3 執行 detect.py 這個 python 檔案,後方的「–weights yolov5n6.pt」則是指設定使用的模型為 yolov5n6,「–nosave」則是不將推論結果錄製下來(若想保存可不輸入這個選項),最後的「–source 0」則是指定影像資料取自連接到「/dev/video0」的網路攝影機。

因為我們的 Jetson Nano 內,目前並沒有 yolov5n6.pt 這個模型,所以程式會幫我們下載預設的官方模型來使用,如下圖所示:

reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

執行過程中會需要一段時間,除了下載模型之外,還需要將模型部屬到 GPU 上。

完成後會如下圖所示,顯示目前攝影機拍攝的畫面,並附加推論結果到螢幕上,終端機也會同步出現目前辨識的資訊和推論速度。

reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

要關閉程式的話相當簡單,點選拍攝畫面的視窗,並瘋狂按下鍵盤上的「Q鍵」,待視窗關閉,程式也會跟著結束。或是點選終端機視窗,按下鍵盤上的「Ctrl + C鍵」,一次不行就按第二次,成功的話程式也會關閉。

reComputer J1010 運行 YOLOv5 全攻略 1 - 安裝與測試

五、結語

經由這篇文章,大家是否有成功安裝,並使用網路攝影機體驗 YOLOv5 模型推論的威力呢?現在執行的模型,是官方經由著名「COCO dataset」所訓練的模型,共可辨識 80 種不同的目標。下篇文章,將帶大家從蒐集資料開始,接著使用方便的線上工具,標記您所要關注的目標,與建立資料集,最後透過 Google 強大的資源訓練自己的 YOLOv5 模型,不要錯過接下來精彩的內容,我們下篇文章見!