iT邦幫忙

2022 iThome 鐵人賽

DAY 17
4
AI & Data

OH~ AI 原來如此,互助就此開始!系列 第 17

Day 16. 深度學習模型 - CNN(二)

  • 分享至 

  • xImage
  •  

昨天介紹的模型都是用來做圖像分類(Image Classification),那自動駕駛車又用到了其他哪些圖像技術呢?先來感受一下坐在特斯拉的車子裏面會是什麼情況。


ーー影片出處:Tesla autopilot

影片開頭其實有一段開場白:這個人只是為了法律理由而坐在駕駛座,他啥事也沒做。
關於自駕車等級和法律規範會放在 AI×社會 篇章說明。

今天要介紹的就是動畫中使用的圖像技術:物體偵測

物體偵測(Object Detection)

不只做圖像上物體的分類還將物體的位置給標示出來。
有兩種做法:

  • 先做位置預測,再做分類
  • 同時做位置和類別的辨識

先做位置預測,再做分類

會使用一個矩形的邊界框(Bounding box)把物體的所在位置框起來,然後再用方框內的圖片做圖像分類。

代表性模型有:

  • R-CNN(Regional CNN)
    https://ithelp.ithome.com.tw/upload/images/20220918/20150622I75lp46aTS.jpg
    —— 出處:R-CNN 論文
    具體作法如下:
    1. 輸入圖像
    2. 尋找可能有物件的邊界框領域(Region Proposals)
      透過 Selective Search 演算法尋找可能有物件的邊界框,約有 2000 個。這個步驟要花比較多時間。
    3. 計算 CNN 特徵
      將每個邊界框圖像輸入給 CNN,透過轉移學習,使用了 AlexNet 的參數。
    4. 透過 SVM 做分類
      這邊不使用深度學習,而是使用 Day 8 介紹過的支持向量機做分類

R-CNN 預測時間約 40-50秒,物體檢測評價指標mAP,Mean average precision)在測試集(Pascal VOC 2012)上只有 53.3%。

  • Fast R-CNN
    https://ithelp.ithome.com.tw/upload/images/20220918/20150622ddj7LgYMVQ.jpg
    —— 出處:Fast R-CNN 論文
    Fast R-CNN 不是將每個邊界框圖像輸入給 CNN,而是直接將整個圖像輸入 CNN,減少了重複的運算。而邊界框則另外處理,透過 RoI(Region of Interest)池化經由最大池化的方法來減少所選區域的大小。
    有趣的是為了提高精準度改用 VGG 16,儘管 VGG 16 比 AlexNet 慢,但是最終比 R-CNN 在測試集上的速度快了 213倍!

Fast R-CNN 預測時間約 2 秒, mAP 有 65.7%。 而VGG 16 是 2015年 ILSVRC 亞軍的模型名稱。

  • Faster R-CNN
    https://ithelp.ithome.com.tw/upload/images/20220918/20150622gq1PjDS5ya.jpg
    —— 出處:Faster R-CNN 論文
    快還要更快!Fast R-CNN 已經變快很多,但是找出邊界框還是太慢,無法用在需要即時辨識的系統上。Faster R-CNN 把找邊界框的 Selective Search 換成更快的演算法 Region Proposal Network(RPN),並且可以使用 GPU 晶片做加速,又比 Fast R-CNN在預測上快了約10倍!

Faster R-CNN 預測時間約 0.2 秒, mAP 有 67%(使用3個資料集訓練則可以到75.9%)。

同時做位置和類別的辨識

自駕車需要即時辨識出物體位置避免碰撞,所以需要立即的辨識速度,因此產生犧牲了一些準確度但是速度快很多的方法。也就是同時做位置和類別的辨識。

代表性模型有:

  • YOLO(You Only Look Once)
    如果字面上你只看一眼這樣的快速,算是非常熱門的模型,目前已經發展到 YORO v7
    YORO v1 的構造非常的單純,下圖把 448×448 的圖片像素透過重複的 CONV-POOL 壓縮成 7×7 大小的網格。最重要的是最右邊的 7×7×30的部分,這30個數字是怎麼來的?
    https://ithelp.ithome.com.tw/upload/images/20220918/20150622tQDBJPF3JT.jpg
    —— YORO v1 架構,出處:YORO v1 論文
    https://ithelp.ithome.com.tw/upload/images/20220918/201506223YQ5zJovIS.jpg

    —— 實際分類的視覺化,出處:YORO v1 論文

    • 每個網格預測的物體:
      每個物體有5個數字,邊界框的座標位置(x,y)和大小(高度,寬度)。另外還有一個置信分數(confidence),表示物體是否在該網格的可能性。上圖中每個網格預測2個物體所以是 2×5 = 10 個數字。
    • 可分類的類別有20個,所以有20個數字代表每個類別的機率。加上剛剛的10個數字就是每個網格30個數字的原因。

    所以輸出的30個數字就是透過每個網格同時進行多個物體位置和類別概率的預測。

    YORO v1 根據條件可以比 Faster R-CNN快6倍,但是 mAP 略差於 Faster R-CNN。

