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格式列表相关推荐

  1. python transformer category_Python 生成VOC格式的标签实例

    常用目标检测模型基本都是读取的PASCAL VOC格式的标签,下面代码用于生成VOC格式的代码,根据需要修改即可: from lxml import etree, objectify def gen_ ...

  2. python亿级mysql数据库导出_Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法...

    本文实例讲述了python实现将MySQL数据库表中的数据导出生成csv格式文件的方法.分享给大家供大家参考,具体如下: #!/usr/bin/env python # -*- coding:utf- ...

  3. python生成条形图-Python处理JSON数据并生成条形图

    一.JSON 数据准备 首先准备一份 JSON 数据,这份数据共有 3560 条内容,每条内容结构如下: 本示例主要是以 tz(timezone 时区) 这一字段的值,分析这份数据里时区的分布情况. ...

  4. python如何读取数据保存为新格式_Python Numpy中数据的常用保存与读取方法

    在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多. 下面就常用的保存数据到二进制文件和保存数据到文本文件 ...

  5. 英文数据集txt_如何用自己的数据制作 Pascal VOC 格式的数据集 详细教程(文中有所有代码)...

    目前object detection这块主流的数据集主要就是COCO和Pascal VOC格式的.github上现成的检测算法基本都是自带VOC格式数据集的输入接口的,所以想要跑起来一个算法,我们需要 ...

  6. 从MySql 数据库中导出数据并生成指定格式xml文件

    最近网站需要做数据迁移,需要我将网站的数据从mysql数据库中导出,并按照要求生成指定格式的xml文件. xml格式要求: 代码: package com.epsoft.gjjisp;import j ...

  7. python3根据excel表数据自动生成word格式数据报告

    目录 1. 完成xlsx数据读取 2.对数据做一些处理 3.生成图表 4.创建word文件 5.将分析结果保存入word文件中 本文主要是讲如何根据简单的xlsx数据,生成word数据报告,首先需要先 ...

  8. python随机划分数据集_Python之机器学习-sklearn生成随机数据

    sklearn-生成随机数据 import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotli ...

  9. python随机数据库_Python实现生成随机数据插入mysql数据库的方法

    本文实例讲述了Python实现生成随机数据插入mysql数据库的方法.分享给大家供大家参考,具体如下: 运行结果: 实现代码: import random as r import pymysql fi ...

最新文章

  1. SQLite第三方框架FMDB的使用,以及使用FMDatabaseQueue保证线程安全
  2. vue中安装sass
  3. php5.4 curl,PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
  4. python dataframe批量将列名加后缀_Python中的dataframe对象如何用相同的列名堆叠两个表,并从行堆叠它们以形成一个表,Dataframe,将,具有,叠加,起来,上,组成...
  5. 声笔双拼单字效率分析
  6. android api 打开慢,为什么下了android 4.1 的SDK后在本地用浏览器看api说明文档时,浏览器打开api的html文件很慢?试了好几款浏览器都一样。为什么?...
  7. Android系统(204)---ContentProvider
  8. mysql mha reference_MySQL MHA配置常见问题
  9. OSChina 周六乱弹 —— 能胖出腹肌来
  10. 蓝桥杯 ADV-150算法提高 周期字串
  11. Spring Boot: 加密应用配置文件敏感信息
  12. Linux核心应用命令速查
  13. linux网卡参数配置方法,Linux网卡参数配置方法教程
  14. 很全的WebGL教程
  15. VM和CentOS的安装
  16. python实现excel到word转换
  17. 亚马逊秒杀活动怎么报名?站斧浏览器亚马逊站内促销
  18. SQL Server中关于跟踪(Trace)那点事
  19. 国庆拥堵现象说明了什么?
  20. 使用lucene的多字段排序--回复网友BUFFON

热门文章

  1. Eclipse(STS) 初次搭建Spring Cloud项目之断路器Hystrix(五)
  2. PA银行面试之炮灰之程
  3. 利用 Selenium 自动化 web 测试【步骤详解】
  4. php使用curl下载指定大小的文件
  5. OSX unable to write 'random state'
  6. ANDROID L——Material Design综合应用(Demo)
  7. MVC Razor 语法(转)
  8. php+html 实现加减乘除
  9. 给创新工场求职者的一封信
  10. NYOJ 663 弟弟的作业