# tensorflow下的图片标准化函数per_image_standardization用法

tf.image.per_image_standardization(image)，此函数的运算过程是将整幅图片标准化（不是归一化），加速神经网络的训练。

stddev为三通道像素的标准差，image.NumElements()计算的是三通道各自的像素个数。

```import tensorflow as tf
import matplotlib.image as img
import matplotlib.pyplot as plt
import numpy as np
sess = tf.InteractiveSession()
shape = tf.shape(image).eval()
h,w = shape[0],shape[1]
standardization_image = tf.image.per_image_standardization(image)#标准化

fig = plt.figure()
fig1 = plt.figure()
ax.set_title('orginal image')
ax.imshow(image)
ax1.set_title('original hist')
ax1.hist(sess.run(tf.reshape(image,[h*w,-1])))
ax1.set_title('standardization hist')
ax1.hist(sess.run(tf.reshape(standardization_image,[h*w,-1])))
plt.ion()
plt.show()```

```saver = tf.train.Saver()#声明saver用来保存模型
with tf.Session() as sess:
for i in range(train_step):
#.....训练操作
if i%100 == 0 && i!= 0:#每间隔训练100次存储一个模型，默认最多能存5个，如果超过5个先将序号小的覆盖掉
saver.save(sess,str(i)+"_"+'model.ckpt',global_step=i)```

ckeckpoint文件可以放在编辑器里面打开看，里面记录的是每个阶段保存模型的信息，同时也是记录最近训练的检查点

ckpt文件是模型参数，index文件一般用不到（我也查到是啥-_-|||）

```saver = tf.train.Saver()
with tf.Session() as sess:
saver.restore(sess, "step_1497batch_64model.ckpt-1497")#加载对应的参数```

numpy_img = sess.run(tensor_img)#将tensor转换成numpy

cv_img = cv_img.reshape(1,cv_img.shape[0],cv_img.shape[1],1)#cv_img是使用Opencv读进来的图片

img_raw = tf.placeholder(dtype=tf.float32, shape=[1,512, 424, 1], name=’input’)

```def read_data(tfrecords_file, batch_size, image_size):#读取tfrecords文件
filename_queue = tf.train.string_input_producer([tfrecords_file])

img_features = tf.parse_single_example(
serialized_example,
features={
'label': tf.FixedLenFeature([], tf.int64),
'image_raw': tf.FixedLenFeature([], tf.string),
})
image = tf.decode_raw(img_features['image_raw'], tf.float32)
min_after_dequeue = 1000
image = tf.reshape(image, [image_size, image_size,1])
image = tf.image.resize_images(image, (32,32),method=3)#缩放成32×32
image = tf.image.per_image_standardization(image)#图像标准化
label = tf.cast(img_features['label'], tf.int32)
capacity = min_after_dequeue + 3 * batch_size
image_batch, label_batch = tf.train.shuffle_batch([image, label],
min_after_dequeue = min_after_dequeue)
return image_batch, tf.one_hot(label_batch,6)#返回的标签经过one_hot编码

#将得到的图像数据与标签都是tensor哦，不能输出的！

```image = tf.reshape(image, [image_size, image_size,1])#与opencv的reshape结果一样
image = tf.image.resize_images(image, (32,32),method=3)#缩放成32×32，与opencv的resize结果一样，插值方法要选择三次立方插值
image = tf.image.per_image_standardization(image)#图像标准化```

```with tf.name_scope('inputs'):
img_raw = tf.placeholder(dtype=tf.float32, shape=[1,120, 120, 1], name='input')#输入数据
keep_prob = tf.placeholder(tf.float32,name='keep_prob')

with tf.name_scope('preprocess'):#图中的预处理函数，当成节点顺序调用
img_120 = tf.reshape(img_raw, [120, 120,1])
img_norm = tf.cast(img_120, "float32") / 256
img_32 = tf.image.resize_images(img_norm, (32,32),method=3)
img_std = tf.image.per_image_standardization(img_32)
img = tf.reshape(img_std, [1,32, 32,1])

with tf.name_scope('output'):#图像塞到网络中
output = MyNet(img,keep_prob,n_cls)

ans = tf.argmax(tf.nn.softmax(output),1)#计算模型得到的结果

init = tf.global_variables_initializer()

saver = tf.train.Saver()

if __name__ == '__main__':

with tf.Session() as sess:

sess.run(init)
saver.restore(sess, "step_1497batch_64model.ckpt-1497")#效果更好
index = 0
path = "buffer\"

while True:
f = path + str(index)+'.jpg'#从0.jpg、1.jpg、2.jpg.....一直读
if os.path.exists(f):
cv_img = OneImgPrepro(cv_img)
cv_img = cv_img.reshape(1,cv_img.shape[0],cv_img.shape[1],1)#需要reshape成placeholder可接收型
clas = ans.eval(feed_dict={img_raw:cv_img,keep_prob:1})#feed的速度快！

print(clas)#输出分类

index += 1```

0 条评论

• ### 浅谈TensorFlow中读取图像数据的三种方式

本文面对三种常常遇到的情况，总结三种读取数据的方式，分别用于处理单张图片、大量图片，和TFRecorder读取方式。并且还补充了功能相近的tf函数。

• ### TensorFlow2.X结合OpenCV 实现手势识别功能

使用Tensorflow 构建卷积神经网络，训练手势识别模型，使用opencv DNN 模块加载模型实时手势识别 效果如下：

• ### PHP实现将上传图片自动缩放到指定分辨率，并保持清晰度封装类示例

本文实例讲述了PHP实现将上传图片自动缩放到指定分辨率，并保持清晰度封装类。分享给大家供大家参考，具体如下：

• ### TensorFlow 图像预处理（二） 图像翻转，图像色彩调整

图像翻转 tf.image.flip_up_down：上下翻转 tf.image.flip_left_right：左右翻转 tf.image.tra...

• ### tensorflow的图像预处理函数

对图像进行预处理，可以尽量避免模型受到。大部分图像识别问题中，通过图像预处理过程可以提高模型的准确率。

• ### 基于tensorflow的图像处理(二) tf.image的使用方法

对图像进行预处理，可以尽量避免模型受到无关因素的影响。大部分图像识别问题中，通过图像预处理过程可以提高模型的准确率。

• ### TensorFlow 图像预处理（一） 图像编解码，图像尺寸调整

TensorFlow提供了几类图像处理函数，下面介绍图像的编码与解码，图像尺寸调整。 编码与解码 图像解码与编码：一张RGB三通道的彩色图像可以看成一个三维矩阵...

• ### Java进阶必须掌握：JVM+Springboot+MySQL+Linux「资料免费送」

JVM 可以分为 5 个部分，分别是：类加载器（Class Loader）：加载字节码文件到内存。运行时数据区（Runtime Data Area）：JVM 核...

• ### 使用Keras预训练好的模型进行目标类别预测详解

最近开始学习深度学习相关的内容，各种书籍、教程下来到目前也有了一些基本的理解。参考Keras的官方文档自己做一个使用application的小例子，能够对图片进...

• ### 使用 Mobilenet 和 Keras 来做迁移学习

本文以notebook的实例的形式讲解。首先用Mobilenet分类狗的图片，然后演示一张不能正确分类的蓝雀图片，然后用迁移学习和Mobilenet重新训练，使...