(二)計算機視覺四大基本任務(分類、定位、檢測、分割)
引言
深度學習目前已成為發展最快、最令人興奮的機器學習領域之一,許多卓有建樹的論文已經發表,而且已有很多高質量的開源深度學習框架可供使用。然而,論文通常非常簡明扼要並假設讀者已對深度學習有相當的理解,這使得初學者經常卡在一些概念的理解上,讀論文似懂非懂,十分吃力。另一方面,即使有了簡單易用的深度學習框架,如果對深度學習常見概念和基本思路不了解,面對現實任務時不知道如何設計、診斷、及調試網路,最終仍會束手無策。
本系列文章旨在直觀系統地梳理深度學習各領域常見概念與基本思想,使讀者對深度學習的重要概念與思想有一直觀理解,做到「知其然,又知其所以然」,從而降低後續理解論文及實際應用的難度。本系列文章力圖用簡練的語言加以描述,避免數學公式和繁雜細節。本文是該系列文章中的第二篇,旨在介紹深度學習在計算機視覺領域四大基本任務中的應用,包括分類(圖a)、定位、檢測(圖b)、語義分割(圖c)、和實例分割(圖d)。後續文章將關注深度學習在計算機視覺領域的其他任務的應用,以及自然語言處理和語音識別。本文部分內容首發於新智元。
計算機視覺(computer vision)簡介
計算機視覺旨在識別和理解圖像/視頻中的內容。其誕生於1966年MIT AI Group的"the summer vision project"。當時,人工智慧其他分支的研究已經有一些初步成果。由於人類可以很輕易地進行視覺認知,MIT的教授們希望通過一個暑期項目解決計算機視覺問題。當然,計算機視覺沒有被一個暑期內解決,但計算機視覺經過50餘年發展已成為一個十分活躍的研究領域。如今,互聯網上超過70%的數據是圖像/視頻,全世界的監控攝像頭數目已超過人口數,每天有超過八億小時的監控視頻數據生成。如此大的數據量亟待自動化的視覺理解與分析技術。
計算機視覺的難點在於語義鴻溝。這個現象不僅出現在計算機視覺領域,Moravec悖論發現,高級的推理只需要非常少的計算資源,而低級的對外界的感知卻需要極大的計算資源。要讓計算機如成人般地下棋是相對容易的,但是要讓電腦有如一歲小孩般的感知和行動能力卻是相當困難甚至是不可能的。
語義鴻溝(semantic gap) 人類可以輕鬆地從圖像中識別出目標,而計算機看到的圖像只是一組0到255之間的整數。
計算機視覺任務的其他困難 拍攝視角變化、目標佔據圖像的比例變化、光照變化、背景融合、目標形變、遮擋等。
計算機視覺的頂級會議和期刊 頂級會議有CVPR、ICCV、和ECCV,此外ICLR也有不少計算機視覺論文。頂級期刊有IJCV和TPAMI。由於計算機視覺領域發展十分迅速,不論身處學術界或產業界,通過閱讀頂級會議和期刊論文了解計算機視覺的最近研究成果都十分必要。
卷積神經網路(convolutional neural networks, CNN)
經典的多層感知機由一系列全連接層組成,卷積神經網路中除全連接層外,還有卷積層和匯合(pooling)層。
(1) 卷積層
為什麼要用卷積層 輸入圖像通常很維數很高,例如,1,000×1,000大小的彩色圖像對應於三百萬維特徵。因此,繼續沿用多層感知機中的全連接層會導致龐大的參數量。大參數量需要繁重的計算,而更重要的是,大參數量會有更高的過擬合風險。卷積是局部連接、共享參數版的全連接層。這兩個特性使參數量大大降低。卷積層中的權值通常被成為濾波器(filter)或卷積核(convolution kernel)。
局部連接 在全連接層中,每個輸出通過權值(weight)和所有輸入相連。而在視覺識別中,關鍵性的圖像特徵、邊緣、角點等只佔據了整張圖像的一小部分,圖像中相距很遠的兩個像素之間有相互影響的可能性很小。因此,在卷積層中,每個輸出神經元在通道方向保持全連接,而在空間方向上只和一小部分輸入神經元相連。
共享參數 如果一組權值可以在圖像中某個區域提取出有效的表示,那麼它們也能在圖像的另外區域中提取出有效的表示。也就是說,如果一個模式(pattern)出現在圖像中的某個區域,那麼它們也可以出現在圖像中的其他任何區域。因此,卷積層不同空間位置的神經元共享權值,用於發現圖像中不同空間位置的模式。共享參數是深度學習一個重要的思想,其在減少網路參數的同時仍然能保持很高的網路容量(capacity)。卷積層在空間方向共享參數,而循環神經網路(recurrent neural networks)在時間方向共享參數。
卷積層的作用 通過卷積,我們可以捕獲圖像的局部信息。通過多層卷積層堆疊,各層提取到特徵逐漸由邊緣、紋理、方向等低層級特徵過度到文字、車輪、人臉等高層級特徵。
卷積層中的卷積和數學教材中的卷積是什麼關係 基本沒有關係。卷積層中的卷積實質是輸入和權值的互相關(cross-correlation)函數,而不是數學教材中的卷積。
描述卷積的四個量 一個卷積層的配置由如下四個量確定。1. 濾波器個數。使用一個濾波器對輸入進行卷積會得到一個二維的特徵圖(feature map)。我們可以用時使用多個濾波器對輸入進行卷積,以得到多個特徵圖。2. 感受野(receptive field) F,即濾波器空間局部連接大小。3. 零填補(zero-padding) P。隨著卷積的進行,圖像大小將縮小,圖像邊緣的信息將逐漸丟失。因此,在卷積前,我們在圖像上下左右填補一些0,使得我們可以控制輸出特徵圖的大小。4. 步長(stride) S。濾波器在輸入每移動S個位置計算一個輸出神經元。
卷積輸入輸出的大小關係 假設輸入高和寬為H和W,輸出高和寬為H和W, 則H=(H-F+2P)/S+1, W=(W-F+2P)/S+1. 當S=1時,通過設定P=(F-1)/2, 可以保證輸入輸出空間大小相同。例如,3*3的卷積需要填補一個像素使得輸入輸出空間大小不變。
應該使用多大的濾波器 盡量使用小的濾波器,如3×3卷積。通過堆疊多層3×3卷積,可以取得與大濾波器相同的感受野,例如三層3×3卷積等效於一層7×7卷積的感受野。但使用小濾波器有以下兩點好處。1. 更少的參數量。假設通道數為D,三層3×3卷積的參數量為3×(D×D×3×3)=27D^2, 而一層7×7卷積的參數量為D×D×7×7=49D^2。2. 更多非線性。由於每層卷積層後都有非線性激活函數,三層3×3卷積一共經過三次非線性激活函數,而一層7×7卷積只經過一次。
1×1卷積 旨在對每個空間位置的D維向量做一個相同的線性變換。通常用於增加非線性,或降維,這相當於在通道數方向上進行了壓縮。1×1卷積是減少網路計算量和參數的重要方式。
全連接層的卷積層等效 由於全連接層和卷積層都是做點乘,這兩種操作可以相互等效。全連接層的卷積層等效只需要設定好卷積層的四個量:濾波器個數等於原全連接層輸出神經元個數、感受野等於輸入的空間大小、沒有零填補、步長為1。
為什麼要將全連接層等效為卷積層 全連接層只能處理固定大小的輸入,而卷積層可以處理任意大小輸入。假設訓練圖像大小是224×224,而當測試圖像大小是256×256。如果不進行全連接層的卷積層等效,我們需要從測試圖像中裁剪出多個224×224區域分別前饋網路。而進行卷積層等效後,我們只需要將256×256輸入前饋網路一次,即可達到多次前饋224×224區域的效果。
卷積結果的兩種視角 卷積結果是一個D×H×W的三維張量。其可以被認為是有D個通道,每個通道是一個二維的特徵圖,從輸入中捕獲了某種特定的特徵。也可以被認為是有H×W個空間位置,每個空間位置是一個D維的描述向量,描述了對應感受野的圖像局部區域的語義特徵。
卷積結果的分散式表示 卷積結果的各通道之間不是獨立的。卷積結果的各通道的神經元和語義概念之間是一個「多對多」的映射。即,每個語義概念由多個通道神經元一起表示,而每個神經元又同時參與到多個語義概念中去。並且,神經元響應是稀疏的,即大部分的神經元輸出為0。
卷積操作的實現 有如下幾種基本思路。1. 快速傅里葉變換(FFT)。通過變換到頻域,卷積運算將變為普通矩陣乘法。實際中,當濾波器尺寸大時效果好,而對於通常使用的1×1和3×3卷積,加速不明顯。2. im2col (image to column)。im2col將與每個輸出神經元相連的局部輸入區域展成一個列向量,並將所有得到的向量拼接成一個矩陣。這樣卷積運算可以用矩陣乘法實現。im2col的優點是可以利用矩陣乘法的高效實現,而弊端是會佔用很大存儲,因為輸入元素會在生成的矩陣中多次出現。此外,Strassen矩陣乘法和Winograd也常被使用。現有的計算庫如MKL和cuDNN,會根據濾波器大小選擇合適的演算法。
(2) 匯合層
匯合層 根據特徵圖上的局部統計信息進行下採樣,在保留有用信息的同時減少特徵圖的大小。和卷積層不同的是,匯合層不包含需要學習的參數。最大匯合(max-pooling)在一個局部區域選最大值作為輸出,而平均匯合(average pooling)計算一個局部區域的均值作為輸出。局部區域匯合中最大匯合使用更多,而全局平均匯合(global average pooling)是更常用的全局匯合方法。
匯合層的作用 匯合層主要有以下三點作用。1. 增加特徵平移不變性。匯合可以提高網路對微小位移的容忍能力。2. 減小特徵圖大小。匯合層對空間局部區域進行下採樣,使下一層需要的參數量和計算量減少,並降低過擬合風險。3. 最大匯合可以帶來非線性。這是目前最大匯合更常用的原因之一。近年來,有人使用步長為2的卷積層代替匯合層。而在生成式模型中,有研究發現,不使用匯合層會使網路更容易訓練。
圖像分類(image classification)
給定一張輸入圖像,圖像分類任務旨在判斷該圖像所屬類別。
(1) 圖像分類常用數據集
以下是幾種常用分類數據集,難度依次遞增。http://rodrigob.github.io/are_we_there_yet/build/列舉了各演算法在各數據集上的性能排名。
MNIST 60k訓練圖像、10k測試圖像、10個類別、圖像大小1×28×28、內容是0-9手寫數字。
CIFAR-10 50k訓練圖像、10k測試圖像、10個類別、圖像大小3×32×32。
CIFAR-100 50k訓練圖像、10k測試圖像、100個類別、圖像大小3×32×32。
ImageNet 1.2M訓練圖像、50k驗證圖像、1k個類別。2017年及之前,每年會舉行基於ImageNet數據集的ILSVRC競賽,這相當於計算機視覺界奧林匹克。
(2) 圖像分類經典網路結構
基本架構 我們用conv代表卷積層、bn代表批量歸一層、pool代表匯合層。最常見的網路結構順序是conv -> bn -> relu -> pool,其中卷積層用於提取特徵、匯合層用於減少空間大小。隨著網路深度的進行,圖像的空間大小將越來越小,而通道數會越來越大。
針對你的任務,如何設計網路? 當面對你的實際任務時,如果你的目標是解決該任務而不是發明新演算法,那麼不要試圖自己設計全新的網路結構,也不要試圖從零復現現有的網路結構。找已經公開的實現和預訓練模型進行微調。去掉最後一個全連接層和對應softmax,加上對應你任務的全連接層和softmax,再固定住前面的層,只訓練你加的部分。如果你的訓練數據比較多,那麼可以多微調幾層,甚至微調所有層。
LeNet-5 60k參數。網路基本架構為:conv1 (6) -> pool1 -> conv2 (16) -> pool2 -> fc3 (120) -> fc4 (84) -> fc5 (10) -> softmax。括弧中的數字代表通道數,網路名稱中有5表示它有5層conv/fc層。當時,LeNet-5被成功用於ATM以對支票中的手寫數字進行識別。LeNet取名源自其作者姓LeCun。
AlexNet 60M參數,ILSVRC 2012的冠軍網路。網路基本架構為:conv1 (96) -> pool1 -> conv2 (256) -> pool2 -> conv3 (384) -> conv4 (384) -> conv5 (256) -> pool5 -> fc6 (4096) -> fc7 (4096) -> fc8 (1000) -> softmax。AlexNet有著和LeNet-5相似網路結構,但更深、有更多參數。conv1使用11×11的濾波器、步長為4使空間大小迅速減小(227×227 -> 55×55)。AlexNet的關鍵點是:(1). 使用了ReLU激活函數,使之有更好的梯度特性、訓練更快。(2). 使用了隨機失活(dropout)。(3). 大量使用數據擴充技術。AlexNet的意義在於它以高出第二名10%的性能取得了當年ILSVRC競賽的冠軍,這使人們意識到卷機神經網路的優勢。此外,AlexNet也使人們意識到可以利用GPU加速卷積神經網路訓練。AlexNet取名源自其作者名Alex。
VGG-16/VGG-19 138M參數,ILSVRC 2014的亞軍網路。VGG-16的基本架構為:conv1^2 (64) -> pool1 -> conv2^2 (128) -> pool2 -> conv3^3 (256) -> pool3 -> conv4^3 (512) -> pool4 -> conv5^3 (512) -> pool5 -> fc6 (4096) -> fc7 (4096) -> fc8 (1000) -> softmax。 ^3代表重複3次。VGG網路的關鍵點是:(1). 結構簡單,只有3×3卷積和2×2匯合兩種配置,並且重複堆疊相同的模塊組合。卷積層不改變空間大小,每經過一次匯合層,空間大小減半。(2). 參數量大,而且大部分的參數集中在全連接層中。網路名稱中有16表示它有16層conv/fc層。(3). 合適的網路初始化和使用批量歸一(batch normalization)層對訓練深層網路很重要。VGG-19結構類似於VGG-16,有略好於VGG-16的性能,但VGG-19需要消耗更大的資源,因此實際中VGG-16使用得更多。由於VGG-16網路結構十分簡單,並且很適合遷移學習,因此至今VGG-16仍在廣泛使用。VGG-16和VGG-19取名源自作者所處研究組名(Visual Geometry Group)。
GoogLeNet 5M參數,ILSVRC 2014的冠軍網路。GoogLeNet試圖回答在設計網路時究竟應該選多大尺寸的卷積、或者應該選匯合層。其提出了Inception模塊,同時用1×1、3×3、5×5卷積和3×3匯合,並保留所有結果。網路基本架構為:conv1 (64) -> pool1 -> conv2^2 (64, 192) -> pool2 -> inc3 (256, 480) -> pool3 -> inc4^5 (512, 512, 512, 528, 832) -> pool4 -> inc5^2 (832, 1024) -> pool5 -> fc (1000)。GoogLeNet的關鍵點是:(1). 多分支分別處理,並級聯結果。(2). 為了降低計算量,用了1×1卷積降維。GoogLeNet使用了全局平均匯合替代全連接層,使網路參數大幅減少。GoogLeNet取名源自作者所處單位(Google),其中L大寫是為了向LeNet致敬,而Inception的名字來源於盜夢空間中的"we need to go deeper"梗。
Inception v3/v4 在GoogLeNet的基礎上進一步降低參數。其和GoogLeNet有相似的Inception模塊,但將7×7和5×5卷積分解成若干等效3×3卷積,並在網路中後部分把3×3卷積分解為1×3和3×1卷積。這使得在相似的網路參數下網路可以部署到42層。此外,Inception v3使用了批量歸一層。Inception v3是GoogLeNet計算量的2.5倍,而錯誤率較後者下降了3%。Inception v4在Inception模塊基礎上結合了residual模塊(見下文),進一步降低了0.4%的錯誤率。
ResNet ILSVRC 2015的冠軍網路。ResNet旨在解決網路加深後訓練難度增大的現象。其提出了residual模塊,包含兩個3×3卷積和一個短路連接(左圖)。短路連接可以有效緩解反向傳播時由於深度過深導致的梯度消失現象,這使得網路加深之後性能不會變差。短路連接是深度學習又一重要思想,除計算機視覺外,短路連接也被用到了機器翻譯、語音識別/合成領域。此外,具有短路連接的ResNet可以看作是許多不同深度而共享參數的網路的集成,網路數目隨層數指數增加。ResNet的關鍵點是:(1). 使用短路連接,使訓練深層網路更容易,並且重複堆疊相同的模塊組合。(2). ResNet大量使用了批量歸一層。(3). 對於很深的網路(超過50層),ResNet使用了更高效的瓶頸(bottleneck)結構(右圖)。ResNet在ImageNet上取得了超過人的準確率。
下圖對比了上述幾種網路結構。
preResNet ResNet的改進。preResNet整了residual模塊中各層的順序。相比經典residual模塊(a),(b)將BN共享會更加影響信息的短路傳播,使網路更難訓練、性能也更差;(c)直接將ReLU移到BN後會使該分支的輸出始終非負,使網路表示能力下降;(d)將ReLU提前解決了(e)的非負問題,但ReLU無法享受BN的效果;(e)將ReLU和BN都提前解決了(d)的問題。preResNet的短路連接(e)能更加直接的傳遞信息,進而取得了比ResNet更好的性能。
ResNeXt ResNet的另一改進。傳統的方法通常是靠加深或加寬網路來提升性能,但計算開銷也會隨之增加。ResNeXt旨在不改變模型複雜度的情況下提升性能。受精簡而高效的Inception模塊啟發,ResNeXt將ResNet中非短路那一分支變為多個分支。和Inception不同的是,每個分支的結構都相同。ResNeXt的關鍵點是:(1). 沿用ResNet的短路連接,並且重複堆疊相同的模塊組合。(2). 多分支分別處理。(3). 使用1×1卷積降低計算量。其綜合了ResNet和Inception的優點。此外,ResNeXt巧妙地利用分組卷積進行實現。ResNeXt發現,增加分支數是比加深或加寬更有效地提升網路性能的方式。ResNeXt的命名旨在說明這是下一代(next)的ResNet。
隨機深度 ResNet的改進。旨在緩解梯度消失和加速訓練。類似於隨機失活(dropout),其以一定概率隨機將residual模塊失活。失活的模塊直接由短路分支輸出,而不經過有參數的分支。在測試時,前饋經過全部模塊。隨機深度說明residual模塊是有信息冗餘的。
DenseNet 其目的也是避免梯度消失。和residual模塊不同,dense模塊中任意兩層之間均有短路連接。也就是說,每一層的輸入通過級聯(concatenation)包含了之前所有層的結果,即包含由低到高所有層次的特徵。和之前方法不同的是,DenseNet中卷積層的濾波器數很少。DenseNet只用ResNet一半的參數即可達到ResNet的性能。實現方面,作者在大會報告指出,直接將輸出級聯會佔用很大GPU存儲。後來,通過共享存儲,可以在相同的GPU存儲資源下訓練更深的DenseNet。但由於有些中間結果需要重複計算,該實現會增加訓練時間。
目標定位(object localization)
在圖像分類的基礎上,我們還想知道圖像中的目標具體在圖像的什麼位置,通常是以包圍盒的(bounding box)形式。
基本思路 多任務學習,網路帶有兩個輸出分支。一個分支用於做圖像分類,即全連接+softmax判斷目標類別,和單純圖像分類區別在於這裡還另外需要一個「背景」類。另一個分支用於判斷目標位置,即完成回歸任務輸出四個數字標記包圍盒位置(例如中心點橫縱坐標和包圍盒長寬),該分支輸出結果只有在分類分支判斷不為「背景」時才使用。
人體位姿定位/人臉定位 目標定位的思路也可以用於人體位姿定位或人臉定位。這兩者都需要我們對一系列的人體關節或人臉關鍵點進行回歸。
弱監督定位 由於目標定位是相對比較簡單的任務,近期的研究熱點是在只有標記信息的條件下進行目標定位。其基本思路是從卷積結果中找到一些較高響應的顯著性區域,認為這個區域對應圖像中的目標。
目標檢測(object detection)
在目標定位中,通常只有一個或固定數目的目標,而目標檢測更一般化,其圖像中出現的目標種類和數目都不定。因此,目標檢測是比目標定位更具挑戰性的任務。
(1) 目標檢測常用數據集
PASCAL VOC 包含20個類別。通常是用VOC07和VOC12的trainval並集作為訓練,用VOC07的測試集作為測試。
MS COCO COCO比VOC更困難。COCO包含80k訓練圖像、40k驗證圖像、和20k沒有公開標記的測試圖像(test-dev),80個類別,平均每張圖7.2個目標。通常是用80k訓練和35k驗證圖像的並集作為訓練,其餘5k圖像作為驗證,20k測試圖像用於線上測試。
mAP (mean average precision) 目標檢測中的常用評價指標,計算方法如下。當預測的包圍盒和真實包圍盒的交並比大於某一閾值(通常為0.5),則認為該預測正確。對每個類別,我們畫出它的查准率-查全率(precision-recall)曲線,平均準確率是曲線下的面積。之後再對所有類別的平均準確率求平均,即可得到mAP,其取值為[0, 100%]。
交並比(intersection over union, IoU) 演算法預測的包圍盒和真實包圍盒交集的面積除以這兩個包圍盒並集的面積,取值為[0, 1]。交並比度量了演算法預測的包圍盒和真實包圍盒的接近程度,交並比越大,兩個包圍盒的重疊程度越高。
(2) 基於候選區域的目標檢測演算法
基本思路 使用不同大小的窗口在圖像上滑動,在每個區域,對窗口內的區域進行目標定位。即,將每個窗口內的區域前饋網路,其分類分支用於判斷該區域的類別,回歸分支用於輸出包圍盒。基於滑動窗的目標檢測動機是,儘管原圖中可能包含多個目標,但滑動窗對應的圖像局部區域內通常只會有一個目標(或沒有)。因此,我們可以沿用目標定位的思路對窗口內區域逐個進行處理。但是,由於該方法要把圖像所有區域都滑動一遍,而且滑動窗大小不一,這會帶來很大的計算開銷。
R-CNN 先利用一些非深度學習的類別無關的無監督方法,在圖像中找到一些可能包含目標的候選區域。之後,對每個候選區域前饋網路,進行目標定位,即兩分支(分類+回歸)輸出。其中,我們仍然需要回歸分支的原因是,候選區域只是對包含目標區域的一個粗略的估計,我們需要有監督地利用回歸分支得到更精確的包圍盒預測結果。R-CNN的重要性在於當時目標檢測已接近瓶頸期,而R-CNN利於在ImageNet預訓練模型微調的方法一舉將VOC上mAP由35.1%提升至53.7%,確定了深度學習下目標檢測的基本思路。一個有趣之處是R-CNN論文開篇第一句只有兩個詞"Features matter." 這點明了深度學習方法的核心。
候選區域(region proposal) 候選區域生成演算法通常基於圖像的顏色、紋理、面積、位置等合併相似的像素,最終可以得到一系列的候選矩陣區域。這些演算法,如selective search或EdgeBoxes,通常只需要幾秒的CPU時間,而且,一個典型的候選區域數目是2k,相比於用滑動窗把圖像所有區域都滑動一遍,基於候選區域的方法十分高效。另一方面,這些候選區域生成演算法的查准率(precision)一般,但查全率(recall)通常比較高,這使得我們不容易遺漏圖像中的目標。
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 Fast R-CNN測試時每張圖像前饋網路只需0.2秒,但瓶頸在於提取候選區域需要2秒。Faster R-CNN不再使用現有的無監督候選區域生成演算法,而利用候選區域網路從conv5特徵中產生候選區域,並且將候選區域網路集成到整個網路中端到端訓練。Faster R-CNN的測試時間是0.2秒,接近實時。後來有研究發現,通過使用更少的候選區域,可以在性能損失不大的條件下進一步提速。
候選區域網路(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) 錨盒是預先定義形狀和大小的包圍盒。使用錨盒的原因包括:(1). 圖像中的候選區域大小和長寬比不同,直接回歸比對錨盒坐標修正訓練起來更困難。(2). conv5特徵感受野很大,很可能該感受野內包含了不止一個目標,使用多個錨盒可以同時對感受野內出現的多個目標進行預測。(3). 使用錨盒也可以認為這是向神經網路引入先驗知識的一種方式。我們可以根據數據中包圍盒通常出現的形狀和大小設定一組錨盒。錨盒之間是獨立的,不同的錨盒對應不同的目標,比如高瘦的錨盒對應於人,而矮胖的錨盒對應於車輛。
R-FCN Faster R-CNN在RoI pooling之後,需要對每個候選區域單獨進行兩分支預測。R-FCN旨在使幾乎所有的計算共享,以進一步加快速度。由於圖像分類任務不關心目標具體在圖像的位置,網路具有平移不變性。但目標檢測中由於要回歸出目標的位置,所以網路輸出應當受目標平移的影響。為了緩和這兩者的矛盾,R-FCN顯式地給予深度卷積特徵各通道以位置關係。在RoI匯合時,先將候選區域劃分成3×3的網格,之後將不同網格對應於候選卷積特徵的不同通道,最後每個網格分別進行平均匯合。R-FCN同樣採用了兩分支(分類+回歸)輸出。
小結 基於候選區域的目標檢測演算法通常需要兩步:第一步是從圖像中提取深度特徵,第二步是對每個候選區域進行定位(包括分類和回歸)。其中,第一步是圖像級別計算,一張圖像只需要前饋該部分網路一次,而第二步是區域級別計算,每個候選區域都分別需要前饋該部分網路一次。因此,第二步佔用了整體主要的計算開銷。R-CNN, Fast R-CNN, Faster R-CNN, R-FCN這些演算法的演進思路是逐漸提高網路中圖像級別計算的比例,同時降低區域級別計算的比例。R-CNN中幾乎所有的計算都是區域級別計算,而R-FCN中幾乎所有的計算都是圖像級別計算。
(3) 基於直接回歸的目標檢測演算法
基本思路 基於候選區域的方法由於有兩步操作,雖然檢測性能比較好,但速度上離實時仍有一些差距。基於直接回歸的方法不需要候選區域,直接輸出分類/回歸結果。這類方法由於圖像只需前饋網路一次,速度通常更快,可以達到實時。
YOLO 將圖像劃分成7×7的網格,其中圖像中的真實目標被其劃分到目標中心所在的網格及其最接近的錨盒。對每個網格區域,網路需要預測:每個錨盒包含目標的概率(不包含目標時應為0,否則為錨盒和真實包圍盒的IoU)、每個錨盒的4個坐標、該網格的類別概率分布。每個錨盒的類別概率分布等於每個錨盒包含目標的概率乘以該網格的類別概率分布。相比基於候選區域的方法,YOLO需要預測包含目標的概率的原因是,圖像中大部分的區域不包含目標,而訓練時只有目標存在時才對坐標和類別概率分布進行更新。YOLO的優點在於:(1). 基於候選區域的方法的感受野是圖像中的局部區域,而YOLO可以利用整張圖像的信息。(2). 有更好的泛化能力。YOLO的局限在於:(1). 不能很好處理網格中目標數超過預設固定值,或網格中有多個目標同時屬於一個錨盒的情況。(2). 對小目標的檢測能力不夠好。(3). 對不常見長寬比的包圍盒的檢測能力不強。(4). 計算損失時沒有考慮包圍盒大小。大的包圍盒中的小偏移和小的包圍盒中的小偏移應有不同的影響。
SSD 相比YOLO,SSD在卷積特徵後加了若干卷積層以減小特徵空間大小,並通過綜合多層卷積層的檢測結果以檢測不同大小的目標。此外,類似於Faster R-CNN的RPN,SSD使用3×3卷積取代了YOLO中的全連接層,以對不同大小和長寬比的錨盒來進行分類/回歸。SSD取得了比YOLO更快,接近Faster R-CNN的檢測性能。後來有研究發現,相比其他方法,SSD受基礎模型性能的影響相對較小。
FPN 之前的方法都是取高層卷積特徵。但由於高層特徵會損失一些細節信息,FPN融合多層特徵,以綜合高層、低解析度、強語義信息和低層、高解析度、弱語義信息來增強網路對小目標的處理能力。此外,和通常用多層融合的結果做預測的方法不同,FPN在不同層獨立進行預測。FPN既可以與基於候選區域的方法結合,也可以與基於直接回歸的方法結合。FPN在和Faster R-CNN結合後,在基本不增加原有模型計算量的情況下,大幅提高對小目標的檢測性能。
RetinaNet RetinaNet認為,基於直接回歸的方法性能通常不如基於候選區域方法的原因是,前者會面臨極端的類別不平衡現象。基於候選區域的方法可以通過候選區域過濾掉大部分的背景區域,但基於直接回歸的方法需要直接面對類別不平衡。因此,RetinaNet通過改進經典的交叉熵損失以降低對已經分的很好的樣例的損失值,提出了焦點(focal)損失函數,以使模型訓練時更加關注到困難的樣例上。RetinaNet取得了接近基於直接回歸方法的速度,和超過基於候選區域的方法的性能。
(4) 目標檢測常用技巧
非最大抑制(non-max suppression, NMS) 目標檢測可能會出現的一個問題是,模型會對同一目標做出多次預測,得到多個包圍盒。NMS旨在保留最接近真實包圍盒的那一個預測結果,而抑制其他的預測結果。NMS的做法是,首先,對每個類別,NMS先統計每個預測結果輸出的屬於該類別概率,並將預測結果按該概率由高至低排序。其次,NMS認為對應概率很小的預測結果並沒有找到目標,所以將其抑制。然後,NMS在剩餘的預測結果中,找到對應概率最大的預測結果,將其輸出,並抑制和該包圍盒有很大重疊(如IoU大於0.3)的其他包圍盒。重複上一步,直到所有的預測結果均被處理。
在線困難樣例挖掘(online hard example mining, OHEM) 目標檢測的另一個問題是類別不平衡,圖像中大部分的區域是不包含目標的,而只有小部分區域包含目標。此外,不同目標的檢測難度也有很大差異,絕大部分的目標很容易被檢測到,而有一小部分目標卻十分困難。OHEM和Boosting的思路類似,其根據損失值將所有候選區域進行排序,並選擇損失值最高的一部分候選區域進行優化,使網路更關注於圖像中更困難的目標。此外,為了避免選到相互重疊很大的候選區域,OHEM對候選區域根據損失值進行NMS。
在對數空間回歸 回歸相比分類優化難度大了很多。 損失對異常值比較敏感,由於有平方,異常值會有大的損失值,同時會有很大的梯度,使訓練時很容易發生梯度爆炸。而 損失的梯度不連續。在對數空間中,由於數值的動態範圍小了很多,回歸訓練起來也會容易很多。此外,也有人用平滑的 損失進行優化。預先將回歸目標規範化也會有助於訓練。
語義分割(semantic segmentation)
語義分割是目標檢測更進階的任務,目標檢測只需要框出每個目標的包圍盒,語義分割需要進一步判斷圖像中哪些像素屬於哪個目標。
(1) 語義分割常用數據集
PASCAL VOC 2012 1.5k訓練圖像,1.5k驗證圖像,20個類別(包含背景)。
MS COCO COCO比VOC更困難。有83k訓練圖像,41k驗證圖像,80k測試圖像,80個類別。
(2) 語義分割基本思路
基本思路 逐像素進行圖像分類。我們將整張圖像輸入網路,使輸出的空間大小和輸入一致,通道數等於類別數,分別代表了各空間位置屬於各類別的概率,即可以逐像素地進行分類。
全卷積網路+反卷積網路 為使得輸出具有三維結構,全卷積網路中沒有全連接層,只有卷積層和匯合層。但是隨著卷積和匯合的進行,圖像通道數越來越大,而空間大小越來越小。要想使輸出和輸入有相同的空間大小,全卷積網路需要使用反卷積和反匯合來增大空間大小。
反卷積(deconvolution)/轉置卷積(transpose convolution) 標準卷積的濾波器在輸入圖像中進行滑動,每次和輸入圖像局部區域點乘得到一個輸出,而反卷積的濾波器在輸出圖像中進行滑動,每個由一個輸入神經元乘以濾波器得到一個輸出局部區域。反卷積的前向過程和卷積的反向過程完成的是相同的數學運算。和標準卷積的濾波器一樣,反卷積的濾波器也是從數據中學到的。
反最大匯合(max-unpooling) 通常全卷積網路是對稱的結構,在最大匯合時需要記下最大值所處局部區域位置,在對應反最大匯合時將對應位置輸出置為輸入,其餘位置補零。反最大匯合可以彌補最大匯合時丟失的空間信息。反最大匯合的前向過程和最大匯合的反向過程完成的是相同的數學運算。
(3) 語義分割常用技巧
擴張卷積(dilated convolution) 經常用於分割任務以增大有效感受野的一個技巧。標準卷積操作中每個輸出神經元對應的輸入局部區域是連續的,而擴張卷積對應的輸入局部區域在空間位置上不連續。擴張卷積保持卷積參數量不變,但有更大的有效感受野。
條件隨機場(conditional random field, CRF) 條件隨機場是一種概率圖模型,常被用於微修全卷積網路的輸出結果,使細節信息更好。其動機是距離相近的像素、或像素值相近的像素更可能屬於相同的類別。此外,有研究工作用循環神經網路(recurrent neural networks)近似條件隨機場。條件隨機場的另一弊端是會考慮兩兩像素之間的關係,這使其運行效率不高。
利用低層信息 綜合利用低層結果可以彌補隨著網路加深丟失的細節和邊緣信息。
實例分割(instance segmentation)
語義分割不區分屬於相同類別的不同實例。例如,當圖像中有多隻貓時,語義分割會將兩隻貓整體的所有像素預測為「貓」這個類別。與此不同的是,實例分割需要區分出哪些像素屬於第一隻貓、哪些像素屬於第二隻貓。
基本思路 目標檢測+語義分割。先用目標檢測方法將圖像中的不同實例框出,再用語義分割方法在不同包圍盒內進行逐像素標記。
Mask R-CNN 用FPN進行目標檢測,並通過添加額外分支進行語義分割(額外分割分支和原檢測分支不共享參數),即Master R-CNN有三個輸出分支(分類、坐標回歸、和分割)。此外,Mask R-CNN的其他改進有:(1). 改進了RoI匯合,通過雙線性差值使候選區域和卷積特徵的對齊不因量化而損失信息。(2). 在分割時,Mask R-CNN將判斷類別和輸出模板(mask)這兩個任務解耦合,用sigmoid配合對率(logistic)損失函數對每個類別的模板單獨處理,取得了比經典分割方法用softmax讓所有類別一起競爭更好的效果。
參考文獻
- V. Badrinarayanan, et al. SegNet: A deep convolutional encoder-decoder architecture for image segmentation. TPAMI, 2017.
- Y. Bengio, et al. Representation learning: A review and new perspectives. TPAMI, 2013.
- L.-C. Chen, et al. SegNet: A deep convolutional encoder-decoder architecture for image segmentation. PAMI, 2017.
- S. Chetlur, et al. cuDNN: Efficient primitives for deep learning. arXiv: 1410.0759, 2014.
- J. Cong, and B. Xiao. Minimizing computation in convolutional neural networks. ICANN, 2014.
- J. Dai, et al. R-FCN: Object detection via region-based fully convolutional networks. NIPS, 2016.
- A. Garcia-Garcia, et al. A review on deep learning techniques applied to semantic segmentation. arXiv: 1704.06857, 2017.
- R. Girshick, et al. Rich feature hierarchies for accurate object detection and semantic segmentation. CVPR, 2014.
- R. Girshick. Fast R-CNN. ICCV, 2015.
- K. He, et al. Spatial pyramid pooling in deep convolutional networks for visual recognition. ECCV, 2014.
- K. He, et al. Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification. ICCV, 2015.
- K. He, et al. Deep residual learning for image recognition. CVPR, 2016.
- K. He, et al. Identity mappings in deep residual networks. ECCV, 2016.
- K. He, et al. Mask R-CNN. ICCV, 2017.
- G. Huang, et al. Deep networks with stochastic depth. ECCV, 2016.
- G. Huang, et al. Densely connected convolutional networks. CVPR, 2017.
- J. Huang, et al. Speed/Accuracy trade-offs for modern convolutional object detectors. CVPR, 2017.
- A. Krizhevsky, and G. Hinton. Learning multiple layers of features from tiny images. Technical Report, 2009.
- A. Krizhevsky, et al. ImageNet classification with deep convolutional neural networks. NIPS, 2012.
- A. Lavin, and S. Gray. Fast algorithms for convolutional neural networks. CVPR, 2016.
- Y. LeCun, et al. Gradient-based learning applied to document recognition. Proceedings of the IEEE, 1998.
- M. Lin, et al. Network in network. ICLR, 2014.
- T.-Y. Lin, et al. Microsoft COCO: Common objects in context. ECCV, 2014.
- T.-Y. Lin, et al. Feature pyramid networks for object detection. CVPR, 2017.
- T.-Y. Lin, et al. Focal loss for dense object detection. ICCV, 2017.
- W. Liu, et al. SSD: Single shot multibox detector. ECCV, 2016.
- J. Long, et al. Fully convolutional networks for semantic segmentation. CVPR, 2015.
- H. Noh, et al. Learning deconvolution network for semantic segmentation. ICCV, 2015.
- G. Pleiss, et al. Memory-efficient implementation of DenseNets. arXiv: 1707.06990, 2017.
- J. Redmon, et al. You only look once: Unified, real-time object detection. CVPR, 2016.
- S. Ren, et al. Faster R-CNN: Towards real-time object detection with region proposal networks. NIPS, 2015.
- S. Ren, et al. Object detection networks on convolutional feature maps. TPAMI, 2017.
- O. Russakovsky, et al. ImageNet large scale visual recognition challenge. IJCV, 2015.
- P. Sermanet, et al. OverFeat: Integrated recognition, localization, and detection using convolutional networks. ICLR, 2014.
- A. Shrivastava, et al. Training region-based object detectors with online hard example mining. CVPR, 2016.
- K. Simonyan, and A. Zisserman. Very deep convolutional networks for large-scale image recognition. ICLR, 2015.
- J. T. Springenberg, et al. Striving for simplicity: The all convolutional net. ICLR Workshop, 2015.
- V. Sze, et al. Efficient processing of deep neural networks: A tutorial and survey. Proceedings of IEEE, 2017.
- C. Szegedy, et al. Going deep with convolutions. CVPR, 2015.
- C. Szegedy, et al. Rethinking the Inception architecture for computer vision. CVPR, 2016.
- C. Szegedy, et al. Inception v4, Inception-ResNet and the impact of residual connections on learning. AAAI, 2017.
- A. Toshev, and C. Szegedy. DeepPose: Human pose estimation via deep neural networks. CVPR, 2014.
- A. Veit, et al. Residual networks behave like ensembles of relatively shallow networks. NIPS, 2016.
- S. Xie, et al. Aggregated residual transformations for deep neural networks. CVPR, 2017.
- F. Yu, and V. Koltun. Multi-scale context aggregation by dilated convolutions. ICLR, 2016.
- M. D. Zeiler, and R. Fergus. Visualizing and understanding convolutional networks. ECCV, 2014.
- S. Zheng, et al. Conditional random fields as recurrent neural networks. ICCV, 2015.
推薦閱讀:
※人臉驗證任務中的目標方程為什麼還要加入分類誤差?
※Facenet即triplet network模型訓練,loss不收斂的問題?
※為什麼說雲計算、大數據、機器學習、深度學習被並稱為當今計算機界四大俗?
※詞向量( Distributed Representation)工作原理是什麼?
※對於圖像識別和語音識別,其各自的深度學習框架的實現差異大嗎,假如理解了其中之一,轉向另一邊容易嗎?
TAG:深度学习DeepLearning | 计算机视觉 | 机器学习 |