建立自己的voc数据集_在Ubuntu内制作自己的VOC数据集

一、VOC数据集的简介

PASCAL VOC为图像的识别和分类提供了一整套标准化的优秀数据集,基本上就是目标检测数据集的模板。现在有VOC2007,VOC2012。主要有20个类。而现在主要的模型评估就是建立在VOC数据集和COCO数据集上(80个类),其指标主要是mAP和fps(帧率)。

VOC数据集有五个文件夹

├── Annotations              # 存放xml文件,主要是记录标记框位置信息

├── ImageSets                # 存放的都是txt文件,txt文件中每一行包含一个图片的名称,末尾会加上+1或者-1表示正负样本

├── Action

├── Layout

├── Main

└── Segmentation

├── JPEGImages           # 存放源图片

├── SegmentationClass

└── SegmentationObject

制作自己的数据集时只需要用到Annotations、ImageSets、JPEGImages三个文件夹

二、数据制作流程

1. 把所有图片放入JPEGImages文件中,后缀名一般为 .jpg .png .JPG。需要批量重命名文件夹中图片文件。使用rename.py

# -*- coding:utf8 -*-

import os

class BatchRename():

‘‘‘

批量重命名文件夹中的图片文件

‘‘‘

def __init__(self):

self.path = ‘/home/z/work/train‘ #存放图片的文件夹路径

def rename(self):

filelist = os.listdir(self.path)

total_num = len(filelist)

i = 1

for item in filelist:

if item.endswith(‘.jpg‘) or item.endswith(‘.JPG‘): #图片格式为jpg、JPG

src = os.path.join(os.path.abspath(self.path), item)

dst = os.path.join(os.path.abspath(self.path), str(i).zfill(5) + ‘.jpg‘) #设置新的图片名称

try:

os.rename(src, dst)

print ("converting %s to %s ..." % (src, dst))

i = i + 1

except:

continue

print ("total %d to rename & converted %d jpgs" % (total_num, i))

if __name__ == ‘__main__‘:

demo = BatchRename()

demo.rename()

只需要修改图片路径、增添图片格式、zfill(5)表示图片名称从00001~99999,可以按照自己的图片数量进行修改。

2. 使用LabelImg标注图片

推荐在Ubuntu内安装LabelImg,Windows中感觉安装有很多bug,安装流程如下:

二、安装labelImg 下载地址:https://github.com/tzutalin/labelImg labelImg-master.zip 由于我的虚拟机没法解压zip 安装apt-get install zip 解压:unzip labelImg-master.zip cd labelImg-master/ 我使用的:Python 3 + Qt5 sudo apt-get install pyqt5-dev-tools sudo pip3 install -r requirements/requirements-Linux-python3.txt 还要执行 sudo pip3 install lxml(labelImg需要PyQt和lxml的支持) make qt5py3 将会执行 pyrcc5 -o resources.py resources.qrc python3 labelImg.py出现错误 No module named PyQt5 解决方案:没有将pyqt5设为默认 sudo apt-get install qt5-default

再次执行 python3 labelImg.py 成功 建议把labelImg锁定左侧框,方便下次使用

3. 将标注好的xml文件放到Annotations文件夹下

4. 生成ImageSets\Main文件夹下的4个txt文件:test.txt,train.txt,trainval.txt,val.txt

这四个文件存储的是上一步xml文件的文件名。trainval和test内容相加为所有xml文件,train和val内容相加为trainval。使用CreateTxt.py生成。要将该文件与ImageSets和Annotations放在同一目录下

import os

import random

trainval_percent = 0.8 # trainval数据集占所有数据的比例

train_percent = 0.5 # train数据集占trainval数据的比例

xmlfilepath = ‘Annotations‘

txtsavepath = ‘ImageSets/Main‘

total_xml = os.listdir(xmlfilepath)

num = len(total_xml)

print(‘total number is ‘, num)

list = range(num)

tv = int(num * trainval_percent)

print(‘trainVal number is ‘, tv)

tr = int(tv * train_percent)

print(‘train number is ‘, tr)

print(‘test number is ‘, num - tv)

trainval = random.sample(list, tv)

train = random.sample(trainval, tr)

ftrainval = open(‘ImageSets/Main/trainval.txt‘, ‘w‘)

ftest = open(‘ImageSets/Main/test.txt‘, ‘w‘)

ftrain = open(‘ImageSets/Main/train.txt‘, ‘w‘)

fval = open(‘ImageSets/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()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值