一文概覽2017年Facebook AI Research的計算機視覺研究進展

路雪發表於2018-03-19

特徵金字塔網路(FPN)

首先我們先來介紹著名的特徵金字塔網路 [1](發表在 CVPR 2017 上)。FPN 論文非常棒,要知道,構建一個可在多項任務、子主題和應用領域中使用的基線模型並不簡單。FPN 是通用特徵提取網路(如 ResNet、DenseNet)的擴充套件。你可以從喜歡的 DL 庫中選擇預訓練的 FPN 模型,然後像使用其他模型一樣使用它!

影像目標通常有多個尺度和大小。一般的資料集無法捕捉所有這些屬性,因此人們使用影像金字塔(影像的多種解析度降級),以方便 CNN 處理。但是這樣很慢。因此人們使用單個尺度預測,一些人可能從中間層獲取預測結果,它是在特徵空間中進行的。這很好理解,在幾個 ResNet 模組後放置一個反摺積層,獲取分割輸出(就分類而言,可能是 1x1 卷積和 GlobalPool)。現在大量此類架構在有輔助資訊和輔助損失的情況下使用。

回到主題,FPN 的作者發現一種有效改善上述方法的方式。他們不只使用側向連線,還使用自上而下的路徑。這非常有效!他們使用一個簡單的 MergeLayer(mode=『addition』)將二者結合起來。該想法的關鍵是底層特徵圖(初始卷積層)的語義不夠強,無法用於分類。而深層特徵圖有更強的語義。這裡還有一個優勢,即自上而下的路徑 FMaps(特徵圖),可以達到最深層網路同樣的效果。這是因為結合了側向連線和自上而下的連線。

一文概覽2017年Facebook AI Research的計算機視覺研究進展

細節

金字塔:同樣大小的所有特徵圖屬於同一個階段。最後一層的輸出是金字塔的 reference FMaps。如:ResNet,第 2、3、4、5 個模組的輸出。你可以根據記憶體和特定使用情況改變金字塔。

側向連線:1x1 卷積和自上而下的路徑都經過兩倍上取樣。上層特徵自上而下生成粗糙的特徵,而側向連線從自下而上的路徑新增更細粒度的細節。

那篇論文中介紹了一個簡單的 demo,展示了這個想法結合簡單的設計思路的效果。

一文概覽2017年Facebook AI Research的計算機視覺研究進展

如前所述,這是一個可以在多項任務中使用的基線模型,如目標檢測、分割、姿態估計、人臉檢測,以及所有應用領域。這篇論文問世不過寥寥數月,但引用量已經超過 100!這篇論文的題目是《FPNs for Object Detection》,因此作者繼續在 RPN(區域建議網路)和 Faster-RCNN 網路中使用 FPN 作為基線模型。所有關鍵細節這篇論文中都有講述,這裡我列出了一些要點。

實驗要點

  • 在 RPN 中使用 FPN:將單個尺度 FMap 替換成 FPN。他們在每一級都有單尺度 anchor(由於使用了 FPN,所以沒必要使用多尺度 anchor)。作者還展示了金字塔所有層級都共享類似的語義水平。

  • Faster RCNN:他們用類似影像金字塔輸出的方式處理這個金字塔。因此 RoI 使用以下公式被分配至特定的級別:

一文概覽2017年Facebook AI Research的計算機視覺研究進展

其中 w、h 代表寬度、高度。k 代表 RoI 被分配的級別。k_0 是 w,h=224,224 對映至的級別。

  • 在 COCO 資料集上獲取當前最優結果,沒有任何不必要的功能。

  • 他們對每個模組的功能進行了 ablation 研究,因此他們能夠從一開始就證明了自己的說法。

  • 他們還基於 DeepMask 和 SharpMask 論文展示瞭如何使用 FPN 進行分割建議生成(segmentation proposal generation)。

對實現細節、實驗設定等感興趣的同學應該認真閱讀這篇論文。

程式碼

  •  Official Caffe2 - https://github.com/facebookresearch/Detectron/tree/master/configs/12_2017_baselines

  • Caffe - https://github.com/unsky/FPN

  • PyTorch - https://github.com/kuangliu/pytorch-fpn (just the network)

  • MXNet - https://github.com/unsky/FPN-mxnet

  • Tensorflow - https://github.com/yangxue0827/FPN_Tensorflow

