TensorFlow新手加载oxford_flowers102数据集时图片计数为0求助
问题原因
计数为0和压缩包格式无关,核心原因是102flowers.tgz解压后的目录结构和你使用的glob匹配规则不匹配:
你下载的原图压缩包解压后,所有jpg图片都存放在二级子目录jpg下,直接在根目录匹配*.jpg无法命中文件。
第一段测试代码修正
import tensorflow as tf import pathlib data_dir = tf.keras.utils.get_file(origin='https://www.robots.ox.ac.uk/~vgg/data/flowers/102/102flowers.tgz',fname='102flowers', untar=True) data_dir = pathlib.Path(data_dir) # 调整glob匹配规则,匹配jpg子目录下的所有jpg文件 image_count = len(list(data_dir.glob('jpg/*.jpg'))) print(image_count)
正常运行后会输出8189,即oxford_flowers102数据集的总图片数。
第二段测试代码说明
你下载的102segmentations.tgz是分割标注数据集,不是图像分类任务需要的原图,它解压后所有掩码文件存放在segm子目录下,若要计数需要将匹配规则改为segm/*.jpg。
压缩格式疑问说明
你观测到的两种压缩格式都是tar压缩包的合法封装形式,tf.keras.utils.get_file的untar参数可以正常识别解压,和计数为0的问题没有关联。
更便捷的数据集加载方式
如果不需要手动处理文件结构,可以直接使用TensorFlow Datasets加载oxford_flowers102数据集,适配官方图像分类教程的训练流水线:
import tensorflow_datasets as tfds # 加载数据集,split参数可指定加载训练/验证/测试集,as_supervised=True返回(图像,标签)对 ds, ds_info = tfds.load('oxford_flowers102', split='train', with_info=True, as_supervised=True) # 查看数据集元信息 print("训练集样本数:", ds_info.splits['train'].num_examples) print("总类别数:", ds_info.features['label'].num_classes)
内容的提问来源于stack exchange,提问作者Harriet Li
相关产品推荐
相关产品推荐

