本人是第一次完整的制作了一个自己的数据集,因为各种都是从零开始,所以比较详细,适合和我一样的小白阅读。如果哪里写的有问题,欢迎指正。
一、首先,找到数据集需要的图片,或者用ps制作。这里说明一下最好做成jpg 格式的。因为在VOCLike函数读取的时候默认的是jpg格式。如果你不想改也没关系,可以修改VOCDetection这个函数,修改为png或其他格式。具体如下;
1.在detection.py中找到VOCDetection这个函数
2.修改下图中的{}.jpg的部分为你图片的格式
也可以直接将图片格式修改成jpg的,下面贴一段代码:
import os
import string
dirName = "/home/anzhuo/pic/" #这里改成自己的图片所在路径
li=os.listdir(dirName)
for filename in li:
newname = filename
newname = newname.split(".")
if newname[-1]=="png": #这里是你图片的原格式的后缀
newname[-1]="jpg"
newname = str.join(".",newname) #这里要用str.join
filename = dirName+filename
newname = dirName+newname
os.rename(filename,newname)
print(newname,"updated successfully")
二、图片格式没问题后就更改图片名字,改成标准的“000001”类的命名格式。下面粘改名字的代码:
import os
path = "/home/...."
filelist = os.listdir(path)
count=0
for 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+=1
三、现在数据集需要的图片已经制作好了,接下来需要对其进行标注,从而生成xml文件。但是在标注之前。我建议先把数据集voc的格式做好,然后再标注,可以以后省很多事。所以我先介绍怎么制作VOC2018。
1.建立文件夹层次为 darknet / VOCdevkit /VOC2018,voc2018下面有三个建立如下图三个名字的文件夹:
2.将制作好的图片全都放进JPEGImages这个文件夹里。
3.接下来就可以标注图片中的物体了。我用的软件是labelImg。下面说一下安装方法:
1.去githubs上下载压缩包:链接:https://github.com/tzutalin/labelImg
2.右击压缩包,点击提取出来。
3.右击上图提取出来的文件夹,点击在终端打开
4.输入下面命令
sudo apt-get install pyqt5-dev-tools
pip install lxml
make qt5py3
python3 labelImg.py
然后就可以打开这个软件了
5.然后就是标注了,将标注产生的.xml文件的默认储存路径改为Annotations。具体参考我的另一篇:https://blog.csdn.net/qq_39418067/article/details/89048292
四,制作voc2018里需要的四个.txt文件。
1.先在ImageSets的文件夹里建立一个Main文件夹,再在Main里建立四个文件
然后就是制作这四个文件的内容了。直接粘代码:
# -*- coding: utf -*-
import os
import random
import math
fo1=open('/home/dlut/网络/make_database/代码/生成/test.txt','w')
fo2=open('/home/dlut/网络/make_database/代码/生成/trainval.txt','w')
fo3=open('/home/dlut/网络/make_database/代码/生成/train.txt','w')
fo4=open('/home/dlut/网络/make_database/代码/生成/val.txt','w')
filepath='/home/dlut/网络/all_1_YOLOv3_TensorFlow-master/dataset-add/insulator_bolt/VOC2018/Annotations'
filelist=os.listdir(filepath)
file_name=[]
for w in filelist:
file_name.append(w.replace('.xml',''))
file_num=len(file_name)
trainval_num=0.8 #trainval占所有数据集的多少
train_num=0.75 #train占trainval的多少
#trainval
trainval_list=random.sample(range(file_num),math.floor(trainval_num*file_num))
#test
test_list=(list(set(range(file_num)).difference(set(trainval_list))))
random.shuffle(test_list)
#train
train_list=random.sample(trainval_list,math.floor(train_num*len(trainval_list)))
#val
val_list=list(set(trainval_list).difference(set(train_list)))
random.shuffle(val_list)
#put in txt
for i in trainval_list:
fo2.write(file_name[i]+'\n')
for i in test_list:
fo1.write(file_name[i]+'\n')
for i in train_list:
fo3.write(file_name[i]+'\n')
for i in val_list:
fo4.write(file_name[i]+'\n')
fo1.close()
fo2.close()
fo3.close()
fo4.close()
先在一个voc格式的用于目标检测的数据集就做好了。