RetinaNet:在密集目標檢測中使用 Focal Loss

該架構由同一個團隊所開發,也是同一個一作。這篇論文 [2] 在 ICCV 2017 上發表。該論文中有兩個關鍵點:通用損失函式 Focal Loss(FL)和單階段的目標檢測器 RetinaNet。兩者的組合使其在 COCO 目標檢測任務中表現得非常好,並打敗了上述的 FPN 基準結果。

Focal Loss

該論文中的方法相當聰明和簡單。如果你熟悉加權損失的話,那麼該方法其實就是使用了巧妙的加權,讓訓練更加聚焦於分類難度高的樣本。公式如下所示,其含義是很明顯的。

一文概覽2017年Facebook AI Research的計算機視覺研究進展

γ是一個可改變的超引數。p_t 是分類器輸出的樣本機率。將 γ 設為大於 0 將減小分類結果較好的樣本的權重。α_t 是通常的加權損失函式中的類別權重。在論文中它被稱為 α-balanced 損失。需要注意,這個是分類損失,它將和 smooth L1 損失結合,用於 RetinaNet 的目標檢測任務。

RetinaNet

FAIR 竟然會發布單階段檢測器,這令人難以置信。直到目前,YOLOv2 和 SSD 仍在單階段場景中佔據主導地位。但作者指出,它們都沒有接近當前最佳的結果。而 RetinaNet 可以輕鬆地做到,僅使用了單階段,並且速度很快。他們稱其頂尖結果源於新型損失函式的應用,而不是簡單的網路(其後端為 FPN)。其中利用的思想是單階段檢測器將面臨很多背景和正類別不平衡的情況(不是正類別之間的不平衡)。作者稱加權損失函式僅僅是為了平衡,而 FL 是針對難度小/大的樣本,而兩者是可以結合的。

注意:

  • 兩階段檢測器無需擔心不平衡的情況,因為第一階段就移除了幾乎所有不平衡。

  • 兩部分:主幹網路(卷積特徵提取器,如 FPN)和兩個特定任務的子網路(分類器和邊界框迴歸器)。

  • 在選擇不同的元件設計時,(效能)沒有太多變化。

  • Anchor 或 AnchorBoxes 是 RPN 的相同 Anchor [5]。其中心圍繞滑動視窗,且與長寬比有關。大小和長寬比分別對應 32^2 到 51^2 和 {1:2, 1:1, 2:1}。

  • 在 FPN 的每一階段,我們都有 cls+bbox 子網路,給出 anchor 中所有位置的對應輸出。

程式碼

  •  Official Caffe2 - https://github.com/facebookresearch/Detectron/tree/master/configs/12_2017_baselines

  • PyTorch - https://github.com/kuangliu/pytorch-retinanet

  • Keras - https://github.com/fizyr/keras-retinanet

  • MXNet - https://github.com/unsky/RetinaNet

Mask R-CNN

Mask R-CNN [3] 幾乎是同一個團隊開發的,發表在 ICCV 2017 上,該模型用於例項分割。對於外行來說,這不過是不使用邊界框的目標檢測,任務是給出目標的準確分割掩碼。你可以說它只是一個簡單的想法,但是使之執行併成為當前最佳,為預訓練模型提供最快的實現,這可是驚人的工作!

TL;DR:如果你瞭解 Faster-RCNN,那麼 Mask R-CNN 很簡單,只需要新增一個用於分割的 head(分支)。因此基本上是 3 個分支,分別用於分類、邊界框迴歸和分割。

再次強調,其重點在於使用簡單、基礎的網路設計來展示該方法的效率。他們不需要什麼花哨的功能就實現了當前最佳。

我很喜歡這篇論文,它很簡單,但是看似簡單的東西有大量解釋。例如,多項式掩碼 vs 獨立掩碼的使用(softmax vs sigmoid)。此外,它並未假設大量先驗知識,也沒有要解釋一切。

