導讀
對小目標檢測進行了分析,并結(jié)合已有的方法給出了一些思路。
機器學習正越來越多地進入我們的日常生活。從個人服務(wù)的廣告和電影推薦,到自動駕駛汽車和自動送餐服務(wù)。幾乎所有的現(xiàn)代自動化機器都能“看”世界,但跟我們不一樣。為了像我們?nèi)祟愐粯涌吹胶妥R別每個物體,它們必須特別地進行檢測和分類。雖然所有現(xiàn)代檢測模型都非常擅長檢測相對較大的物體,比如人、汽車和樹木,但另一方面,小物體仍然給它們帶來一些麻煩。對于一個模型來說,很難在房間的另一邊看到手機,或者在100米之外看到紅綠燈。所以今天我們要講的是為什么大多數(shù)流行的目標檢測模型不擅長檢測小目標,我們?nèi)绾翁岣咚鼈兊男阅?,以及其他已知的解決這個問題的方法。
原因
所有現(xiàn)代目標檢測算法都是基于卷積神經(jīng)網(wǎng)絡(luò)的。這是一種非常強大的方法,因為它能夠創(chuàng)造一些低級的圖像抽象,如線,圓圈,然后將它們“迭代地組合”成我們想要檢測的目標,但這也是它們難以檢測小目標的原因。
上面你可以看到一個通用的圖像分類神經(jīng)網(wǎng)絡(luò)的插圖。我們最感興趣的是隱藏層部分。如你所見,這個網(wǎng)絡(luò)有許多卷積的組合,然后是一個池化層。許多目標檢測網(wǎng)絡(luò),如YOLO, SSD-Inception和Faster R-CNN也使用這些,而且使用得相當多。將圖像的分辨率從600×600降低到約30×30。由于這個事實,他們在第一層提取的小目標特征(一開始就很少)在網(wǎng)絡(luò)中間的某個地方“消失”了,從來沒有真正到達檢測和分類步驟中。我們可以嘗試一些方法來幫助模型更好地查看這些目標,但是在改進性能之前,讓我們先看看它現(xiàn)在的狀態(tài)。
目前流行的目標檢測器的性能
論文SOD-MTGAN在COCO數(shù)據(jù)集上進行實驗并收集了2016年的測試結(jié)果。+++表示F-RCNN的特殊訓練過程。
一些很小改動去提升小目標檢測的方法
使用Focal loss
如果你有很多類要檢測,一個最簡單的方法來提高對小物體和難以檢測的類的檢測是在訓練神經(jīng)網(wǎng)絡(luò)的過程中使用Focal loss。這里的主要直覺是,這種損失對網(wǎng)絡(luò)的“懲罰”不是對它已經(jīng)可以很好地檢測到的類別進行錯誤分類,而是對它現(xiàn)在有問題的類別進行更多分類。因此,為了進一步最小化損失函數(shù),權(quán)值將開始以這樣一種方式改變,使網(wǎng)絡(luò)更好地挑選困難的類別。這很容易從主要論文提供的圖中看到:
將圖像分成小塊
我們自己也遇到過模型不能檢測到相對較小的物體的問題。任務(wù)是檢測足球運動員和比賽場上的足球。游戲的分辨率是2K,所以我們有很多細節(jié)。但我們用來檢測玩家的模型的輸入分辨率要小得多——從300×300到604×604。所以,當我們把圖像輸入網(wǎng)絡(luò)時,很多細節(jié)都丟失了。它仍然能夠找到前景中的球員,但既沒有球也沒有球員在球場的另一邊被檢測到。因為我們有一個大的輸入圖像,我們決定先嘗試我們能想到的最簡單的解決方案 —— 把圖像分割成小塊,然后對它們運行檢測算法。而且效果很好。你可以在下面看到運行測試的結(jié)果。
雖然該模型的FPS大幅下降,但它給了該模型在玩家檢測上一個非常好的準確性提升。另一方面,球仍然是個問題。稍后我們將更深入地探討我們是如何解決它的。
利用圖像的時間特性
如果我們有一個來自靜止攝像機的視頻,我們需要檢測它上面的移動物體,比如足球,我們可以利用圖像的時間特性。例如,我們可以做背景減法,或者僅僅使用后續(xù)幀之間的差異作為一個(或多個)輸入通道。所以,我們可能有3個RGB通道和一個或多個額外的通道。這確實讓我們改變了一些網(wǎng)絡(luò)的輸入,但仍然不是很多。我們所需要改變的只是第一個輸入層,而網(wǎng)絡(luò)的其他部分可以保持不變,仍然可以利用整個架構(gòu)的力量。
這一變化將預示著網(wǎng)絡(luò)將為移動目標創(chuàng)造更“強大”的特性,而這些特性不會消失在池化和大stride的卷積層中。
改變anchor大小
目前的一些探測器使用所謂的“錨”來探測物體。這里的主要直覺是通過明確地向網(wǎng)絡(luò)提供一些關(guān)于物體大小的信息來幫助網(wǎng)絡(luò)檢測物體,并在圖像中每個預定義的單元格中檢測幾個物體。
因此,改變錨點以適應你的數(shù)據(jù)集是一個很好的主意。對于YOLOv3,有一種簡單的方法可以做到這一點。這里:https://github.com/AlexeyAB/darknet#how-to-improve-object-detection你將發(fā)現(xiàn)一系列改進YOLO體系結(jié)構(gòu)檢測的方法。
為小目標檢測定制模型
上面描述的方法很好,但遠不是最好的,如果你使用專為尋找小目標而設(shè)計的體系結(jié)構(gòu),你很可能會獲得更好的結(jié)果。所以,讓我們開始吧。
特征金字塔網(wǎng)絡(luò) (FPN)
由于其有趣的結(jié)構(gòu),這些類型的網(wǎng)絡(luò)在檢測小目標方面表現(xiàn)得相當有效。雖然像SSD和YOLOv3這樣的網(wǎng)絡(luò)也檢測不同尺度的目標,但是只使用了這些尺度的信息,即所謂的金字塔特征層,而FPN建議將高層特征向下傳播。這一方法“豐富”了抽象的底層,并具有更強的語義特征,這些特征是網(wǎng)絡(luò)在其頭部附近計算出來的,最終幫助探測器拾取小物體。這種簡單而有效的方法表明,可以將目標檢測數(shù)據(jù)集的總體平均精度從47.3提高到56.9。
Finding Tiny Faces
這篇做了大量的工作和研究。我強烈建議你閱讀全文:https://arxiv.org/pdf/1612.04402.pdf,但我們在這里總結(jié)一下:
上下文很重要,利用它更好地找到小物體
建立多個不同尺度的網(wǎng)絡(luò)成本高,但效果好
如果你想要高精度,區(qū)域建議仍然是一個好方法
查看你的骨干網(wǎng)絡(luò)做預訓練的數(shù)據(jù)集,然后嘗試縮放你的圖像,使你需要檢測/分類的目標的大小匹配那些預訓練的數(shù)據(jù)集。這將減少訓練時間和并得到更好的結(jié)果。檢測大小為20×45的目標,使用同樣大小的kernel可能并不一定是最有效的。將圖像放大兩倍并使用40×90的kernel,就可能真正提高性能。大物體的情況則相反。
F-RCNN的改進
因為在幾乎所有你看到的關(guān)于網(wǎng)絡(luò)之間的速度/準確性比較的圖表中,F(xiàn)-RCNN總是在右上角,人們一直在努力提高這種體系結(jié)構(gòu)的速度和準確性。我們將簡要看一下不同的改進方法,以提高其準確性。
Small Object Detection in Optical Remote Sensing Images via Modified Faster RCNN
在本文中,作者做了幾件事。首先,他們測試了不同的預訓練骨干網(wǎng)絡(luò)用于F-RCNN的小目標檢測。結(jié)果表明,ResNet-50的效果最好。他們已經(jīng)選擇了最適合他們測試網(wǎng)絡(luò)的數(shù)據(jù)集的最佳錨尺寸。此外,就像之前關(guān)于尋找小人臉的論文一樣,使用物體周圍的背景也顯著有助于檢測。最后,他們采用了從高到低結(jié)合特征的FPN方法。
然而,架構(gòu)并不是他們唯一改變和創(chuàng)新的東西。訓練過程也得到了改進,并對訓練結(jié)果產(chǎn)生了很大的影響。第一個變化是為訓練平衡數(shù)據(jù)集的特定方式。他們通過多次處理一些圖像來平衡數(shù)據(jù)集,而不是讓它保持原樣,然后調(diào)整損失函數(shù)來進行均衡類別的學習。這使得每個時代的階級分布更加均勻。他們改變的第二件事是添加了一個隨機旋轉(zhuǎn)。因此,它們不是將圖像旋轉(zhuǎn)90或180度,而是將圖像旋轉(zhuǎn)一個隨機生成的角度,例如13.53。這需要重新計算邊界框,你可以在原始論文中看到公式。
Small Object Detection with Multiscale Features
本文作者也使用Faster-RCNN作為主要網(wǎng)絡(luò)。他們所做的修改與FPN的想法相似 —— 將高層的特征與低層的特征結(jié)合起來。但是,他們沒有迭代地組合層,而是將它們連接起來,并對結(jié)果運行1×1卷積。這在作者提供的體系結(jié)構(gòu)可視化中得到了最好的體現(xiàn)。
在結(jié)果表中,他們顯示,與普通的Faster-RCNN相比,這種方法使mAP增加了0.1。
SOD-MTGAN: Small Object Detection via Multi-Task Generative Adversarial Network
首先,在讀到這種方法的名稱后,你可能會想:“等等,使用GAN來檢測目標?”。但請耐心等待,這種方法的作者做了一件相當聰明的事情。你可能之前就想到過:“如果物體都很小,為什么我們不放大它們呢?”簡單地使用插值將圖像放大的問題在于,對于原來的5×5的模糊的像素,我們將得到10×10(或20×20,或任何你設(shè)置的倍增因子)甚至更模糊的像素。這在某些情況下可能有所幫助,但通常情況下,這以處理更大的圖像和更長時間的訓練為代價,提供了相對較小的性能提升。但是如果我們有一種方法可以放大圖像同時保留細節(jié)呢?這就是GANs發(fā)揮作用的地方。你可能知道,它們被證明在放大圖像時非常有效。所謂的超分辨率網(wǎng)絡(luò)(SRN)可以可靠地將圖像縮放到x4倍,如果你有時間訓練它們并收集數(shù)據(jù)集的話,甚至可以更高。
但作者們也不僅僅是簡單地使用SRN來提升圖像,他們訓練SRN的目的是創(chuàng)建圖像,使最終的檢測器更容易找到小物體,檢測器與生成器一起訓練。因此,這里的SRN不僅用于使模糊的圖像看起來清晰,而且還用于為小物體創(chuàng)建描述性特征。正如你在之前的圖中看到的,它工作得很好,提供了一個顯著的提高準確性。
總結(jié)
今天我們學到的是:
小目標檢測仍然不是一個完全解決的問題,
上下文問題
放大圖像是個好主意
結(jié)合不同層的輸出
檢查預訓練網(wǎng)絡(luò)的數(shù)據(jù)集,更好地評估其性能和利用它。
原文標題:小目標檢測的一些問題,思路和方案
文章出處:【微信公眾號:機器視覺自動化】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責任編輯:haq
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4771瀏覽量
100778 -
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
7568瀏覽量
88796 -
機器學習
+關(guān)注
關(guān)注
66文章
8418瀏覽量
132655
原文標題:小目標檢測的一些問題,思路和方案
文章出處:【微信號:jiqishijue2020,微信公眾號:機器視覺自動化】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論