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