文章目录[隐藏]
制作VOC数据集
- PASCAL VOC数据集的构成:
--VOC2007
--Annotations
--ImageSets
--Main
--Layout
--Segmentation
--JPEGImages
--SegmentationClass
--SegmentationObject
*JPEGImages:存放图片。
*Annotations:每张图片对应的XML文件,内容是标记的各个目标的位置和类别信息
*ImageSets:Layout 存放人体部位的数据。(用不上)
Segmentation 存放分割的数据。(用不上)
Main 存放的是目标识别的数据,主要有test.txt , train.txt, val.txt, trainval.txt(测试集图片的文件名、训练集图片的文件名、训练验证集图片的文件名、验证集图片的文件名)四个文件。
*SegmentationClass与SegmentationObject:存放的是图像分割结果图,对目标检测任务来说没有用。class segmentation 标注出每一个像素的类别 。object segmentation 标注出每一个像素属于哪一个物体。
- 创建各个文件
import os
def make_voc_dir():
os.makedirs('E:/headX/Annotations')
os.makedirs('E:/headX/ImageSets')
os.makedirs('E:/headX/ImageSets/Main')
os.makedirs('E:/headX/ImageSets/Layout')
os.makedirs('E:/headX/ImageSets/Segmentation')
os.makedirs('E:/headX/JPEGImages')
os.makedirs('E:/headX/SegmentationClass')
os.makedirs('E:/headX/SegmentationObject')
if __name__ == '__main__':
make_voc_dir()
- 准备所需图片若干张,放入指定文件夹。
step1.将准备好的图片进行resize,设置成大小相同的图像。
import cv2
import glob
import os
image_path = "E:/headX/img/*.jpg" # 原始图片路径
output_path = "E:/headX/JPEGImages/" # 修改后的保存路径
count = 0
for jpgfile in glob.glob(image_path):
#img = Image.open(jpgfile)
image = cv2.imread(jpgfile)
image = cv2.resize(image,(1280,720),interpolation=cv2.INTER_CUBIC)
cv2.imwrite(os.path.join(output_path,os.path.basename(jpgfile)), image)
print("save%d"%count)
count += 1
print("resize finished!")
step2.将调整好大小的图片进行顺序重命名。
import os
path = input('请输入文件路径:/……/')
#获取该目录下所有文件,存入列表中
fileList = os.listdir(path)
n = 0
m = 0 # 图片编号从m+1开始
for i in fileList:
#设置旧文件名(就是路径+文件名)
oldname = path + os.sep + fileList[n] # os.sep添加系统分隔符
#设置新文件名
# newname = path+os.sep + str(m+1)+".jpg"
newname = path + os.sep + '%04d' % m + ".jpg"
os.rename(oldname, newname) #用os模块中的rename方法对文件改名
print(oldname, '======>', newname)
n += 1
m += 1
step3.采用labelimg标注图像,生成相应的Annotations目录下的XML文件。(如何安装labelimg请期待下一篇)
本人采用anaconda安装,因此labelImg的进入如下:
打开Anaconda Prompt(anaconda),
输入conda activate pt
cd *\labelImg-master
python labelImg.py
进入labelImg进行图像标注,获得.xml文件。
step4.生成ImageSets下的Main(test.txt , train.txt, val.txt, trainval.txt)。
# 4make_imagesets
import os
import random
xmlfilepath = r'E:/headX/Annotations/' # xml文件的路径
saveBasePath = r'E:/headX/ImageSets/' # 生成的txt文件的保存路径
trainval_percent = 0.9 # 训练验证集占整个数据集的比重(划分训练集和测试验证集)
train_percent = 0.8 # 训练集占整个训练验证集的比重(划分训练集和验证集)
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)
print("train and val size", tv)
print("traub suze", tr)
ftrainval = open(os.path.join(saveBasePath, 'Main/trainval.txt'), 'w')
ftest = open(os.path.join(saveBasePath, 'Main/test.txt'), 'w')
ftrain = open(os.path.join(saveBasePath, 'Main/train.txt'), 'w')
fval = open(os.path.join(saveBasePath, 'Main/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()
得到图中所示的.txt文件。
至此基本完成了VOC数据集制作。
主要参考:
https://blog.csdn.net/qq_40927867/article/details/114984762
版权声明:本文为CSDN博主「123小星星」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44220689/article/details/121774594
暂无评论