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

歡迎訪問 生活随笔!

生活随笔

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

目标检测

.val()数据乱码_【目标检测数据集】PASCAL VOC制作

發布時間:2024/8/23 目标检测 98 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .val()数据乱码_【目标检测数据集】PASCAL VOC制作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【VOC2007+2012】

數據集地址:https://pjreddie.com/projects/pascal-voc-dataset-mirror/

PASCAL VOC為圖像識別和分類提供了一整套標準化的優秀的數據集,用于構建和評估用于圖像分類(Classification),檢測(Object Detection),和分割(Segmentation)的算法,從2005年到2012年每年都會舉行一場圖像識別challenge。

數據集類別(20類):

Person: person;Animal: bird, cat, cow, dog, horse, sheep;Vehicle: aeroplane, bicycle, boat, bus, car, motorbike, train;Indoor: bottle, chair, dining table, potted plant, sofa, tv/monitor;

數據集目錄(VOC2007為例,只列出目標檢測所用到的):

-VOCdevkit-VOC2007-Annotations #存放xml標注文件,每個xml文件都對應于JPEGImages文件夾的一張圖片,文件命名格式為:<圖片編號.xml>-JPEGImages #存放訓練圖片和測試圖片,文件命名格式為:<圖片編號.jpg>-ImageSets #存放的是challenge對應的圖像數據-Main #存放的是圖像物體識別的數據,包含下列4個文件,文件內容格式均為:<圖片編號>-train.txt #記錄訓練集所包含的圖片編號-test.txt #記錄測試集所包含的圖片編號-val.txt #記錄驗證集所包含的圖片編號-trainval.txt #記錄驗證集和訓練集所包含的圖片編號

把上述目錄所列的文件夾建好,接下來制作自己的VOC格式數據集。

【標注工具labelImg】

labelImg軟件是一款免費的圖像標注工具,常用來為目標檢測任務標注數據集。labelImg的安裝和使用參考GitHub項目:

https://github.com/tzutalin/labelImg?github.com

記錄下自己Mac版本的安裝過程:

conda activate 環境名稱 #可選 pip install pyqt5 pip install libxml2 pip install labelImg labelImg #運行

【制作自己的數據集】

1.JPEGImages文件夾

搜集并刪選出自定類別的圖片數據,將所有的.jpg圖像文件放入JPEGImages文件夾,命名格式統一為“%6d.jpg”,(000001.jpg)

# -*- coding:utf8 -*-'''批量重命名文件夾中的圖片文件''' import os class BatchRename():def __init__(self):self.path = './JPEGImages' # 修改成自己JPEGImages文件夾路徑def rename(self):filelist = os.listdir(self.path)total_num = len(filelist)i = 1n = 6for item in filelist:if item.endswith('.jpg'):n = 6 - len(str(i))src = os.path.join(os.path.abspath(self.path), item)dst = os.path.join(os.path.abspath(self.path), str(0) * n + str(i) + '.jpg')try:os.rename(src, dst)print'converting %s to %s ...' % (src, dst)i = i + 1except:continueprint'total %d to rename & converted %d jpgs' % (total_num, i) if __name__ == '__main__':demo = BatchRename()demo.rename()

2.Annotations文件夾

使用labelImg工具標注圖片中的目標,選擇好圖片存放文件夾(JPEGImages)和標注文件夾(Annotations),接下來就是無止盡的標注。。。

3.ImageSets文件夾

在ImageSets文件夾下新建Main文件夾,執行下面代碼生成test.txt , train.txt , trainval.txt , val.txt。

# -*- coding:utf-8 -*-import os import random trainval_percent = 0.7 # 自己設定(訓練集+驗證集)所占(訓練集+驗證集+測試集)的比重 train_percent = 0.8 # 自己設定(訓練集)所占(訓練集+驗證集)的比重 xmlfilepath = 'Annotations/' #注意自己地址是否正確 txtsavepath = 'ImageSets/Main' #注意自己地址是否正確 total_xml = os.listdir(xmlfilepath) num = len(total_xml) list = range(num) tv = int(num*trainval_percent) tr = int(tv*train_percent) trainval = random.sample(list,tv) train = random.sample(trainval,tr) ftrainval = open(txtsavepath+'/trainval.txt', 'w') ftest = open(txtsavepath+'/test.txt', 'w') ftrain = open(txtsavepath+'/train.txt', 'w') fval = open(txtsavepath+'/val.txt', 'w') for i in list: name = total_xml[i][:-4]+'n' if i in trainval: ftrainval.write(name) if i in train: ftrain.write(name) else: fval.write(name) else: ftest.write(name) ftrainval.close() ftrain.close() fval.close() ftest .close() print('Done')

