对VOC目标检测数据进行增强
生活随笔
收集整理的這篇文章主要介紹了
对VOC目标检测数据进行增强
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
VOCDateAugment
目的:對VOC數據集的對象檢測的數據進行數據增強。
本人編寫了一個腳本,在沒使用腳本前請前去除沒有打標簽的圖片或多余的標簽文件。并請確保標簽文件和圖片命名一樣。
如果好用請給我一顆?,謝謝!!!
代碼地址:https://github.com/Mygithub-Yao/tools-VOC
visualiztion模塊
這個模塊是腳本,主要功能是通過圖片和其label文件,生成帶bboxs的圖片。效果如下圖片
ImgParser模塊
里面有class ImgParser類,類提供了5個圖片數據增強的功能,分別是:加噪音(高斯),反轉,旋轉,平移,光度隨機調節。
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()#存儲,不要映射回去[0,1]# cv2.imwrite(r'.\TestDate\Images\000004_noise.jpg',I.addNoise_Img())LabelParser模塊
此功能模塊主要是對標簽進行處理的,里面包含一個class LabelParser的類,并且提供一下功能:
#從xml文件中提取bounding box信息, 格式為[[ name,x_min, y_min, x_max, y_max]] def getObject(self,XMLpath =None):#對label文件中的所有目標對象進行反轉,默認存儲在原文件 def reverse_Object(self,filp=0,save_path=None):#根據仿射變換矩陣來對對象標簽進行轉換,默認保存路徑為原文件,也可以指定新的路徑 def rotate_Object(self, rot_mat,w,h,c,save_path =None, folder_name=None):#復制當前XML文件到指定的新目錄下 def copyXML(self, save_path, newname):#刪除標簽文件里的對應對象,默認寫回到原文件,如果指定新的保存路徑,信息將保存到新的文件中 def deleteObject(self, ObjectName, save_path=None):#更改當前xml文件的對象名,默認寫回原文件,也可以通過NewPath指定新的保存路徑 def change_ObjectName(self, oldName, newName, save_path=None):#返回標簽圖片的寬,高,通道 def getImg_size(self):#文件默認存儲路徑為原文件,可以通過NewPath指定新的保存路徑 def changeImg_size(self, newsize, save_path=None):#設置要解析的標簽文件 def setXML(self,path):一個小示例:
if __name__ == '__main__': #加載paser = LabelParser(r'.\TestDate\label\000004.xml')#改變圖片大小paser.changeImg_size([1222,1250],r'.\TestDate\label')#獲取圖片sizeprint(paser.getImg_size())#改變對象名,默認寫回加載文件,也可以指定新的路徑。paser.change_ObjectName('car', 'bigcar',save_path='.\TestDate\label')#刪除指定Object#paser.deleteObject('star')#獲得對象數據print(paser.getObject())#對label里面的框做鏡像反轉,并指定新保存路徑paser.reverse_Object(filp=0, save_path='.\TestDate\label')DataAugmentVOC模塊
此模塊提供簡易的批處理數據增強,通過新建類DataAugmentVOC來提供批量VOC數據集的數據增強。
提供以下功能:
#圖片反轉,默認水平反轉 def filp(self,filp=1):#對VOC數據集的數據進行旋轉,生成新的旋轉圖片和新的label文件 def rotate(self,angle=5, scale=1.):#對VOC數據集的所有圖片調節亮度,并復制一份label文件,r指定亮化值 def changeLight(self,r=None):#對VOC數據集的所有圖片添加高斯噪音,并復制一份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))生成結果保存在新文件夾:
結果圖片:(部分)
總結
以上是生活随笔為你收集整理的对VOC目标检测数据进行增强的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络布线应该如何连接电脑如何连接上网设置
- 下一篇: 轻薄本操作流畅不卡顿笔记本卡顿不流畅