ACMMM2016_UnitBox_重讀
來自專欄人臉檢測2 人贊了文章
第一遍(https://zhuanlan.zhihu.com/p/37932021)確實沒怎麼讀懂,後面讀DenseBox和SFace就有點懵逼了,所以重新讀一遍UnitBox,方便後續理解DenseBox和SFace;
名詞定義:
1 confidence score:置信度得分;
2 confidence (score) heatmap:置信度(得分)熱度圖;
3 bbox heatmap:bbox熱度圖;
UnitBox是曠視科技提出的一個通用目標檢測演算法,在論文中主要介紹的是人臉檢測方面的應用,在FDDB上sota;
目前人臉檢測要麼基於2-stage的frcnn,要麼基於1-stage單層feature map預測的RPN或多層feature map預測的SSD,還有就是基於yolo的方案,這些方案都是基於anchor的(註:如果強行歸納,我的個人理解,yolo也可以歸納為基於anchor的方案裡面,畢竟7 x 7網格中也分別預測目標框的偏移,那麼每個網格的位置和計算基於網格bbox的相對位置偏移,就可以默認為包含了anchor的概念,雖然DenseBox裡面並不這麼認為。。。);
但UnitBox就腦路很清奇了,完全摒棄了anchor的概念,直接通過預測置信度熱度圖 + bbox熱度圖計算目標的bbox;所以我在第一遍學習的時候,確實是有點懵,畢竟要經過一次頭腦風暴才能理解;
個人認為的三個spotlight:
1 提出了IoU Loss,將bbox四個頂點坐標的回歸統一成一個iou loss單元,比基於L2 loss的四個頂點坐標獨立回歸在準確率上更加好,收斂也更快;
2 提出了UnitBox,基於IoU Loss,在FDDB上取得了sota;
3 IoU Loss隱含地歸一化目標尺度,因而UnitBox也獲得了處理不同尺度目標的能力,測試時只需要在單尺度圖像上做一次前向推理即可,不用像DenseBox一樣使用圖像金字塔;
不足:
1 訓練的輸入為三個同原圖尺度大小的圖像:置信度熱度圖、bbox熱度圖、原圖;雖然置信度熱度圖與bbox熱度圖可以根據原圖中的目標gt方便生成,但對比一般的目標檢測演算法僅需要原圖 + gt bbox,操作流程也是有點繁瑣的;
2 UnitBox並未強調自己僅僅一個人臉檢測器,而是通用目標檢測器,但沒有在pascal voc、coco等數據集上測試效果,arxiv2018的人臉檢測演算法SFace也是基於IoU Loss的;
3 論文中還是有很多細節講的不清楚,自己也有很多沒了解的細節,因為沒公布源碼,所以也沒法知道答案,只能靠自己的理解和猜測了;
ABSTRACT
1 我們提出了全新的IoU Loss,將bbox四個頂點坐標的回歸統一成一個單元,比基於L2 loss的四個頂點坐標獨立回歸在準確率上更加好,收斂也更快;
2 基於IoU Loss和全卷積網路,我們提出了UnitBox,在目標檢測上定位準確度更高,收斂也更快,並能應對目標尺度和外觀的變化;
3 UnitBox在FDDB上sota;
關鍵字:目標檢測;bbox預測;IoU Loss
1. INTRODUCTION
目標檢測一般包含兩個任務:
1 目標定位 --- where the object is,找到目標在哪;
2 目標識別 --- what the object looks like,目標分類;
現階段目標檢測分三步:
step1:從圖像中獲取目標proposals,常用方法如Selective Search、EdgeBoxes、cascade CNN中12net獲取人臉candidates;
step2:proposals過CNN提特徵,用於proposals的識別和分類;
step3:將step1、2提出並篩選的剩餘bbox做更精細的bbox坐標回歸;
以上三步驟,step1提proposal成為了一個瓶頸:早期的SS、EdgeBoxes等提proposal方法採用目標的低層特徵信息,不夠魯棒,無法應對目標大的外形變化和遮擋;而且一般基於密集滑窗或圖像過分割方法,耗時很大,無法應用於實時場景中;
frcnn通過訓練RPN從anchor中預測目標candidates,加快了proposals的提取速度,但RPN中anchor的長寬比、尺度是預定義且不會改變的,對小目標和外形、尺度變化較大的目標性能一般;
DenseBox使用feature map上每個像素與包含該像素的bbox四條邊的距離(fig 1中可以看出就是簡單的曼哈頓距離)來回歸一個4維距離向量;弊端有兩個:
1 基於L2 loss,將四個邊框距離的回歸作為四個獨立的坐標回歸,而bbox的四個頂點坐標應該是彼此關聯的,應該聯合回歸的;
2 為了能夠處理多尺度的目標,DenseBox訓練是使用固定單尺度的目標區域,預測時,需要使用圖像金字塔,耗時大;
本文提出了UnitBox,基於全卷積網路框架,在feature map上直接同時預測bbox坐標和pixel-wise分類得分;UnitBox基於IoU Loss做bbox預測,IoU Loss確保預測的bbox與gt box達到最大的重疊(maximal overlap),將bbox四個坐標的回歸作為一個整體;
UnitBox優點:
1 UnitBox預測bbox更准,訓練更快收斂;
2 基於IoU Loss,UnitBox能適配多尺度目標的訓練,IoU Loss隱含地歸一化目標尺度,因而UnitBox能處理目標尺度的變化,測試時只需要在單尺度圖像上做一次前向推理即可,不需要圖像金字塔操作;
2. IOU LOSS LAYER
介紹UnitBox前,先介紹IoU Loss,並與L2 loss作比較:
對圖像中的每個像素(i, j),gt bbox可以認為是一個4維向量:
~xt、~xb、~xl、~xr表示當前像素位置(i, j)距離gt bbox四邊框的上、下、左、右距離;同理預測的bbox也可以表示為x = (xt、xb、xl、xr),如fig 1所示;
UnitBox里對gt bbox邊框與每個像素距離組成的4維向量作了一個定義,是每個像素點位置到gt bbox四個邊界的相對距離,跟我們在目標檢測裡面的定義有點差異;
2.1 L2 Loss Layer
對L2 loss的定義,但其實流行的目標檢測演算法fast rcnn、frcnn都是基於Smooth L1 loss的;
L2 loss用於目標檢測兩個弊端:
1 L2 loss對bbox四個坐標的優化是彼此間獨立的,與常識不符,真實場景中bbox的四個坐標應該是彼此間相關聯的,這樣會造成預測bbox的某幾個坐標預測得準確,整體bbox卻不準確;如fig 5;
2 L2 loss對bbox的坐標沒有做正則化,導致會更傾向於優化大尺度目標,而非小尺度目標 ---- given two pixels, one falls in a larger bbox while the other falls in a smaller one, the larger bbox will have a larger effect on the penalty than the smaller one (L2 loss更傾向於優化大尺度目標), since the L2 loss is unnormalized. This unbalance results in CNNs focus more on larger objects while ignore smaller ones;
提到了Densebox,Densebox通過訓練階段固定輸入圖像patches的尺度,可以達到正則化L2 loss的目的(因為都變成同一個尺度了,相當於做了尺度正則化處理),但在預測階段卻需要處理多尺度的圖像金字塔,耗時就大了;
2.2 IoU Loss Layer:Forward
IoU Loss可以避免L2 loss中的弊端,直接講了IoU Loss的定義和前向傳播;
對於一個預測的bbox x,其坐標(xt、xb、xl、xr) > 0,和gt bbox ~x,IoU Loss計算如下:
PS:算IoU的方式很獨特,可以結合fig 1算一下;
~x:對於一個像素(i,j),必須落在一個有效的object bbox里,才會進一步計算iou loss,那麼此有效的object bbox指gt bbox還是pred bbox?我覺得是gt bbox;
X:pred bbox面積;
~X:gt bbox面積;
Ih、Iw:IoU區域的高、寬;
Algorithm 1中,紅框:I;綠框:U;
因為0 < IoU < 1,所以L = -ln(IoU)本質上是對輸入IoU的交叉熵損失:可以將IoU當做從伯努利分布中的隨機採樣,且p(IoU = 1) = 1;那麼iou的交叉熵損失可表示為: L = -pln(IoU) - (1 - p)ln(1 - IoU) = -ln(IoU);-----這個公式和交叉熵損失是有點類似的,p(IoU = 1) = 1是預先設定的,但後面的公式推理,我沒有推出來;現假設此公式成立,那麼就說明L = -ln(IoU)確實是可以表示目標的定位loss,並是通過交叉熵的方式表達的;
優點:
1 L2 loss將四個坐標分開獨立優化,IoU Loss將bbox的優化變為一個整體,因此可以得到更準確的bbox prediction;
2 正因為0 < iou < 1,默認包含了正則化的操作,忽略了每個bbox的尺度,因此UnitBox可以訓練時就不用crop各種patch將尺度歸一化,直接使用原圖 or multi-scale訓練都可,模型就已經掌握了處理多尺度的能力,預測階段就只需要在單尺度圖像上完成即可;
2.3 IoU Loss Layer: Backward
IoU Loss的反向傳播,相當於求X對(xt、xb、xl、xr)四個變數的偏導數▽xX,公式也不算很難,結合著Algorithm 1看比較容易理解,我就直接貼圖了:
對照Algorithm 1,很容易推導(3)、(4)、(5)、(6);
那麼繼續對照對照Algorithm1,整個IoU Loss關於x的偏導就可以計算為:
通過公式7,可以更好地理解IoU Loss:▽xX是對預測bbox的懲罰項(結合公式(3)、(4)),佔IoU Loss梯度的正相關部分;▽xI是對IoU區域的懲罰項(結合公式(5)、(6)),佔IoU Loss梯度的負相關部分;
因此為了最小化IoU Loss,從公式7中可知,希望IoU面積越大越好,預測的bbox越小越好(to minimize the IoU loss, the Eqn. 7 favors the intersection area as large as possible while the predicted box as small as possible);最完美的情況就是預測的bbox與IoU面積相等,此時說明預測的bbox與gt完全一致;----- 個人感覺:應該不能說預測的bbox越小越好,從公式7中可知,IoU Loss值還受到I和U的影響,如果bbox過小,I和U也會變小;此外,如果目標函數希望目標預測得越小越好,就對小尺度目標有偏了,應該理解成希望pred bbox盡量與gt bbox匹配;
3. UNITBOX NETWORK
基於IoU Loss,我們提出了UnitBox:一個pixel-wise的目標檢測網路;如fig 2;
UnitBox主幹網採用vgg16,去掉最後兩層全連接,添加了兩個全卷積分支,分別用來預測pixel-wise bbox(fig 2分支下) + pixel-wise分類得分(fig 2分支上);
訓練:UnitBox需要輸入三張同樣尺度的圖片:
1 原圖;
2 置信熱度圖,用於表徵每個像素是否在gt bbox之內 ---- confidence heatmap inferring a pixel falls in a target object (positive) or not (negative),可以理解為一個尺度為w x h x 1的0/1二值圖,
3 bbox熱度圖,用於表徵每個落入gt bbox內像素到gt bbox邊框距離 ---- bbox heatmaps inferring the gt boxes at all positive pixels;現在再回看就比較好理解了;結合fig 1、2,就是每一個落入gt bbox的像素,都可以計算出該像素點具體該gt bbox四個邊框的距離,該距離存入bbox熱圖度即可;從fig 2中也可以看出,bbox分支是一個尺度為w x h x 4的特徵圖,每個通道上的特徵值就不是0/1二值了,如~xt特徵圖,可以表示為屬於gt bbox內所有像素點距離gt bbox上邊界的距離;
對於fig 2分支上分類得分(也即是否為人臉的分類置信得分,fig 2中虛線表示),在vgg stage-4的512 channel上連接三個層:
layer1:conv層,512 x 3 x 3 x 1,stride=1,將feature map變為channel=1;
layer2:up-sample層,線性插值的上採樣層,將layer1 feature map縮放成原始圖像尺度;
layer3:crop層,將layer2的feature map與原始圖像對齊(因為有卷積、pooling、padding等操作;layer2上採樣不一定能確保feature map與原始圖像尺度完全一致);
經過以上操作,得到一個與原始圖像尺度一致的單通道feature map,然後使用sigmoid交叉熵損失來回歸生成的置信熱度圖 ---- 這就是人臉分類得分分支做的事情;
對於fig 2分支下,為預測bbox heatmap,我們在vgg stage-5使用類似的三層堆疊操作,不同之處在於layer1:512 x 3 x 3 x 4,stride=1,添加relu層確保預測的bbox熱度圖元素非負,進而通過使用IoU Loss做邊框回歸 ---- 這裡面還有個難理解之處:預測的bbox heatmap上,每個像素都會在feature map上
分支上、下的兩個loss通過加權平均做最後的優化;
UnitBox要點:
1 UnitBox中,分類置信度得分的預測分支在vgg stage-4之後,bbox坐標的預測分支在vgg stage-5之後;這樣做的原因是因為作為一個IoU Loss單元,bbox回歸預測比分類置信度得分預測需要更大的感受野;直覺上,bbox預測依賴於置信度得分熱度圖,因此通過從置信度得分熱度圖上獲取可以預測的bbox坐標,可以將bbox分支預測視為自底向上的路子 ---- 我的理解是bbox的預測依賴於特徵圖上分類的預測,畢竟只需要在預測為正的像素上做操作即可 ---- the bboxes of objects could be predicted from the confidence heatmap. In this way, the bbox branch could be regarded as a bottom-up strategy, abstracting the boxes from the condence heatmap;
2 UnitBox沒有如DenseBox使用過多的卷積層,速度更快,10+FPS,DenseBox數秒處理一幀;
3 fig 2中置信度得分和bbox坐標預測共享了部分卷積層(stage1-3),如果彼此間不共享權重,完全分開訓練,性能會更好;(無實驗無真相)
有了置信熱度圖和bbox熱度圖,以人臉檢測為例介紹bbox預測:
step 1:基於置信熱度圖,設置一個閾值篩選判定為有人臉的像素,再在過濾後的熱度圖上通過一個橢圓匹配之 ---- fit the faces by ellipses on the thresholded confidence heatmaps;
step 2:因為人臉橢圓形區域可能過於稀疏,不方便bbox定位;因此再利用bbox熱度圖,計算step1中屬於橢圓形區域內的中心像素距離pred bbox的距離,進而計算出pred bbox的位置 ---- Since the face ellipses are too coarse to localize objects, we further select the center pixels of these coarse face ellipses and extract the corresponding bounding boxes from these selected pixels ---- 依然有很多不明白之處:
1 step1中使用ellipses來適配feature map上的像素,相當於一個回歸問題,以前做連通域檢測也做過類似的工作,但這裡並沒有細節上介紹如何做到的;只是說在feature map上可以通過橢圓形來匹配pix;
2 雖然step2中利用橢圓中心像素,可以初略計算出對應的bbox,但真的不需要進一步做bbox的精調,以及NMS處理么?
雖然操作簡單,但bbox定位相當之準確,如fig 3:
4. EXPERIMENTS
基於imagenet上預訓練的vgg16在wider face上做finetune,lr特別低,10e - 8,非常小,無數據增強操作;
4.1 Effectiveness of IoU Loss
fig 4(a) UnitBox-L2指使用L2 loss訓練UnitBox(lr更小,10e - 13),可以發現UnitBox(使用IoU Loss)不僅訓練更快收斂(fig4(a)中迭代次數更少),而且miss rate更低(fig4(a)藍色線);fig4(b)中,fddb的roc曲線上,UnitBox表現也更好;
在尺度變化較大的圖像上測試(fig5,60~960 pixel,圖像金字塔生成),可以得到以下結論:
1 L2 loss處理尺度尺度變化上效果沒有IoU Loss好;
2 L2 loss可以預測部分坐標準確,但因為坐標預測是獨立進行,很難全部準確;IoU Loss卻可以很好的解決該問題;
3 在960 pix圖像上,人臉尺度大於感受野尺度,但L2 loss預測人臉失敗,但UnitBox卻表現非常好;
4.2 Performance of UnitBox
fig 6 UnitBox通過fig 2中兩個分支不共享參數地分開訓練(train an unshared UnitBox detector to further improve the detection performance,實驗的真相),取得了sota,且在VGA解析度的圖像上達到了12fps;
5. CONCLUSIONS
1 提出了IoU Loss用於bbox預測,與L2 loss相比,IoU Loss將目標候選框的bbox回歸預測作為一個整體,而非四個坐標變數分開預測;基於IoU Loss的目標函數,不僅訓練收斂更快,而且對目標的定位更精準;
2 基於IoU Loss的UnitBox在FDDB上取得了sota;
3 作者認為IoU Loss和UnitBox可以進一步應用於通用目標定位和檢測任務中;
論文參考
1 ACMMM2016_UnitBox:An Advanced Object Detection Network
總結,很多細節不是很清晰,以下引用自CSDN:https://blog.csdn.net/zimenglan_sysu/article/details/52225324
問題:
1 IoU loss需要對four coordinates進行歸一化么?還是直接回歸真實坐標?----據我的理解,應該該是真實坐標;
2 訓練測試時的輸入大小是多少?----需要看源碼才行了,paper里沒說;
3 IoU loss適合圖像只有很少物體的情況么,如<2?----同疑問,如果多個gt bbox相交,置信度熱度圖和bbox熱度圖中per-pixel值需要累加嗎?如果累加了,那又如何區分是per-pixel像素值是對應的哪個gt bbox呢?
4 IoU loos可以擴展多多類上么(論文里只有bg和face)?----同疑問,沒有pascal voc、coco等數據集上的評估;
5 測試時,speed的瓶頸是哪部分?----感覺網路其實還是比較淺的,因為沒有rpn,也不需要圖像金字塔,不知道慢在哪,跟原始圖像size有關係?
6 對於cls-net和det-net,可以多接幾個層么?----應該可以吧,性能就不知道如何了;
7 在生成ground truth 的confidence map和coordinate maps時,怎麼處理overlap的ground truths?-----同問題三,十分疑惑;
推薦閱讀:
※晶元向左、硬體向右,中路需要的是最強 AI 大腦 | 對話圖靈
※論強化學習和概率推斷的等價性:一種全新概率模型
※圖像去噪中的深度殘差網路
※劉強東:人工智慧時代並不會導致大規模失業
※特斯拉CEO伊隆·馬斯克:人工智慧比核技術更危險
TAG:深度學習DeepLearning | 人工智慧 | 計算機視覺 |