注:本文只是对官方示例的一点注解
文章目录
数据集
数据集以下面的方式存储: | 最终生成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 |
流程
- 获取乱序的图片列表
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
filenames | texts | labels |
---|---|---|
每个图片的地址 | 每个图片的类别,string e.g. ‘dog’ | 每个图片的标签 用int表示,e.g. 1 2 3 |
- 步骤:
- 根据标签文件生成一个类别列表
unique_labels
(一共有几个类别,就有几个元素)
其中unique_labels
使用 列表推导式生成。 - 创建文件列表和标签列表
循环:对每一类数据而言,例如狗
。利用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,......]
- 随机输出所有图像的顺序,来保证图像在保存的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图片编码程序
- 将png格式转化为jpeg格式(如果自己数据集本身就是jpeg,我想这段代码就可以删了)
png_to_jpeg(self, image_data):
- 对RGB JPEG数据进行解码。
decode_jpeg(self, image_data):
_process_image
函数
- 读取图像
with tf.gfile.FastGFile(filename, 'rb') as f:
image_data = f.read()
- 将图片都转化为JPEG格式,并利用
ImageCoder
类对图片进行编码 - 返回
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”模式