一、数据集文件夹

自己按照VOC2007的格式创建文件夹VOCdevkit,然后内部再创建VOC2007文件夹,此文件夹里面存放Annotations、ImageSets、JPEGImage、SegmentatinClass、SegmentationObject这五个文件夹,其中,Annotations存放标记后的XML图片文件,ImageSets里面包括三个文件夹,分别是Layout、Main、Segmentation(我只考虑了图片分类问题,因此只需要创建Main文件,Main文件包括的是txt文件)JPEGImage用于存放jpg或者jpeg格式的图片,SegmentatinClass、SegmentationObject与分割有关,也不需要。

212581162_1_20210111123032322

二、将训练数据集放在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

212581162_2_20210111123032557

open Dir 打开需要标记的文件

change save Dir 更改标记后的XML文件保存路径

点击Create RecBox 用矩形框进行目标标记,如下图

标记结束 点击save,则形成XML文件并保存

点击Next Image 则进入下一张图片的标记

212581162_3_20210111123032792

四、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文件保存的是图片的名称,如下图

212581162_4_20210111123033166

212581162_5_20210111123033322.png

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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