前言
我們已經寫了多篇 YOLO V8 資料標記以及雲端訓練模型資料的方法,最近 Roboflow更新之後已無法透過原本的方法直接在雲端訓練,這時候可改用 NVIDIA Jetson ORIN 系列進行訓練。
| 撰寫/攝影 |
郭俊廷 |
| 時間 |
1 小時 (看網路速度) |
材料 |
|
| 難度 |
3(滿分5) |
本文
如果想要想快速體驗YOLOv8的朋友,請參考
這個 NVIDIA Jetson AI Lab 範例,已有現成使用 NVIDIA TensorRT 在 Jetson 上 執行 Ultralytics YOLOv8。使用Docker容器快速建構操作環境,下載安裝好就能馬上辨識圖片,但如果要訓練以及透過攝影機進行即時辨識,需要另外熟悉 Docker 的相關設定,設定較複雜,且有時候會失敗,在此就不另外介紹,請自行參考原廠說明。
本文要透過原生安裝(不使用 Docker)。首先需要使用 NVIDIA SDK Manager 來安裝 JetPack (
詳細教學請點我)。接著依序安裝 ultralytics Python 套件;安裝 PyTorch + torchvision(需支援 ARM64 架構);安裝 onnxruntime‑gpu。
首先看看 Jetson 系列裝置規格與 AI 推論表現:
| 型號 |
AI 推論效能 (TOPS) |
GPU 架構 |
| Jetson AGX Orin 64GB |
~275 |
Ampere 架構,2048 核心+64 Tensor Cores |
| Jetson Orin NX 16GB |
~100 |
Ampere 架構,1024 核心+32 Tensor Cores |
| Jetson Orin Nano Super |
~67 |
Ampere 架構,1024 核心+32 Tensor Cores |
| Jetson AGX Xavier * |
~32 |
Volta 架構,512 核心+64 Tensor Cores |
| Jetson Xavier NX * |
~21 |
Volta 架構,384 核心+48 Tensor Cores |
| Jetson Nano (4GB) * |
~472 GFLOPS |
Maxwell 架構,128 核心 |
* 為上一代 Jetson
Jetson 與 JetPack SDK 的支援版本如下:
- Jetson AGX Orin、Orin NX、Orin Nano Super:支援 JetPack 5 與 JetPack 6 系列
- Xavier NX、AGX Xavier:支援 JetPack 5
- Jetson Nano(舊型號):支援 JetPack 4.6.x 系列
本篇文章主要介紹 JetPack 6 以上套件安裝方法,如需要JetPack5的安裝流程
請點我。
安裝 Ultralytics 套件
接下來要在 Jetson Orin (作業系統 JetPack6)裝置上安裝 Ultralytics 套件,並加上額外的相依套件,這樣才能把 PyTorch 模型匯出為其他格式。著重於匯出為 NVIDIA TensorRT,因為 TensorRT 可協助我們在 Jetson 裝置上發揮最大效能。
更新套件清單、安裝 pip 並升級至最新版本:
sudo apt update
sudo apt install python3-pip -y
pip install -U pip
安裝 ultralytics pip 套件,並包含可選的相依套件 (新的相依套件還有問題,所以本文使用舊版的套件解析器):
pip install ultralytics[export] --use-deprecated=legacy-resolver
出現錯誤是正常的因為tensorflow跟PyTorch無法透過pip安裝
重新開機後才可以順利安裝剩下的套件:
sudo reboot
安裝 PyTorch 與 Torchvision
上面安裝 ultralytics 的過程中會同時安裝 Torch 與 Torchvision。但這些透過 pip 安裝的套件並不相容於基於 ARM64 架構的 Jetson 平台。因此,我們需手動安裝預編譯的 PyTorch,並從原始碼編譯/安裝 Torchvision。
根據 JP6.1的版本安裝 torch 2.5.0 與 torchvision 0.20(實測之後JP62也可正常安裝):
pip install https://github.com/ultralytics/assets/releases/download/v0.0.0/torch-2.5.0a0+872d972e41.nv24.08-cp310-cp310-linux_aarch64.whl
pip install https://github.com/ultralytics/assets/releases/download/v0.0.0/torchvision-0.20.0a0+afc54f7-cp310-cp310-linux_aarch64.whl
出現錯誤沒關係最後有正確安裝torch-2.5.0即可
torchvision 0.20也順利安裝,如下圖
? 備註:
請造訪 Jetson 的 PyTorch 頁面 以取得所有 JetPack 版本的對應 PyTorch 安裝方式。關於 PyTorch 和 Torchvision 的相容性詳細列表,可參考 PyTorch 與 Torchvision 相容性頁面。
安裝 cuSPARSELt 以修正 torch 2.5.0 的相依問題
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/arm64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install libcusparselt0 libcusparselt-dev
安裝 onnxruntime-gpu
PyPI 上的 onnxruntime-gpu 套件沒有提供適用於 Jetson (aarch64 架構) 的版本,因此需要手動安裝。這個套件是部分模型匯出所需的。
您可以在
Jetson Zoo ONNX Runtime 相容性對照表中找到所有可用版本(依 JetPack 版本、Python 版本等分類)。這裡我們會下載並安裝支援 Python 3.10 的 onnxruntime-gpu 1.20.0:
pip install https://github.com/ultralytics/assets/releases/download/v0.0.0/onnxruntime_gpu-1.20.0-cp310-cp310-linux_aarch64.whl
注意:onnxruntime-gpu 安裝後會自動將 numpy 升級為最新版本,因此需重新安裝 numpy 1.23.5 以修正相容性問題:
pip install numpy==1.23.5
最後檢查pytorch跟torchvision有沒有順利安裝完成可以使用以下兩個指令查看安裝版本,如下圖
查看pytorch版本
python3 -c "import torch; print(torch.__version__)"
查看torchvision版本
python3 -c "import torchvision; print(torchvision.__version__)"

