iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 23
1
AI & Data

Knock Knock! Deep Learning系列 第 23 篇

Day 22 / DL x CV / CV 與自駕車

  • 分享至 

  • xImage
  •  

自駕車在這幾年有非常火熱的發展。雖然自駕車從上個世紀就開始了,但這十年來因為 deep learning 的成功,也牽動了自駕車核心技術的發展。座標灣區的 career fair,走沒幾步就是一個自駕車的新創!

本篇會先簡單介紹自駕車龐大系統內部大致的架構,接著著重在兩個核心的 CV 技術的介紹 —— object detection 和 segmentation,這兩個技術也構成了很多其他 CV task 非常重要的一塊。

Self-Driving Car

前面介紹過一些 task 和應用,規模其實都不大,目標也很專一。但自駕車這東西是非常多要素組成的,即使縮小範圍到軟體系統,內容還是非常龐大。

在這些內容中,跟 deep learning 比較相關的 task 大致上包含:

Localization and mapping: 我在哪裡?

傳統方法中,比較常見是用 probabilistic model 去估算根據車子看到的東西 o 和控制動作 u,現在車子所在的狀態 x 和環境的 map m:https://chart.googleapis.com/chart?cht=tx&chl=P(m%2C%20x%20%7C%20o%2C%20u)。

用 deep learning 架構就比較沒這麼複雜了。最簡單可以想到 input 看到的 video,經過 CNN 擷取圖像特徵和 RNN 擷取時間關係後,output 現在所處的狀態。有興趣可以參考延伸閱讀 [1]。

Scene understanding: 其他東西在哪裡?

要知道眼前哪裡有車、有人、哪些部分是路可以走,就要做 object segmentation 和 detection,把眼前的景象區分成不同部分,且判斷哪些部分是什麼樣的 object。

scene segmentation
—— Scene segmentation。

有時候甚至需要分析聲音來判斷道路的質地、下雨狀況等等。

Movement planning: 從點到點之間,怎麼走比較好?

傳統方法例如從 map 判斷從 A 到 B 中間有哪些點可以走,連成一條路線後把曲折的線優化成順暢的路線等等。

用 deep learning 則可能會運用下一個子系列會談到的 reinforcement learning,在模擬環境中不斷嘗試各種動作並從錯誤中學習,學會在什麼情況下應該 output 怎麼樣的控制。

Driver state: 駕駛你狀況如何?

自駕車中確認駕駛的狀況也很重要。駕駛的狀況對全自動化的自駕車可能比較算輔助作用,但對需要人類輔助的自駕車系統,可以說是很重要的一環。而目前的自駕車離全自動化其實還滿遠的,大部分屬於人類輔助。

駕駛狀況有非常多可以觀察的方向,例如眼神的方向、疲憊狀態、駕駛的坐姿等等。這些也都可以用 deep learning model 來訓練分析。

非常粗淺的介紹完自駕車大概的要素之後,我們來更深入了解一下兩個不只在自駕車也在很多應用中很重要的 CV task —— object detection 和 segmentation。

Object Detection

Object detection 跟之前見過的 task 比較不一樣的是,他的 output 不只一個,也不只一種。

首先我們需要知道物體所在的位置,通常會用 bounding box 框住,所以會預測 bounding box 的座標。接著必須知道 object 屬於哪個種類,典型的 classification task。

multitask
—— 同時 output bounding box 位置和 classification 結果。[1]

但一張圖中會有很多 object,所以我們需要預測多筆 output。怎麼做呢?

第一種很陽春的做法是,把圖片切成一塊一塊 bounding box,每個丟進 model 做 classification。但這方法不太可行,因為整張圖實在太多大大小小的 bounding box 了。另一種好一點的做法是把 bounding box 分層,先把整張圖切成大一點的 bounding box 並預測有 object 的可能性,如果可能性高的再把 bounding box 切得更小,以此類推。

接下來要介紹的 R-CNN 和他的一些變形就是基於第二種方法的架構。

R-CNN

R-CNN (Regions with CNN features) 架構大致如下:

R-CNN
—— R-CNN 架構。[3]

首先對一張 image,R-CNN 用一些 region proposal 的方法擷取大概 2000 個 RoI (region of interest),每個 RoI 都經過 CNN 擷取特徵後,用 SVM (Support Vector Machine,一個非 deep learning 的 ML classification model) 來進行分類。除此之外,CNN 也會 output correction 來調整 bounding box 的範圍。

最後每個 class 有重疊的 bounding box 的話,重疊範圍太多的則保留分數高的 bounding box。

Fast R-CNN

R-CNN 其實跟剛剛陽春的做法有差不多的問題,因為 2000 個 RoI 還是太多了,跑起來很慢。因此就有了改良的 Fast R-CNN:

Fast R-CNN
—— Fast R-CNN 架構。[4]

Fast R-CNN 把整張圖片丟進 CNN,在擷取完幾層的特徵後,再開始做 region proposal。接著繼續進行分類和 bounding box 調整。

