用Python和OpenCV為對(duì)象檢測(cè)任務(wù)實(shí)現(xiàn)最流行、最高效的數(shù)據(jù)擴(kuò)充
數(shù)據(jù)擴(kuò)充是一種增加數(shù)據(jù)集多樣性的技術(shù),無(wú)需收集更多真實(shí)數(shù)據(jù),但仍有助于提高模型精度并防止模型過(guò)擬合。
在本文中,你將學(xué)習(xí)使用Python和OpenCV為對(duì)象檢測(cè)任務(wù)實(shí)現(xiàn)最流行、最高效的數(shù)據(jù)擴(kuò)充過(guò)程。
即將引入的一組數(shù)據(jù)擴(kuò)充方法包括:
1.隨機(jī)裁剪
2.Cutout
3.顏色抖動(dòng)
4.增加噪音
5.過(guò)濾
首先,在繼續(xù)之前,讓我們導(dǎo)入幾個(gè)庫(kù)并準(zhǔn)備一些必要的子例程。
import os
import cv2
import numpy as np
import random
def file_lines_to_list(path):
'''
### 在TXT文件里的行轉(zhuǎn)換為列表 ###
path: 文件路徑
'''
with open(path) as f:
content = f.readlines()
content = [(x.strip()).split() for x in content]
return content
def get_file_name(path):
'''
### 獲取Filepath的文件名 ###
path: 文件路徑
'''
basename = os.path.basename(path)
onlyname = os.path.splitext(basename)[0]
return onlyname
def write_anno_to_txt(boxes, filepath):
'''
### 給TXT文件寫(xiě)注釋 ###
boxes: format [[obj x1 y1 x2 y2],...]
filepath: 文件路徑
'''
txt_file = open(filepath, "w")
for box in boxes:
print(box[0], int(box[1]), int(box[2]), int(box[3]), int(box[4]), file=txt_file)
txt_file.close()
下面的圖片是在這篇文章中使用的示例圖片。
隨機(jī)裁剪隨機(jī)裁剪隨機(jī)選擇一個(gè)區(qū)域并進(jìn)行裁剪以生成新的數(shù)據(jù)樣本,裁剪后的區(qū)域應(yīng)具有與原始圖像相同的寬高比,以保持對(duì)象的形狀。
從上圖中,左側(cè)圖像表示具有邊界框(紅色)的原始圖像,通過(guò)裁剪橙色框內(nèi)的區(qū)域創(chuàng)建一個(gè)新樣本作為右側(cè)圖像。在新示例的注釋中,將刪除與左側(cè)圖像中的橙色框不重疊的所有對(duì)象,并細(xì)化位于橙色框邊界上的對(duì)象的坐標(biāo),使其適合新圖像示例。原始圖像的隨機(jī)裁剪輸出為新裁剪圖像及其注釋。
Cutout
Terrance DeVries和Graham W.Taylor在2017年的論文中介紹了Cutout,它是一種簡(jiǎn)單的正則化技術(shù),用于在訓(xùn)練過(guò)程中隨機(jī)屏蔽輸入的方塊區(qū)域,可用于提高卷積神經(jīng)網(wǎng)絡(luò)的魯棒性和整體性能。
這種方法不僅非常容易實(shí)現(xiàn),而且還表明它可以與現(xiàn)有形式的數(shù)據(jù)擴(kuò)充和其他正則化工具結(jié)合使用,以進(jìn)一步提高模型性能。
如本文所述,剪切用于提高圖像識(shí)別(分類(lèi))的準(zhǔn)確性,因此,如果我們將相同的方案部署到對(duì)象檢測(cè)數(shù)據(jù)集中,可能會(huì)導(dǎo)致丟失對(duì)象的問(wèn)題,尤其是小對(duì)象。
在下圖中,cutout區(qū)域(黑色區(qū)域)內(nèi)的大量小對(duì)象被移除,這不符合數(shù)據(jù)擴(kuò)充的精神。
為了使這種方式適用于對(duì)象檢測(cè),我們可以進(jìn)行簡(jiǎn)單的修改,而不是僅使用一個(gè)蒙版并將其放置在圖像中的隨機(jī)位置。當(dāng)我們隨機(jī)選擇一半數(shù)量的對(duì)象并將剪切應(yīng)用于這些對(duì)象區(qū)域時(shí),效果會(huì)更好。增強(qiáng)圖像如下圖中的右圖所示。
剪切輸出是新生成的圖像,我們不移除對(duì)象或更改圖像大小,則生成圖像的注釋與原始圖像相同。
def cutout(img, gt_boxes, amount=0.5):
'''
### Cutout ###
img: 圖像
gt_boxes: format [[obj x1 y1 x2 y2],...]
amount: 蒙版數(shù)量/對(duì)象數(shù)量
'''
out = img.copy()
ran_select = random.sample(gt_boxes, round(amount*len(gt_boxes)))
for box in ran_select:
x1 = int(box[1])
y1 = int(box[2])
x2 = int(box[3])
y2 = int(box[4])
mask_w = int((x2 - x1)*0.5)
mask_h(yuǎn) = int((y2 - y1)*0.5)
mask_x1 = random.randint(x1, x2 - mask_w)
mask_y1 = random.randint(y1, y2 - mask_h(yuǎn))
mask_x2 = mask_x1 + mask_w
mask_y2 = mask_y1 + mask_h(yuǎn)
cv2.rectangle(out, (mask_x1, mask_y1), (mask_x2, mask_y2), (0, 0, 0), thickness=-1)
return out
顏色抖動(dòng)
ColorJitter是另一種簡(jiǎn)單的圖像數(shù)據(jù)增強(qiáng),我們可以隨機(jī)改變圖像的亮度、對(duì)比度和飽和度。我相信這個(gè)技術(shù)很容易被大多數(shù)讀者理解。
增加噪聲在一般意義上,噪聲被認(rèn)為是圖像中的一個(gè)意外因素,然而,幾種類(lèi)型的噪聲(例如高斯噪聲、椒鹽噪聲)可用于數(shù)據(jù)增強(qiáng),在深度學(xué)習(xí)中添加噪聲是一種非常簡(jiǎn)單和有益的數(shù)據(jù)增強(qiáng)方法。在下面的示例中,為了增強(qiáng)數(shù)據(jù),將高斯噪聲和椒鹽噪聲添加到原始圖像中。
對(duì)于那些無(wú)法識(shí)別高斯噪聲和椒鹽噪聲之間差異的人,高斯噪聲的值范圍為0到255,具體取決于配置,因此,在RGB圖像中,高斯噪聲像素可以是任何顏色。相比之下,椒鹽噪波像素只能有兩個(gè)值0或255,分別對(duì)應(yīng)于黑色(PEPER)或白色(salt)。
濾波本文介紹的最后一個(gè)數(shù)據(jù)擴(kuò)充過(guò)程是濾波。與添加噪聲類(lèi)似,濾波也簡(jiǎn)單且易于實(shí)現(xiàn)。實(shí)現(xiàn)中使用的三種類(lèi)型的濾波包括模糊(平均)、高斯和中值。
總結(jié)
在這篇文章中,向大家介紹了一個(gè)關(guān)于為對(duì)象檢測(cè)任務(wù)實(shí)現(xiàn)數(shù)據(jù)增強(qiáng)的教程。你們可以在這里找到完整實(shí)現(xiàn)。

