http://www.voidcn.com/article/p-wyaahqji-dr.html

从我们见到的各种图像识别软件来看,机器似乎能认出人脸、猫、狗、花草、各种汽车等等日常生活中出现的物体,但实际上,这有一个前提:你要用这些类别的图像,对它进行过训练。

确切地说,该叫它“图像分类”。

建立一个图像分类器并不复杂,技术博客Source Dexter上最近发表的一篇文章,介绍了该如何快速用TensorFlow实现图像分类。

以下是小编节选自这篇文章的内容:

在进入正题之前,我们先讲一些基本概念。

图像分类是怎样实现的?

向一个训练过的系统输入图像,我们会得到一组概率值:每个训练过的类别都有一个,然后,系统会将图像归到概率最高的类。

比如说你训练了一个系统,来识别猫和狗。当你输入一张图像时,系统会输出这张图像属于猫的概率和属于狗的概率。

不过,这种分类器也有一个缺陷:如果你输入一张蛇的图片,它也只能判断这张图片包含猫的概率高,还是包含狗的概率高一点。

神经网络和深度神经网络

概括地说,神经网络是计算单元的连接,能够从提供给它的一组数据中进行学习。

把多层神经网络堆叠在一起,我们就得到了深度神经网络。建立、训练和运行深度神经网络的过程,称为深度学习。

关于深度学习,之前网上发布很火的文章详细介绍了包括神经网络在内的《25个深度学习基础概念》,

TensorFlow

TensorFlow是一个数学库,也是深度学习领域使用最广的开源框架,由Google开发。

在这篇文章中,我们将用TensorFlow预训练模型来设置我们的分类器。

想要设置这个分类器,还有几个先决条件:

  • 你的机器上安装并设置好了TensorFlow;

  • 你会用Python。

从零开始训练一个深度学习的分类器需要几周、甚至几个月的时间,这取决于你用什么硬件。为了避免这种麻烦,我们将使用预先训练的模型。 Tensorflow预训练的模型通常能够识别大约1000类不同的物体。

接下来,我们开始设置自己的图像分类器:

第1步:下载预训练模型、计算图和脚本

clone这个存储区,并用以下命令进入:

git clone https://github.com/akshaypai/tfClassifier

cd tfClassifier

第2步:运行脚本找到最佳预测

你可以提供要分类的图像,来运行这个脚本。默认情况下,将显示概率最高的结果。

Python classifier.py --image_file file_path_to_image

如果想获得前几个分类结果,可以使用以下参数。

Python classifier.py --image_file file_path_to_image --num_top_predictions number_of_top_results

示例:以下是我们输入石榴图像,获得的结果。

python classifier.py --image_file ~/Pictures/fruit.jpg

pomegranate (score = 0.98216)

分类器说,这个图像是石榴,可能性是98%。

第3步:运行脚本来获取前n个识别出的类

现在让我们尝试给出一个具有更多属性的图像,如下面的房子的形象:

python classifier.py --image_file ~/Pictures/house.jpg --num_top_predictions 5picket fence, paling (score = 0.95750)

worm fence, snake fence, snake-rail fence, Virginia fence (score = 0.03615)

beacon, lighthouse, beacon light, pharos (score = 0.00018)

boathouse (score = 0.00013)

patio, terrace (score = 0.00007)

从上面的结果可以看出,分类器认为这张图片中包含栅栏的可能性是95%,还有可能包含另一个栅栏、庭院/露台等。

用TensorFlow预训练的模型对图像进行分类,就是这么简单。不过,预训练模型能识别的类是有限的,如果你希望分类器来区分你需要的类别,需要重新训练这个模型。

下面,我们再介绍一下如何对模型进行重新训练。

第1步:设置图像文件夹

这一步涉及设置文件夹结构,好让TensorFlow能轻松获取这些类别。比如说你想训练神经网络,识别5种花:玫瑰、郁金香、蒲公英、可可花、万寿菊。

创建文件夹结构时:

为每种花创建一个文件夹,该文件夹的名称是类别的名称(在我们举的例子中,是这种花的名称);

将花的图像添加到其各自的文件夹中。例如把玫瑰的所有图像放进“玫瑰”文件夹。

将所有文件夹添加到另一个父文件夹中,比如说“花”。

添加完之后,你将看到这样的文件夹结构:

~/flowers

~/flowers/roses/img1.jpg

~/flowers/roses/img2.jpg

...

~/flowers/tulips/tulips_img1.jpg

~/flowers/tulips/tulips_img2.jpg

~/flowers/tulips/tulips_img3.jpg

...

所有文件夹都这样设置,文件夹结构就准备好了。

第2步:运行重新训练脚本

用下面的命令来运行脚本:

python retrain.py --model_dir ./inception --image_dir ~/flowers --output_graph ./output --how_many_training_steps 500

命令行参数:

-model_dir:该参数给出了预训练模型的位置。预先训练的模型存储在git存储库的inception文件夹下。

-image_dir:在上一步中创建的图像文件夹的路径。

-output_graph:存储新训练图的位置。