如果你仔細檢視這篇論文,你可能會找到他們(基於現有設定)的新想法無法有效執行的原因。以下解釋基於你對 Faster RCNN 已經有了基礎瞭解:

  • Mask R-CNN 與 FasterRCNN 類似,兩階段,第一階段是 RPN。

  • 新增一個並行分支用於預測分割掩碼——FCN。

  • 損失是 L_cls、L_box、L_maskLcls、L_box、L_mask 的總和。

  • 用 ROIAlign 層替換 ROIPool。這不像 ROIPool 那樣將你的(x/spatial_scale)fraction 四捨五入成整數,而是透過雙線性內插法找出特定浮點值的畫素。

  • 例如:ROI 高度和寬度分別是 54、167。空間尺度基本上是影像大小/FMap 大小(H/h),在此語境中也叫作 stride。通常是 224/14 = 16 (H=224,h=14)。

  1. ROIPool: 54/16, 167/16 = 3,10

  2. ROIAlign: 54/16, 167/16 = 3.375, 10.4375

  3. 現在,我們使用雙線性內插法對其進行上取樣。

  4. 類似的邏輯適用於根據 ROIAlign 輸出形狀(如 7x7)將對應的區域分割成合適的子區域。

  5. 使用 Chainer folks 檢查 ROIPooling 的 Python 實現,並嘗試自己實現 ROIAlign。

  6. ROIAlign 程式碼可在不同庫中獲取,可檢視下面給出的程式碼 repo。

  7. 主幹網路是 ResNet-FPN。

我曾專門寫文章介紹過 Mask-RCNN,文章地址:https://coming.soon/。

程式碼

  •  Official Caffe2 - https://github.com/facebookresearch/Detectron/tree/master/configs/12_2017_baselines

  • Keras - https://github.com/matterport/Mask_RCNN/

  • PyTorch - https://github.com/soeaver/Pytorch_Mask_RCNN/

  • MXNet - https://github.com/TuSimple/mx-maskrcnn

學習分割 Every Thing

如題目《Learning to Segment Every Thing》所示,這篇論文是關於分割的,具體來說,是例項分割問題。計算機視覺中的標準分割資料集對於現實應用而言規模太小。即使是 2018 年最流行、最豐富的 COCO 資料集 [7] 也僅有 80 個目標類別。這根本無法達到實用的要求。相比之下,目標識別和目標檢測資料集如 OpenImages [8] 就有將近 6000 個分類類別和 545 個檢測類別。除此之外,來自史丹佛的另一個資料集 Visual Genome 擁有 3000 個目標類別。那為什麼人們不選用這些資料集呢?因為每個類別中包含的目標數量太少了,從而 DNN 無法在這個資料集上取得足夠好的效能,即使這些資料集在實際應用上更加豐富、有用。需要注意的是該資料集並沒有任何分割標註,僅有 3000 個目標檢測(邊界框)標籤類別。

接下來介紹論文 [4]。實際上,就領域而言,邊界框和分割標註之間並不存在太大的區別,區別僅在於後者比前者更加精確。因此既然 Visual Genome [9] 資料集中有 3000 個類別,那麼為什麼不用來訓練分割任務呢?這正是作者所做的,這種方法可稱為弱監督學習(或弱半監督)學習,其中不需要相關任務的完整監督資訊。如果他們使用的是 COCO+Visual Genome 資料集(即分割標籤 + 邊界框標籤),這同樣可稱為半監督學習。

這篇論文簡直不能再 cool,其網路架構有如下特點:

  • 它建立在 Mask-RCNN 之上。

  • 同時使用有掩碼和無掩碼的輸入進行訓練。

  • 在掩碼和邊界框掩碼之間新增了一個權重遷移函式。

  • 當傳遞了一個沒有掩碼的輸入時,將 ω_seg 函式預測的權重和掩碼特徵相乘。當傳遞了一個有掩碼的輸入時,則不使用該函式,而使用一個簡單的 MLP。

  • 如下圖所示:A 是 COCO 資料集,B 是 VG 資料集。注意其中對不同輸入的不同訓練路徑。

  • 將兩個損失同時進行反向傳播將導致 ω_seg 的權重不一致,因為對於 COCO 和 VG 之間的共有類別,有兩個損失(掩碼和邊界框),而對於非共有類別,則僅有一個損失(邊界框)。作者使用的修改方法是:

  1. Fix:當反向傳播掩碼損失時,計算預測掩碼權重 (τ) 關於權重遷移函式引數θ的梯度,而對邊界框權重ω^c_det 不進行該計算。

  2. w^c_seg=τ(stop_grad(w^c_seg); θ),其中 τ 預測掩碼權重。

