制作自己的图像数据 (1)
2017-10-16 20:53
225 查看
利用图像数据制作能够输入Tensorflow的数据格式
文件夹格式:ROOT_FOLDER
|
------ SUBFOLDER(CLASS 0) | | --- image1.jpg | | ..... | | ------SUBFOLDER(CLASS 1) | | --- image1.jpg | | ......
### 思路:
在我们学习Tensorflow时,一般是直接导入mnist的数据,而对于我们具有的几类图像,该如何导入数据用于卷积神经网络呢?
在Tensorflow中可以先把数据保存为TFrecord格式,最后再读取。不仅节省了时间,增加了效率,而且节省了内存。
# 首先将图片数据保存为TFrecord格式 import os import numpy as np import tensorflow as tf from PIL import Image # 可以更改的参数 height = 512 # 需要输出图片高度 weight = 512 # 需要输出图片宽度 channel = 3 # 图片模式 batch_size = 32 max_iter = 20000 Data_Path = "Imgdata/"
# 辅助函数 def _int64_feature(value): return tf.train.Feature(int64_list=tf.train.Int64List(value=[value])) def _bytes_feature(value): return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))
# 生成TFRecord def convert(data_path): # 先读取出所有的文件夹 并生成相对应的标签 image_paths = [] labels = [] label = 0 classes = list(os.walk(data_path))[0][1] #os.walk() 返回一个三元组,(起始路径,起始路径下的文件夹,非目录文件的名字) for c in classes: image_path_tmp = [] labels_tmp = [] c_dir = os.path.join(data_path, c) # 获取文件夹的绝对路径 walk = list(os.walk(c_dir))[0][2] # 获取所有的文件 for sample in walk: if sample.endswith('.jpg') or sample.endswith('.jpeg'): image_path_tmp.append(os.path.join(c_dir, sample)) labels_tmp.append(label) image_paths.append(image_path_tmp) labels.append(labels_tmp) label += 1 # 获取到了所有文件下的数据 (这里不用shuffle 后面读取的时候生成batch时可以打散) # 开始读取数据 for i in range(len(image_paths)): out_file = '/model/output_%d.tfrecords'%i # 输出文件名 writer = tf.python_io.TFRecordWriter(out_file) for k, image_path in enumerate(image_paths[i]): img = Image.open(image_path) # 读数据 img = img.resize((height, weight)) # resize image_raw = img.tobytes() # 将图像矩阵转化为bytes # 将一个样例转化为Example Protocol Buffer,并将所有信息写入这个数据结构 example = tf.train.Example(features=tf.train.Features(feature={ 'label':_int64_feature(labels[i][k]), 'image_raw':_bytes_feature(image_raw) })) writer.write(example.SerializeToString()) writer.close()
测试
convert(Data_Path)每个类别可以生成一个TFRecord文件
# 开始读取并生成batch def READ(model_path): # file = tf.train.match_filenames_once("E:\\PythonMachineLearning\\CARclassification\\data\\output_*") # 上面这一句可以自动匹配所有的tfrecord文件,但是在测试时一直出错,所以这里我手动输入 # 还可以利用os.walk()来获取。 file_list = list(os.walk(model_path))[0][2] file = [os.path.join(model_path, file_list[i]) for i in len(file_list)] # 最终是一个list # file = ['/model/output_0.tfrecords', '/model/output_1.tfrecords'] # 创建输入队列 file_name_queue = tf.train.string_input_producer(file, shuffle=True) # 随机打散 # 读取并解析一个样本 reader = tf.TFRecordReader() _, serialized_example = reader.read(file_name_queue) features = tf.parse_single_example(serialized_example, features={ 'image_raw': tf.FixedLenFeature([], tf.string), 'label': tf.FixedLenFeature([], tf.int64) }) image = tf.decode_raw(features['image_raw'], tf.uint8) image = tf.reshape(image, [512, 512, 3]) img = tf.cast(image, tf.float32) * (1/255) - 0.5 # 将数据值约束在 -0.5-0.5 label = tf.cast(features['label'], tf.float32) # 都要为float32 与tensorflow对应 # 将处理后的图像和标签数据整理成batch tf.train.shuffle_train min_after_dequeue = 30 batch_size = 32 capacity = 1000 + 3 * batch_size image_batch, label_batch = tf.train.shuffle_batch([img, label], batch_size=batch_size, capacity=capacity, min_after_dequeue=min_after_dequeue) return image_batch, label_batch
# 注意 在测试时:需要开启多线程 batch_img, batch_l = READ('model/') with tf.Session() as sess: coord = tf.train.Coordinator() threads = tf.train.start_queue_runners(sess=sess, coord=coord) for _ in range(max_iter): # 迭代次数 batch_x, batch_y = sess.run([batch_img, batch_l])
相关文章推荐
- caffe 跑自己的图像分类任务(2) 之 数据输入文本文件的制作: train.txt, test.txt
- 制作自己的图像数据
- 深度学习-CAFFE利用CIFAR10网络模型训练自己的图像数据获得模型-1.制作自己的数据集
- 如何将视频转换成视频帧(视频图像序列)+ 如何制作自己的视频跟踪数据集
- Numpy学习(4):自己动手制作类似于cifar10这样的图像数据集
- Caffe入门学习(7)将自己的图像数据转成lmdb格式
- [置顶] ffmpeg 视频格式转换和宽高转换 制作自己想要的数据格式
- 【百度地图API】如何利用自己的数据制作社交地图?只显示可视区域内的标注
- caffe 跑自己的图像分类任务(1) 之 准备数据
- 自己制作npy数据集,数据格式类似于mnist数据(16)---《深度学习》
- 图像数据转换为levedb或者lmdb+caffe上跑自己的数据
- 深度学习文章5:使用caffe对自己的图像数据进行训练并测试
- 【百度地图API】如何利用自己的数据制作社交地图?只显示可视区域内的标注
- YOLO模型训练自己数据-VOC格式数据集制作-ubuntu c++文件夹内图片批量读取与重命名
- 【caffe】使用自己的图像数据训练lenet并用opencv进行预测
- 制作自己的数据地图
- 使用caffe训练自己的图像数据
- 制作自己的数据地图
- 【百度地图API】如何利用自己的数据制作社交地图?只显示可视区域内的标注
- 制作自己的数据地图