python - 将 JPG 和 XML 文件的数据集拆分为训练集和测试集

标签 python tensorflow

我有一个用于对象检测算法的数据集,其中包含图片 (.jpg) 和包含边界框的相应 .xml 文件。

我想编写一个脚本,将数据集随机拆分为训练集和测试集,这意味着我必须确保将 jpg 及其相应的 XML 分配到同一目录。

我应该如何编辑以下代码才能实现此目的?

此外,这是执行此操作的“最佳”方法,还是在 xml 到 csv 转换后或生成 csv 到 tfrecords 转换后分割数据集更好?

import shutil, os, glob, random

# List all files in a directory using os.listdir
basepath = '/home/bis/hans/bis/workspace/images/Synced_dataset'
filenames = []

for entry in os.listdir(basepath):
    if os.path.isfile(os.path.join(basepath, entry)):
        #print(entry)
        filenames.append(entry)

filenames.sort()  # make sure that the filenames have a fixed order before shuffling
random.seed(230)
random.shuffle(filenames) # shuffles the ordering of filenames (deterministic given the chosen seed)

split = int(0.8 * len(filenames))
train_filenames = filenames[:split]
test_filenames = filenames[split:]

最佳答案

对我来说最好的选择是创建两个文件列表(filenames for jpgxmlnames for xml >) 以正确的顺序和一个索引列表 indices=[i for i in range(len(filenames))]

然后您可以随机排列索引列表:

random.seed(230)
random.shuffle(indices)

最后,为 jpgxml 文件创建训练集和测试集:

split = int(0.8 * len(filenames))
file_train = [filenames[idx] for idx in indices[:split]]
file_test = [filenames[idx] for idx in indices[split:]]
xml_train = [xmlnames[idx] for idx in indices[:split]]
xml_test = [xmlnames[idx] for idx in indices[split:]]

关于python - 将 JPG 和 XML 文件的数据集拆分为训练集和测试集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56884301/

相关文章:

c++ - 如何为 Windows 独立应用程序部署经过 Tensorflow 训练的模型进行推理

python - 使用特定类型的输入在 TensorFlow 2 中运行 SavedModel

python - 用通过比较另一列的数据获得的数据填充一列

Python - 如果条件不存在则删除行

Python lxml 的 XPath 在 <p> 标签中找不到 <ul>

javascript - 如何使用 Tensorflow.js 计算张量中每个值出现的次数?

tensorflow - 多输入深度学习模型中两个输入的平均值

tensorflow - 如何将 cuDNN 直接从 nvidia 网站下载到我在 GCP 上的 linux 实例

python - 为什么 python2 显示\r(原始转义)而 python3 不显示?

python - Sorl-缩略图 : Clear cache of only one image?