提到机器学习,深度学习这些,大家都会立马想起Python。但R的实力也不容小觑。今天就用R来演示一个基于TensorFlow的图像识别的例子。如果你想运行这些代码,就必须先安装配置好TensorFlow,我是在Linux系统上面运行的。如何配置TensorFlow尽量看看官方文档,虽然是英文的,但是最新的,也是最准确的。

废话不说,直接来看代码,在代码中我也做了详细的注释,看起来应该不是很困难。

library(tensorflow) #加载TensorFlow包library(magrittr) #数据处理包,可以使用管道函数slim= tf$contrib$slim #slim是一个使构建,训练,评估神经网络变得简单的库。# slim提供了很多计算机视觉方面的著名模型(VGG, AlexNet等),我们不仅可以直接使用,甚至能以各种方式进行扩展。tf$reset_default_graph() #在每次运行中清除当前图形,以避免变量重复#Session会话 张量的具体值和操作,会话关闭时,张量的任何具体值都会丢失images = tf$placeholder(tf$float32, shape(NULL, NULL, NULL, 3))# 创建占位符imgs_scaled = tf$image$resize_images(images, shape(224,224)) #设置图片大小# slim$conv2d自带卷积功能+激励函数 fc8 = slim$conv2d(imgs_scaled, 64, shape(3,3), scope='vgg_16/conv1/conv1_1') %>% slim$conv2d(64, shape(3,3), scope='vgg_16/conv1/conv1_2')  %>%slim$max_pool2d( shape(2, 2), scope='vgg_16/pool1')  %>% #池化操作slim$conv2d(128, shape(3,3), scope='vgg_16/conv2/conv2_1')  %>%slim$conv2d(128, shape(3,3), scope='vgg_16/conv2/conv2_2')  %>%slim$max_pool2d( shape(2, 2), scope='vgg_16/pool2')  %>%slim$conv2d(256, shape(3,3), scope='vgg_16/conv3/conv3_1')  %>%slim$conv2d(256, shape(3,3), scope='vgg_16/conv3/conv3_2')  %>%slim$conv2d(256, shape(3,3), scope='vgg_16/conv3/conv3_3')  %>%slim$max_pool2d(shape(2, 2), scope='vgg_16/pool3')  %>%slim$conv2d(512, shape(3,3), scope='vgg_16/conv4/conv4_1')  %>%slim$conv2d(512, shape(3,3), scope='vgg_16/conv4/conv4_2')  %>%slim$conv2d(512, shape(3,3), scope='vgg_16/conv4/conv4_3')  %>%slim$max_pool2d(shape(2, 2), scope='vgg_16/pool4')  %>%slim$conv2d(512, shape(3,3), scope='vgg_16/conv5/conv5_1')  %>%slim$conv2d(512, shape(3,3), scope='vgg_16/conv5/conv5_2')  %>%slim$conv2d(512, shape(3,3), scope='vgg_16/conv5/conv5_3')  %>%slim$max_pool2d(shape(2, 2), scope='vgg_16/pool5')  %>%slim$conv2d(4096, shape(7, 7), padding='VALID', scope='vgg_16/fc6')  %>%slim$conv2d(4096, shape(1, 1), scope='vgg_16/fc7') %>% # Setting the activation_fn=NULL does not work, so we get a ReLUslim$conv2d(1000, shape(1, 1), scope='vgg_16/fc8')  %>%tf$squeeze(shape(1, 2), name='vgg_16/fc8/squeezed')tf$summary$FileWriter('/tmp/dumm/vgg16', tf$get_default_graph())$close() #保存在/tmp/dumm/vgg16目录下restorer = tf$train$Saver() #创建一个Saver 来管理模型中的所有变量。sess = tf$Session()
restorer$restore(sess, 'vgg_16.ckpt') #复原模型library(jpeg)
img1<-readJPEG('caomei.jpg') #img1的值在0-1之间。d=dim(img1)  #获取img1的维度
imgs =array(255*img1,dim = c(1,d[1],d[2],d[3]))
#因为数值需要在0到225之间,所以需要乘225.形成一个四维数组#我们可以通过与存储在数组imgs中的图像的张量来对图像做预测fc8_vals=sess$run(fc8,dict(images=imgs))#将fc8的张量存储在fc8_vals中。
fc8_vals[1:5]probs=exp(fc8_vals)/sum(exp(fc8_vals))#按概率从高排序,并取前五个。
idx=sort.int(fc8_vals,index.return = TRUE,decreasing = TRUE)$ix[1:5]#读取图像分类文件
library(readr)
names = read_delim("imagenet_classes.txt", "\t", escape_double = FALSE, trim_ws = TRUE,col_names = FALSE)
library(grid) #图片处理的一个包,主要控制输出图形的大的外观和一些细节东西的排列g = rasterGrob(img1, interpolate=TRUE)  #图形进行栅格化text = ""for (id in idx) {text = paste0(text, names[id,][[1]], " ", round(probs[id],5), "\n")
}#annotate 添加文本注释
#annotation_custom 可以添加各种图形元素到ggplot图中library(ggplot2)
ggplot(data.frame(d=1:3)) + annotation_custom(g) + annotate('text',x=0.05,y=0.05,label=text, size=7, hjust = 0, vjust=0, color='blue') + xlim(0,1) + ylim(0,1)

