以類神經網路為主,關於深度學習的大量研究,由多倫多大學 Geoffery Hinton 的團隊,以深層的類神經網路 AlexNet 在 2012 年知名的影像競賽(ImageNet)中獲得突破後,才開啟。在這篇文章中,我們將會對電腦視覺中最熱門的物體辨識應用做一個入門介紹。但,在進入物體辨識,有必要先釐清關於影像的三個應用問題。
關於影像的三個難題
左至右:影像分類,影像分類和定位,物體偵測,物件分割。圖片來源:參考資料 [1]
根據影像不同層次的應用,電腦視覺的三個主要問題,分別為影像分類,物體定位和物體偵測。
影像分類問題(Image classification):解決該問題的機械學習模型,會對輸入影像內的主要物體為何種類別做預測。輸入影像可以只含有一個或多個物體,而輸出則為各類別的預測信度。若輸入影像包含多個物件,那麼影像分類問題,可以將問題變化為詢問某物體是否在輸入影像內。而該學習模型,只需要一個回答是或不是的二元分類器即可。
在物體影像分類中,最棘手的是該如何訓練一個能辨識屬於同一分類但多樣變化的物體。
但在影像分類中的另一應用,
人臉辨識,則需要解決同一個人在不同拍攝角度和條件,通常在訓練資料不足的情況下完成(
見人臉辨識一文)。
物體定位問題(object localization):解決該問題的機械學習模型,除了對輸入影像內的主要物體除了做分類外,更需要做定位,也就是輸出物體在影像的位置。
定位問題,比起影像分類,除了需要影像的分類標籤,更需要給定物體在影像中的正確位置,方能從事監督式學習。相較於,建構分類器所需的是離散的分佈,物體的位置則是連續的實數數值,所以現今多以迴歸的方式來做物體定位。
和影像分類問題相同,物體定位問題,輸入影像可以含有一個或多個物體。同時對多個物件作分類且定位,則屬於物體偵測問題。
物體偵測的應用相當廣泛,包括了產生影像註解(Image Captioning),電腦視覺的問答(Visual Q&A)和唇語解讀等等。這些應用仰賴物體偵測技術,對輸入影像做一到多個物體偵測,並在此物體偵測的架構上,建立一個語義層級的系統,來抑制信賴度不高的臆測,關聯物體間的關係,並產生符合人類語言模型的句子。
影像資料的前置處理
在人類眼中由連續光譜所構成的影像,在數位感光器上感光後,變成為離散的數值。而根據色彩空間定義的方式,一個數位化的影像,可以有一到多個頻道。最常在數位中使用的色彩空間,被稱為 RGB 色彩空間,該色彩空間會定義三個頻道,代表紅色,綠色和藍色三個光譜「註一」。
影像在經過程式讀取後則為一個三維的矩陣,其數值不是任意實數,而是在 0 到 255 間的非負整數。然而,在機械學習中,經常會使用正規化的手法,使輸入的訓練影像數值,能縮限於零到一之間的實數域,以浮點數運算的方式,求得高精度輸出。
最簡單的正規化方法,便是對整張影像除上最大可能值 255。若要顯示訓練結果影像時,再將訓練輸出映射到 0 - 255 的範圍。
下圖,就是影像經過上述前處理後的流程圖:
傳統物體辨識演算法
- 特徵萃取
- 物體定位
在深度學習大幅度應用在自動萃取影像特徵之前,傳統的影像特徵萃取方式仰賴專家以經驗,用手動設計的方式來做特徵萃取。在得到特徵後,搭配線性或非線性分類器來進行影像分類。而關於物體的定位,則可以對全影像做徹底搜尋(sliding window)和找出存在物體的可能區域(region proposal),並解決多重預測的問題。
特徵萃取
在物體偵測的問題上,特徵萃取的方法都基於一個簡單的觀察:該特徵須具備能將物體自背景分離,並對經過位移變形後的物體仍具有描述不變(invariance)的特性。前者屬於邊緣檢測(edge detection)和角落偵測(corner detection)的範疇,後者則需依賴應用濾鏡(filter)對整張影像進行卷積運算(convolution operation)以萃取局部特徵。
常見的濾鏡包括了作為邊緣檢測用的 Sobel 濾鏡和做影像平滑化,或使邊緣不明顯的高斯濾鏡。下圖上是,使用 Sobel filter 來計算影像方向差,並使邊緣尖銳化的示意圖。而下圖下,則是使用高斯濾鏡,對影像去除噪點,並使邊緣平滑。
在過去,從事影像的學者多半使用以下的方法,來萃取可作為物體偵測的特徵:
Histogram of Oriented Gradient (HOG)
Histogram of Oriented Gradient 或簡稱 HOG,該演算法包括以下的步驟:
- 利用濾鏡做卷積運算,並求得局部影像的影像方向差(Image gradient)
- 對每一個影像方向差計算角度(angle)和強度(magnitude)
- 製作以方向差角度作為屬性的影像方向差直方圖(強度視為加權計數)作為該區域的特徵向量。
發表 HOG 方法的文獻中,發現使用不具有正負的角度(也就是 0 - 180 度之間),對行人檢測的表現最佳,這也表示能夠成功應用到物體辨識的特徵,須具備移動和轉動不變(invariance)的特性。
Scale-invariant Feature Transform (SIFT)
另外一個重要的特徵萃取方法則稱為 SIFT,演算法的步驟如下:
- 使用多個尺寸(multi-scale)的圖片建立尺寸不變(scale-invariant)的影像特徵,並計算影像的二次方向差(Laplacian of Gaussian)
- 比較不同尺寸影像中相同位置,找尋局部極限值作為可能的物體關鍵點(keypoint)
- 對物體關鍵點及其周圍像素製作和 HOG 相似的以方向差度為主的直方圖,作為該物體關鍵點的特徵向量。
SIFT 的主要貢獻,在於使用多種尺寸(multi-scale)的影像,建立尺寸與影像空間的三維空間,有時被稱呼 image pyramid 的影像表示法,該方法有利於萃取尺寸不變的特徵。並對同一尺寸的影像,使用一系列不同模糊程度的高斯濾鏡,計算影像的二次方向差(Laplacian of Gaussian),更精準描述影像方向差(Image gradient)的變化趨勢。
物體定位
物體的定位可以有兩種表示法。一種是使用矩形的 bounding box,來描述物體的大小和位置,另一個則是多個在物體邊緣的像素點,目的在於準確的描述物體的形狀。
bounding box 的好處在於使用四個參數(bounding box 中心的 x 和 y 座標以及 box 的長和寬)便可描述物體的位置和大小。
另一種表示法,則是需要應用影像分割的方法,將物體的邊緣從背景分割出來。然而在完美的物體描述並不是主要應用時,可先將影像分割方式偵測出的區域,用 bounding box 表示後,再使用階層式的叢聚法,由下而上的方式將小區域聚集為單一個 bounding box。
這種依賴影像分割的方式來找出物體所在的區域,又稱為 region proposal 方法。
Sliding Window
對於測試影像,由於不知道物體在影像的何方,以及物體的大小,所以須仰賴 sliding window 演算法。該演算法會使用一到多個不同尺寸的矩形 window 掃描原圖,並依上述方法萃取出每一個 window 影像的特徵,餵入該物體辨識分類器,以判別取出該 window 的位置是否包含欲偵測的物體。
通常透過 sliding window 的方法會導致測試影像中的物體擁有多個 bounding box 預測,在此通常會使用 non-maximum suppresion 的方法來選取最佳的 bounding box 作為最後預測。
Region Proposal
Sliding window 的方式會產生過多的訓練影像,需要高效能的長時訓練,因此電腦視覺的研究者們提出另外一種基於影像分割的演算法來偵測影像中含有物體的區域。
在傳統影像處理方法中,多利用由 Felzenszwalb 和 Huttenlocher 在 2004 提出的 graph-based 的影像分割法,並找出像素相近的區域,與其他相異區域分割出來。
如前述,region proposal 需要透過叢聚演算法將分割得到的區域,依照彼此的相似程度,聚合成一個矩形區域,作為物體出現的潛在位置。 最常見的叢聚演算法,為 selective search 。該方法會以階層式的方式由下而上,從小的區域開始聚合成較大的區塊。完成聚合後,會萃取出此區域內的特徵,餵入該物體偵測分類器,做物體辨識。
我們可以從下圖看到影像分割以及經過 selective search 後的結果。
關於
bounding box,sliding window 和
region proposal 比較詳細的敘述,則可見
此文。
深度學習的物體偵測利器
Convolution neural network
在中文上多被翻譯為卷積類神經網路,而卷積網路的核心觀念便是源自於之前所提到的利用特別設計的濾鏡對整張影像做卷積運算元,以計算局部影像方向差的方式,對整張影像連續移動,來計算整張影像的影像方向差。
我們可以看到傳統方法中,影像專家們得嘗試一到多種不同的濾鏡來萃取影像不同的特徵,包括紋理和邊緣,而卷積類神經網路則是用類神經網路的方式,透過最佳化損失函數,找到符合應用的最佳濾鏡權重,而省除了透過人工方式進行錯誤與嘗試的部分。
然而,一個標準的卷積類神經網路不只包括卷積運算層,更包括了「池化」(pooling)層和一般類神經網路分類器都具有的架構,那就是堆疊一到多個全連接層(fully-connected layer)最後再加上一層 softmax layer 做預測機率計算。
在這裡,池化在傳統的影像處理,則具有應用高通(high pass)或低通(low pass)濾鏡的功能,也就是只讓符合閥值(threshold)的數值流到下一步驟,或網路的上層做處理。而池化運算元則利用局部的特徵分佈來計算閥值,可使用的方法包括選取局部特徵分布的最大值(max pooling) 或取局部特徵得的平均值(average pooling)。
平均池化的效果就如同高斯濾鏡,主要功能為平滑局部特徵,在物體辨識中的表現不佳,反而是最大池化的效果可以藉由保持局部特徵的最大值,而達到偵測旋轉不變的特徵。
卷積網路和卷積運算元的原理,則可先見
此篇的粗略介紹,而關於卷積網路的架構變化部分,則可以見
此篇。
Visualization network
在電腦視覺中,嘗試視覺化卷積類神經網路有助於了解特徵且診斷模型。關於視覺化卷積網路,一般而言,有三種做法:
之一,是對權重視覺化。透過對卷積網路的權重做視覺化,我們可以知道有多少權重是被高度激活,而有多少則是被抑制。這類的視覺化有助於診斷是否使用過多的神經元而導致過度擬合(overfitting)或檢視對權重做 regularization 的結果。
之二,是對激化層( activation layer )視覺化。在這個方法中又可分為以下方法:
- 視覺化單一輸入激化影像
- 視覺化單一激化神經元
視覺化單一輸入激化影像的方法,將測試影像以正向傳播的方式得到輸出後,再繪製激發程度。通常,在網路底端的卷積層會保留大量的像素級資料,而越靠近頂端分類器的卷積層則會保留測試影像中的物體獨有的特徵。
為了能得到輸入影像和權重學習關聯的資訊,Erhan et al 在 2009 提出以梯度上升的方法,針對多層感知器(Multi-layered Perceptron)架構,來找出哪一部分的輸入影像可最大化激化層的神經元,也就是視覺化單一激化神經元的方法。
在 2013 年則由
Zeiler & Fergus 則針對卷積網路,發表
deconvolution network 架構,重建原輸入影像,並映射單一激發神經元所在的抽象特徵值到像素層級的位置。
最後,則是視覺化分類層:
2013 年
Zeiler & Fergus 除了利用
deconvolution network 架構來重建影像,並提出使用擾動的方式
(perturbation-based)來建立測試影像對於分類結果的關係。該方法會對原輸入影像進行局部遮蓋,並量測遮蓋該區域會造成多少分類正確度的損失,並以此繪製 heatmap。
圖片來源:R. Selvaraju et al 發表 Grad-CAM 文獻
上圖第一行為原圖。從第二行開始,上列為視覺化可識別虎斑貓的特徵,而下列則為可識別拳師犬的特徵。可以看到第三,六行是使用 Grad-CAM 的方法(分別用 VGG 和 ResNet)將具有類別識別性的特徵重要度以 heatmap 表示。第二,四行則是使用 guided backpropagation 的方法。第五行則是用 perturbation-based 或遮蓋的方法來繪製特徵對識別不同類別的重要性。
類神經物體偵測方法總覽
在這裡我們介紹目前物體偵測研究中,以卷積網路為的主要架構,列舉三種與傳統方法相關的主要文獻。他們分別是:
- Sliding Window-based (OverFeat)
- Region-based (Faster R-CNN)
- Grid-based (YOLO)
Sliding Window-based (OverFeat)
由 Yann LeCun 的團隊所發表
OverFeat 物體辨識演算法,是第一個將影像辨識,物體定位和偵測三個功能整合在一起,使用卷積網路作為特徵萃取的類神經網路。同時,也是第一個應用回歸方法來預測
bouding box 的位置。
OverFeat 的特點可以簡述如下:
- 使用單一特徵萃取卷積網路
- 使用高效能的卷積網路計算方式解決 multi-scale 與 sliding window 產生大量訓練影像的問題
- 使用合併演算法,而不是非最大抑制(non-maximum suppression)的方式來選取最大信度的定位預測。
為達到使用一個單一網路完成三項任務,單一特徵萃取網路會先對分類任務進行訓練,再將上層的分類器以迴歸預測替換來做物體定位訓練。在預測時,則是同時將影像輸入分類器和迴歸預測,而產生分類預測機率和物體的預測位置和大小。
由於使用 sliding window 對卷積網路做訓練相當費時,所以該文獻的另一個貢獻則是對原影像不同掃描位置同時做平行運算,而比序列化輸入掃描結果更有效率。
最後,該團隊宣稱使用合併演算法因為考慮預測的一致性比起非最大抑制方法,更對影像分類的誤判(False positive)免疫。
Region-based (Faster R-CNN)
Faster R-CNN 在 2016 年由 S. Ren et al. 提出,主要是針對由 selective search 發展出的 region proposal 方法做改良。 2014 年由 Girshick et al. 率先發展 Region-based Convolutional Neural Network (R-CNN),也是第一個將卷積網路結合傳統 selective search 結果所建構出來的物體偵測類神經網路系統。
該文獻的第一作者在 2015 年則又對 R-CNN 高計算量的缺陷提出了改進的版本,被稱為 Fast R-CNN。在這個架構上使用單一卷積網路,在此網路上增加了 region pooling 來降低 selective search 所找到的 Region of Interests (RoIs)量。
而 Faster R-CNN 則是捨棄 Fast R-CNN 中須分開且較費時的 selective search 演算法,以一個 Region Proposal Network (RPN) 來代替。為了能偵測不同大小的物體,RPN 採用 sliding window 的方法,並合併 k 個不同長寬比的矩形 anchors,在同一個位置產生 k 個 RoI 預測。
上圖的 Mask R-CNN 是 Faster R-CNN 在 region pooling layer (RoI pooling)上做改進,其目的是要與 pixel-level instance segmentation 結果對齊。
Grid-based (YOLO)
以上兩種類型的方法都需要兩個階段的實現:包括了找出物體可能位置,並對該位置做物體辨識。Grid-based 的物體辨識演算法 YOLO,則捨棄以上方法,對影像中的每一個位置,都只評估一次,所以又被稱 single-shot 方法。
像 YOLO 這樣 single shot 的物體辨識演算法的目的,是希望在不大量犧牲正確度的情況下,達成即時的辨認的目的。為了達到快速辨認的主要目的, YOLO 不採用前述方法,使用類似簿記的方式,記錄哪一個位置出現了哪些欲偵測物體,並由該位置負責該物體的預測。
在實現上,YOLO 將原影像切割成 S x S 個不重複格狀區域影像,這裏 S 是由使用者決定的網格數。若有物體的中心落在某一網格中,則該網格負責預測該物體。
在
YOLO v1 中,每一個網格只預測一個物體,該網格的預測器對該物體輸出
B 個
bounding box 的預測。到了
YOLO v2 中,為了解決重疊的物體,而採取了如
Faster R-CNN 使用
k 個不同長寬比的
anchor boxes,每一個網格現在則要負責輸出
kxB 個
bounding box 的預測。而所需
anchor boxes 的數目和長寬比,則先對訓練資料集做
K-Means 叢集演算法
(clustering)找出。
關於
YOLO v2 的演算法細節,則可見
此篇的粗略介紹。
如何建立一個物體辨識系統
訓練資料的取得
在學術領域中可以分別找到以下的影像資料集,以及使用該影像資料集的競賽:
PASCAL VOC
PASCAL VOC (Visual Object Classification) 在 2005 - 2012,針對物體辨識偵測所舉辦的競賽所建置的資料庫。在這個資料集中,訓練和驗證影像集都已經分類並標注完畢。除了分類標籤,還有物體的
bounding box 座標,以及影像分割的點座標。該資料集的物體類別包括了人,動物,交通工具和室內物體。除了物體偵測,亦可提供人體各部位及姿勢辨識,適合小規模的物體偵測模型訓練。在下表中,
VOC 的資料數據取自於 2012 的競賽資料。
COCO
COCO 是
Common Object in COntext 的縮寫,是由微軟(Microsoft)主導所建立的影像資料庫。
COCO 主要目的在於提供物體偵測和影像分割的正確標註,並無單一物體的影像分類資料集。此外,該資料集包括具有封閉曲線描述的
物體( “thing”),如,人,車,動物等,和不具有封閉曲線,在影像中填充背景的
“stuff”,如,天空,草地和牆。兩者為不同的競賽類別,前者為常見的
物體偵測(detection task),後者則被稱為
stuff task。
COCO 在物體偵測競賽的評量上,分別針對物體大小和演算法(region proposal),設計十二種不同的度量(metric),我們在下小節《評量模型的方法》對物體偵測的模型度量有更詳細的敘述。下表中, COCO 的資料數據取自於 ECCV 2018 的物件偵測競賽資料。
ImageNet
ImageNet 為舉辦的
ImageNet Large Scale Visual Recognition Challenge (ILSVRC) 所使用的影像資料集,而
ILSVRC 則可以視為
PASCAL VOC 2010 的巨量級影像競賽,兩個比賽所用的評量標準相當類似。
在建立該資料庫時,以 WordNet 資料庫的同義網(SynNet)「註二」作為分類標籤。在 2013 年前,影像多擁有單一物件和分類,且多半是動物和自然景觀等相關,因此非常適合訓練影像分類器和定位的任務。2013 年後則加入了物體偵測的競賽項目。下表中,ImageNet 的資料則取自於 ILSVRC 2017 競賽。
Open Images
Open Images 「註三」則是由
Google 在 2016 年所發表的影像資料集,當時包含約九百萬筆影像連結。
Open Images 包括 6000 個類別,而類別總類據稱比 ImageNet 包含更多人類物品。
Google 用此資料集來訓練自家的
Inception v3 影像分類類神經網路。除了物體分類,偵測的標註外還可以作為物體關聯(以影像註解的方式做標註)的訓練集。關於影像註解,可見
此篇的簡短介紹
下表中,Open Images 的資料則取自於 ECCV 2018 Open Images v4。
*Open Images 另外包含約 ~5M 的影像層級的物件標籤,約~3M 為該影像的確包含該物體,和 ~2M 該影像不包含該物體。該分類可作為訓練影像二元分類器,來偵測某物體是否在影像內。
**COCO 物體偵測不包括 bounding box 的輸出。
評量模型的方法
在影像分類和物體偵測的競賽上,使用 Average Precision 和 Mean Aveage Precision (mAP) 作為評估模型的度量。
Precision (分類器的預測中,標註正確的比例)多用於在巨量資料中做搜尋,評量模型的精準度。可以射箭比喻,Precision 量測在射出的箭數中有多少箭是射中靶心。
Recall (在標註正確的資料中,被分類器預測成功的比例),評量模型的正確度。以流病篩檢為例,Recall 量測在多少個患有流行性疾病的病患,有多少人是被成功檢測出。
透過取分類器的多少個最高預測,如 Top k 預測,k 為任一非零正整數,我們可以繪製一個考慮排名的 Precision - Recall 曲線圖,並根據 recall 值的增加,計算出該曲線底下的面積。而此面積則稱為 Average Precision。
Average Precision 是評估單一物體類別的度量。多個物體類別的 top k 預測結果則被稱為 Mean Average Precision (mAP),所有的物體偵測競賽都採此度量。
Average Recall 也是評估單一物體類別的度量。是以限制 k 值,以最大 recall 來衡量則多用於評量 region proposal 的方法,也在 COCO 中使用。
此外,物體定位準確率多計算預測 bounding box 和正確 bounding box 涵蓋面積率,該面積率稱為 Intersection of Union (IoU)。給定一個閥值,若 IoU 不小於 該閥值,則視為預測器回傳一個正確的預測,反之則為錯誤,用此方法來取代 top k 預測。
PASCAL VOC 使用 0.5 的閥值,被稱為 mAP@0.5。而 COCO 另外使用較為嚴格的標準,mAP@0.75。為了避免過於寬鬆的 IoU 閥值,使大型物體擁有多 bounding box ,但低面積涵蓋率,COCO 另外平均多個 IoU 閥值(在 0.5 到 0.95 之間,每 0.05 步距取值)計算出 mAP 的結果。
現行網路架構搜尋:
由於 Neural Architecture Search 的成功,所以目前卷積網路的架構和參數調整多仰賴與 reinforcement learning 結合的搜尋方法來達成。礙於篇幅,往後再針對 AutoML 這個主題做深入寫作。
此篇則為 2019 鐵人賽的延伸導讀文,2019 鐵人賽的完整目錄
見此。
註釋:
[1] 色彩空間:大致而言,數位設備成像的色彩空間包括了
RGB 和
HSV。
HSV (Hue, Saturation and Value)相較於
RGB 更能描繪影像中更細微的差異,因而很適合應用於物體追蹤或辨識。除了彩色的色彩空間,另外還有灰階空間,灰階影像只有一個頻道,描述從白到黑,單色調的色階。著名的開源影像處理軟體
OpenCV 提供不同色彩空間轉換函示。
[2]
WordNet:是語詞資料庫,該團隊並建立了一個網路結構
SynNet ,不同語詞在該網路結構為節點,若兩不同語詞擁有相同的語義則會在該網路中擁有連結。
[3]
Open Images 2016 年的
release post,另外在 2018 年發表的
Open Images v4 release post 中則指出目前存有三億一千萬筆(~30.1M)已手工標注類別的影像,並涵蓋約兩萬多個類別(~19K),並
持續透過群眾來完成資料集的註解。
參考資料:
- Review of Deep Learning Algorithms for Object Detection (英):發表於 2018/5 ,涵蓋資料集和評量方法介紹, Region-based CNN 家族和 YOLO 系列。
- Object Detection for Dummies (英):有四個部分,Part 1 (發表於 2017/10) 介紹傳統方法包括 HOG,graph-based segmentation 和 selective search。 Part 2 (發表於 2017/12),介紹 CNN, DPM 和 OverFeat 。Part 3 (發表於 2017/12)介紹 Region-based CNN Family。Part 4 (發表於 2018/12)介紹 YOLO 系列。
- SIFT: Theory and Practice (英):詳細介紹 SIFT
- Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3(英):詳細介紹 YOLO 系列(包括 v1 - v3 和 YOLO 9000)
延伸閱讀:
- [魔法小報] 深度學習在電腦視覺(Computer Vision)的技術與應用中(中):屬於《英雄集結:深度學習的魔法使們》鐵人賽的其中一篇。