1、概述

上一讲,我们使用了slim训练了自己的数据,主要用于分类任务。这一讲,我们还是继续学习slim库,用它来对图像进行识别和检测。

2、下载Inception_ResNet_v2模型

第十六讲中,我们有使用别人训练好的模型来训练我们自己的数据集,这里,我们也使用别人在ImageNet上训练好的模型来识别图片内容。打开以下网页,

https://github.com/tensorflow/models/tree/master/research/slim

下载Inception-ResNet-v2模型。

3、导入模块

#encoding:utf-8
import tensorflow as tffrom matplotlib import pyplot as plt
from nets import inception
from preprocessing import inception_preprocessing
import numpy as np
from datasets import imagenet

4、获取Inception-ResNet-v2参数

#获取inception_resnet_v2默认图片尺寸,这里为299
image_size = inception.inception_resnet_v2.default_image_size
#获取imagenet所有分类的名字,这里有1000个分类
names = imagenet.create_readable_names_for_imagenet_labels()

想知道ImageNet具体有哪些分类,可以下载下面的文件,

https://raw.githubusercontent.com/tensorflow/models/master/research/inception/inception/data/imagenet_metadata.txt

5、图片预处理

slim = tf.contrib.slim#待测试图片路径
sample_image = 'bus.png'#打开原图
image = tf.image.decode_jpeg(tf.read_file(sample_image), channels=3)
#对原图进行裁剪、缩放、归一化等处理,将图片大小缩放至299×299
processed_image = inception_preprocessing.preprocess_image(image,image_size,image_size,is_training=False)
#增加一个维度
processed_images = tf.expand_dims(processed_image, 0)

其中,tf.expand_dims的作用是增加一个维度。例如,

import tensorflow as tf
processed_image = [[1, 4], [5, 3]]with tf.Session() as sess:print(sess.run(tf.expand_dims(processed_image, 0)))

运行结果,

[[[1 4]

[5 3]]]

6、创建模型

#创建模型
arg_scope = inception.inception_resnet_v2_arg_scope()
with slim.arg_scope(arg_scope):logits, end_points = inception.inception_resnet_v2(processed_images, is_training=False)

7、加载模型

with tf.Session() as sess:# 这里是我们下载下来的模型的路径checkpoint_file = 'checkpoint/inception_resnet_v2_2016_08_30.ckpt'#加载已训练好的模型saver = tf.train.Saver()saver.restore(sess, checkpoint_file)

8、run

#通过softmax获取分类
probabilities = tf.nn.softmax(logits)srcimage, predict_values, logit_values = sess.run([image, processed_images, probabilities])
print(np.max(logit_values))
print(np.argmax(logit_values), names[np.argmax(logit_values)])

9、显示原始图片和预处理后的图片

plt.figure()
p1 = plt.subplot(121)
p2 = plt.subplot(122)# 显示原始图片
p1.imshow(srcimage)
p1.axis('off')
p1.set_title('source image')# 显示预处理后的图片
p2.imshow(predict_values[0, :, :, :])
p2.axis('off')
p2.set_title('image')plt.show()

10、运行结果
$ python demo4.py

0.67273223

(579, 'gown')

识别出了莫老师的裙子。

再换一张图片试试,

$ python demo4.py

0.79414374

(966, 'burrito')

百度看一下这个'burrito'是什么?

吐血哦,此处奔跑着一万只草泥马~~

那我就下一张'burrito'来试试!

$ python demo4.py

0.9288399

(966, 'burrito')

服了!还真识别出来了,看来只能说吃货长得像吃的了~~难道是识别了手里的黄瓜?这个悬念留着下一节课再揭晓。

再试一张图片看看,

$ python demo4.py

0.9551897

(780, 'school bus')

这次识别的还是准确的。

11、完整代码

