最近接觸SSD须眷,這篇入門文章不錯栅螟,故翻譯之憨栽。
原文鏈接:https://towardsdatascience.com/understanding-ssd-multibox-real-time-object-detection-in-deep-learning-495ef744fab
這篇文章的目的是給出SSD MultiBox目標檢測技術(shù)的直觀解釋。本文試圖用最少的數(shù)學理論玉凯,引導你理解這個框架奋蔚,其中包括解釋MultiBox算法她混。讀完本博文,希望您對SSD有更好的理解,并能夠自己嘗試應用它产上。
自從AlexNet在2012年的ImageNet大規(guī)模視覺識別挑戰(zhàn)賽(ILSVRC)大顯身手而風靡全球棵磷,深度學習已成為圖像識別任務的前沿方法,效果遠超傳統(tǒng)的計算機視覺方法晋涣。在計算機視覺領(lǐng)域,卷積神經(jīng)網(wǎng)絡在圖像分類方面表現(xiàn)出色沉桌。給定一組標簽化的數(shù)據(jù)集(比如狗谢鹊,貓),訓練好的網(wǎng)絡能預測給定圖片最有可能的類別留凭。
如今佃扼,深度學習網(wǎng)絡在圖像分類領(lǐng)域已經(jīng)超越人類,顯示了這項技術(shù)的強大蔼夜。然而兼耀,人類做的更多,我們在觀察并與世界交互時求冷,不僅僅時對圖像分類瘤运,還定位并分類視野中的每一個元素。這是一項很復雜的任務匠题,機器在這方面目前還無法與人類匹敵拯坟。事實上,我認為當目標檢測技術(shù)實際效果很好時韭山,機器則更好地認知真實的場景郁季。
The Region-Convolutional Neural Network (R-CNN)
幾年前,研究人員探索CNNs帶給計算機視覺領(lǐng)域的飛躍钱磅,研究出R-CNN來處理目標檢測的任務梦裂,即定位和分類。一般而言盖淡,R-CNN是一種特殊類型的CNN年柠,它能夠定位并檢測圖像中的對象:網(wǎng)絡輸出通常是一組邊界框,他們與每個檢測到的對象邊緣很接近禁舷,以及每個檢測到對象的類別信息彪杉。下圖顯示了典型的R-CNN輸出結(jié)果:
R-CNN領(lǐng)域有一份詳盡的論文清單,希望深入理解的讀者可以從以下三部曲的論文開始:
正如你想的那樣牵咙,后續(xù)的每一篇的論文都提出了改進R-CNN的開創(chuàng)性工作派近,致力于開發(fā)更快的網(wǎng)絡,目的是實現(xiàn)實時目標檢測洁桌。上面顯示的一系列工作取得的成就是令人驚嘆的渴丸,但沒有一個能創(chuàng)建一個實時目標檢測器。略過細節(jié),上述網(wǎng)絡的以下問題被確定:
- 數(shù)據(jù)訓練很笨重并過于耗時
- 訓練分為多個階段(比如:訓練候選區(qū)域(region proposal) vs 分類器)
- 網(wǎng)絡在推斷階段很慢
幸運的是谱轨,過去幾年中戒幔,出現(xiàn)了新的架構(gòu)可以解決R-CNN及其后續(xù)結(jié)構(gòu)的瓶頸,從而實現(xiàn)實時目標檢測土童。最著名是YOLO(You Only Look Once)和SSD MultiBox(Single Shot Detector)诗茎。本文討論SSD,一旦了解SSD的原理献汗,就更容易理解YOLO敢订。
Single Shot MultiBox Detector
關(guān)于SSD:論文《Single Shot MultiBox Detector》(由C. Szegedy等人撰寫)于2016年11月底發(fā)布,其在物體檢測任務的性能和精度方面達到了新記錄罢吃,在標準數(shù)據(jù)集(如PascalVOC和COCO)上每秒處理59幀楚午,得分超過74%(均值平均精度 )。為了更好地理解SSD尿招,我們首先解釋這個架構(gòu)的命名含義:
- Single Shot:這表示定位目標和分類的任務是在網(wǎng)絡的一次前向傳遞中完成的
- MultiBox:這是Szegedy等人開發(fā)的邊界框回歸技術(shù)的名稱矾柜。 (我們會簡要介紹一下)
- Detector:網(wǎng)絡是一個對象探測器,它也對這些探測到的對象進行分類
架構(gòu)
如上圖所示就谜,SSD的架構(gòu)是建立在傳統(tǒng)的VGG-16結(jié)構(gòu)上怪蔑,但丟掉原來的全連接層。選用VGG-16結(jié)構(gòu)作為基礎(chǔ)網(wǎng)絡的原因是它的優(yōu)秀的圖像分類性能和適合用于遷移學習以提高精度的特性吁伺。 取代原來的VGG全連接層的是一組輔助卷積層(從conv6起)饮睬,這能夠以多個比例提取特征,并逐漸減小每個后續(xù)層的輸入大小篮奄。
MultiBox
SSD的邊界框回歸技術(shù)是受Szegedy在MultiBox上的工作的啟發(fā)捆愁,是一種用于未知類別的邊框坐標建議方法。有趣地是窟却,在MultiBox的工作上昼丑,Inception-style的卷積網(wǎng)絡被使用。接下來看到的1x1卷積有助于降低維度(“channel“)夸赫,“高度”和“寬度”保持不變菩帝。
SSD中MultiBox的損失函數(shù)也包括兩個關(guān)鍵的部分:
- Confidence Loss:這部分衡量網(wǎng)絡對計算出的邊框為目標的信心程度。使用的分類交叉熵計算Loss
- Location Loss:這個指標衡量網(wǎng)絡預測的邊界與訓練數(shù)據(jù)中真實的邊界的誤差茬腿,使用L2-Norm計算呼奢。
如果數(shù)學上不深入研究的話(如果您對此有興趣并希望得到更嚴謹?shù)恼撟C方法,請閱讀論文)切平,最終握础,目標檢測的Loss的表達式為:
multibox_loss = confidence_loss + alpha * location_loss
變量alpha用于平衡定位部分的loss。如傳統(tǒng)的深度學習過程悴品,目標是找到使得損失函數(shù)盡可能低的參數(shù)值禀综,從而使我們的預測更接近實際情況简烘。
MultiBox Priors 和 Iou
圍繞邊框生成的邏輯實際上比我之前所說的復雜多了。但不用害怕:它仍屬于可以解決的范疇定枷。
在MultiBox中孤澎,研究人員引入了所謂的priors(或者叫anchors,在Faster R-CNN術(shù)語中)欠窒。priors是預先計算好的覆旭,固定大小的邊框,它們與真實的邊框分布很接近岖妄。
事實上姐扮,這些priors的挑選原則是兩者的交叉比例(又名IoU,有時也稱為Jaccard指數(shù))大于0.5衣吠。 正如你可以從下面的圖片中推斷出的,0.5的IoU仍然不夠好壤靶,但是它為邊界框回歸算法提供了一個強有力的起點 - 與采用隨機坐標的策略預測相比缚俏,這是一個好得多的方式! 因此贮乳,MultiBox從priors開始預測忧换,試圖接近真實邊界框。
最終的架構(gòu)(回顧圖Architecture of multi-scale convolutional prediction of the location and confidences of multibox向拆,以供參考)包含每個feature map cell(8x8,6x6,4x4,3x3,2x2)的11個priors亚茬,并且在1x1特征映射上僅包含一個,從而每個圖像總共有1420個priors浓恳, 從而實現(xiàn)多尺度輸入圖像的穩(wěn)健覆蓋刹缝,以檢測各種尺寸的物體。
最后颈将,MultiBox只保留最小化定位(LOC)和置信度(CONF)損失的前K個預測梢夯。
SSD Improvements
回到SSD上,做了一些改動晴圾,使這個網(wǎng)絡更有能力對目標進行定位和分類颂砸。
Fixed Priors:與MultiBox不同,每個feature map cell都對應著一組不同尺寸和高寬比的默認邊界框死姚。 這些priors是基于人工規(guī)則精心選擇(計算)的人乓,而在MultiBox中,priors的選中規(guī)則是IoU對于ground true超過了0.5都毒。 理論上色罚,應該允許SSD適應任意的輸入,而不需要前面的預訓練的階段温鸽。 例如保屯,假設(shè)我們?yōu)槊總€feature map cell配置b個默認邊界框手负,包括2個對角相對點(x1,y1)和(x2姑尺,y2)竟终,并且要對c個類進行分類,則在給定的大小為f = m * n的feature map切蟋,SSD將計算f * b *(4 + c)個值统捶。
Location Loss: SSD使用平滑的L1-Norm來計算location loss。盡管不如L2-Norm那么精確柄粹,但仍然非常有效喘鸟,并為SSD提供了更多的操作空間,因為它不會嘗試在邊界框預測中實現(xiàn)“像素完美”(即幾個像素的差異幾乎不會被注意到 我們中許多人)驻右。
Classification: MultiBox不執(zhí)行對象分類什黑,而SSD則執(zhí)行對象分類。 因此堪夭,對于每個預測的邊界框愕把,針對數(shù)據(jù)集中的每個可能的類來計算一組c類預測。
Training & Running SSD
Datasets
您需要具有真實邊界框和分配的類標簽(每個邊界框指定一個類別)的訓練和測試數(shù)據(jù)集森爽。 Pascal VOC和COCO數(shù)據(jù)集是一個很好的起點恨豁。
Default Bounding Boxes
建議配置一組不同尺度和高寬比的默認邊界框,以確迸莱伲可以捕獲大部分物體橘蜜。 SSD論文中,每個feature map cell有大約6個邊界框付呕。
Feature Maps
feature map(即卷積層的結(jié)果)是圖像在不同尺度上的主要特征的表示计福,因此在多個特征圖上運行MultiBox能增加了任何目標(大和小)最終被檢測凡涩,定位與分類的概率棒搜。 下面的圖片展示了網(wǎng)絡如何“看到”feature map上的給定圖像:
Hard Negative Mining
訓練過程中,大多數(shù)邊界框的IoU都較低活箕,會被認為是負樣本力麸,因此訓練集可能會出現(xiàn)樣本不均衡。因此育韩,建議不要使用所有負樣本克蚂,而要保持約3:1的負正樣本比例。 你需要保持負樣本的原因是因為網(wǎng)絡也需要學習和被明確告知什么是不正確的檢測筋讨。
Data Augmentation
SSD的作者指出埃叭,像許多其他深度學習程序一樣,數(shù)據(jù)增強對于網(wǎng)絡的泛化性能悉罕,即對于各種目標的輸入變得魯邦至關(guān)重要赤屋。 為此立镶,他們以不同的IoU比率(例如0.1,0.3,0.5等)和random patches生成具有原始圖像patches的額外訓練樣本。 此外类早,每個圖像也以0.5的概率隨機地水平翻轉(zhuǎn)媚媒,從而確保潛在目標以相似的可能性出現(xiàn)在左側(cè)和右側(cè)。
Non-Maximum Suppression (NMS)
考慮到inference階段SSD前向過程中生成大量boxes涩僻,通過非最大抑制技術(shù)修剪大部分邊界框是必要的:小于confidence loss 閾值ct(例如0.01 )和IoU小于lt(例如0.45)的boxes被丟棄缭召,并且只保留前N個預測。 這確保最可能的預測被保留逆日,而更多噪音的預測被刪除嵌巷。
Additional Notes On SSD
SSD的論文還作了以下的觀察:
- 更多的default boxes會帶來更精確的檢測,但耗時增加
- 由于detector以多種分辨率運行于特征上室抽,因此在多個圖層上使用MultiBox也會導致更好的檢測
- 80%的時間花在基礎(chǔ)VGG-16網(wǎng)絡上:這意味著搪哪,使用更快,同樣精確的網(wǎng)絡坪圾,SSD的性能可能會更好
- SSD將具有相似類別的對象(例如動物)混淆噩死。這可能是因為定位是基于多個類的
- SSD-500(使用512x512輸入圖像的最高分辨率版本)在Pascal VOC2007上實現(xiàn)了最佳的mAP,達到了76.8%神年,但是速度降低到22 fps。因此SSD-300在59 fps下具有74.3 mAP更好的折衷行嗤。
- SSD在較小的對象上產(chǎn)生較差的性能已日,因為它們可能不會出現(xiàn)在所有功能地圖中。增加輸入圖像分辨率緩解了這個問題栅屏,但并未完全解決這個問題
Playing With SSD
網(wǎng)上有一些現(xiàn)成的SSD實現(xiàn)飘千,包括輪文作者的原始Caffe代碼。 就我而言栈雳,我選擇了PaulBalan?a的TensorFlow實現(xiàn)护奈,可在github上獲得。為了更好地理解一切如何結(jié)合在一起哥纫,閱讀代碼以及論文是值得的霉旗。
我最近還決定通過使用SSD來重構(gòu)一個使用傳統(tǒng)計算機視覺技術(shù)的項目Vehicle Detection。我用SSD輸出的一個小Gif顯示它非常好用:
Beyond SSD
在這個領(lǐng)域蛀骇,最近更多的工作已經(jīng)產(chǎn)生散怖,我建議在下面的兩篇論文中對任何有興趣在這個領(lǐng)域進一步推動他們的知識的人進行跟進:
YOLO9000:更好吼驶,更快,更強(這是論文的標題;不是開玩笑)
Mask R-CNN:在像素級非常準確的instance segmentation
瞧! 我們完成了我們的Single Shot MultiBox Detector巡視翅雏。 我試圖用簡單的術(shù)語來解釋這一技術(shù)背后的概念,盡我所知县恕,用很多圖片來進一步說明這些概念并便于理解。 我真的推薦閱讀這篇論文(如果你像我一樣慢辟灰,可能會多次),包括在這項技術(shù)的一些數(shù)學背后形成良好的直覺篡石,以鞏固你的理解力芥喇。 如果其中的某些章節(jié)能夠幫助您理解論文,您可以隨時查看該博客夏志。一帆風順乃坤!