【數據集常用代碼】

1.批量修改xml標簽

import os import xml.etree.ElementTree as ET#程序功能:批量修改VOC數據集中xml標簽文件的標簽名稱 def changelabelname(inputpath):listdir = os.listdir(inputpath)for file in listdir:if file.endswith('xml'):file = os.path.join(inputpath,file)tree = ET.parse(file)root = tree.getroot()for object1 in root.findall('object'):for sku in object1.findall('name'): #查找需要修改的名稱if (sku.text == 'type2_03'): #‘preName’為修改前的名稱sku.text = 'type2_02' #‘TESTNAME’為修改后的名稱tree.write(file,encoding='utf-8') #寫進原始的xml文件并避免原始xml中文字符亂碼else:passelse:passif __name__ == '__main__':inputpath = 'anno/' #此處替換為自己的路徑changelabelname(inputpath)

2.批量統計每個類別的圖片數量及目標數量

import re import os import xml.etree.ElementTree as ETclass1 = 'type1_01' #根據自己的類別修改(以下要均修改) class2 = 'type2_02' class3 = 'type2_03' class4 = 'type1_02' ''' class20 = 'tvmonitor' ''' annotation_folder = './Annotations/' # 改為自己標簽文件夾的路徑 # annotation_folder = '/home/.../VOC2007/Annotations/' list = os.listdir(annotation_folder)def file_name(file_dir):L = []for root, dirs, files in os.walk(file_dir):for file in files:if os.path.splitext(file)[1] == '.xml':L.append(os.path.join(root, file))return Ltotal_number1 = 0 total_number2 = 0 total_number3 = 0 total_number4 = 0 ''' total_number20 = 0 ''' total = 0 total_pic = 0pic_num1 = 0 pic_num2 = 0 pic_num3 = 0 pic_num4 = 0 ''' pic_num20 = 0 '''flag1 = 0 flag2 = 0 flag3 = 0 flag4 = 0 ''' flag20 = 0 '''xml_dirs = file_name(annotation_folder)for i in range(0, len(xml_dirs)):print(xml_dirs[i])annotation_file = open(xml_dirs[i]).read()root = ET.fromstring(annotation_file)total_pic = total_pic + 1for obj in root.findall('object'):label = obj.find('name').textif label == class1:total_number1 = total_number1 + 1flag1 = 1total = total + 1if label == class2:total_number2 = total_number2 + 1flag2 = 1total = total + 1if label == class3:total_number3 = total_number3 + 1flag3 = 1total = total + 1if label == class4:total_number4 = total_number4 + 1flag4 = 1total = total + 1'''if label == class20:total_number20=total_number20+1flag20=1total = total + 1'''if flag1 == 1:pic_num1 = pic_num1 + 1# print("pic number:", pic_num1)flag1 = 0if flag2 == 1:pic_num2 = pic_num2 + 1flag2 = 0if flag3 == 1:pic_num3 = pic_num3 + 1flag3 = 0if flag4 == 1:pic_num4 = pic_num4 + 1flag4 = 0'''if flag20==1:pic_num20=pic_num20+1flag20=0'''print(class1, pic_num1, total_number1) print(class2, pic_num2, total_number2) print(class3, pic_num3, total_number3) print(class4, pic_num4, total_number4) ''' print(class20,pic_num20, total_number20) '''print("total", total_pic, total)

3.圖片批量增廣(水平、上下翻轉等)

""" 圖片批量翻轉 """ from PIL import Image import os import os.path# 指明被遍歷的文件夾 rootdir = r'Rust_01/' for parent, dirnames, filenames in os.walk(rootdir): # 遍歷圖片for filename in filenames:print('parent is :' + parent)print('filename is :' + filename)currentPath = os.path.join(parent, filename)print('the fulll name of the file is :' + currentPath)im = Image.open(currentPath)# Image.FLIP_LEFT_RIGHT,表示將圖像左右翻轉out = im.transpose(Image.FLIP_LEFT_RIGHT)# Image.FLIP_TOP_BOTTOM,表示將圖像上下翻轉# out = im.transpose(Image.FLIP_TOP_BOTTOM)# Image.ROTATE_90,表示將圖像逆時針旋轉90°# out = im.transpose(Image.ROTATE_90)# Image.ROTATE_180,表示將圖像逆時針旋轉180°# out = im.transpose(Image.ROTATE_180)# Image.ROTATE_270,表示將圖像逆時針旋轉270°# out = im.transpose(Image.ROTATE_270)# Image.TRANSPOSE,表示將圖像進行轉置(相當于順時針旋轉90°)# out = im.transpose(Image.TRANSPOSE)# Image.TRANSVERSE,表示將圖像進行轉置,再水平翻轉# out = im.transpose(Image.TRANSVERSE)# 新建文件夾保存翻轉后圖片newname = r"Rust_01/" + '' + filenameout.save(newname) # 保存結束

