读取voc中的数据集路径修改_【YOLO】自己制作VOC数据集
一、数据集文件夹自己按照VOC2007的格式创建文件夹VOCdevkit,然后内部再创建VOC2007文件夹,此文件夹里面存放Annotations、ImageSets、JPEGImage、SegmentatinClass、SegmentationObject这五个文件夹,其中,Annotations存放标记后的XML图片文件,ImageSets里面包括三个文件夹,分别是Layout、Main、S
一、数据集文件夹
自己按照VOC2007的格式创建文件夹VOCdevkit,然后内部再创建VOC2007文件夹,此文件夹里面存放Annotations、ImageSets、JPEGImage、SegmentatinClass、SegmentationObject这五个文件夹,其中,Annotations存放标记后的XML图片文件,ImageSets里面包括三个文件夹,分别是Layout、Main、Segmentation(我只考虑了图片分类问题,因此只需要创建Main文件,Main文件包括的是txt文件)JPEGImage用于存放jpg或者jpeg格式的图片,SegmentatinClass、SegmentationObject与分割有关,也不需要。
二、将训练数据集放在JPEGImage里
将所有的图片放入JPEGImage中,图片的命名方式参考VOC2007,即‘000001.jpg’,图片的大小长宽比不能太大或者太小,可参考VOC2007的大小,设置为500*375
#修改一个文件夹下所有图片的名字,修改成000000.jpg格式#保存修改的顺序到一个文档中,方便以后查看import ospath = '原始图片路径'filelist = os.listdir(path)# 通过修改count得到图片名字的起始格式count=0for file in filelist: print(file)for file in filelist: Olddir=os.path.join(path,file) if os.path.isdir(Olddir): continue filename=os.path.splitext(file)[0] filetype=os.path.splitext(file)[1] Newdir=os.path.join(path,str(count).zfill(6)+filetype) os.rename(Olddir,Newdir) count+=11
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
191
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
三、标注图片,并放入Annotations
首先需要下载labelImage,labelImage
使用方法:cmd打开anaconda prompt
cd到labelImage文件路径下
终端分别输入pyrcc5 -o resources.py resources.qrc及python labelImg.py,则进入labelImage
open Dir 打开需要标记的文件
change save Dir 更改标记后的XML文件保存路径
点击Create RecBox 用矩形框进行目标标记,如下图
标记结束 点击save,则形成XML文件并保存
点击Next Image 则进入下一张图片的标记
四、ImageSets/Main中的四个TXT文件形成import osimport random# ==================可能需要修改的地方=====================================#g_root_path = 'C:/Users/17865/Desktop/yolo/yolov4-pytorch-master/yolov4-pytorch-master/VOCdevkit/VOC2007/'xmlfilepath = 'Annotations' # 标注文件存放路径saveBasePath = 'ImageSets/Main/' # ImageSets信息生成路径trainval_percent = 0.98train_percent = 0.98# ==================可能需要修改的地方=====================================#os.chdir(g_root_path)total_xml = os.listdir(xmlfilepath)num = len(total_xml)xml_list = range(num)tv = int(num * trainval_percent)tr = int(tv * train_percent)trainval = random.sample(xml_list, tv)train = random.sample(trainval, tr)print('train and val size', tv)print('train size', tr)ftrainval = open(saveBasePath + 'trainval.txt', 'w')ftest = open(saveBasePath + 'test.txt', 'w')ftrain = open(saveBasePath + 'train.txt', 'w')fval = open(saveBasePath + 'val.txt', 'w')for i in xml_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()123456789101112131415161718192021222324252627282930313233343536373839404142123456789101112131415161718192021222324252627282930313233343536373839404142
四个TXT文件保存的是图片的名称,如下图
VOC数据集制作完成!
补充:
获取上述4个TXT文件夹中图片的详细路径代码,并生成新的4个TXT文件
import osimport random xmlfilepath=r'./VOCdevkit/VOC2007/Annotations'saveBasePath=r'./VOCdevkit/VOC2007/ImageSets/Main/' trainval_percent=1train_percent=1temp_xml = os.listdir(xmlfilepath)total_xml = []for xml in temp_xml: if xml.endswith('.xml'): total_xml.append(xml)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) print('train and val size',tv)print('traub suze',tr)ftrainval = open(os.path.join(saveBasePath,'trainval.txt'), 'w') ftest = open(os.path.join(saveBasePath,'test.txt'), 'w') ftrain = open(os.path.join(saveBasePath,'train.txt'), 'w') fval = open(os.path.join(saveBasePath,'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()1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
461
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
更多推荐
所有评论(0)