日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > 目标检测 >内容正文

目标检测

对VOC目标检测数据进行增强

發(fā)布時(shí)間:2024/9/19 目标检测 93 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对VOC目标检测数据进行增强 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

VOCDateAugment

目的:對VOC數(shù)據(jù)集的對象檢測的數(shù)據(jù)進(jìn)行數(shù)據(jù)增強(qiáng)。
本人編寫了一個(gè)腳本,在沒使用腳本前請前去除沒有打標(biāo)簽的圖片或多余的標(biāo)簽文件。并請確保標(biāo)簽文件和圖片命名一樣。
如果好用請給我一顆?,謝謝!!!

代碼地址:https://github.com/Mygithub-Yao/tools-VOC

visualiztion模塊

這個(gè)模塊是腳本,主要功能是通過圖片和其label文件,生成帶bboxs的圖片。效果如下圖片

ImgParser模塊

里面有class ImgParser類,類提供了5個(gè)圖片數(shù)據(jù)增強(qiáng)的功能,分別是:加噪音(高斯),反轉(zhuǎn),旋轉(zhuǎn),平移,光度隨機(jī)調(diào)節(jié)。

def addNoise_Img(self, img=None): def filp_img(self, img=None, filp=1): def rotate_Img(self, img=None, angle=5, scale=1.): def shift_Img(self,x,y,img=None): def changeLight_Img(self, img=None):

功能展示:

if __name__ == '__main__':I = ImgParser()I.setImg(r'.\TestDate\Images\000004.jpg')img5, _ =I.rotate_Img()img = [I.addNoise_Img()/255,I.changeLight_Img(),I.filp_img(),I.shift_Img(50,50),img5]pic = ['noise', 'changeLight', 'filp', 'shift','rotate']plt.figure(figsize=(8,6))for i in range(5):plt.subplot(2, 3, i + 1)plt.imshow(img[i])plt.title(pic[i])plt.show()#存儲(chǔ),不要映射回去[0,1]# cv2.imwrite(r'.\TestDate\Images\000004_noise.jpg',I.addNoise_Img())

LabelParser模塊

此功能模塊主要是對標(biāo)簽進(jìn)行處理的,里面包含一個(gè)class LabelParser的類,并且提供一下功能:

#從xml文件中提取bounding box信息, 格式為[[ name,x_min, y_min, x_max, y_max]] def getObject(self,XMLpath =None):#對label文件中的所有目標(biāo)對象進(jìn)行反轉(zhuǎn),默認(rèn)存儲(chǔ)在原文件 def reverse_Object(self,filp=0,save_path=None):#根據(jù)仿射變換矩陣來對對象標(biāo)簽進(jìn)行轉(zhuǎn)換,默認(rèn)保存路徑為原文件,也可以指定新的路徑 def rotate_Object(self, rot_mat,w,h,c,save_path =None, folder_name=None):#復(fù)制當(dāng)前XML文件到指定的新目錄下 def copyXML(self, save_path, newname):#刪除標(biāo)簽文件里的對應(yīng)對象,默認(rèn)寫回到原文件,如果指定新的保存路徑,信息將保存到新的文件中 def deleteObject(self, ObjectName, save_path=None):#更改當(dāng)前xml文件的對象名,默認(rèn)寫回原文件,也可以通過NewPath指定新的保存路徑 def change_ObjectName(self, oldName, newName, save_path=None):#返回標(biāo)簽圖片的寬,高,通道 def getImg_size(self):#文件默認(rèn)存儲(chǔ)路徑為原文件,可以通過NewPath指定新的保存路徑 def changeImg_size(self, newsize, save_path=None):#設(shè)置要解析的標(biāo)簽文件 def setXML(self,path):

一個(gè)小示例:

if __name__ == '__main__': #加載paser = LabelParser(r'.\TestDate\label\000004.xml')#改變圖片大小paser.changeImg_size([1222,1250],r'.\TestDate\label')#獲取圖片sizeprint(paser.getImg_size())#改變對象名,默認(rèn)寫回加載文件,也可以指定新的路徑。paser.change_ObjectName('car', 'bigcar',save_path='.\TestDate\label')#刪除指定Object#paser.deleteObject('star')#獲得對象數(shù)據(jù)print(paser.getObject())#對label里面的框做鏡像反轉(zhuǎn),并指定新保存路徑paser.reverse_Object(filp=0, save_path='.\TestDate\label')

DataAugmentVOC模塊

此模塊提供簡易的批處理數(shù)據(jù)增強(qiáng),通過新建類DataAugmentVOC來提供批量VOC數(shù)據(jù)集的數(shù)據(jù)增強(qiáng)。

提供以下功能:

#圖片反轉(zhuǎn),默認(rèn)水平反轉(zhuǎn) def filp(self,filp=1):#對VOC數(shù)據(jù)集的數(shù)據(jù)進(jìn)行旋轉(zhuǎn),生成新的旋轉(zhuǎn)圖片和新的label文件 def rotate(self,angle=5, scale=1.):#對VOC數(shù)據(jù)集的所有圖片調(diào)節(jié)亮度,并復(fù)制一份label文件,r指定亮化值 def changeLight(self,r=None):#對VOC數(shù)據(jù)集的所有圖片添加高斯噪音,并復(fù)制一份label文件 def addNoise(self):

小示例:

if __name__ == '__main__':start = time.time()V = DataAugmentVOC(rootpath=r'.\TestDate\VOC')V.addNoise()V.changeLight()V.rotate(angle=15)V.filp(filp=1)end =time.time()print("total of {}".format(end-start))

生成結(jié)果保存在新文件夾:

結(jié)果圖片:(部分)

總結(jié)

以上是生活随笔為你收集整理的对VOC目标检测数据进行增强的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。