#encoding:utf-8
import tensorflow as tf
from matplotlib import pyplot as plt
from nets import inception
from preprocessing import inception_preprocessing
import numpy as np
from datasets import imagenet#获取inception_resnet_v2默认图片尺寸,这里为299
image_size = inception.inception_resnet_v2.default_image_size
#获取imagenet所有分类的名字,这里有1000个分类
names = imagenet.create_readable_names_for_imagenet_labels()slim = tf.contrib.slim#待测试图片路径
sample_image = 'bus.png'#打开原图
image = tf.image.decode_jpeg(tf.read_file(sample_image), channels=3)
#对原图进行裁剪、缩放、归一化等处理,将图片大小缩放至299×299
processed_image = inception_preprocessing.preprocess_image(image, image_size, image_size, is_training=False)
#增加一个维度
processed_images = tf.expand_dims(processed_image, 0)#创建模型
arg_scope = inception.inception_resnet_v2_arg_scope()
with slim.arg_scope(arg_scope):logits, end_points = inception.inception_resnet_v2(processed_images, is_training=False)with tf.Session() as sess:# 这里是我们下载下来的模型的路径checkpoint_file = 'checkpoint/inception_resnet_v2_2016_08_30.ckpt'#加载已训练好的模型saver = tf.train.Saver()saver.restore(sess, checkpoint_file)#通过softmax获取分类probabilities = tf.nn.softmax(logits)srcimage, predict_values, logit_values = sess.run([image, processed_images, probabilities])print(np.max(logit_values))print(np.argmax(logit_values), names[np.argmax(logit_values)])plt.figure()p1 = plt.subplot(121)p2 = plt.subplot(122)# 显示原始图片p1.imshow(srcimage)p1.axis('off')p1.set_title('source image')# 显示预处理后的图片p2.imshow(predict_values[0, :, :, :])p2.axis('off')p2.set_title('image')plt.show()

12、自己处理图片

上面的例子使用了自带的inception_preprocessing.preprocess_image方法处理图片,现在我们用自己写个处理的方法看看效果如何?因为跟上面的例子差不多,这里就直接给出代码了,

#encoding:utf-8
import tensorflow as tf
from matplotlib import pyplot as plt
from nets import inception
from preprocessing import inception_preprocessing
import numpy as np
from datasets import imagenet#获取inception_resnet_v2默认图片尺寸,这里为299
image_size = inception.inception_resnet_v2.default_image_size
#获取imagenet所有分类的名字,这里有1000个分类
names = imagenet.create_readable_names_for_imagenet_labels()slim = tf.contrib.slim#待测试图片路径
sample_image = 'bus.png'#打开原图
image = tf.image.decode_jpeg(tf.read_file(sample_image), channels=3)
#对原图进行裁剪、缩放、归一化等处理,将图片大小缩放至299×299
processed_image = inception_preprocessing.preprocess_image(image, image_size, image_size, is_training=False)
#增加一个维度
processed_images = tf.expand_dims(processed_image, 0)#创建模型
arg_scope = inception.inception_resnet_v2_arg_scope()
with slim.arg_scope(arg_scope):logits, end_points = inception.inception_resnet_v2(processed_images, is_training=False)with tf.Session() as sess:# 这里是我们下载下来的模型的路径checkpoint_file = 'checkpoint/inception_resnet_v2_2016_08_30.ckpt'#加载已训练好的模型saver = tf.train.Saver()saver.restore(sess, checkpoint_file)#通过softmax获取分类probabilities = tf.nn.softmax(logits)srcimage, predict_values, logit_values = sess.run([image, processed_images, probabilities])print(np.max(logit_values))print(np.argmax(logit_values), names[np.argmax(logit_values)])plt.figure()p1 = plt.subplot(121)p2 = plt.subplot(122)# 显示原始图片p1.imshow(srcimage)p1.axis('off')p1.set_title('source image')# 显示预处理后的图片p2.imshow(predict_values[0, :, :, :])p2.axis('off')p2.set_title('image')plt.show()

运行结果,

8.191614

(448, 'binoculars, field glasses, opera glasses')

8.673139

(966, 'burrito')

10.063082

(780, 'school bus')

除了第一张识别的是莫老师的眼镜以外,另外两张图片的识别结果是一样的,这也说明了,在图片预处理这块,处理方法不一样,识别到的物体也有可能不同。

那有没有什么方法,尽可能的将图片中的物体识别出来呢?这就是我们下一节要讲的了。

