物體檢測中的小物體問題

極市導(dǎo)讀
?在物體檢測過程中,小物體最有可能出現(xiàn)數(shù)據(jù)標(biāo)記錯誤,甚至可能會省略其標(biāo)識。因此從經(jīng)驗和理論上講,小物體都很難檢測。本文作者討論通過迭代數(shù)百種小物體檢測模型在Roboflow上開發(fā)的一些策略。>>加入極市CV技術(shù)交流群,走在計算機(jī)視覺的最前沿
檢測小物體是計算機(jī)視覺中最具挑戰(zhàn)性和重要的問題之一。在這篇文章中,我們將討論通過迭代數(shù)百種小物體檢測模型在Roboflow上開發(fā)的一些策略。
無人機(jī)在公共空中海上數(shù)據(jù)集中從上方看到的小物體

為了提高模型在小對象上的性能,我們建議以下技術(shù)入手:
提高圖像拍攝分辨率
增加模型的輸入分辨率
平鋪圖片
通過擴(kuò)充生成更多數(shù)據(jù)
自動學(xué)習(xí)模型
過濾掉多余的類
為什么小物體問題很難?
小物體問題困擾著全世界的物體檢測模型。查看最新模型YOLOv3,EfficientDet和YOLOv4的COCO評估結(jié)果:

檢查AP_S,AP_M,AP_L的最新模型。小物件很難!例如,在EfficientDet中,小型對象的AP僅為12%,大型對象的AP為51%。那幾乎是五倍的差異!那么,為什么很難檢測小物體呢?一切都取決于模型。對象檢測模型通過聚合卷積層中的像素來形成特征。

PP-YOLO中用于對象檢測的特征聚合
并且:

YOLO中的損失函數(shù)
如果地面物體本來就不大,而在進(jìn)行訓(xùn)練時還會變小。因此,小物體最有可能出現(xiàn)數(shù)據(jù)標(biāo)記錯誤,甚至可能會省略其標(biāo)識。從經(jīng)驗和理論上講,小物體都很難檢測。
提高圖像拍攝分辨率
分辨率,分辨率,分辨率……全都與分辨率有關(guān)。
很小的物體在邊界框內(nèi)可能只包含幾個像素,這意味著增加圖像的分辨率以增加檢測器可以從該邊界框提取信息的豐富度,這非常重要。因此,如果可能我們建議捕獲盡可能高分辨率的圖像。
增加模型的輸入分辨率
獲得更高分辨率的圖像后,就可以擴(kuò)大模型的輸入分辨率。警告:這將導(dǎo)致大型模型需要花費較長的訓(xùn)練時間,并且在開始部署時將較慢地推斷出來。您可能需要進(jìn)行實驗以找出速度與性能之間的權(quán)衡。大家可以在我們的有關(guān)YOLOv4培訓(xùn)的教程中輕松更改輸入分辨率,方法是更改配置文件中的圖像大小。
[net]batch=64subdivisions=36width={YOUR RESOLUTION WIDTH HERE}height={YOUR RESOLUTION HEIGHT HERE}channels=3momentum=0.949decay=0.0005angle=0saturation = 1.5exposure = 1.5hue = .1learning_rate=0.001burn_in=1000max_batches=6000policy=stepssteps=4800.0,5400.0scales=.1,.1
更改輸入分辨率方法是更改訓(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注意:大家只會看到達(dá)到最大訓(xùn)練數(shù)據(jù)分辨率的改進(jìn)結(jié)果。
平鋪圖片
檢測小圖像的另一種很好的策略是將圖像平鋪作為預(yù)處理步驟。平鋪可以有效地將檢測器放大到小物體上,但可以保持所需的小輸入分辨率,以便能夠進(jìn)行快速推理。

在Roboflow中平鋪圖像作為預(yù)處理步驟如果大家要在訓(xùn)練期間使用平鋪,請務(wù)必記住,還需要在推理時平鋪圖像。
通過擴(kuò)充生成更多數(shù)據(jù)
數(shù)據(jù)擴(kuò)充會從基本數(shù)據(jù)集中生成新圖像。這對于防止模型過度擬合訓(xùn)練集非常有用。對于小物體檢測,一些特別有用的增強包括隨機(jī)裁剪,隨機(jī)旋轉(zhuǎn)和鑲嵌增強。
自動學(xué)習(xí)模型的錨定框
錨定框是模型學(xué)習(xí)預(yù)測的原型邊界框。也就是說,錨框可以預(yù)先設(shè)置,有時對于訓(xùn)練數(shù)據(jù)而言不是最佳的。自定義調(diào)整這些參數(shù)以適合我們需要完成的任務(wù),這是很好的。YOLOv5模型架構(gòu)會根據(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 1664points... thr=0.25: 0.9477 best possible recall, 4.95 anchors pastthr 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 GeneticAlgorithm: fitness = 0.6825: 100%|██████████| 1000/1000 [00:00<00:00,1081.71it/s] thr=0.25: 0.9627 best possible recall, 5.32 anchors pastthr 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
過濾掉多余的類
類管理是提高數(shù)據(jù)集質(zhì)量的一項重要技術(shù)。如果有兩個類明顯重疊的類,則應(yīng)從數(shù)據(jù)集中過濾一個。如果因為認(rèn)為數(shù)據(jù)集中的小對象不值得檢測,并希望將他們先去除。大家可以通過運行Roboflow Pro的高級數(shù)據(jù)集來快速識別所有這些小對象??梢酝ㄟ^Roboflow的管理工具來實現(xiàn)類遺漏和類重命名。
推薦閱讀

