M2Det簡介 — A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network

xiao sean
10 min readNov 21, 2018

--

QQijie Zhao, Tao Sheng, Yongtao Wang, Zhi Tang, Ying Chen, Ling Cai, Haibin Ling. “M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network”. In AAAI 2019.

AAAI 2019 paper

Paper Link : https://arxiv.org/abs/1811.04533

Github code : https://github.com/qijiezhao/M2Det

P.S. 寫稿日 — 2018.11.20 目前只放readme,作者說會釋出程式碼

因沒有程式碼可對照再加上這架構有點複雜,有可能會有理解錯誤的部分,如果有人有注意到的話再麻煩提醒。

簡介

此團隊在 CVPR2018 參加 Workshop of Autonomous Driving (WAD) 「道路物件偵測的任務」提出過一個 CFENet 的架構,

而當時的 CFENet 的論文被 ACCV 2018 接收,

CFENet是針對小物體準確度的優化。

而這次提出的 M2Det 主要的想法是 Multi-Level Feature Pyramid Network(MLFPN),

和當時提的 CFENet 有部分的想法相似,

在兩篇論文都提出了:物件分類的和物件偵測的問題有點矛盾,

基於上述的想法此論文給出了較為全面的解釋,

並且提出應該要使用淺層(Low-level)的特徵來輔助物件偵測任務,

因為深層(High-level)的特徵往往會偏好學習最具辨別力的特徵,

而最具辨別力的特徵不見得能將整個將物件給框選起來。

整個想法是採用 SSD 的架構作延伸,

提出的 M2Det 若採用 single-scale inference 可達到 11 FPS, AP 41 的準確度,

採用 multi-scale inference 可達到 AP 44.2 的準確度。

概念

物件分類的和物件偵測的任務是有點矛盾的,

如果我們將物件分類的模型可視化,

我們往往會發現模型會專注於一些可辨認的點,

如辨認鳥的話,他會集中在翅膀的部分

但是我們的物件偵測的目標是希望把目標的位置框出來

因此我們不只需要最能夠辨別物體的那個點,

我們還要想辦法把主體框出來。

可看下圖想像一下:

CVPR2017 — Large Kernel Matters — Improve Semantic Segmentation by Global Convolutional Network

在上圖可看到這是一個多尺度的問題,

當圖片放大時(中間那張圖),那個白色的感知視野(valid receptive field — VRF)無法有效的框出鳥的部分。

我們看一下 SSD 的架構,

典型的 Feature pyramid 金字塔架構,

我們可以看到他的架構是基於 VGG 16 的最後一層(Conv4_3)以及幾個額外的 layer(Fc6 … Poll 11)去做預測,

而為什麼只選擇Conv4_3這層而不是前面幾層呢?

通常的考量是深層的網路中會有者較複雜的特徵,

用深層的資料(High-level)會對預測較有幫助,

