1. 程式人生 > >深度學習:影象分類,定位檢測,語義分割,例項分割方法

深度學習:影象分類,定位檢測,語義分割,例項分割方法

計算機視覺領域四大基本任務中的應用,包括分類(圖a)、定位、檢測(圖b)、語義分割(圖c)、和例項分割(圖d)。

一、影象分類(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。

在對數空間迴歸

迴歸相比分類優化難度大了很多。L2ell_損失對異常值比較敏感,由於有平方,異常值會有大的損失值,同時會有很大的梯度,使訓練時很容易發生梯度爆炸。而L1el損失的梯度不連續。在對數空間中,由於數值的動態範圍小了很多,迴歸訓練起來也會容易很多。此外,也有人用平滑的L1el損失進行優化。預先將回歸目標規範化也會有助於訓練。

語義分割(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讓所有類別一起競爭更好的效果。