一文概覽2017年Facebook AI Research的計算機視覺研究進展

 圖 2:Mask^X RCNN 方法的細節展示。Mask^X RCNN 使用學得的權重遷移函式 τ,從對應的檢測引數ω_det 預測類別的分割引數 ω_seg,而不是直接學習掩碼預測引數 ω_seg。在訓練過程中,τ 僅需要資料集 A 中類別的掩碼資料,而在測試時可以應用到 A、B 資料集的所有類別。作者還用補充性的全連線多層感知機(MLP)增強了掩碼頭(mask head)。

由於 VG 資料集沒有分割標註,從而無法給出在該資料集上的分割準確率。因此他們在可驗證的資料集上展示結果。PASCAL-VOC 資料集有 20 個類別,全部包含於 COCO 資料集。因此,對於這 20 個類別,他們使用 VOC 的分割標註和 COCO 中這 20 個類別的邊界框標籤進行訓練。論文展示了在 COCO 資料集中這 20 個類別上的例項分割任務結果。此外由於兩個資料集包含兩種真實標註,他們還對相反的情況進行了訓練。結果如下圖所示。

一文概覽2017年Facebook AI Research的計算機視覺研究進展

 表 2:Mask^X RCNN 的端到端訓練。如表 1 所示,作者使用了 τ 的 'cls+box、2-layer、LeakyReLU' 實現,並新增了 MLP 掩碼分支(遷移函式+MLP),然後使用相同的評估流程。作者還報告了 AP_50 和 AP_75(0.5 和 0.75 IoU 閾值的平均精度評估),以及在小、中、大型目標上的 AP 值(AP_S、AP_M、AP_L)。該方法使用 ResNet-50-FPN 和 ResNet-101-FPN 主幹架構時(沒有使用掩碼訓練資料)都顯著超越了資料集 B 上的基線結果。一文概覽2017年Facebook AI Research的計算機視覺研究進展

參考文獻

[1] Lin, Tsung-Yi, Piotr Dollár, Ross B. Girshick, Kaiming He, Bharath Hariharan and Serge J. Belongie.「Feature Pyramid Networks for Object Detection.」*2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR)* (2017): 936-944.

[2] Lin, Tsung-Yi, Priya Goyal, Ross B. Girshick, Kaiming He and Piotr Dollár.「Focal Loss for Dense Object Detection.」*2017 IEEE International Conference on Computer Vision (ICCV)* (2017): 2999-3007.

[3] He, Kaiming, Georgia Gkioxari, Piotr Dollár and Ross B. Girshick.「Mask R-CNN.」*2017 IEEE International Conference on Computer Vision (ICCV)* (2017): 2980-2988.

[4] Hu, Ronghang, Piotr Dollár, Kaiming He, Trevor Darrell and Ross B. Girshick.「Learning to Segment Every Thing.」*CoRR*abs/1711.10370 (2017): n. pag.

[5] Ren, Shaoqing, Kaiming He, Ross B. Girshick and Jian Sun.「Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks.」*IEEE Transactions on Pattern Analysis and Machine Intelligence* 39 (2015): 1137-1149.

[6] Chollet, François.「Xception: Deep Learning with Depthwise Separable Convolutions.」2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR) (2017): 1800-1807.

[7] Lin, Tsung-Yi, Michael Maire, Serge J. Belongie, James Hays, Pietro Perona, Deva Ramanan, Piotr Dollár and C. Lawrence Zitnick.「Microsoft COCO: Common Objects in Context.」ECCV (2014).

[8] Krasin, Ivan and Duerig, Tom and Alldrin, Neil and Ferrari, Vittorio et al. OpenImages: A public dataset for large-scale multi-label and multi-class image classification. Dataset available from https://github.com/openimages

[9] Krishna, Ranjay, Congcong Li, Oliver Groth, Justin Johnson, Kenji Hata, Joshua Kravitz, Stephanie Chen, Yannis Kalantidis, David A. Shamma, Michael S. Bernstein and Li Fei-Fei.「Visual Genome: Connecting Language and Vision Using Crowdsourced Dense Image Annotations.」International Journal of Computer Vision 123 (2016): 32-73.

原文連結:https://skrish13.github.io/articles/2018-03/fair-cv-saga

相關文章