-how_many_training_steps:training steps表示要执行的迭代次数,默认是4000。找到正确的次数需要经过不断试错,一旦找到最好设置,就可以开始用了。

下列参数可以用来提高模型的准确度:

random_crop:随机裁剪能够让你专注于图像的主要部分。

Random_scale:和裁剪类似,但可以随机扩展图像大小。

flip_left_right:翻转。

以上,就是重新训练深度学习模型所需的步骤,这样就可以识别自定义的物体了。

想3分钟搭建图像识别系统?这里有一份TensorFlow速成教程(转)的更多相关文章

  1. 讲解开源项目:5分钟搭建私人Java博客系统

    本文适合刚学习完 Java 语言基础的人群,跟着本文可了解和运行 Tale 项目.示例均在 Windows 操作系统下演示 本文作者:HelloGitHub-秦人 HelloGitHub 推出的< ...

  2. 十分钟搭建和使用ELK日志分析系统

    前言 为满足研发可视化查看测试环境日志的目的,准备采用EK+filebeat实现日志可视化(ElasticSearch+Kibana+Filebeat).题目为“十分钟搭建和使用ELK日志分析系统”听 ...

  3. 按照Enterprise Integration Pattern搭建服务系统

    在前一篇文章中,我们已经对Enterprise Integration Pattern中所包含的各个组成进行了简单地介绍.限于篇幅(20页Word以内),我并没有深入地讨论各个组成.但是如果要真正地按 ...

  4. 5分钟搭建 nginx +php --------------(LNMP)新手专用

    5分钟搭建 nginx +php --------------(LNMP)新手专用 2014-11-14 16:48 88876人阅读 评论(2) 收藏 举报 版权声明:本文为博主原创文章,未经博主允 ...

  5. 实战 Prometheus 搭建监控系统

    实战 Prometheus 搭建监控系统 Prometheus 是一款基于时序数据库的开源监控告警系统,说起 Prometheus 则不得不提 SoundCloud,这是一个在线音乐分享的平台,类似于 ...

  6. [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

    [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...

  7. LAMP-五分钟搭建个人论坛

    LAMP-五分钟搭建个人论坛 系统版本:CentOS7 1.##安装lamp及依赖软件wget http://repo.mysql.com/mysql-community-release-el7-5. ...

  8. 一分钟搭建Vue2.0+Webpack2.0多页面项目

    想要自己一步步搭建的比较麻烦,不是很推荐,最少也要使用vue-cli,在其基础上开始搭建,今天我的主题是一分钟搭建,那么常规方法肯定不能满足的, 而我用的方法也很简单,就是使用已经配置完成的demo模 ...

  9. 基于SRS+OBS搭建直播系统

    这段时间与视频,直播相关的技术不可谓不热,今天我们就近距离接触下,尽早搭上这班车! 我们先看一张效果图 左边是OBS 推流端,右边是VLC播放器,稍微有延迟! 本文是基于VMware(12.5.7)+ ...

随机推荐

  1. Linux基础命令---rmdir

    rmdir 删除一个空目录,可以同时删除途经的父目录,但是要确保父目录中没有其他内容. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. ...

  2. python基础五--dict

    一.昨日内容回顾 1. 列表: 增 insert:按照指定下标插入 append:在列表最后增加 extend:迭代式的增加到列表的最后,相当于列表扩展 删 pop:根据指定下标删除,返回删除的元素, ...

  3. ImageLoader作用 AAAA

    https://github.com/nostra13/Android-Universal-Image-Loader ImageLoader作用 1.多线程下载图片,图片可以来源于网络,文件系统,项目 ...

  4. NFS常用命令

    1.客户端查看服务端可挂载卷 showmount -t 服务端IP 2.不重启加载NFS配置文件 exportfs -avr

  5. 20145122 《Java程序设计》课程总结

    课程总结 每周读书笔记链接汇总 第一周读书笔记:http://www.cnblogs.com/20145122chengzhiyin/p/5244949.html 第二周读书笔记:http://www ...

  6. 20145334赵文豪《网络对抗》-逆向及Bof基础实践

    本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返 ...

  7. E: could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporary unavailable) E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is an other process using it

    1. 问题详细提示如下: E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarly unava ...

  8. 通过jquery获得某个元素的位置, 透明div, 弹出框, 然后在旁边显示toggle子级联菜单-hover的bug解决

    jquery的"筛选选择器", 都是用冒号开头的, 即, 冒号选择器就是 筛选选择器.如: :first, :last, :eq(index), :first-child,...等 ...

  9. P3709 大爷的字符串题

    题意 询问区间众数出现的次数 思路 唯有水题快人心 离散化+莫队 莫队一定要先加后减,有事会出错的 莫队维护区间众数: 维护两个数组,一个数组记录权值为x的出现次数,一个记录出现次数为x的数的个数 a ...

  10. Wireshark 显示域名列

    一般使用Wireshark只能看到ip地址,但是看域名更方便更简明 只要修改一个配置就可以 编辑-->首选项 勾选Resolve network(IP) addresses 重新捕捉: