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