【目標檢測/分割】FCN CVPR'15

Fully Convolutional Networks for Semantic Segmentation

Authors:

Jonathan LongEvan ShelhamerTrevor Darrell

故事:

1. 本文描述CNN可以爲定位任務提取特徵,引用的目標檢測論文爲R-CNN、SPP、OverFeat之後,Fast R-CNN。

2. 卷積網絡已被用於全圖分類、定位,下一步應爲從粗糙到細粒度的推斷任務。本文提出了FCN網絡,可將現有網絡改爲FCN結構,接受任意大小的輸入。相較於patchwise訓練,該方法不用預處理、後處理。CNN網絡處理分割任務有天然優勢,全局信息用於分類、局部信息用於定位,採用跳接結構混合深的粗糙語義信息和淺的細粒度底層信息。

相關工作:

1. 全卷積網絡。

    20世紀九十年代到AlexNet提出之前,ConvNet的工作基本都來自於LeCun。當時爲解決郵件問題,已經有將CNN網絡用於郵編框的定位,和任意尺寸輸入的卷積網絡。而全卷積運算的相關成果有,滑動窗口檢測、分割、圖像復原,全卷積訓練較少見,但有效被用於姿態估計。SPP去掉了CNN的非卷積部分,使之成爲一個特徵提取器,但不能端到端訓練(爲什麼不提R-CNN呢。)

2. Convnet用於密集預測。

    已有包括語義分割、electron microscopy邊緣檢測、圖像復原、深度估計等多個工作,但這些算法都需要集成其他元素。本文工作雖然也探討了patchwise訓練和shift-and-stitch密集輸出,但最終算法不需要這些元素。

    本文方法可以採用圖像分類方法作爲預訓練模型,然後將卷積層微調到分割任務。其他將分類網絡finetune到語義分割,一半採取R-CNN結構,對區域候選作篩選,不能端到端訓練。

全卷積網絡結構:

    FCN可處理任意大小的輸入,並輸出一個對應大小的輸出。損失函數定義爲每個空間元素的損失加和,也即對每個輸入的感受野的損失進行加和,並進行網絡更新。相當於將一張圖中的所有感受野及其單個輸出作爲一個mini-batch。並行效率好於傳統的塊操作(如滑動窗口法)。

    本文對感受野有一個很好的解釋,“與較高層的某位置相連的輸入層的某位置稱爲較高層這些位置的感受野”:

Locations in higher layers correspond to the locations in the image they are path-connected to, which are called their receptive fields.

1. 分類網絡改爲FCN

    全連接層可等價爲覆蓋全輸入區域的卷積操作,如此一來傳統的分類網絡即可改爲FCN。文中使用了和全連接網絡相同的通道數,和feature map等大的kernel做卷積操作。由於修改後的網絡輸出的是一張圖,很容易把FCN網絡用於密集輸出的任務。

    從“運行時間/輸出的大小”這一角度來看,運行效率得到了提高——值得借鑑的寫作手法。

全卷積網絡
全卷積網絡

2. 探討:shift-and-stich用改參數實現

    本文用改變filter和層stride的方式實現了Overfeat中提出的shift-and-stitch——輸入平移輸出交織——這一做法。這種做法中,每個單獨的prediction對應感受野的中心位置pixel。

    把strides步長s改爲1,如此便將原來的output上採樣爲s係數;然而對於相同的卷積核,這意味着該層卷積覈對應的感受野的改變,因此需要對filter做修改:

                    f'_{ij}=\left\{\begin{matrix} f_{i/s,j/s}} & \textup{if}\, \mathit{s}\, \textup{divides both}\, i\, \textup{and}\, j\\ 0 & \textup{otherwise} \end{matrix}\right.

    將filter上採樣s係數,並按上述公式賦值。

    減少下采樣係數會限制filter的感受野,並增加運算複雜度。shift-and-stitch雖然沒有限制filter的感受野,但限制了filter處理像原有網絡一樣的細粒度特徵。

3. 反捲積用於上採樣

    上採樣最直接的想法是插值,如雙線性插值等,在網絡中設計反捲積層可以實現端到端學習,從每pixel損失反向傳播。本文最終採用反捲積做密集預測,而非shift-and-stitch。

4. 探討:塊訓練用loss sampling實現

    塊操作和全聚氨基操作均可作分佈式計算,其相對運行效率分別取決於overlap和batch size。全圖卷積訓練和塊操作訓練在具體實現中相同,但全卷積比均一的塊採樣更高效。爲了實現對樣本不均衡和隨機採樣塊的操作,只需要對loss做相應的加權或隨機採樣即可。本文在實驗中嘗試了這種實現,但對效率和更好的收斂無益,最終沒有采用。

全卷積網絡用於分割:

    (1)將ILSVRC分類器改裝爲FCN,(2)增加網絡內上採樣和(3)逐點loss,用微調方式訓練分割。然後(4)建立一個跳躍結構,包含粗粒度的語義信息和局部、圖像紋理信息來優化預測結果。

1. 細節

    損失函數:逐像素多項式logistic損失(那是啥意思)

    評價指標:平均像素IoU

    mask out點:訓練時忽略這部分Loss

FCN的跳躍結構
FCN的跳躍結構

2. 跳接結構(融合分類和位置信息)

    將原來的輸出stride從32改到16——用16stride層進行預測;在pool4後增加1×1卷積層得到一個額外的分類預測,1×1卷積核採用0初始化,學習率調爲其他參數的1/100。(需要慢慢學習以免影響結果??)

    將該輸出進行2×上採樣,然後與卷積化的fc7層的2stride上採樣輸出進行加和融合(並未採用最大化融合因爲在梯度選擇時不容易學習)。該2×上採樣使用雙線性插值進行初始化,並在之後的過程中端到端學習並優化參數。將融合後的預測結果採用16-stride上採樣,該網絡結構爲FCN-16s。該跳接結構平均提升了3.0個IU點。

    重複堆疊跳接結構,實驗發現在FCN-8s時達到收益減少。

3. 探討:降低池化層的strides。

    降低池化層的strides後勢必要增大filter的大小用來和此前該filter的感受野相匹配。本文作者嘗試將pool5(VGG16最後一個池化層)的strides設爲1,則fc6的核尺寸需要改成14×14。此舉不只導致計算量增大,還難以學習。作者嘗試降低核的大小,但無法得到和此前相媲美的結果。一種解釋是,用ImageNet訓練的權重在高層級中很重要。

    之前介紹過的shift-and-stitch方法在計算量/性能提升比上不如層融合方法。

 

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