主要代码转自:

https://randomthoughtsonr.blogspot.com/2016/11/image-classification-in-r-using-trained.html

我在网上找的了一张草莓的图片,使用该模型进行识别。

识别结果如下图,不过结果还挺准的。是草莓的概率是0.99999。不过有的情况下识别结果还是不太准的,毕竟这个模型也是有限的。

再来一张二哈(英文名:Siberian husky,取自百度百科)的照片,我专门在百度百科上面找了一张二哈比较霸气的照片。在百度百科上面找的主要原因就是保证这张照片就是二哈。

图片来自百度百科 词条“西伯利亚雪橇犬”

分析结果表明是二哈的可能性是0.592.基本上还是挺准的。

也许就有人说Siberian husky和husky,有什么区别,百度百科上面他们好像就是一个。在维基百科查阅发现,Siberian husky是husky的一个品种,husky还包括了其他品种比如拉布拉多犬哈士奇,我相信一些爱狗人士可能会董。于是我在维基百科上面的husky词条找到了下面这张照片。

图片来源 维基百科 词条“Husky”

结果显示是husky的概率是0.46234.还是挺准的,毕竟这只是一张侧脸照。把这两张照片放在一块,我觉得一般人都分不清楚。

补充:

由于TensorFlow发展比较快,如果看一些比较旧的资料,比如两年前的资料,在用最新的TensorFlow时,输入有的API就会报错,我在这跟大家分享几个API更新后的名字,希望在用的时候能帮到大家。

旧版本 新版本
tf.mul tf.multiply
tf.sub tf.subtract
tf.neg tf.negative
tf.train.SummaryWriter tf.summary.FileWriter

程序中用到的vgg16模型以及imagenet_classes.txt我已经通过百度网盘分享给大家了,在我的公众号《跟着菜鸟一起学R语言》后台回复vgg16即可获取下载链接。

注:

作者:王亨

公众号:数据志

原文链接:http://blog.csdn.net/wzgl__wh/

