iT邦幫忙

2022 iThome 鐵人賽

DAY 14
2
AI & Data

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

【Day 14】Getting Started with AI on Jetson Nano (三): Image Regression 影像回歸

  • 分享至 

  • xImage
  •  

DLI Getting Started with AI on Jetson Nano 第三部分 Image Regression 影像回歸。大家應該有聽過 數值的迴歸分析,但影像回歸就比就少見了!影像回歸算是相當有趣 ,即便他可能實用性不算太好(喂) 。可以用來定位圖像上特徵的座標,後面在 Jetbot 專案上也有使用到,並且能讓我們再熟悉一下 CNN 神經網路。Let’s GO!

臉部特徵回歸 (source: Unsplash)
臉部特徵回歸 (source: Unsplash)

影像分類與影像回歸的差異

在前一篇影像分類中模型最終的輸出結果是 N 個類別的可能性,其可能性加總為1。而本次影像回歸的範例試圖找出人臉中鼻子、左眼、右眼的位置,因此各須要 X 與 Y 座標去標記,也因此神經網路的輸出要有六個數值,分別是三個特徵值的 X-Y 座標,加總並不會等於1。

而在模型設定基本上和影像分類大同小異,也是使用遷移學習並且調整後面全連接層的輸出,可以自由選用要選用哪個模型來使用。只不過誠如前段敘述,輸出的數值會由 n 個類別,改為 n 個特徵值乘2。

device = torch.device('cuda')
output_dim = 2 * len(dataset.categories)  # x, y coordinate for each category

# ALEXNET
# model = torchvision.models.alexnet(pretrained=True)
# model.classifier[-1] = torch.nn.Linear(4096, output_dim)

# SQUEEZENET 
# model = torchvision.models.squeezenet1_1(pretrained=True)
# model.classifier[1] = torch.nn.Conv2d(512, output_dim, kernel_size=1)
# model.num_classes = len(dataset.categories)

# RESNET 18
model = torchvision.models.resnet18(pretrained=True)
model.fc = torch.nn.Linear(512, output_dim)

# RESNET 34
# model = torchvision.models.resnet34(pretrained=True)
# model.fc = torch.nn.Linear(512, output_dim)

model = model.to(device)

此外在損失函數的計算也會有所不同,由於每個訓練資料都會標記特徵的 X-Y 座標,CNN 模型算出的 X-Y 座標和實際 X-Y 座標的差異,就是我們的誤差了。(如圖所示)

https://ithelp.ithome.com.tw/upload/images/20220925/20152064XTJqwFQBuf.png
損失函數計算 (source: NVIDIA Developer youtube channel)

資料收集

依序執行程式碼直到 “顯示互動式工具!” 段落,就會顯示互動式的 widget 可以進行操作。加入訓練資料的方式須選擇好資料集 dataset類別 category,然後在即時預覽的影像畫面中點選特徵位置,完成就會看到一個圓圈就是被選定的 X-Y 座標。 依序標記鼻子、左眼、右眼的位置,各標記 40~50 張。

https://ithelp.ithome.com.tw/upload/images/20220925/20152064j0m6w5UVLz.png

另外值得一提的是,不知道各位有沒有注意到,我們所表記的特徵座標這個 meta 資料,是如何儲存的呢?在這範例中使用了一個小 trick ,在儲存影像資料時,所儲存的檔案名稱的格式為 xxx_yyy_UUID.jpg。也就是直接把這 meta 放在檔名的前輟,之後再訓練模型時,只要再把這個前輟 X-Y 座標分離出來即可。這樣的方式可以省去額外的 meta file,並且在 meta 資料量小的情境相當好用,可以偷偷學起來!

https://ithelp.ithome.com.tw/upload/images/20220925/20152064K7klSJk6IV.png

模型訓練與評估

模型訓練次數 epochs 一樣可以先抓 5~10 次看看效果如何可以再行重複訓練,訓練完成的模型一樣可以儲存為 pytorch 的模型檔,並且可以使用 live 功能做即時的監看,看看模型算出來特徵座標是否滿意。若是效果不滿意,則須要回去調整資料集,也許是標記特徵的 X-Y 座標有誤差,或是資料量不夠,都有可能影響模型的輸出結果,這部分就留給各位去嘗試看看了!

https://ithelp.ithome.com.tw/upload/images/20220925/20152064cN8Q7wa0IB.png

小結

DLI - Getting Started with AI on Jetson Nano 到這篇就告一段落了,這兩個範例都是使用 pytorch,即使各位沒有相關經驗,但用到的呼叫都不至於太複雜,稍微閱讀一下應該都還可以理解。同時也預告一下,在 NVIDIA Jetson 家族中,範例多會以 pytorch 為主。最後希望各位可以透過這些簡單的範例體驗一下 Edge AI,並且完成課程後面的試題順利拿到電子證書!


上一篇
【Day 13】Getting Started with AI on Jetson Nano (二): Image Classification 影像分類
下一篇
【Day 15】Hello AI World (一):環境準備與安裝
系列文
就用 Jetson Nano 來實作 Edge AI 吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言