目標(biāo)檢測(cè)難題 | 小目標(biāo)檢測(cè)策略匯總
本文轉(zhuǎn)自:AI算法與圖像處理
來(lái)源:小白學(xué)視覺(jué)
導(dǎo)讀
在計(jì)算機(jī)視覺(jué)中,檢測(cè)小目標(biāo)是最有挑戰(zhàn)的問(wèn)題之一。本文給出了一些有效的策略。
從無(wú)人機(jī)上看到的小目標(biāo)
為了提高你的模型在小目標(biāo)上的性能,我們推薦以下技術(shù):
提高圖像采集的分辨率
增加模型的輸入分辨率
tile你的圖像
通過(guò)增強(qiáng)生成更多數(shù)據(jù)
自動(dòng)學(xué)習(xí)模型anchors
過(guò)濾掉無(wú)關(guān)的類(lèi)別
為什么小目標(biāo)檢測(cè)很困難?
小目標(biāo)問(wèn)題困擾著世界各地的目標(biāo)檢測(cè)模型。不相信嗎?查一下最近的模型在COCO上的評(píng)估結(jié)果,YOLOv3,EfficientDet和YOLOv4:
查看AP_S、AP_M、AP_L以了解最新的模型。小物體檢測(cè)是很難的!
以Efficient為例,小目標(biāo)的AP只有12%,大目標(biāo)的AP為51%。這幾乎是五倍的差異!那么,為什么檢測(cè)小物體如此困難呢?
這一切都?xì)w結(jié)于模型。目標(biāo)檢測(cè)模型通過(guò)在卷積層中對(duì)像素進(jìn)行聚合來(lái)形成特征。
物體檢測(cè)中的特征聚合
在網(wǎng)絡(luò)的末端,基于損失函數(shù)進(jìn)行預(yù)測(cè),損失函數(shù)根據(jù)預(yù)測(cè)值和ground truth之間的差異對(duì)所有像素進(jìn)行加和。
YOLO中的損失函數(shù)
如果ground truth框不大,則在進(jìn)行訓(xùn)練時(shí)信號(hào)會(huì)很小。此外,小物體最有可能有數(shù)據(jù)標(biāo)記錯(cuò)誤,他們的識(shí)別可能被忽略。
從經(jīng)驗(yàn)和理論上講,小物體是很難的。
提升圖像采集的分辨率
分辨率,分辨率,分辨率……都是分辨率的鍋。
非常小的物體的邊界框中可能只包含幾個(gè)像素,這意味著增加圖像的分辨率可以增加探測(cè)器可以從那個(gè)小盒子中形成的豐富特征,這是非常重要的。
因此,我們建議盡可能提高采集圖像的分辨率。
提高模型的輸入分辨率
一旦你有了更高分辨率的圖像,你就可以放大模型的輸入分辨率。警告:這將導(dǎo)致大型模型需要更長(zhǎng)的時(shí)間來(lái)訓(xùn)練,并且當(dāng)你開(kāi)始部署時(shí),也會(huì)更慢地進(jìn)行推斷。你可能需要實(shí)驗(yàn)來(lái)找出速度與性能之間的正確權(quán)衡。
在訓(xùn)練YOLOv4中,你可以通過(guò)改變配置文件中的圖像大小來(lái)輕松縮放輸入分辨率。
[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中通過(guò)改變訓(xùn)練命令中的圖像尺寸參數(shù)來(lái)輕松縮放你的輸入分辨率:
!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
對(duì)圖像進(jìn)行Tiling
檢測(cè)小物體的另一個(gè)重要策略是將圖像切割后形成batch,這個(gè)操作叫做tile,作為預(yù)處理步驟。tile可以有效地將檢測(cè)器聚焦在小物體上,但允許你保持所需的小輸入分辨率,以便能夠運(yùn)行快速推斷。
tile圖像作為預(yù)處理步驟
如果你在訓(xùn)練中使用tile,重要的是要記住,你也需要在推理時(shí)tile你的圖像。
通過(guò)增強(qiáng)產(chǎn)生更多數(shù)據(jù)
數(shù)據(jù)增強(qiáng)從基本數(shù)據(jù)集生成新的圖像。這對(duì)于防止模型過(guò)擬合訓(xùn)練集非常有用。
一些特別有用的小物體檢測(cè)增強(qiáng)包括隨機(jī)裁剪、隨機(jī)旋轉(zhuǎn)和馬賽克增強(qiáng)。
自動(dòng)學(xué)習(xí)模型Anchors
Anchors是你的模型學(xué)會(huì)預(yù)測(cè)的與之相關(guān)的原型邊界框。也就是說(shuō),anchors可以預(yù)先設(shè)置,有時(shí)對(duì)你的訓(xùn)練數(shù)據(jù)不是最優(yōu)的。最好根據(jù)你手頭的任務(wù)自定義調(diào)優(yōu)它們。幸運(yùn)的是,YOLOv5模型會(huì)根據(jù)你的自定義數(shù)據(jù)自動(dòng)為你完成這項(xiàng)工作。你所要做的就是開(kāi)始訓(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ò)濾掉無(wú)關(guān)的類(lèi)別
類(lèi)別管理是提高數(shù)據(jù)集質(zhì)量的一項(xiàng)重要技術(shù)。如果你有一個(gè)類(lèi)與另一個(gè)類(lèi)明顯重疊,你應(yīng)該從數(shù)據(jù)集中過(guò)濾掉這個(gè)類(lèi)。也許,你認(rèn)為數(shù)據(jù)集中的小物體不值得檢測(cè),所以你可能希望將其拿掉。
總結(jié)
正確地檢測(cè)小物體確實(shí)是一項(xiàng)挑戰(zhàn)。在這篇文章中,我們討論了一些策略來(lái)改善你的小物體探測(cè)器,即:
提高圖像采集的分辨率
增加模型的輸入分辨率
tile你的圖像
通過(guò)增強(qiáng)生成更多數(shù)據(jù)
自動(dòng)學(xué)習(xí)模型anchors
過(guò)濾掉無(wú)關(guān)的類(lèi)別
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。