作者丨Jacob Solawetz
來源丨小白學(xué)視覺
編輯丨極市平臺(tái)
為了提高模型在小物體上的性能,我們建議使用以下技術(shù):
- 提高圖像捕獲分辨率
- 提高模型的輸入分辨率
- 平鋪圖像
- 通過擴(kuò)充生成更多數(shù)據(jù)
- 自動(dòng)學(xué)習(xí)模型錨
- 過濾掉多余的類
為什么小目標(biāo)問題很難?
小物體問題困擾著全世界的物體檢測(cè)模型,查看最新模型YOLOv3、EfficientDet和YOLOv4的COCO評(píng)估結(jié)果:
查看 AP_S、AP_M、AP_L 以獲取最先進(jìn)的模型。
例如,在 EfficientDet 中,小物體的 AP 僅為 12%,而大物體的 AP 為 51%,這幾乎是五倍的差距。
那么為什么檢測(cè)小物體這么難呢?
這一切都取決于模型,目標(biāo)檢測(cè)模型通過聚合卷積層中的像素來形成特征。
PP-YOLO中目標(biāo)檢測(cè)的特征聚合
并且在網(wǎng)絡(luò)的末端,基于損失函數(shù)進(jìn)行預(yù)測(cè),該損失函數(shù)基于預(yù)測(cè)和地面真實(shí)情況之間的差異對(duì)像素進(jìn)行匯總。
YOLO中的損失函數(shù)
如果地面真值框不大,則在進(jìn)行訓(xùn)練時(shí)信號(hào)會(huì)很小。此外,小物體最有可能存在數(shù)據(jù)標(biāo)記錯(cuò)誤,因此它們的標(biāo)識(shí)可能會(huì)被省略,從經(jīng)驗(yàn)和理論上來說,小物體是難的。
提高圖像捕獲分辨率
非常小的物體在邊界框中可能只包含幾個(gè)像素——這意味著提高圖像的分辨率以增加檢測(cè)器可以從該小框中形成的特征的豐富度非常重要。因此,如果可能,我們建議盡可能捕獲高分辨率的圖像。
提高模型的輸入分辨率
一旦我們擁有更高分辨率的圖像,我們就可以擴(kuò)大模型的輸入分辨率。警告:這將導(dǎo)致大型模型需要更長的訓(xùn)練時(shí)間,并且在開始部署時(shí)推斷速度會(huì)更慢。我們可能需要運(yùn)行實(shí)驗(yàn),來找出速度與性能之間的正確權(quán)衡。
在我們關(guān)于培訓(xùn)YOLOv4的教程中,我們可以通過更改配置文件中的圖像大小來輕松調(diào)整輸入分辨率。
[net] batch=64 subpisions=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)練”命令中的“圖像大小”參數(shù),輕松調(diào)整輸入分辨率,該教程介紹了如何訓(xùn)練YOLOv5:
!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ù)的最大分辨率時(shí),才能看到改進(jìn)的結(jié)果。
平鋪圖像
檢測(cè)小圖像的另一種很好的策略是將圖像平鋪?zhàn)鳛轭A(yù)處理步驟。平鋪可以有效地將檢測(cè)器放大到小物體上,但允許我們保持所需的小輸入分辨率,以便能夠進(jìn)行快速推理。
平鋪圖像作為 Roboflow 中的預(yù)處理步驟
如果在訓(xùn)練期間使用平鋪,請(qǐng)務(wù)必記住,我們還需要在推理時(shí)平鋪圖像。
通過擴(kuò)充生成更多數(shù)據(jù)
數(shù)據(jù)擴(kuò)充會(huì)從我們的基本數(shù)據(jù)集生成新圖像,這對(duì)于防止模型過度擬合訓(xùn)練集非常有用。
一些特別有用的小物體檢測(cè)增強(qiáng)包括隨機(jī)裁剪、隨機(jī)旋轉(zhuǎn)和鑲嵌增強(qiáng)。
自動(dòng)學(xué)習(xí)模型錨
錨定框是模型學(xué)習(xí)預(yù)測(cè)的原型邊界框,也就是說,錨框可以預(yù)先設(shè)置,有時(shí)對(duì)于我們的訓(xùn)練數(shù)據(jù)來說不是最理想的。自定義調(diào)整這些參數(shù)以適合我們即將完成的任務(wù)是很好的,YOLOv5 模型架構(gòu)會(huì)根據(jù)我們的自定義數(shù)據(jù)自動(dòng)為我們執(zhí)行此操作,我們所要做的就是開始訓(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
過濾掉多余的類
類管理是提高數(shù)據(jù)集質(zhì)量的一項(xiàng)重要技術(shù),如果我們的一個(gè)類與另一個(gè)類明顯重疊,則應(yīng)從數(shù)據(jù)集中過濾該類。也許,我們認(rèn)為數(shù)據(jù)集中的小對(duì)象不值得檢測(cè),因此我們可能想要將其取出。通過Roboflow Pro中的高級(jí)數(shù)據(jù)集進(jìn)行狀況檢查,我們可以快速識(shí)別所有這些問題。
可以通過Roboflow 的本體管理工具來實(shí)現(xiàn)類遺漏和類重命名。