概念跟 R-CNN 很像,但因為整張圖片一起進 CNN,可以減少很多重複的運算。也因此在 training time 有了 9 倍的進步,test time 縮減了 213 倍,同時也節省了很多 disk storage。

Faster R-CNN

但是 Fast R-CNN 還不夠快,因為他大部分的時間都花在了 region proposal。於是又有了改良的 Faster R-CNN:

Faster R-CNN
—— Faster R-CNN 架構。[5]

Faster R-CNN 重複利用了底層 CNN 的運算和 feature extraction,建了一個 Region Proposal Network (RPN) 來做 region proposal,而不像之前是用其他演算法來做。

如此一來在 test time 又縮減了 11.5 倍!

YOLO

回到自駕車系統。像這種 embedded system 對性能的要求是很高的,有沒有辦法讓 object detection 更快一點?

仔細觀察一下 Fast R-CNN 的話,會發現有兩個 stage:對整張 image 做 feature extraction 和 proposal,以及對每個 RoI 做 classification。那是不是能直接對整張 image 做所有事呢?

YOLO (You Only Look Once) 就是這麼一個 unified model。

YOLO
—— YOLO 架構。[5]

YOLO 先把整張 image 切成 S x S 的 grid,接著每個 grid cell 會預測 B 個它涵蓋物體的 bounding box 和 confidence score,以及 C 個 class probability。而一個物體的中心落在哪個 grid cell,他就要負責預測這個物體。

最後由這些 score 計算出每個 bounding box 的 class confidence score 來進行 detection。

YOLO 雖然整體預測準度差了一點,但速度快很多,在 real-time object detection 方面有最好的表現。此外因為他綜觀全局,所以在 background 的預測表現比 Faster R-CNN 更好,因此兩個 model 結合後也能得到更好的結果。

Semantic and Instance Segmentation

自駕車另一項重要的 CV task 就是 segmentation 啦。Segmentation 包含 semantic segmentation 和 instance segmentation,不同的地方在於 semantic segmentation 預測每個 pixel 屬於哪種類別,而不是哪種物體。

semantic vs instance segmentation
—— Semantic segmentation vs instance segmentation。[7]

Semantic Segmentation

一個簡單的 CNN 就能做出不錯的 semantic segmentation。例如下面的架構:

semantic segmentation
—— Semantic segmentation with CNN。[8]

Input 和 output 都是圖片,因此 CNN 架構大致是先 downsample 越縮越小擷取特徵,接著 upsample 將特徵轉換成另一種形式的 output。最後再對每個 pixel 做 classification 就行啦。

Instance Segmentation

Instance segmentation 其實跟 object detection 非常像,只是 object detection 是 output bounding box,而 instance segmentation 是 output 每個 instance 所在的 pixel,會更細。

Mask R-CNN 就是一個簡單建立在 R-CNN 之上的解法。

Mask R-CNN
—— Mask R-CNN 架構。[9]

前面部分是 Faster R-CNN,最後的地方加上 mask prediction,也就是對每個 bounding box 中的 pixel 預測是不是物體所在,形成一個 binary mask。就這麼簡單!

結語

自駕車近幾年的興起跟 deep learning 在 CV 快速發展息息相關。我們先介紹了自駕車幾個跟 deep learning 相關的任務,接著再細講了其中很重要的 object detection 和 segmentation 的一些基本 model。

CV 的範圍很廣,還有很多有趣的任務沒辦法一一介紹,但相信有了大致概念和一些範例之後,讀其他應用的相關 paper 會輕鬆許多。下一篇會做總結,還有討論一些 CV 發展的難題。

Checkpoint

  • 簡述一下今天介紹的 object detection 從 input 到 output 的大致過程。
  • 從 R-CNN 到 Fast R-CNN 到 Faster R-CNN,其實都是基於哪種概念來改進?
  • Mask R-CNN 是在 Faster R-CNN 之上多做了什麼?

參考資料

  1. CS231n Lecture Slides: Detection and Segmentation
  2. MIT 6.S094 Lecture Slides: Self-Driving Cars
  3. (Girshick et al., 2014) Rich feature hierarchies for accurate object detection and semantic segmentation
  4. (Girshick, 2015) Fast R-CNN
  5. (Ren et al., 2015) Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
  6. (Redmon et al., 2016) You Only Look Once: Unified, Real-Time Object Detection
  7. StackExchange: What is the difference between semantic segmentation, object detection and instance segmentation?
  8. (Long et al., 2015) Fully Convolutional Networks for Semantic Segmentation
  9. (He et al., 2017) Mask R-CNN

延伸閱讀

  1. (Wang et al., 2017) DeepVO: Towards End-to-End Visual Odometry with Deep Recurrent Convolutional Neural Networks
  2. (Zou et al., 2019) Object Detection in 20 Years: A Survey

上一篇
Day 21 / DL x CV / 小有成果的 Project Talk —— Cross-Lingual Font Style Transfer
下一篇
Day 23 / DL x CV / CV 總結與發展
系列文
Knock Knock! Deep Learning 共 31 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言