基于 TensorFlow 的图像识别(R实现)相关推荐

  1. 基于CNN的图像识别(Tensorflow)

    基于CNN的图像识别 基于CNN的图像识别 CNN相关基础理论 卷积神经网络概述 卷积神经网络三大核心概念 TensorFlow 2.0 API tf.keras.Sequential tf.kera ...

  2. 基于tensorflow、CNN网络识别花卉的种类(图像识别)

    基于tensorflow.CNN网络识别花卉的种类 这是一个图像识别项目,基于 tensorflow,现有的 CNN 网络可以识别四种花的种类.适合新手对使用 tensorflow进行一个完整的图像识 ...

  3. 基于Tensorflow卷积神经网络天气图像识别系统设计

    开发软件: Pycharm + Navicat 12 开发技术:Django + sqlite + Tensorflow卷积神经网络 1.这是一个天气图像识别项目,基于tensorflow,使用卷积神 ...

  4. python人工智能图像识别视频下载链接_2019-07-11 人工智能-图像识别项目分析-基于tensorflow的视频物品检测...

    选题:基于tensorflow的视频物品检测 Real-Time Object Recognition App with Tensorflow and OpenCV 一个实时对象识别应用程序 1.准备 ...

  5. python神经网络库识别验证码_基于TensorFlow 使用卷积神经网络识别字符型图片验证码...

    本项目使用卷积神经网络识别字符型图片验证码,其基于TensorFlow 框架.它封装了非常通用的校验.训练.验证.识别和调用 API,极大地减低了识别字符型验证码花费的时间和精力. 项目地址:http ...

  6. 基于Tensorflow实现一个Transformer翻译器

    Transformer是谷歌在2017年的一篇论文"Attention is all you need"提出的一个seq2seq的模型架构,其创造性的提出了自注意力的思想,可以很好 ...

  7. c++ 图片验证码识别_基于tensorflow 实现端到端的OCR:二代身份证号识别

    最近在研究OCR识别相关的东西,最终目标是能识别身份证上的所有中文汉字+数字,不过本文先设定一个小目标,先识别定长为18的身份证号,当然本文的思路也是可以复用来识别定长的验证码识别的. 本文实现思路主 ...

  8. CV之YOLOv3:基于Tensorflow框架利用YOLOv3算法对热播新剧《庆余年》实现目标检测

    CV之YOLOv3:基于Tensorflow框架利用YOLOv3算法对热播新剧<庆余年>实现目标检测 目录 搭建 1.下载代码 2.安装依赖库 3.导出COCO权重解压到checkpoin ...

  9. DL之SSD:基于tensorflow利用SSD算法实现目标检测(21类)

    DL之SSD:基于tensorflow利用SSD算法实现目标检测(21类) 目录 输出结果 SSD代码 输出结果 VOC_LABELS = {'none': (0, 'Background'),'ae ...

最新文章

  1. 五类和超五类网线的区别
  2. ionic 完美仿微信摇一摇
  3. 【Python】/ 和 // 的区别
  4. PHP的转义字符与\r\n
  5. 初识 JSP---(Servlet映射 / ServletRequest / get与post区别 / 解决乱码)
  6. Centos 下安装redmine及设置发送邮件功能
  7. spring— Bean标签scope配置和生命周期配置
  8. 爬虫遇到路径转换的解决方案
  9. 大学物理光学思维导图_头晕/眩晕问诊最全思维导图,赶紧收藏!
  10. 学web前端有什么计划?
  11. python如何创建一个列表,在python中创建一个由列表索引的字典
  12. r 选取从小到大的数据_r 选取数据库
  13. 【hadoop】19.MapReduce-手机流量统计
  14. 计算机课堂小游戏活跃气氛,活跃气氛的70个小游戏 比较嗨的暖场游戏
  15. 【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(18):方阵的幂级数
  16. 6.26 mongoDB是无法find未初始的值的,mongoose的Schema需具象化及个人商品Schema设计,租赁网登录态初次尝试,vue对对象未赋初值的监听,forEach等api深拷贝问题
  17. 计算机鼠标与键盘基本知识,电脑鼠标和键盘的基础设置方法
  18. 【量化】量化交易入门系列6:量化交易学习书籍推荐(二)
  19. 解决“由于应用程序配置不正确,应用程序未能启动”的问题
  20. 2021年三季度中国调味发酵品行业A股上市企业营收排行榜:上市企业归属母公司净利润均处于盈利状态(附热榜TOP14详单)

热门文章

  1. SRIO学习(五)——SerDes Macro(串行解串宏)
  2. 手动制作自己想的语谱图
  3. LSTM-pytorch 写诗之位置编码
  4. jittor 训练手写数字识别(mnist)
  5. 知识蒸馏原来不是你想的那样子
  6. 如果函数是可以遗传的
  7. jsonp跨域实现单点登录,跨域传递用户信息以及保存cookie注意事项
  8. uC/OS-II源码分析(四)
  9. ZOOKEEPER安装及测试
  10. editplus的配置和使用