發(fā)表評(píng)論
登錄
手機(jī)
驗(yàn)證碼
立即登錄即可訪(fǎng)問(wèn)所有OFweek服務(wù)
還不是會(huì)員?免費(fèi)注冊(cè)
忘記密碼請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
-
機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹(shù)機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-
存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-
長(zhǎng)安汽車(chē)母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-
豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-
字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-
員工持股爆雷?廣汽埃安緊急回應(yīng)
-
中國(guó)“智造”背后的「關(guān)鍵力量」
-
小米汽車(chē)研發(fā)中心重磅落地,寶馬家門(mén)口“搶人”
最新活動(dòng)更多
-
即日-9.16點(diǎn)擊進(jìn)入 >> 【限時(shí)福利】TE 2025國(guó)際物聯(lián)網(wǎng)展·深圳站
-
10月23日立即報(bào)名>> Works With 開(kāi)發(fā)者大會(huì)深圳站
-
10月24日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月27日立即報(bào)名>> 【工程師系列】汽車(chē)電子技術(shù)在線(xiàn)大會(huì)
-
12月18日立即報(bào)名>> 【線(xiàn)下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
精彩回顧立即查看>> 【限時(shí)下載】ADI中國(guó)三十周年感恩回饋助力企業(yè)升級(jí)!
推薦專(zhuān)題
- 1 阿里首位程序員,“掃地僧”多隆已離職
- 2 先進(jìn)算力新選擇 | 2025華為算力場(chǎng)景發(fā)布會(huì)暨北京xPN伙伴大會(huì)成功舉辦
- 3 宇樹(shù)機(jī)器人撞人事件的深度剖析:六維力傳感器如何成為人機(jī)安全的關(guān)鍵屏障
- 4 清華跑出具身智能獨(dú)角獸:給機(jī)器人安上眼睛和大腦,融資近20億
- 5 踢館大廠和微軟,剖析WPS靈犀的AI實(shí)用主義
- 6 特朗普要求英特爾首位華人 CEO 辭職
- 7 騰訊 Q2 財(cái)報(bào)亮眼:AI 已成第二增長(zhǎng)曲線(xiàn)
- 8 AI版“四萬(wàn)億刺激”計(jì)劃來(lái)了
- 9 谷歌吹響AI沖鋒號(hào),AI還有哪些機(jī)會(huì)
- 10 蘋(píng)果把身家押在Siri上:一場(chǎng)輸不起的自我革命