把自己的数据格式转化成VOC2007格式

本文介绍了如何将自己的数据集格式转换为VOC2007标准格式,包括图片重命名、创建符合VOC2007格式的txt文件,并详细说明了txt到xml的转换过程,提供了相关的转换代码和注意事项。
摘要由CSDN通过智能技术生成
1. 自己数据集格式介绍

我们数据集标注的文件如下


每一个image对应一个txt,每个txt内容如下


每一行有8个数据,每个数据代表的含义如下图所示

2. 重命名

VOC2007格式必须为JPG格式,并且图片是统一的六位数字,从000001开始。那我们也需要将所有训练图片重命名

python代码如下:

# -*- coding: utf-8 -*-
import os
path = "E:\\study_materials\\ECCV Vision Meets Drones Challenge\\datasets\\VisDrone2018-DET-train\\VisDrone2018-DET-train\\images_rename"
filelist = os.listdir(path) #该文件夹下所有的文件(包括文件夹)
count=1
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)  #用字符串函数zfill 以0补全所需位数
    os.rename(Olddir,Newdir)#重命名
    count+=1

运行代码之后:


变成了:



3. 根据PASCAL VOC数据集制作自己的数据集

我们制作数据集的时候,其实是把我们自己的数据格式转换为PASCAL VOC数据集的格式。

格式如下:


即每行由图片名、目标类型、包围框坐标组成,空格隔开 
如果一张图片有多个目标,则格式如下:(比如两个目标) 
DG00003L005.jpg iris 187 168 350 253 
DG00003L005.jpg iris 232 86 412 168 

四个坐标点为包围框坐标的左上角和右下角。

所以现在要做的就是把txt文件中的信息先变成如上图所示的格式

小处理:

  • voc2007里面的xml,没有occlusion这个参数,所以暂时忽略。
  • 并且把第五个参数 score为0的都跳过,不考虑。
  • 此比赛存储的是左上角和长宽信息,所以需要转化成左上角和右下角信息。
  • 网上默认xml里面的truncation参数都为0,所以txt里面没有此参数,而我这边生成的txt文件中加入了truncation参数,而且后面matlab转换xml代码中也多了一个str{7}。

转化代码如下:

#include <fstream>
#include <sstream>
#include <iostream>
#include <io.h>  
#include <vector>  
using namespace std;

const string baseFilePath = "E:\\study_materials\\ECCV Vision Meets Drones Challenge\\datasets\\VisDrone2018-DET-train\\VisDrone2018-DET-train\\annotations1\\";
/************************************************************************/
/*  获取文件夹下所有文件名
输入:
path    :   文件夹路径
exd     :   所要获取的文件名后缀,如jpg、png等;如果希望获取所有
文件名, exd = ""
输出:
files   :   获取的文件名列表
*/
/************************************************************************/
void getFiles(string path, string exd, vector<string>& files)
{
	//文件句柄  
	long   hFile = 0;
	//文件信息  
	struct _finddata_t fileinfo;
	string pathName, exdName;

	if (0 != strcmp(exd.c_str(), ""))
	{
		exdName = "\\*." + exd;
	}
	else
	{
		exdName = "\\*";
	}
  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值