iT邦幫忙

2022 iThome 鐵人賽

DAY 18
2
AI & Data

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

【Day 18】Hello AI World (四):用 Colab 訓練植物分類模型

  • 分享至 

  • xImage
  •  

以 Jetson Nano 的邊緣裝置的定位,適合拿來做神經網路推論,並不適合(也不合理)跑神經網路訓練,即使可以跑也是會等到天荒地老。既然如此,拿 google 提供免費的 colab 來訓練如何?今天就來用簡單幾個指令,把原本在 Jetson Nano 跑的訓練搬上 colab

不認識植物?AI認識! (source: NVIDIA)
不認識植物?AI認識! (source: NVIDIA)

PlantCLEF 資料集

這次要訓練的資料集為 PlantCLEF 2017,涵蓋 20 種植物類別影像資料,總共 10,475 訓練資料、1155驗證資料與30張測試資料,總檔案大小為 1.5GB,可於這裡下載。 20 種植物類別如下:

  • ash
  • beech
  • cat-tail
  • cedar
  • clover
  • cyprus
  • daisy
  • dandelion
  • dogwood
  • elm
  • fern
  • fig
  • fir
  • juniper
  • maple
  • poison ivy
  • sweetgum
  • sycamore
  • trout lily
  • tulip tree

就用 colab 訓練模型吧!

筆者已經把 colab 的訓練模型寫成一個範例,其實就只是把在 Jetson Nano 上執行的幾個指令搬上 colab 而已,流程如下:

  1. 下載 hello AI world 專案程式碼
  2. 下載資料集
  3. 訓練神經網路
  4. 將指令轉換為 ONNX 格式
  5. 下載模型放到 Jetson Nano
  6. 進行(TensorRT 加速)推論

唯一有參數做調整的就在於訓練的指令

!python3 train.py --model-dir=models/plants data/PlantCLEF_Subset --arch=googlenet --batch-size=32 --epochs=50

這邊有幾個參數選項可以做設定

  • arch - 使用的模型架構,可以選擇 alexnet, googlenet, resnet18, resnet50, vgg-16 等(參照 Day16
  • epochs - 訓練次數,因為在 colab 訓練速度較快,可以稍微提高訓練次數
  • batch-size - 每一批訓練抓取檔案的數量,因為總影像高達一萬多筆,可以提高為 16 或 32。

這些都可以嘗試自行調整看看,完整說明可參照 pytorch-classification 專案。
大約不到兩分鐘可以完成一次訓練,經過30次訓練後模型 TOP-1 精確度約可提高到 70%。
https://ithelp.ithome.com.tw/upload/images/20220929/20152064SsMx2DSNgP.png

訓練結束後將 pytorch 模型轉為 ONNX 格式,如果你是用 RestNet-18 檔名會是 resnet.onnx,若是 GoogleNet 則檔名為 googlenet.onnx,以此類推。最後就是將其下載回來放到 Jetson Nano 做推論了!

回到 Jetson Nano 進行推論

接下來就是回到 Jetson Nano 上,把剛訓練好的模型拿來做推論,或是也可以直接拿 NVIDIA 訓練100次的ResNet-18模型來做測試與比對。

由於在 Jetson Nano 上沒有測試資料,我們還是要重新在 Jetson Nano 上下載資料集,或是也可以從剛剛執行的 colab 上把測試資料打包下載回來。

cd jetson-inference/python/training/classification/data
wget https://nvidia.box.com/shared/static/vbsywpw5iqy7r38j78xs0ctalg7jrg79.gz -O PlantCLEF_Subset.tar.gz
tar xvzf PlantCLEF_Subset.tar.gz

此外也把剛剛從 colab 訓練好的模型也一併搬過來

cd PlantCLEF_Subset/
mv ~/Downloads/googlenet.onnx

進到 Docker 推論的容器環境

cd ~/jetson-inference/
docker/run.sh

輸入指令進行推論,一次將 30 張測試資料批量推論,一樣在第一次載入模型時會經過 TensorRT 的轉換與加速。

cd /jetson-inference/python/training/classification/data/PlantCLEF_Subset
imagenet.py --model=googlenet.onnx --input_blob=input_0 --output_blob=output_0 --labels=labels.txt "test/*.jpg" "test/output_%i.jpg"

完成後可以在資料夾看到 output_0.jpg ~ output_29.jpg 的推論結果

imagenet plant.gif

小結

截至目前為止影像分類的部分將告一段落,不知道各位是否覺得在 Jetson Nano 這個邊緣裝置跑推論很容易操作呢?明天開始將進入到物件偵測的環節啦! keep fighting!!


上一篇
【Day 17】Hello AI World (三):訓練辨識貓狗影像分類模型
下一篇
【Day 19】Hello AI World (五):Object Detection 物件偵測
系列文
就用 Jetson Nano 來實作 Edge AI 吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言