物件偵測 - CenterNet 介紹

22 12
7 min readDec 10, 2019

--

CenterNet目前應該算是很好入門的一篇One-stage目標檢測 首先先付上

論文連結

github 連結

推荐新手實作的github連結

CornerNet

首先帶大家看看 CenterNet大哥 CornerNet的核心概念

CornerNet會透過偵測物體左上角跟右下角來確定目標 看到圖大家應該會想起畫bounding box的方法

CornerNet是第一個基於關鍵點的物件偵測方法 他避免了像是Yolo等傳統物件偵測方法設計anchor boxes的動作 網路結構如下圖

從圖中可以看到CornerNet的模型結構包括兩部分

Hourglass Network

Corner Prediction Module

是典型人體姿態估測的架構之一

第一部份 Hourglass Network

Hourglass Network 是一種用於人體姿態檢測的神經網路 有興趣的可以點進去論文看看

整體結構有點像是Multi-Scale的機制 前半部份透過卷積層(Conv)和池化層(Pooling)來向下取樣(DownSampling) 獲得解析度較低的特徵 使計算複雜度降低 然後再利用向上取樣(UpSampling) 來恢復影像大小 使其有能力來預測位置 而CoenerNet以其作為backbone 萃取影像的特徵 這邊就不詳細解釋 如果有興趣的還可以閱讀 yolo的Multi-Scale機制 或是Autoencoder的結構及概念來加深印象

第二部份 Corner Prediction Module

這邊第二部份使用的是將左上角跟右下角進入輸出層 並且從圖中可以看到輸出後有3個分支 分別為Heatmaps Embeddings以及Offsets

首先我們要知道如何定義所謂角頂點的

CornerNet 是使用一個叫作Corner Pooling的技術

Corner Pooling透過萃取特徵圖水平方向以及垂直方向最大值進行求和 如下圖

目標框具4個邊 而用這樣萃取出左上跟右下角後 也能獲取邊界框的4個邊 來進行角的定位

(1)Heatmaps

上圖為Hourglass Network 裏面使用的Heatmaps機制 來預測人體的關鍵點

而在CornerNet裏面運用了其方法 轉化成用於生成目標的位置圖 其中heatmaps包含了C個通道 這邊的C代表為物件類別

(2)Embeddings

而Embeddings代表的為每一個位置的特徵向量 用來判斷目標點的匹配程度 可以透過特徵向量來判斷兩個目標點是否屬於同一物物件

而這則是使用了Associative Embedding的方法

(3)Offsets

Offests則是表示了位置點的偏移量 這邊的偏移量大部份由heatmaps映射回原始影像後產生的量化映射誤差

這邊有興趣的可以閱讀Faster-RCNN的ROIAlign以及Yolov3用於預測bounding box的offest機制

CenterNet

而後出現的CenterNet改進了CornerNet的不足之處

由於CornerNet是使用角點來偵測物體 代表他大部份使用了物件的邊緣特徵來進行預測 其容易產生一些無效框 而且由於是使用角點 也使得偵測的中心位置不在目標上 因此CenterNet在CornerNet的基礎上再加上一個預測物件中心點來濾除無效框 並且也使其除了邊緣特徵外也能力用物件內部特徵

而CenterNet的結構跟CornerNet一樣分為兩大部份

Hourglass Network

Prediction Module

而有別於CornerNet 在Prediction Module的部份加入了Center Pooling

如上圖 可以看到CenterNet 在Corner Pooling 多加一個Center Pooling

這邊大家可以認真看一下圖

Center Pooling分為兩條路線 分別求水平方向(透過串聯Right Pooling 以及 Left Pooling )以及垂直方向最大值並進行相加

而Corner Pooling 在這邊升級成了Cascade Corner Pooling

Corner Pooling原本是透過找到物件邊界最大值來確定bounding box

而Cascade Corner Pooling 一開使首先使用Left Corner Pooling 獲得水平方向點最大值 也就是沿邊界搜索邊界的最大值

並且同時尋找內部最大值進行相加 使得Cascade Corner Pooling可以獲得內部以及邊界特徵

Object Detection as Keypoint Triplets

上面有提到CenterNet能有效的濾除無效框 步驟如下

(1) 透過中心點的heatmap找到top-k個bounding boxes 透過響應值的大小 選擇top-k個center keypoints

(2)利用offset值將center keypoints映射到輸入影像 得到中心點位置

(3)透過左上和右下角點 得到所有bounding box 並定義一個central region 並判斷是否central region包含了center keypoint

(4)如果該central region包含了center keypoint 並且bounding box的預測類別標籤和對應的center keypoint相同 則保留當前bounding box

center region

center region 中心區域如果過小會導致recall過低 太大則會讓大目標的精確度降低

所以採用了scale-aware方法來確定中心區域大小 下圖為公式 分別代表左上及右下座標

對於大目標給予較小的中心區域而大目標則給較大的中心區域來避免這些情況

其中的n當bounding box 大於150的時候 n=5 小於150則等於3

總結與優化方向

CenterNet的效果十分好47%的mAP算是非常有戰鬥力了 可以看出來優於許多網路 並且由於為One stage的檢測方法 其速度也能相較於其他網路來的快

優化方向

(1)更多尺度

在論文中CenterNet只使用了兩種尺度來定義center region 如果能借鑑yolo的方法能依照輸入大小調整 或是有更多尺度 不失為一種可優化準確度的方向

(2)替換backbone

人體姿態估測具有許多架構 大致上大同小異 可以透過替換Hourglass的特徵萃取 來達到更好的效果

--

--