自己制作voc格式的数据集用于目标检测 在Ubuntu16.04

本人是第一次完整的制作了一个自己的数据集,因为各种都是从零开始,所以比较详细,适合和我一样的小白阅读。如果哪里写的有问题,欢迎指正。
一、首先,找到数据集需要的图片,或者用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格式的用于目标检测的数据集就做好了。

你可能感兴趣的:(深度学习,数据集)