計算機視覺那些事兒(1):基本任務

本文主要介紹深度學習在計算機視覺領域(Computer vision)基本任務中的應用,包括分類、檢測、分割(語義與實體)。

目錄

引言

分類(Classification)

目標檢測(Object Detection)

Two-stage算法

One-stage算法

語義分割(Semantic Segmentation)

實體分割(Instance Segmentation)


引言

大約在5億年以前,處於寒武紀的地球上的生物開始進化出了眼睛;從此,地球進入了生物大爆炸時代。有學者認爲,這是因爲眼睛的出現,地球上的生物爲了躲避天敵的捕獵,因此必須不斷進化。

自從人工智能一詞首次在1956年提出以後,就有學者開始研究計算機視覺。他們希望計算機能夠像人類一樣,通過傳感器(那時主要指照相機)來描述所看到的信息。如果把計算機比作人的大腦的話,那麼計算機視覺就是計算機的眼睛,計算機通過計算機視覺來感知世界


分類(Classification

分類就是給定一張圖片,判斷圖片所屬類別,這裏主要指圖片中的目標所屬類別。作爲計算機視覺界的奧林匹克ImageNet包含着超過140萬張圖片,其所含目標爲1000種。


圖片分類經典網絡

在描述神經網絡時,通常用conv代表卷積層bn代表批歸一層pool代表池化層。最常見的網絡結構順序是:conv -> bn -> relu -> pool,其中卷積層用於提取特徵、池化層用於下采樣。隨着網絡深度的進行,圖像的空間大小將越來越小,而通道數會越來越大。這裏介紹圖片分類中的幾種經典網絡:

LeNet-5: 由Facebook人工智能研究院院長Yann LeCun所發明。 網絡基本架構如圖所示。當時,LeNet-5被成功用於ATM以對支票中的手寫數字進行識別。

AlexNet:ILSVRC 2012年的冠軍,由Hinton和其學生Alex Krizhevsky所發明。網絡基本如圖所示。AlexNet有着和LeNet-5相似網絡結構,但網絡深度更深、參數也更多。AlexNet的關鍵點是:(1). 使用了ReLU激活函數,使之有更好的梯度特性、訓練更快。(2). 使用了dropout。(3). 使用數據增強技術,使用GPU加速訓練。AlexNet的意義在於它以高出第二名10%的性能取得了當年ILSVRC競賽的冠軍,稱爲計算機視覺以及人工智能的里程碑。

VGG-16/VGG-19 :VGG網絡結構如圖所示。VGG網絡的關鍵點是:(1). 結構簡單,只有3×3卷積和2×2池化兩種網絡,並且重複堆疊相同的模塊組合。卷積層不改變空間大小,每經過一次池化層,空間大小減半。(2). 參數量大,而且大部分的參數集中在全連接層中。(3). 合適的網絡初始化和使用批量歸一層

GoogLeNet:GoogLeNet試圖回答在設計網絡時究竟應該選多大尺寸的卷積、或者應該選多大的池化層。其提出了Inception模塊,網絡結構如圖所示。GoogLeNet的關鍵點是:(1). 多分支分別處理,並級聯結果。(2). 爲了降低計算量,用了1×1卷積降維。GoogLeNet使用了全局平均池化替代全連接層,使網絡參數大幅減少。

ResNet:ILSVRC 2015年的冠軍。ResNet旨在解決網絡加深後訓練難度增大的現象。其提出了residual模塊,包含兩個3×3卷積和一個跳躍連接(左圖)。跳躍連接可以有效緩解反向傳播時由於深度過深導致的梯度消失現象,這使得網絡加深之後性能不會變差。跳躍連接是深度學習又一重要思想。ResNet的關鍵點是:(1). 使用跳躍連接,使訓練深層網絡更容易,並且重複堆疊相同的模塊組合。(2). ResNet大量使用了批量歸一層。(3). 對於很深的網絡(超過50層),ResNet使用了更高效的瓶頸(bottleneck)結構(右圖)。ResNet在ImageNet上取得了超過人類的準確率。


目標檢測(Object Detection)

識別出目標所屬類別後,如何獲取目標在圖片中的位置信息呢?這就需要進行目標檢測了。目前目標檢測算法主要分爲兩類:one-stage算法和two-stage算法,其區別是two-stage算法是先生成候選區域,然後再進一步選擇目標位置。總的來說,two-stage算法精度更高,但速度較慢,而one-stage算法精度相對較低,但速度比two-stage快。

Two-stage算法

RCNN:網絡如圖所示首先生成2k個候選區域,候選區域生成算法通常基於圖像的顏色、紋理、面積、位置等合併相似的像素,最終得到一系列的候選矩陣區域。相比於用滑動窗把圖像所有區域都滑動一遍,基於候選區域的方法十分高效。另一方面,這些候選區域生成算法的查準率(precision)一般,但查全率(recall)通常比較高,這使得我們不容易遺漏圖像中的目標。

之後,對每個候選區域進行全連接網絡連接,進行目標定位,即兩分支(分類+迴歸)輸出。其中,我們仍然需要回歸分支的原因是,候選區域只是對包含目標區域的一個粗略的估計,我們需要有監督地利用迴歸分支得到更精確的包圍盒預測結果。R-CNN的重要性在於當時目標檢測已接近瓶頸期,而R-CNN利於在ImageNet預訓練模型微調的方法一舉將VOC上mAP由35.1%提升至53.7%,確定了深度學習下目標檢測的基本思路。

Fast R-CNN:R-CNN的弊端是R-CNN的運行效率不高,預測一張圖像需要47秒。Fast R-CNN同樣基於候選區域進行目標檢測,網絡結構如圖所示,但受SPPNet啓發,在Fast R-CNN中,不同候選區域的卷積特徵提取部分是共享的。也就是說,我們先用卷積網絡進行圖片的特徵提取,並提取conv5卷積特徵。之後,基於在原始圖像上運行候選區域生成算法的結果在卷積特徵上進行採樣,這一步稱爲興趣區域池化。最後,對每個候選區域,進行目標定位,即兩分支(分類+迴歸)輸出。

興趣區域池化(region of interest pooling, RoI pooling) 興趣區域池化旨在由任意大小的候選區域對應的局部卷積特徵提取得到固定大小的特徵,這是因爲下一步的兩分支網絡由於有全連接層,需要其輸入大小固定。其做法是,先將候選區域投影到卷積特徵上,再把對應的卷積特徵區域空間上劃分成固定數目的網格(數目根據下一步網絡希望的輸入大小確定,例如VGGNet需要7×7的網格),最後在每個小的網格區域內進行最大池化,以得到固定大小的匯合池化。和經典最大池化一致,每個通道的興趣區域池化是獨立的。

Faster R-CNN:網絡結構如圖所示,Faster R-CNN而利用候選區域網絡從conv5特徵中產生候選區域,並且將候選區域網絡集成到整個網絡中端到端訓練。

候選區域網絡(region proposal networks, RPN) 在卷積特徵上的通過兩層卷積(3×3和1×1卷積),輸出兩個分支。其中,一個分支用於判斷每個錨盒是否包含了目標,另一個分支對每個錨盒輸出候選區域的4個座標。候選區域網絡實際上延續了基於滑動窗進行目標定位的思路,不同之處在於候選區域網絡在卷積特徵而不是在原圖上進行滑動。由於卷積特徵的空間大小很小而感受野很大,即使使用3×3的滑動窗,也能對應於很大的原圖區域。Faster R-CNN實際使用了3組大小(128×128、256×256、512×512)、3組長寬比(1:1、1:2、2:1),共計9個錨盒,這裏錨盒的大小已經超過conv5特徵感受野的大小。對一張1000×600的圖像,可以得到20k個錨盒。

爲什麼要使用錨盒(anchor box) 錨盒是預先定義形狀和大小的包圍盒。使用錨盒的原因包括:

  • 圖像中的候選區域大小和長寬比不同,直接回歸比對錨盒座標修正訓練起來更困難。
  • conv5特徵感受野很大,很可能該感受野內包含了不止一個目標,使用多個錨盒可以同時對感受野內出現的多個目標進行預測。
  • 使用錨盒也可以認爲這是向神經網絡引入先驗知識的一種方式。我們可以根據數據中包圍盒通常出現的形狀和大小設定一組錨盒。錨盒之間是獨立的,不同的錨盒對應不同的目標。

基於候選區域的目標檢測算法通常需要兩步:第一步是從圖像中提取深度特徵,第二步是對每個候選區域進行定位(包括分類和迴歸)。其中,第一步是圖像級別計算,而第二步是區域級別計算。R-CNN, Fast R-CNN, Faster R-CNN, 這些算法的演進思路是逐漸提高網絡中圖像級別計算的比例,同時降低區域級別計算的比例。


One-stage算法

基於候選區域的方法由於有兩步操作,雖然檢測性能比較好,但速度較慢。基於直接回歸的方法不需要候選區域,直接輸出分類/迴歸結果。這類方法速度通常更快,可以滿足實時性使用。

YOLO :網絡結構如圖所示,將圖像劃分成7×7的網格,其中圖像中的真實目標被其劃分到目標中心所在的網格及其最接近的錨盒。對每個網格區域,網絡需要預測:每個錨盒包含目標的概率(不包含目標時應爲0,否則爲錨盒和真實包圍盒的IoU)、每個錨盒的4個座標、該網格的類別概率分佈。每個錨盒的類別概率分佈等於每個錨盒包含目標的概率乘以該網格的類別概率分佈。相比基於候選區域的方法,YOLO需要預測包含目標的概率的原因是,圖像中大部分的區域不包含目標,而訓練時只有目標存在時纔對座標和類別概率分佈進行更新。

YOLO的優點在於:

  • 基於候選區域的方法的感受野是圖像中的局部區域,而YOLO可以利用整張圖像的信息。
  • 有更好的泛化能力。

YOLO的侷限在於:

  • 不能很好處理網格中目標數超過預設固定值,或網格中有多個目標同時屬於一個錨盒的情況。
  • 對小目標的檢測能力不夠好。
  • 對不常見長寬比的包圍盒的檢測能力不強。
  • 計算損失時沒有考慮包圍盒大小。大的包圍盒中的小偏移和小的包圍盒中的小偏移應有不同的影響。

SSD :相比YOLO,SSD在卷積特徵後加了若干卷積層以減小特徵空間大小,並通過綜合多層卷積層的檢測結果以檢測不同大小的目標。此外,類似於Faster R-CNN的RPN,SSD使用3×3卷積取代了YOLO中的全連接層,以對不同大小和長寬比的錨盒來進行分類/迴歸。

非最大抑制(non-max suppression, NMS) :目標檢測可能會出現的一個問題是,模型會對同一目標做出多次預測,得到多個包圍盒。NMS旨在保留最接近真實包圍盒的那一個預測結果,而抑制其他的預測結果。NMS的做法是,首先,對每個類別,NMS先統計每個預測結果輸出的屬於該類別概率,並將預測結果按該概率由高至低排序。其次,NMS認爲對應概率很小的預測結果並沒有找到目標,所以將其抑制。然後,NMS在剩餘的預測結果中,找到對應概率最大的預測結果,將其輸出,並抑制和該包圍盒有很大重疊(如IoU大於0.3)的其他包圍盒。重複上一步,直到所有的預測結果均被處理。


語義分割(Semantic Segmentation)

語義分割是目標檢測更進階的任務,是像素識別,即需要識別圖片中的像素所屬目標。

基本思路 逐像素進行圖像分類。我們將整張圖像輸入網絡,使輸出的空間大小和輸入一致,通道數等於類別數,分別代表了各空間位置屬於各類別的概率,即可以逐像素地進行分類。

全卷積網絡+反捲積網絡 爲使得輸出具有三維結構,全卷積網絡中沒有全連接層,只有卷積層和匯合層。但是隨着卷積和匯合的進行,圖像通道數越來越大,而空間大小越來越小。要想使輸出和輸入有相同的空間大小,全卷積網絡需要使用反捲積和反匯合來增大空間大小。

反捲積(deconvolution)/轉置卷積(transpose convolution) 標準卷積的濾波器在輸入圖像中進行滑動,每次和輸入圖像局部區域點乘得到一個輸出,而反捲積的濾波器在輸出圖像中進行滑動,每個由一個輸入神經元乘以濾波器得到一個輸出局部區域。反捲積的前向過程和卷積的反向過程完成的是相同的數學運算。和標準卷積的濾波器一樣,反捲積的濾波器也是從數據中學到的。

反最大池化(max-unpooling) 通常全卷積網絡是對稱的結構,在最大池化時需要記下最大值所處局部區域位置,在對應反最大池化時將對應位置輸出置爲輸入,其餘位置補零。反最大池化可以彌補最大池化時丟失的空間信息。反最大池化的前向過程和最大池化的反向過程完成的是相同的數學運算。


實體分割(Instance Segmentation)

實體分割也是像素識別,且當圖片中有多個相同類別的目標後,網絡需要對同類別目標的像素進行劃分。

基本思路 目標檢測+語義分割。先用目標檢測方法將圖像中的不同實例框出,再用語義分割方法在不同包圍盒內進行逐像素標記。

Mask R-CNN 用FPN進行目標檢測,並通過添加額外分支進行語義分割(額外分割分支和原檢測分支不共享參數),即Mask R-CNN有三個輸出分支(分類、座標迴歸、和分割)。此外,Mask R-CNN的其他改進有:(1). 改進了RoI池化,通過雙線性差值使候選區域和卷積特徵的對齊不因量化而損失信息。(2). 在分割時,Mask R-CNN將判斷類別和輸出模板(mask)這兩個任務解耦合,用sigmoid配合對率(logistic)損失函數對每個類別的模板單獨處理,取得了比經典分割方法用softmax讓所有類別一起競爭更好的效果。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章