安裝完成之後,就可以開始 YOLO的訓練與辨識。首先要建立一個資料夾,用於存放YOLO的模型以及辨識的結果等資料:
mkdir yolov8_models
接著移動到資料夾執行
detect 指令,如果初次執行沒有下載yolov8n.pt等對應模型,系統會自動下載,請稍候。
移動到yolov8_models資料夾
cd ~/yolov8_models
使用yolov8n模型
yolo detect predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg' show=True
使用yolo11n模型
yolo detect predict model=yolo11n.pt source='https://ultralytics.com/images/bus.jpg'
以下是使用yolov8n模型辨識圖片的結果:

從攝影機即時偵測的指令
yolo detect predict model=yolov8n.pt source=0 show=True

更詳細的辨識任務分類請參考
ultralytics 說明文件
如何訓練YOLOv8 的模型
訓練 YOLOv8模型,可以使用 roboflow 的已標註資料集,或是使用別人標記好的內容,也可以參考
CAVEDU 教學。
在此的做法是直接開啟 Roboflow 網站,點選您標記好的資料,並點選右上角的
Download Dataset,格式選擇
YOLOv8,並且選擇
Download zip to computer。如需訓練為YOLO11只要把格式改為YOLO11即可。

下載完之後可以發現其中已切分好訓練集、驗證集、測試集的資料夾以及
data.yaml 設定檔:
- train
- valid
- test
- data.yaml

這時候要執行指令以下指令,使用
data=TEST2/data.yaml 檔案參數下,使用yolov8n 為基準模型訓練30次。
yolo detect train data=TEST2/data.yaml model=yolov8n.pt epochs=30 imgsz=640 device=0
看到 Epoch 1/50 代表50回合中的第1回合,訓練開始囉,請耐心等候。

訓練結束後會顯示花費的時間,以及訓練好的模型的存放路徑。我們可以根據需求選擇best.pt:這是表現最好的模型,通常會使用這個檔案來進行最終的部署,或是last.pt:這是最後一次訓練週期的模型,方便您未來想要接續訓練時使用。

訓練完之後好的資料夾會出現如下訓練參數圖,方便您查看訓練效果,來決定是否要接續訓練或是開始使用已訓練好的模型。

最後,以本文作者實際操作的訓練資料夾為例,可以直接選擇讀取訓練好的
best.pt 來進行辨識,指令如下:
yolo detect predict model=runs/detect/train/weights/best.pt source=0 show=True
在 Jetson Orin NX 上的執行效果如下,可看到順利辨識
JETBOT 與
CAVEDU 兩個自定義物件:

本文說明如何在 NVIDIA Jeton Orin NX 邊緣運算電腦上使用自定義資料集來訓練 YOLOv8 / YOLO11 模型,過程中有借助 Roboflow 網站來幫助我們標註資料集與匯出成指定格式。
參考資料
- https://www.jetson-ai-lab.com/tutorial_ultralytics.html
- https://docs.ultralytics.com/zh/guides/nvidia-jetson/#start-with-native-installation
留言 💬 (0)
還沒有留言,來當第一個。