除了 YORO 以外常見的還有 SSD(Single Shot Detectors)模型。

圖像分割(Segmentation)

另外有一種不透過邊界框而是使用圖片最小單位的像素(Pixel)做物體標示。
比如說原圖和物體偵測長這樣:

原圖 物體偵測
https://ithelp.ithome.com.tw/upload/images/20220919/20150622gf2c1h9jKy.jpg https://ithelp.ithome.com.tw/upload/images/20220919/20150622noAzE6YlKC.jpg

—— 出處:インスタンスセグメンテーション

  • 語意分割(Semantic segmentation)
    同一類的物體在整幅圖像中被歸為一組,無法分離獨立物體。
    https://ithelp.ithome.com.tw/upload/images/20220919/20150622rIDHH5X7ZK.jpg
    —— 出處:インスタンスセグメンテーション
  • 實例分割(Instance segmentation)
    物體偵測 + 分割。在檢測到物體的區域進行分割,因此可以區分每個物體。
    其實就是把邊界框換成像素來顯示物體。
    https://ithelp.ithome.com.tw/upload/images/20220919/2015062244F71R3u1S.jpg
    —— 出處:インスタンスセグメンテーション
  • 全景分割(Panoptic segmentation)
    全景分割 = 語意分割 + 實例分割。
    背景(天空,道路,草地)只作整體的語意分割,而前景則針對物件的個體(行人,車輛)做實例分割。
    https://ithelp.ithome.com.tw/upload/images/20220919/20150622ps2FWX80V0.jpg
    —— 出處:github-detectron2

FCN(Fully Convolutional Network)

用 CNN 怎麼做語意分割呢? FCN 就是一個典型的模型。

FCN 如同字面,沒有全連接層,所有層都是 CONV-POOL 的模型,將圖像濃縮到非常小的特徵地圖做像素分類後,再將非常小的特徵地圖作放大(Upsampling),所以經由放大後圖像會比較粗糙。

https://ithelp.ithome.com.tw/upload/images/20220919/201506221hlHhhD4UJ.jpg
—— 出處:FCN 論文

其他圖像分割的模型還有 SegNet,UNet,PSPNet,DeepLab等。

Mask R-CNN

而實例分割可以透過 Mask R-CNN 實現。基礎架構是透過 Faster R-CNN 進行物體偵測,再另外在邊界框的每個像素上預測是不是物體所在做一個實例分割。

https://ithelp.ithome.com.tw/upload/images/20221001/201506221XePtmR14f.jpg
—— 出處:Mask R-CNN 論文

人體姿勢評估(Human Pose Estimation)

可以顯示人體骨架和關節的模型,活用於運動方面如棒球員的打擊姿勢等。
有一個公開的 Library:Open Pose 可以使用,主要是採用 Parts Affinity Fields 方法來推測關節位置。並透過 GPU 晶片可以即時對影像中複數的人作關節描繪。


—— 出處:Github - openpose

CNN 的可解釋性

之前有介紹過 LIME 和 SHAP 等等用來解釋 AI 的工具,而針對 CNN 的可解釋性,2017年 Facebook 發表的 梯度權重-CAM (Grad-CAM,Gradient-weighted Class Activation Mapping), 可以將 CNN 的輸出依照權重,在圖片上用顏色強調分類的依據,這種強調手法叫 CAM(Class Activation Map)

https://ithelp.ithome.com.tw/upload/images/20221001/201506222Q6tEm15IM.jpg
ーー圖片出處:Visual explanations for CNNs with Grad-CAM

補充資料

立即複習

  1. R-CNN 是先把物件位置偵測出來再做分類,物件位置用什麼東西標示?
  2. Faster R-CNN 是把什麼演算法替換掉才得以更快?
  3. YORO 是屬於先位置偵測後分類還是屬於同時做位置和類別的辨識?
  4. 語意分割和實例分割哪個可以把兩個人分別標示出來?
  5. Mask R-CNN 是使用哪個模型先做物件偵測再做實例分割?

參考資料


上一篇
Day 15. 深度學習模型 - CNN(一)
下一篇
Day 17. 深度學習模型 - GAN
系列文
OH~ AI 原來如此,互助就此開始!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言