image和TFRecord互相转换
关说不练假把式。手上正好有车牌字符的数据集,想把他们写成TFRecord格式,然后读进来,构建一个简单的cnn训练看看。然后发现准确率只有0.0x。随机猜也比这要好点吧。只能一步步检查整个过程。暂时想到问题可能出现的地方:
- 数据编码解码错误
- 网络构建问题
- 学习步长问题
- 数据量太小
- label设置
不确定是不是这些问题先检查下,tensorboard能给我们很多信息。今天先检查了图片解码编码问题。在读取数据的时候为image增加一个summary,这样就能在tensorboard上看到图片了。
img=tf.summary.image('input',x,batch_size)
tensorboard的使用之前有说过。出现的结果说我没有图片记录,大约是这个意思。所以我的解码编码程序还是有问题。图片编码成tfreord无非就是把图片数据按照tfrecord的格式填进去。tfrecord是example的集合,example的格式:
message Example {#message类似于类Features features = 1; };
而 Features 是字典集合,(key,value)。
下面直接上tfrecord编码解码代码,改好过的。
1 import tensorflow as tf 2 import numpy as np 3 import glob 4 import os 5 from PIL import Image 6 def _int64_feature(value): 7 if not isinstance(value,list): 8 value=[value] 9 return tf.train.Feature(int64_list=tf.train.Int64List(value=value)) 10 def _byte_feature(value): 11 return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value])) 12 def encode_to_tfrecords(data_path,name,rows=24,cols=16):#从图片路径读取图片编码成tfrecord 13 folders=os.listdir(data_path)#这里都和我图片的位置有关 14 folders.sort() 15 numclass=len(folders) 16 i=0 17 npic=0 18 writer=tf.python_io.TFRecordWriter(name) 19 for floder in folders: 20 path=data_path+"/"+floder 21 img_names=glob.glob(os.path.join(path,"*.bmp")) 22 for img_name in img_names: 23 img_path=img_name 24 img=Image.open(img_path).convert('P') 25 img=img.resize((cols,rows)) 26 img_raw=img.tobytes() 27 labels=[0]*34#我用的是softmax,要和预测值的维度一致 28 labels[i]=1 29 example=tf.train.Example(features=tf.train.Features(feature={#填充example 30 'image_raw':_byte_feature(img_raw), 31 'label':_int64_feature(labels)})) 32 writer.write(example.SerializeToString())#把example加入到writer里,最后写到磁盘。 33 npic=npic+1 34 i=i+1 35 writer.close() 36 print npic 37 38 def decode_from_tfrecord(filequeuelist,rows=24,cols=16): 39 reader=tf.TFRecordReader()#文件读取 40 _,example=reader.read(filequeuelist) 41 features=tf.parse_single_example(example,features={'image_raw':#解码 42 tf.FixedLenFeature([],tf.string), 43 'label':tf.FixedLenFeature([34,1],tf.int64)}) 44 image=tf.decode_raw(features['image_raw'],tf.uint8) 45 image.set_shape(rows*cols) 46 image=tf.cast(image,tf.float32)*(1./255)-0.5 47 label=tf.cast(features['label'],tf.int32) 48 return image,label 49 50 51 def get_batch(filename_queue,batch_size): 52 with tf.name_scope('get_batch'): 53 [image,label]=decode_from_tfrecord(filename_queue) 54 images,labels=tf.train.shuffle_batch([image,label],batch_size=batch_size,num_threads=2, 55 capacity=100+3*batch_size,min_after_dequeue=100) 56 return images,labels 57 58 59 def generate_filenamequeue(filequeuelist): 60 filename_queue=tf.train.string_input_producer(filequeuelist,num_epochs=5) 61 return filename_queue 62 63 def test(filename,batch_size): 64 filename_queue=generate_filenamequeue(filename) 65 [images,labels]=get_batch(filename_queue,batch_size) 66 init_op = tf.group(tf.global_variables_initializer(), 67 tf.local_variables_initializer()) 68 sess=tf.InteractiveSession() 69 sess.run(init_op) 70 coord=tf.train.Coordinator() 71 threads=tf.train.start_queue_runners(sess=sess,coord=coord) 72 i=0 73 try: 74 while not coord.should_stop(): 75 image,label=sess.run([images,labels]) 76 i=i+1 77 if i%1000==0: 78 for j in range(batch_size):#之前tfrecord编码的时候,数据范围变成[-0.5,0.5],现在相当于逆操作,把数据变成图片像素值 79 image[j]=(image[j]+0.5)*255 80 ar=np.asarray(image[j],np.uint8) 81 #image[j]=tf.cast(image[j],tf.uint8) 82 print ar.shape 83 img=Image.frombytes("P",(16,24),ar.tostring())#函数参数中宽度高度要注意。构建24×16的图片 84 img.save("/home/wen/MNIST_data/reverse_%d.bmp"%(i+j),"BMP")#保存部分图片查看 85 '''if(i>710): 86 print("step %d"%(i)) 87 print image 88 print label''' 89 except tf.errors.OutOfRangeError: 90 print('Done training -- epoch limit reached') 91 finally: 92 # When done, ask the threads to stop. 93 coord.request_stop() 94 95 # Wait for threads to finish. 96 coord.join(threads) 97 sess.close()
读取文件的动态图,来自官网教程:
在文件夹中:
在tensorboard里:
终于看见熟悉的图片了,现在数据编码解码没问题,效果依然0.0x。。。。
错误改掉一个少一个,接着检查其他部分。
debug过程中,一直在google,stackoverflow,官网documents,度娘略微鸡肋。
***********************************************************************************************************************************************************************************************
猜测是同类样本集中b并且同类数据多,用batch_shuffle装进来的都还是同类
转载于:https://www.cnblogs.com/wyh1993/p/6703135.html
image和TFRecord互相转换相关推荐
- matlab 转换 tfrecord,训练数据集与TFRecord互相转换的两种方式
TensorFlow使用TFRecord格式来统一存储数据,该格式可以将图像数据.标签信息.图像路径以及宽高等不同类型的信息放在一起进行统一存储,从而方便有效的管理不同的属性. 将训练数据集转成TFR ...
- TensorFlow学习——TFRecord格式转换
TFRecord TensorFlow提供了TFRecord的格式来统一存储数据,TFRecord格式是一种将图像数据和标签放在一起的二进制文件,能更好的利用内存,在tensorflow中快速的复制, ...
- 读写tfrecord文件
目录 1 写tfrecor方式 1.1 变长特征转tfrecord 1.2 定长特征转tfrecord 2 读tfrecord 2.1 变长方式读tfrecord 2.2 定长方式读tfrecord ...
- 深度学习图像算法在内容安全领域的应用实践和优化
作者 | 李雨珂 责编 | 屠敏 深度学习图像算法近年来在学术领域经历了爆发式的发展,目前已经在工业界多个实际场景取得了较完整的应用落地,例如安防.营销.娱乐.金融等场景.其中内容安全也是非常典型的落 ...
- tensorflow精进之路(二十)——使用slim模型库训练自己的数据
1.概述 上一节,我们使用python3爬取了百度图片的一些图片数据,这一节,我们就使用这些爬取下来的图片,训练我们自己的模型,用来识别猪.蛇.狗.大象.老虎这五种动物.在这里吐嘲一下百度图片搜索结果 ...
- deeplabv3+训练自己的数据集
deeplabv3+训练自己的数据集 环境:ubuntu 16.04 + TensorFlow 1.9.1 + cuda 9.0 + cudnn 7.0 +python3.6 tensorflow 项 ...
- 使用 deeplabv3+ 训练自己的数据集经验总结
简介 deeplabv3+是现今性能最好的语义分割模型之一,本文介绍如何在window环境下安装并运行deeplabv3+. 本文将详细介绍deeplabv3+的环境配置,训练自己的数据,参数调试等内 ...
- 七夕“加餐”:深度学习图像算法在内容安全领域的应用实践和优化
作者介绍:李雨珂博士,网易易盾资深算法专家,毕业于浙江大学信息与电子工程学系,研究方向包括数据挖掘.机器学习以及计算机视觉,目前在网易易盾主导内容安全领域多媒体信息相关人工智能算法研发. 深度学习图像 ...
- 打标签制作自己的数据集并在TensorFlow框架上训练
标签工具labelImg 用labelimg对自己的数据做好标注,只有一类预测桃子图像. 注释文件保存为xml格式,满足PASCAL VOC风格,如下图1把图片和标签放在一个文件夹内(data) 转换 ...
最新文章
- Android手机在获取root权限下的抓包过程
- 简单的链式语法及实际运用(链式编程的基本原理)
- python集合与字典区别_Python中的字典与集合
- python意外缩进引发逻辑错误_如何编写 Python 程序
- 使用Jquery提交Json格式的数据到Asp.net程序的另类做法
- [线性代数]Note3--乘法和逆矩阵
- oracle将列名进行拼接,请教关于用拼接的字符串作为表的列名进行操作的问题
- 菜鸟学Linux 第055篇笔记 php基础
- web前端html+css实现立体旋转相册(表白可用)
- 怎么在电脑的右键新建菜单添加.py或者其他格式的文件
- Android Framework 框架系列之PowerManager
- 笔记本计算机待机后显示器,Win10笔记本电脑休眠唤醒后屏幕还是黑屏怎么办?...
- oracle 10g 新特性中文笔记
- CRC 循环冗余校验码 的计算方法
- [解疑]图像、矩阵的二维空间变换
- spring使用@Primary注解
- 热烈祝贺上汽通用五菱ASPICE项目通过CL 2级评估
- sqlite3 外键作用原理和使用方法
- “制订”与“制定”的区别
- mysql 存储 emoji_MySQL 中如何存储 emoji ?