将数据传给TensorFlow

注:本文只是对官方示例的一点注解

数据集

数据集以下面的方式存储:最终生成TFRecord files的形式
data_dir/label_0/image0.jpeg
data_dir/label_0/image1.jpg
...
data_dir/label_1/weird-image.jpeg
data_dir/label_1/my-image.jpeg
train_directory/train-00000-of-01024
train_directory/train-00001-of-01024
...
train_directory/train-01023-of-01024

流程

  1. 获取乱序的图片列表filenames、标签列表labels和类别列表texts。使用 _find_image_files函数

函数注解

_find_image_files

第335行到403行

数据集长这样标签文件长这样
data_dir/dog/another-image.JPEG
data_dir/dog/my-image.jpg
dog
cat
flower
  • 参数:data_dir:数据集的根目录,string类型
    labels_file:标签文件的地址,string类型
  • return
filenamestextslabels
每个图片的地址每个图片的类别,string e.g. ‘dog’每个图片的标签 用int表示,e.g. 1 2 3
  • 步骤:
  1. 根据标签文件生成一个类别列表 unique_labels(一共有几个类别,就有几个元素)
    其中 unique_labels使用 列表推导式生成。
  2. 创建文件列表和标签列表
    循环:对每一类数据而言,例如。利用tf.gfile.Glob生成与参数()相匹配的文件地址列表。其中jpeg_file_path=data_dir/dog/*,所以matching_files内的元素为:data_dir/dog/abc.jpg
    matching_files中的元素添加到filenames中;
    [text] * len(matching_files)生成类别列表[dog,dog,dog,......]
    标签列表labels=[1,1,1,1,......]
  3. 随机输出所有图像的顺序,来保证图像在保存的TFRecord文件中随机排序,使随机可重复。 假设len(filenames))=15
shuffled_index = list(range(len(filenames)))
random.seed(12345)
random.shuffle(shuffled_index)  #生成shuffled_index=[12, 11, 7, 14, 8, 2, 13, 9, 5, 1, 4, 3, 10, 0, 6]
filenames = [filenames[i] for i in shuffled_index]

最终返回乱序版的列表

_convert_to_example函数

将图片转化成TFRecords文件
使用tf.train.Example定义要填入的数据格式,一般包含图片的长宽、通道数等信息.
将numpy数组转化为TFRecord 文件代码
image to array (numpy array to array) - Python

ImageCoder

一个辅助类:提供TensorFlow图片编码程序

  1. 将png格式转化为jpeg格式(如果自己数据集本身就是jpeg,我想这段代码就可以删了)png_to_jpeg(self, image_data):
  2. 对RGB JPEG数据进行解码。decode_jpeg(self, image_data):

_process_image函数

  1. 读取图像
 with tf.gfile.FastGFile(filename, 'rb') as f:
image_data = f.read()
  1. 将图片都转化为JPEG格式,并利用ImageCoder类对图片进行编码
  2. 返回image_data, height, width:原图片、高、宽
    注:tf.gfile.FastGFile()注释https://blog.csdn.net/icamera0/article/details/50843172

_process_image_files_batch函数

处理并存储一列图片为TFRecord files`的形式|
多线程输入数据处理
超大规模数据集解决方案:通过线程来预取
保存TFRecord文件

_process_image_files

“”"Process and save list of images as TFRecord of Example protos.

_find_image_files

“”"Build a list of all images files and labels in the data set.

_process_dataset

“”"Process a complete data set and save it as a TFRecord.

###tf.app.flags()
tf.app.flags()的参考资料1
参考资料2
tf.app.flags.DEFINE_xxx()就是添加命令行的optional argument(可选参数),而tf.app.flags.FLAGS可以从对应的命令行参数取出参数。

注:一点小知识
图像模式
我的数据集是“L”模式

资料

浅入深之Tensorflow(3)----数据读取之TFRecords

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值