【Python】随机划分数据集并生成VOC格式列表
1.Introduction
做目标检测时,用LabelImg生成的 xml 文件需要和对应的图片文件名,生成VOC格式列表。同时需要按照一定比例划分为训练集、验证集和测试集。
2.Materials and methods
上述功能可以分为四步:
(1)读取图片名或者xml文件名(这俩一样)
(2)对文件名列表打乱顺序
(3)按比例从乱序表中抽取文件名
(4)拼接字符串,写入txt文件
话不多说,上代码:
# -*- coding: utf-8 -*-
"""
Created on Wed Dec 30 14:49:41 2020@author: YaoYee
"""import os
import randomREAD_DIR = 'C:/Users/YaoYee/Desktop/data/Annotations'
WRITE_DIR = 'C:/Users/YaoYee/Desktop/data'TRAIN_RATIO = 0.7
VAL_RATIO = 0.2
TEST_RATIO = 0.1imgs = os.listdir(READ_DIR)
# Shuffle list imgs in place.
random.shuffle(imgs) with open(WRITE_DIR+'/train_list.txt', 'w') as f:for im in imgs[0:int(len(imgs)*TRAIN_RATIO)]:info = 'JPEGImages/'+im+' 'info += 'Annotations/'+im[0:4]+'.xml\n'f.write(info)with open(WRITE_DIR+'/val_list.txt', 'w') as f:for im in imgs[int(len(imgs)*TRAIN_RATIO):int(len(imgs)*(TRAIN_RATIO+VAL_RATIO))]:info = 'JPEGImages/'+im+' 'info += 'Annotations/'+im[0:4]+'.xml\n'f.write(info)with open(WRITE_DIR+'/test_list.txt', 'w') as f:for im in imgs[int(len(imgs)*(TRAIN_RATIO+VAL_RATIO)):]:info = 'JPEGImages/'+im+' 'info += 'Annotations/'+im[0:4]+'.xml\n'f.write(info)print('The data length is:', len(imgs))
print('The train_data length is:', int(len(imgs)*TRAIN_RATIO))
print('The val_data length is:', int(len(imgs)*(TRAIN_RATIO+VAL_RATIO))-int(len(imgs)*TRAIN_RATIO))
print('The test_data length is:', len(imgs)-int(len(imgs)*(TRAIN_RATIO+VAL_RATIO)))
如果想按原顺序划分数据集,在代码中把下面行注释掉就行了~
#random.shuffle(imgs)
3. Results and discussion
运行下看看效果~
可以发现,效果还是很好的,不过细心的小伙伴可能发现了,这里并没有生成Label文件,也就是没有读取xml文件里的label信息,本文暂时不涉及这块(后面再说)。
如果用paddle的话,官方已经实现了划分+读取标签,可直接调用,如下:
import paddlex!paddlex --split_dataset --format VOC --dataset_dir C:\Users\YaoYee\Desktop\data --val_value 0.2 --test_value 0.1
4. Conclusion
Python真好用~
猜你喜欢:
【Python】随机划分数据集并生成VOC格式列表相关推荐
- python transformer category_Python 生成VOC格式的标签实例
常用目标检测模型基本都是读取的PASCAL VOC格式的标签,下面代码用于生成VOC格式的代码,根据需要修改即可: from lxml import etree, objectify def gen_ ...
- python亿级mysql数据库导出_Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法...
本文实例讲述了python实现将MySQL数据库表中的数据导出生成csv格式文件的方法.分享给大家供大家参考,具体如下: #!/usr/bin/env python # -*- coding:utf- ...
- python生成条形图-Python处理JSON数据并生成条形图
一.JSON 数据准备 首先准备一份 JSON 数据,这份数据共有 3560 条内容,每条内容结构如下: 本示例主要是以 tz(timezone 时区) 这一字段的值,分析这份数据里时区的分布情况. ...
- python如何读取数据保存为新格式_Python Numpy中数据的常用保存与读取方法
在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多. 下面就常用的保存数据到二进制文件和保存数据到文本文件 ...
- 英文数据集txt_如何用自己的数据制作 Pascal VOC 格式的数据集 详细教程(文中有所有代码)...
目前object detection这块主流的数据集主要就是COCO和Pascal VOC格式的.github上现成的检测算法基本都是自带VOC格式数据集的输入接口的,所以想要跑起来一个算法,我们需要 ...
- 从MySql 数据库中导出数据并生成指定格式xml文件
最近网站需要做数据迁移,需要我将网站的数据从mysql数据库中导出,并按照要求生成指定格式的xml文件. xml格式要求: 代码: package com.epsoft.gjjisp;import j ...
- python3根据excel表数据自动生成word格式数据报告
目录 1. 完成xlsx数据读取 2.对数据做一些处理 3.生成图表 4.创建word文件 5.将分析结果保存入word文件中 本文主要是讲如何根据简单的xlsx数据,生成word数据报告,首先需要先 ...
- python随机划分数据集_Python之机器学习-sklearn生成随机数据
sklearn-生成随机数据 import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotli ...
- python随机数据库_Python实现生成随机数据插入mysql数据库的方法
本文实例讲述了Python实现生成随机数据插入mysql数据库的方法.分享给大家供大家参考,具体如下: 运行结果: 实现代码: import random as r import pymysql fi ...
最新文章
- SQLite第三方框架FMDB的使用,以及使用FMDatabaseQueue保证线程安全
- vue中安装sass
- php5.4 curl,PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
- python dataframe批量将列名加后缀_Python中的dataframe对象如何用相同的列名堆叠两个表,并从行堆叠它们以形成一个表,Dataframe,将,具有,叠加,起来,上,组成...
- 声笔双拼单字效率分析
- android api 打开慢,为什么下了android 4.1 的SDK后在本地用浏览器看api说明文档时,浏览器打开api的html文件很慢?试了好几款浏览器都一样。为什么?...
- Android系统(204)---ContentProvider
- mysql mha reference_MySQL MHA配置常见问题
- OSChina 周六乱弹 —— 能胖出腹肌来
- 蓝桥杯 ADV-150算法提高 周期字串
- Spring Boot: 加密应用配置文件敏感信息
- Linux核心应用命令速查
- linux网卡参数配置方法,Linux网卡参数配置方法教程
- 很全的WebGL教程
- VM和CentOS的安装
- python实现excel到word转换
- 亚马逊秒杀活动怎么报名?站斧浏览器亚马逊站内促销
- SQL Server中关于跟踪(Trace)那点事
- 国庆拥堵现象说明了什么?
- 使用lucene的多字段排序--回复网友BUFFON
热门文章