tensorflow精进之路(二十一)——使用slim模型对图像识别与检测(上)(Inception_ResNet_v2模型)相关推荐

  1. tensorflow精进之路(二十)——使用slim模型库训练自己的数据

    1.概述 上一节,我们使用python3爬取了百度图片的一些图片数据,这一节,我们就使用这些爬取下来的图片,训练我们自己的模型,用来识别猪.蛇.狗.大象.老虎这五种动物.在这里吐嘲一下百度图片搜索结果 ...

  2. tensorflow精进之路(二十五)——Object Detection API目标检测(下)(VOC数据集训练自己的模型进行目标检测)

    1.概述 上一讲,我们使用了别人根据COCO数据集训练好的模型来做目标检测,这一讲,我们就来训练自己的模型. 2.下载数据集 为了方便学习,我们先使用别人整理好的数据集来训练---VOC 2012数据 ...

  3. tensorflow精进之路(二十三)——Object Detection API目标检测(上)(Fast R-CNN算法)

    1.概述 上一讲,我们使用slim库对图片进行检测,每个物品用同一种颜色标注,显得乱七八糟的.这一讲,我们来学习目标检测.目标检测就是,输入一张图片,输出是将该图片中所含的所有目标物体识别,并标记出他 ...

  4. tensorflow精进之路(二十二)——使用slim模型对图像识别与检测(下)(VGG19模型)

    1.概述 上一节使用slim对图像进行识别,但是一张图片里就识别出一样东西,这节我们就来学习怎么检测图片里更多的物品.上一节我们使用的是Inception-ResNet-v2模型,这一节我们使用的是V ...

  5. tensorflow精进之路(二十八)——人脸识别(下)(MTCNN人脸检查和人脸对齐+CASIA-WebFace数据集模型)

    1.概述 这一讲,我们来训练自己的人脸识别模型. 2.下载CASIA-WebFace人脸数据集 CASIA-WebFace人脸数据集包含了10575个人的494414张人脸图片,需要在 http:// ...

  6. tensorflow精进之路(二十七)——人脸识别(中)(MTCNN人脸检查和人脸对齐+FaceNet模型)

    1.概述 上一讲,我们讲了人脸识别的基本原理,这一讲,我们用tensorflow来实现它. 2.下载LFW人脸数据集 2.1.LFW数据集简介 LFW人脸数据集主要用来研究非受限情况下的人脸识别问题, ...

  7. tensorflow精进之路(二十六)——人脸识别(上)(MTCNN原理)

    1.概述 换了个固态硬盘,本想装最新的系统mint 19,谁知道却是个坑,NVIDIA驱动和CUDA工具老是装不上去,各种问题,折腾了几天,还是用回了原来的系统.不过,这次软件改了一下,使用了pyth ...

  8. tensorflow精进之路(二十四)——Object Detection API目标检测(中)(COCO数据集训练的模型—ssd_mobilenet_v1_coco模型)

    1.概述 上一讲简单的讲了目标检测的原理以及Tensorflow Object Detection API的安装,这一节继续讲Tensorflow Object Detection API怎么用. 2 ...

  9. TensorFlow精进之路(十一):反向传播BP

    1.概述 全连接神经网络和卷积神经网络用的是反向传播(BackPropagation,BP),而卷积神经网络用的是随时间反向传播(BackPropagation Through Time,BPTT), ...

最新文章

  1. 算法---最长湍流子数组
  2. UA MATH566 统计理论4 贝叶斯统计基础1
  3. 安全性问题(数据篡改(拿到别人的URL,篡改数据(金额)发送给系统))
  4. 笔记-项目进度管理-控制进度
  5. 求1+2+……+N的和
  6. C#如何用Graphics画出一幅图表
  7. matlab画gds图,如何将图片转换为.gds文件?(转)
  8. linux a8启动过程,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  9. VS2010 修改全局 include目录
  10. Java实现简易四则运算器
  11. H3C OSPF基本配置命令
  12. linux下部署selenium爬虫程序
  13. 联想服务器如何u盘启动盘装系统,联想如何设置u盘启动
  14. 如何将硬盘数据迁移包括系统一起迁移到另一个硬盘?
  15. 没有U盘怎么给电视盒子装软件?新手必看三种方法
  16. Android仿淘宝订单页面实现
  17. rp_rv1126开发板UVC XU扩展协议功能验证
  18. 为什么小时候梦寐以求的游戏机,长大后买了却无法坚持玩下去?
  19. 前端基础教程:简单的实现html+css+javascript点赞效果
  20. seism matlab,去噪方法是什么意思

热门文章

  1. 【转载】Java NIO学习
  2. C Primer Plus 第5章 运算符、表达式和语句 5.2基本运算符
  3. 基于 FPGA 的智力抢答器设计
  4. 根据IP定位用户所在城市信息
  5. 再论《IT人员应聘建议》
  6. DataRowVersion与DataRowState C#版
  7. 使用GDAL打开裸数据(RAW)
  8. arcpy.mapping常用四大件-StyleItem
  9. js dojo 保存txt文件
  10. 手机游戏行业洗牌在即 成本增长小团队出局