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

Qijie Zhao, Tao Sheng, Yongtao Wang, Feng Ni, Ling Cai. “CFENet: An Accurate and Efficient Single-Shot Object Detector for Autonomous Driving”. In ACCV 2018.

ACCV 2018 paper, CVPR2018 - Workshop of Autonomous Driving (WAD)

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

Github code(Pytorch) : https://github.com/qijiezhao/CFENet/tree/working

P.S. 他的程式碼並不放在master,而是放在working的分支

前言:其實我是看到 AAAI’19 他們團隊提出的 M2Det 才先看來這篇的。

簡介

此團隊參加 CVPR2018, Workshop of Autonomous Driving (WAD) => Berkeley DeepDrive(BDD) Road Object Detection challenge 獲得第2名的佳績,

下圖轉載自 Berkeley Deep Drive

此論文提出如何有效率的偵測出小型的物體,

在道路物件偵測任務中,

我們可以從下圖右方的統計圖表可得知:交通號誌和紅綠燈通常在圖片中只會有很小的一部分。

但是交通號誌/紅綠燈卻也是很重要的,

因為在無人車的行進之間交通號誌是會影響到決策的,

越早知道當然越好,

因此提出在道路資料集中處理小物件的偵測是相當重要的。

此文提出 CFENet (Comprehensive Feature Enhancement module) 的物件偵測模型,

可達到 21 fps的效能。

前導概念

此文主要有著著兩個原則

  • 偵測小物件:如果我們能夠看到遠方的物體的話,可以讓無人車提早反應並且避免危險。
  • 運算要快:畢竟是要用於自駕車。

此文是將 SSD 的物件偵測方法做改進。

備註:

因 SSD 網路是 One-stage 因此運行速度較快,使用 Titan XP 可達到 20 FPS。

此文認為 SSD 之所以無法處理好小型的物體,

其無法處理好的原因是 backbone(假設為VGG16) 的 Conv4_3 部分,

其解析出來的特徵還不足以讓模型可以準確的預測,

簡單來說就是 Conv4_3 之後接預測層(predict layer) 效果之所以不好,

是因為其網路太淺,

因此得到的特徵還太粗糙,

不利於預測。

備註:

網路越深通常是監測更大的物體,因為通常每過一層就會有 stride 或是 pooling,

因此如果要檢測最小的物體就是憑藉著前面的 feature maps。

那這問題怎麼解決呢?

最簡單的想法可能是把 backbone vgg16 換成其他比較深層的網路 resnet-101之類的,

但是這意味著我們的運算時間會增加,

會影響fps,

而導致無法應用在無人車這種需要即時運算的應用上。

方法

此文提出的架構如下,

紅框為此模型基於 SSD 後所新增的部分。

  • 1 個 fully convolutional layer (New_fc7)
  • 4 個 Comprehensive Feature Enhancement(CFE) module
  • 2 個 Fusion Blocks(FFB) module

CFE(Comprehensive Feature Enhancement module)

先前得出的問題點:Conv4_3太淺,特徵不足以用來辨認小物體。

最簡單的想法來解決小物體偵測就是網路變深((在沒有使用 Stride/pooling的前提下加深,

這方法可以讓模型學會更細節的特徵 feature,

因為他又多了一些非線性(non-linear)的函數,

所以輸出的 Features 會更複雜,

能幫助模型預測,

因此提出下方架構:

這邊的想法是希望透過 k X K 的 Conv 讓 feature 能夠有更大的感知視野(receptive field),

備註:

這邊的 k 設定為 7。

但是如果我們使用 k X k 的 kernel-size 又會增加龐大的運算量,

因此這邊使用對稱架構(淺藍色部分)的運算,

透過對稱的(1xk + kx1)可組成類似 k X k Conv 的效果,

他的優點是比起運算 k x k 的大小,

用這種替代方法能夠讓運算速度變快。

此方法的出處:

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

在其論文中使用 Global Convolutional Network(GCN) 來介紹此模組。

除了淺藍色的 1 x k, k x 1 之外,

此模型還有提到另一個技巧 Groups 可增加準確率,

此方法的出處:

CVPR2017 - ResNeXt Aggregated Residual Transformations for Deep Neural Networks

下圖出自ResNext,可看下圖大概能明白其概念吧!? 下面三個架構是相等的,在該論文有詳細的比較,有興趣能去看看。

FFB(Fusion Blocks)

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

這樣可以提供更多的資訊用以幫助 prediction layer。

此處的想法來源

FCN,其最後的多維度的串接。

U-Net,維度的拼接。

主要注意兩個 feature maps 的 H X W 要相同就好了,

所以才會有 Upsample 的那個步驟。

架構總覽

實驗部分

在 MSCOCO 以及 Berkeley DeepDrive(BDD) 的資料集上做實驗,

在各個尺度(S / M / L)的準確度都不錯。

Ablation study

下圖參數定義

T: 上方(淺藍色那個部分)

B: 下方 (Conv4_3 -> New_fc7 -> Conv6_1)

Incep(T) : 使用 Inception v3 的架構

CFE(T) : 上半部使用2個 CFE 的架構

CFE(B) : 下半部半部使用2個 CFE 的架構

FFB : CFE(T)之前接的 FFB 架構

準確度贏 RefineDet,但是速度小輸 RefineDet。

成果圖

參考資料:

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

Berkeley Deep Drive

Large Kernel Matters - Improve Semantic Segmentation by Global Convolutional Network

Aggregated Residual Transformations for Deep Neural Networks


© XiaoSean 2018. All rights reserved.

Powered by Hydejack v7.5.1