說明:研一初學目標檢測,本文記錄自己制作數據集的過程,以上參考、摘抄于以下文章,推薦閱讀。有些代碼忘記在哪里借鑒的了,如有讀者見到,聯系,加入參考鏈接。

參考:

轉載:VOC2007數據集制作 - _harvey - 博客園?www.cnblogs.comCSDN-專業IT技術社區-登錄?blog.csdn.netCSDN-專業IT技術社區-登錄?blog.csdn.net

總結

以上是生活随笔為你收集整理的.val()数据乱码_【目标检测数据集】PASCAL VOC制作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品欧美乱码久久久久久1区2区 | 精品国产丝袜一区二区三区乱码 | 国产免费又粗又猛又爽 | 久久嗨| 日韩美女啪啪 | 午夜在线精品 | 亚洲精品日韩综合观看成人91 | 综合久久一区二区 | 中文字幕精品久久久久人妻红杏1 | 亚洲AV成人无码网站天堂久久 | 99久久免费看精品国产一区 | 老司机av导航 | 国产男女精品 | 精品视频在线一区 | 久久成人激情 | 成人av网址在线观看 | 日韩av在线直播 | 成人在线观看一区二区 | 久久久久国产一区 | 成人动漫在线播放 | 免费成人av在线 | 日韩欧美成人免费视频 | 国产精品久久久久999 | 很黄很黄的网站 | 国产农村妇女毛片精品久久 | 国产日韩大片 | 色视频网 | 中文天堂在线观看 | xxav在线| 日韩中文欧美 | 国产精品成人久久久久久久 | 精品人妻一区二区三区四区五区 | 北条麻妃一区二区三区在线观看 | 欧美日韩3p | 黄色日皮视频 | 91视频免费观看网站 | 国产超碰97| 中文字幕免费看 | 草逼视频网 | 欧美第七页 | 两根大肉大捧一进一出好爽视频 | 国产成人自拍网 | 欧美18一20男同69gay | 97在线免费视频观看 | 美女在线一区 | 在线播放日韩av | 日本美女一区二区 | xxxx色| 亚洲国产一区二区三区四区 | 午夜免费小视频 | 午夜在线视频观看 | 国产欧美日韩综合精品一区二区 | 成人永久免费 | 求欧美精品网址 | 亚洲欧洲免费无码 | 国产传媒在线视频 | 国产区在线观看视频 | av网站在线免费观看 | 在线观看一区二区三区四区 | av高清| 成人黄色免费网址 | 人人干超碰 | 韩国av一区 | 欧美天堂在线视频 | 日本一区精品视频 | 国产综合欧美 | 免费黄视频网站 | 日韩性高潮 | 中文字幕乱码无码人妻系列蜜桃 | 国产肥白大熟妇bbbb视频 | h小视频在线观看 | 日韩精品影视 | 精品欧美一区二区久久久 | 欧美精品综合 | 国产精品99在线观看 | 成人精品毛片 | 日韩视频免费看 | 黄色三级三级三级 | 精品人妻无码一区二区三区换脸 | 国产一区在线免费观看 | 日韩精品久久久久久久酒店 | 美女丝袜合集 | 九九热伊人 | 国产成人a∨ | 欧美特一级 | 大学生三级中国dvd 日韩欧美一区二区区 | 国产玖玖在线 | 国产在线一区二区三区 | 男女无遮挡猛进猛出 | 日本少妇一区二区三区 | 日韩精品成人一区二区在线 | 蜜桃香蕉视频 | 色偷偷噜噜噜亚洲男人的天堂 | 亚洲性综合 | 国产又粗又猛又大爽 | 国产精品1区2区3区4区 | 欧美色图小说 | 亚洲无在线观看 | 亚洲欧美成人一区 |