而淺層的資料(Low-level)往往是簡單的特徵 ((如簡單的紋路、顏色、形狀,

所以通常是使用深層的資料做預測((在 VGG 以及 ResNet 的模型中是這樣的。

P.S.

時代在變,我說的通常你都可以隨便看看不用太認真,每年電腦視覺(CV)領域都在進步。。。

寫到這裡莫名的心虛一下。。。

此論文的論點是高階的特徵(High-level)是有助於我們分類的問題,

但是對於物件識別的部分(將物體框出來)使用低階的特徵(Low-level)是會有幫助的。

舉例來說一張圖片有人和紅綠燈,

因為這兩個物件的紋理、形狀或是大小(紅綠燈在一整張圖片中可能都是只占據很小一塊)其實都差很多,

若是只使用 High-level 的特徵可能只能夠框出最能夠辨別的點,

可能沒辦法包覆著整個物體,

但如果採用 Low-level 的特徵反而容易將那整個物體給框出來。

方法

此文提出的架構如下,

這邊要知道的是

  • Level: TUM 個數,實驗設定為8個
  • Scale: TUM 的輸出層個數,實驗設定為6個

如何利用淺層資料 — Base feature

請看模型架構圖的 FFMv1,

它的作法很簡單就將前面的 Feature maps 結合起來,

在 VGG 當作 Backbone 時是使用 conv4_3 和 conv5_3,

這樣我們的 Base feature 就會有深層和淺層的特徵。

實作的部分只要注意兩個 H x W 相同就好,

所以如果維度不一樣要加入 UpSample,

其實也挺常見的拉,

所以不多作解釋。

FFM(Feature Fusion Module)

模型細節請看模型架構圖的 FFMv2

這部分就是將兩個不同層的 feature maps 合併起來,

和上面想法差不多,

只是我們接入 Base-Feature 結合上一個 TUM 最後一層輸出,

這邊值得注意的地方應該是我們重複使用了 Base-Feature,

這意味著我們每次輸入進 TUM 的模組時,

都有看到 Backbone 的 low-level 和 high-level 的特徵。

數學式如下:

TUM(Thinned U-shape Module)

就是縮減版的 U-net,

而他縮減版的部分應該是指他每層channel數只有256,

給出的理由是這樣比較容易於 GPU 訓練,

我的想法是單純是 GPU 記憶體大小的限制,

因為我們架構有8個 TUM ,

當每個 U-net 都用這麼大的維度的話,

可能會有記憶體上的問題。

比較特別的是他的每層都有 Decoder,

為上面架構圖紅框處,

他這有6個輸出 => Scale = 6,

而這6個輸出分別代表著不同維度的特徵,

可以注意一下他們每層的 H X W,

從 1X1 … 40X40。

在論文的 Discussion 的部分有提到,

透過 TUM 產生的這些輸出因為是使用相對更深的網路,

因此能學到更複雜的特徵,

而透過 TUM 有不同尺度的輸出,

我們可以處理好多尺度的問題,

那再將 TUM 的輸出接到下一個 TUM 的輸入,

那下一個 TUM 就可以基於上一個複雜的特徵再往下去做學習。

透過這種方式可能第1個 TUM 的 40x40 的特徵可能只能應付簡單的部分,

但直到接到第8個 TUM ,

即便是 40x40 的特徵也能夠處理相對複雜的部分了。

SFAM(Scale-wise Feature Aggregation Module)

看到這邊我們要先理解本文的 Multi-Level Feature Pyramid Network(MLFPN),

  • Multi-level : 多個 TUM,定義為 L 個。
  • Multi-scale : 多個 U-net 的輸出層,對每個不同尺度(1x1…40x40)的輸出定義為 i。

所以我們每個尺度的輸出 Xi 其實有從 L 個,

因為每個 TUM 都可以產出相同尺度的 i(1x1…40x40)。

那這邊的 SFAM 就是為了處理 L 個 不同尺度的 i — Feature maps,

然後再將處理完的 i 輸出至 prediction layer。

此處架構是採用 CVPR 2018 的 Squeeze-and-Excitation Networks-(SENet),

簡單來說是透過 Fully-connected layer 來學習每個 feature 應該要給多少權重,

這部分細節可以去看 SENet 那篇論文。

最終 prediction layer 會接受的是 i 個不同尺度的 Feature maps,

而每個 Feature maps 有多少的權重是經由此 SFAM 所給定,

我目前的理解是 SFAM 其實就是有 i 個 SENet。

這時候大概就能夠理解這模組為什麼叫SFAM(Scale-wise Feature Aggregation Module)了吧!?

備註(下方為個人理解,沒程式碼沒辦法肯定):

雖然圖片上是寫 10 X 10 X 1024 ~ 40 X 40 X 1024,

不過我覺得可能只是示意圖,

實際上實驗設定應該是 6 個 scale,

從 1x1 … 40x40 可見 TUM 的架構圖。

而最大張的架構圖它上面雖然畫 5x5 … 40x40 但應該也是從 1x1 … 40x40才對吧!?

實驗部分+成果

在 MSCOCO 的資料集上做實驗,

backbones pre-trained on ImageNet.

訓練 320x320 以及 512x512 的圖片時,使用4張 Titan X 訓練,

訓練 800x800 的圖片時,使用NVIDIA Tesla V100訓練,

此論文的實驗做的挺多的,

並且有一些細節部分,

所以呢 Ablation study 就不提了,

有興趣的自己去看那部份的細節。

參考資料:

M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network

CFENet: An Accurate and Efficient Single-Shot Object Detector for Autonomous Driving

Large Kernel Matters — Improve Semantic Segmentation by Global Convolutional Network

Squeeze-and-Excitation Networks

同步發表於:Xiaosean的個人網站

--

--

xiao sean

I am a Ph.D. candidate in Computer Science at the National Taiwan University of Science and Technology.