首頁>技術>

引言:深度學習目前已成為發展最快、最令人興奮的機器學習領域之一,許多卓有建樹的論文已經發表,而且已有很多高質量的開源深度學習框架可供使用。然而,論文通常非常簡明扼要並假設讀者已對深度學習有相當的理解,這使得初學者經常卡在一些概念的理解上,讀論文似懂非懂,十分吃力。另一方面,即使有了簡單易用的深度學習框架,如果對深度學習常見概念和基本思路不瞭解,面對現實任務時不知道如何設計、診斷、及除錯網路,最終仍會束手無策。

本系列文章旨在直觀系統地梳理深度學習各領域常見概念與基本思想,使讀者對深度學習的重要概念與思想有一直觀理解,做到“知其然,又知其所以然”,從而降低後續理解論文及實際應用的難度。本系列文章力圖用簡練的語言加以描述,避免數學公式和繁雜細節。本文是該系列文章中的第二篇,旨在介紹深度學習在計算機視覺領域四大基本任務中的應用,包括分類(圖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) 影象分類常用資料集

以下是幾種常用分類資料集,難度依次遞增。rodrigob.github.io/are_列舉了各演算法在各資料集上的效能排名。

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網路,因此先訓練淺層網路,並使用淺層網路對深層網路進行初始化。在BN出現之後,伴隨其他技術,後續提出的深層網路可以直接得以訓練。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。但由於有些中間結果需要重複計算,該實現會增加訓練時間。

SENet ILSVRC 2017的冠軍網路。SENet透過額外的分支(gap-fc-fc-sigm)來得到每個通道的[0, 1]權重,自適應地校正原各通道啟用值響應。以提升有用的通道響應並抑制對當前任務用處不大的通道響應。

目標定位(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) 經常用於分割任務以增大有效感受野的一個技巧。標準卷積操作中每個輸出神經元對應的輸入區域性區域是連續的,而擴張卷積對應的輸入區域性區域在空間位置上不連續。擴張卷積向標準卷積運算中引入了一個新的超引數擴張量(dilation),用於描述輸入區域性區域在空間位置上的間距。當擴張量為1時,擴張卷積退化為標準卷積。擴張卷積可以在引數量不變的情況下有效提高感受野。例如,當有多層3×3標準卷積堆疊時,第l 層卷積(l 從1開始)的輸出神經元的感受野為2l +1。與之相比,當有多層3×3擴張卷積堆疊,其中第l 層卷積的擴張量為2^{l-1}時,第l 層卷積的輸出神經元的感受野為2^{l +1}-1。感受野越大,神經元能利用的相關資訊越多。和經典計算機視覺手工特徵相比,大的感受野是深度學習方法能取得優異效能的重要原因之一。

條件隨機場(conditional random field, CRF) 條件隨機場是一種機率圖模型,常被用於微修全卷積網路的輸出結果,使細節資訊更好。其動機是距離相近的畫素、或畫素值相近的畫素更可能屬於相同的類別。此外,有研究工作用迴圈神經網路(recurrent neural networks)近似條件隨機場。條件隨機場的另一弊端是會考慮兩兩畫素之間的關係,這使其執行效率不高。

利用低層資訊 綜合利用低層結果可以彌補隨著網路加深丟失的細節和邊緣資訊,利用方式可以是加和(如FCN)或沿通道方向拼接(如U-net),後者效果通常會更好一些。

例項分割(instance segmentation)

語義分割不區分屬於相同類別的不同例項。例如,當影象中有多隻貓時,語義分割會將兩隻貓整體的所有畫素預測為“貓”這個類別。與此不同的是,例項分割需要區分出哪些畫素屬於第一隻貓、哪些畫素屬於第二隻貓。

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

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

致謝

感謝 @UnFound 、@Vincent 指出的一處筆誤。 @Kuiper 的修改建議。

參考文獻

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.J. Hu, et al. Squeeze-and-excitation networks. CVPR, 2018.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. Ronneberger, et al. U-net: Convolutional networks for biomedical image segmentation. MICCAI, 2015.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.

17
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 面試反客為主 TCP