目標(biāo)檢測難題 | 小目標(biāo)檢測策略匯總
點擊上方“AI算法與圖像處理”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時間送達
作者:Jacob Solawetz
編譯:ronghuaiyang,來源:AI公園
在計算機視覺中,檢測小目標(biāo)是最有挑戰(zhàn)的問題之一。本文給出了一些有效的策略。

為了提高你的模型在小目標(biāo)上的性能,我們推薦以下技術(shù):
提高圖像采集的分辨率 增加模型的輸入分辨率 tile你的圖像 通過增強生成更多數(shù)據(jù) 自動學(xué)習(xí)模型anchors 過濾掉無關(guān)的類別
為什么小目標(biāo)檢測很困難?
小目標(biāo)問題困擾著世界各地的目標(biāo)檢測模型。不相信嗎?查一下最近的模型在COCO上的評估結(jié)果,YOLOv3,EfficientDet和YOLOv4:

以Efficient為例,小目標(biāo)的AP只有12%,大目標(biāo)的AP為51%。這幾乎是五倍的差異!那么,為什么檢測小物體如此困難呢?
這一切都歸結(jié)于模型。目標(biāo)檢測模型通過在卷積層中對像素進行聚合來形成特征。

在網(wǎng)絡(luò)的末端,基于損失函數(shù)進行預(yù)測,損失函數(shù)根據(jù)預(yù)測值和ground truth之間的差異對所有像素進行加和。

如果ground truth框不大,則在進行訓(xùn)練時信號會很小。此外,小物體最有可能有數(shù)據(jù)標(biāo)記錯誤,他們的識別可能被忽略。
從經(jīng)驗和理論上講,小物體是很難的。
提升圖像采集的分辨率
分辨率,分辨率,分辨率……都是分辨率的鍋。
非常小的物體的邊界框中可能只包含幾個像素,這意味著增加圖像的分辨率可以增加探測器可以從那個小盒子中形成的豐富特征,這是非常重要的。
因此,我們建議盡可能提高采集圖像的分辨率。
提高模型的輸入分辨率
一旦你有了更高分辨率的圖像,你就可以放大模型的輸入分辨率。警告:這將導(dǎo)致大型模型需要更長的時間來訓(xùn)練,并且當(dāng)你開始部署時,也會更慢地進行推斷。你可能需要實驗來找出速度與性能之間的正確權(quán)衡。
在訓(xùn)練YOLOv4中,你可以通過改變配置文件中的圖像大小來輕松縮放輸入分辨率。
[net]?
batch=64?
subdivisions=36?
width={YOUR?RESOLUTION?WIDTH?HERE}?
height={YOUR?RESOLUTION?HEIGHT?HERE}?
channels=3?
momentum=0.949?
decay=0.0005?
angle=0?
saturation?=?1.5?
exposure?=?1.5?
hue?=?.1??
learning_rate=0.001?
burn_in=1000?
max_batches=6000?
policy=steps?
steps=4800.0,5400.0?
scales=.1,.1
你也可以在訓(xùn)練YOLOv5中通過改變訓(xùn)練命令中的圖像尺寸參數(shù)來輕松縮放你的輸入分辨率:
!python?train.py?--img?{YOUR?RESOLUTON?SIZE?HERE}?--batch?16?--epochs?10?--data?'../data.yaml'?--cfg?./models/custom_yolov5s.yaml?--weights?''?--name?yolov5s_results??--cache
對圖像進行Tiling
檢測小物體的另一個重要策略是將圖像切割后形成batch,這個操作叫做tile,作為預(yù)處理步驟。tile可以有效地將檢測器聚焦在小物體上,但允許你保持所需的小輸入分辨率,以便能夠運行快速推斷。

如果你在訓(xùn)練中使用tile,重要的是要記住,你也需要在推理時tile你的圖像。
通過增強產(chǎn)生更多數(shù)據(jù)
數(shù)據(jù)增強從基本數(shù)據(jù)集生成新的圖像。這對于防止模型過擬合訓(xùn)練集非常有用。
一些特別有用的小物體檢測增強包括隨機裁剪、隨機旋轉(zhuǎn)和馬賽克增強。
自動學(xué)習(xí)模型Anchors
Anchors是你的模型學(xué)會預(yù)測的與之相關(guān)的原型邊界框。也就是說,anchors可以預(yù)先設(shè)置,有時對你的訓(xùn)練數(shù)據(jù)不是最優(yōu)的。最好根據(jù)你手頭的任務(wù)自定義調(diào)優(yōu)它們。幸運的是,YOLOv5模型會根據(jù)你的自定義數(shù)據(jù)自動為你完成這項工作。你所要做的就是開始訓(xùn)練。
Analyzing?anchors...?anchors/target?=?4.66,?Best?Possible?Recall?(BPR)?=?0.9675.?Attempting?to?generate?improved?anchors,?please?wait...?WARNING:?Extremely?small?objects?found.?35?of?1664?labels?are?3?pixels?in?width?or?height.?Running?kmeans?for?9?anchors?on?1664?points...?thr=0.25:?0.9477?best?possible?recall,?4.95?anchors?past?thr?n=9,?img_size=416,?metric_all=0.317/0.665-mean/best,?past_thr=0.465-mean:?18,24,??65,37,??35,68,??46,135,??152,54,??99,109,??66,218,??220,128,??169,228?Evolving?anchors?with?Genetic?Algorithm:?fitness?=?0.6825:?100%|██████████|?1000/1000?[00:00<00:00,?1081.71it/s]?thr=0.25:?0.9627?best?possible?recall,?5.32?anchors?past?thr?n=9,?img_size=416,?metric_all=0.338/0.688-mean/best,?past_thr=0.476-mean:?13,20,??41,32,??26,55,??46,72,??122,57,??86,102,??58,152,??161,120,??165,204
過濾掉無關(guān)的類別
類別管理是提高數(shù)據(jù)集質(zhì)量的一項重要技術(shù)。如果你有一個類與另一個類明顯重疊,你應(yīng)該從數(shù)據(jù)集中過濾掉這個類。也許,你認(rèn)為數(shù)據(jù)集中的小物體不值得檢測,所以你可能希望將其拿掉。
總結(jié)
正確地檢測小物體確實是一項挑戰(zhàn)。在這篇文章中,我們討論了一些策略來改善你的小物體探測器,即:
提高圖像采集的分辨率 增加模型的輸入分辨率 tile你的圖像 通過增強生成更多數(shù)據(jù) 自動學(xué)習(xí)模型anchors 過濾掉無關(guān)的類別

英文原文:https://towardsdatascience.com/tackling-the-small-object-problem-in-object-detection-6e1c9976ee69
下載1:動手學(xué)深度學(xué)習(xí)
在「AI算法與圖像處理」公眾號后臺回復(fù):動手學(xué)深度學(xué)習(xí),即可下載547頁《動手學(xué)深度學(xué)習(xí)》電子書和源碼。該書是面向中文讀者的能運行、可討論的深度學(xué)習(xí)教科書,它將文字、公式、圖像、代碼和運行結(jié)果結(jié)合在一起。本書將全面介紹深度學(xué)習(xí)從模型構(gòu)造到模型訓(xùn)練,以及它們在計算機視覺和自然語言處理中的應(yīng)用。
個人微信(如果沒有備注不拉群!) 請注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱

