【目标检测】制作常用格式的YOLO数据集
1 目标格式
目标是生成train.txt, val.txt,常见开源项目用的格式有两种:
A类:
index image_path with height class_id1 x1 y1 x2 y2 class_id2 x1 y1 x2 y2 [...]
这里的image_path是图像相对工程的路径,采用空格作为分隔符,例如,
./my_dataset/JPEGImages/playPhone1_0001.jpg 1366 768 0 541 310 581 350 0
B类:
image_name x1,y1,x2,y2,class_id1 x1,y1,x2,y2,id x1,y1,x2,y2,class_id2 [...]
这里的image_name是图像名称,不包含路径。名称和bboxes,不同bbox之间用空格作为分隔符,bbox坐标用逗号作为分隔符,例如,
playPhone1_0001.jpg 541,310,581,350,0 641,410,681,450,1
2 数据集制作
LabelImg标注检测框比较方便,我采用的是先制作成VOC数据集格式,然后利用脚本转换。
2.1 图像重命名
如果你的图像名称里面有中文或特殊符号,建议用序号给图像重命名:
# -*- coding: UTF-8 -*-
import os
work_dir = input("please input wording directory:")
# work_dir = "G:/0_image_data/dataset/" + work_dir
files = os.listdir(work_dir)
index = 0
for file in files:
str_index = work_dir + str("_%04d"%index) + ".jpg"
src_path = work_dir + '/' + file
dst_path = work_dir + '/' + str_index
print(src_path, "------>", dst_path)
index += 1
os.rename(src_path, dst_path)
print("Done.")
2.2 LabelImg标注
利用labelImg标注图像,会在图像路径下面生成同名的xml格式的数据标签:
2.3 制作VOC格式的数据集
首先创建一个文件夹,取个名字,本例取名my_dataset,在其中创建子文件夹,目录结构如下:
- my_dataset/
-Annotations/
-ImageSets/
-Main/
-JPEGImages/
在my_dataset目录下面创建一个data.names文件,里面写入你的标签名称,写的顺序决定了标签的ID:
将如下脚本拷贝到my_dataset路径下,执行,将在./ImageSets/Main文件夹下面生成VOC格式的标签文件:
#-*- coding:utf-8 -*-
import os
import random
import numpy as np
xml_file_path = "./Annotations"
target_path = "./ImageSets/Main"
#perception
trainval = 0.9 #(num of trainval set) / (num of all samples)
train