BootstrapTensorFlow图像分类教程

深度上算法和计算机硬件性能的提高,使研究人口和商家当图像识别、语音识别、推荐引擎以及机具翻译等领域取得了英雄的升华。六年前,视觉模式识别领域获得了第一单神的成果。两年前,Google大脑团队支付了TensorFlow,并以深度上巧妙的下叫各个领域。现在,TensorFlow则超过了很多用于深上之繁杂工具。

采用TensorFlow,你得赢得有强能力的复杂性功能,其强大的基础来自于TensorFlow的易用性。

每当是由于少片组成的泛滥成灾被,我拿叙如何迅速的创一个用为图像识别的卷积神经网络。TensorFlow计算步骤是相互的,可针对该布局进行逐帧视频分析,也只是针对那个扩张进行时感知视频分析。

遵循系列文章直接切入关键之有的,只需要对命令行和Python有极其中心的垂询,就得在家快速地创造有使而激动不已的品类。本文不会见深入探讨TensorFlow的做事规律,如果你想打听又多,我会提供大量附加的参考资料。本系列具有的库房和工具都是免费开源的软件。

办事原理

照课程旨在将一个预先被置于训练了之类别里的图片,通过运行一个命以识别该图像具体属于哪个品种。步骤如下图所示:


标注:管理训练多少。例如花卉,将雏菊的图像放到“雏菊”目录下,将玫瑰放到“玫瑰”目录下等等,将尽量多的不比品类的繁花按照项目不同在不同的目录下。如果我们无标注“蕨类植物”,那么分类器永远也非会见回“蕨类植物”。这亟需每个品种的无数样本,因此就同样步很要紧,并且颇耗时。(本文使用预先标记好的数量为提高效率)


训练:将记好之多少(图像)提供于范。有一个家伙将随机抓取一批判图像,使用模型猜测每种花的种,测试猜测的准确性,重复执行,直到使用了大部分训多少了。最后一批不被下的图像用于计算该训练模型的准确性。


分类:在初的图像及采取模型。例如,输入:IMG207.JPG,输出:雏菊。这个手续快速简单,且衡量的代价小。

训练和归类

准学科将训练一个用以识别不同类型花朵的图像分类器。深度上用大量之训多少,因此,我们得大量已分类的花图像。值得庆幸之是,另外一个模在图像收集与归类就上面开得死出色,所以我们使用这蕴藏脚本的已经分类数据集,它产生备且完全训练了之图像分类型,重新训练模型的终极几叠坐高达我们怀念如果的结果,这种技能称为搬学习。

咱还训练的模子是Inception
v3,最初是当2015年12月刊出之舆论“重新考虑计算机视觉的Inception架构”中来开论述。

截至我们举行了之大约20分钟之教练,Inception才知晓哪些识别雏菊和郁金香,这就是是深浅上中之“学习”部分。

安装

第一,在所选的平台达成安装Docker。

在许多TensorFlow教程中首位且唯一因之就是Docker(应该表明这是个成立之始)。我耶再也爱好这种设置TensorFlow的章程,因为无欲设置一系列之赖项,这可保持主机(笔记本或桌面)比较根本。

Bootstrap TensorFlow

安装Docker后,我们准备启动一个训练及分类的TensorFlow容器。在硬盘上创办一个2GB空闲上空的办事目录,创建一个称作吧local的子目录,并记下完整路径。

docker run -v /path/to/local:/notebooks/local –rm -it –name tensorflow

tensorflow/tensorflow:nightly /bin/bash

下是命令解析:

-v
/path/to/local:/notebooks/local将刚刚创立的local目录挂载到容器中得当的职。如果采用RHEL、Fedora或另支持SELinux的系统,添加:Z允许容器访问目录。

–rm 退出时令docker删除容器

-it 连接输入输出,实现互动。

–name
tensorflow将容器命名为tensorflow,而不是sneaky_chowderhead或其它Docker定义的肆意名字。

tensorflow/tensorflow:nightly从Docker Hub
(公共图像存储库)运行tensorflow/tensorflow的nightly
图像,而未是流行的图像(默认也多年来确立/可用图像)。使用nightly图像而非是latest图像,是以(在写入时)latest包含的一个bug会破坏TensorBoard,这是咱稍后需要之一个数目可视化工具。

/bin/bash指定运行Bash shell,而未运行网默认命令。

教练模型

在容器中运作下述命令,对训练多少进行下载和完整性检查。

curl -O
http://download.tensorflow.org/example\_images/flower\_photos.tgz

echo ‘db6b71d5d3afff90302ee17fd1fefc11d57f243f  flower_photos.tgz’ |
sha1sum -c

假使无观看“flower_photos.tgz”信息:说明文件未正确。如果上诉curl
或sha1sum手续失败,请手动下充斥训练多少包并解压(SHA-1
校验码:db6b71d5d3afff90302ee17fd1fefc11d57f243f)到地方主机的local目录下。

今把训练多少放好,然后对更训练脚论进行下载和完整性检查。

mv flower_photos.tgz local/

cd local

curl -O
https://raw.githubusercontent.com/tensorflow/tensorflow/10cf65b48e1b2f16eaa82

6d2793cb67207a085d0/tensorflow/examples/image_retraining/retrain.py

echo ‘a74361beb4f763dc2d0101cfe87b672ceae6e2f5  retrain.py’ | sha1sum -c

确认retrain.py有不利的情节,你应该看retrain.py: OK.。

最后,开始修!运行更训练脚本。

python retrain.py –image_dir flower_photos –output_graph
output_graph.pb

–output_labels output_labels.txt

如若遇上如下错误,忽略她:

TypeError: not all arguments converted during string formatting Logged
from file

tf_logging.py, line 82.

趁retrain.py 的运行,训练图像会活动的分批软训练、测试与认证数据集。

以出口及,我们希望发比高之“训练精度”和“验证精度”,以及比较逊色之“交叉熵”。有关这些术语的详尽分解,请参见“如何不怕新图片类型又训练Inception的末尾一层”。在当下底硬件上的训练约30分钟。

要留心控制高出口的最终一尽:

INFO:tensorflow:Final test accuracy = 89.1% (N=340)

当即说明我们曾经获得了一个模:给得一张图像,10不良面临生9不行而科学猜出是五种植花朵类型受到之啦一样种。由于提供给训练过程的肆意数不同,分类的精确度也会有所不同。

分类

又续加一个有些本子,就可以将新的花图像添加到模型中,并出口测试结果。这就算是图像分类。

以下述脚论命名吧 classify.py保存在当地local目录:

import tensorflow as tf, sys

image_path = sys.argv[1]

graph_path = ‘output_graph.pb’

labels_path = ‘output_labels.txt’

# Read in the image_data

image_data = tf.gfile.FastGFile(image_path, ‘rb’).read()

# Loads label file, strips off carriage return

label_lines = [line.rstrip() for line

    in tf.gfile.GFile(labels_path)]

# Unpersists graph from file

with tf.gfile.FastGFile(graph_path, ‘rb’) as f:

    graph_def = tf.GraphDef()

    graph_def.ParseFromString(f.read())

    _ = tf.import_graph_def(graph_def, name=”)

# Feed the image_data as input to the graph and get first prediction

with tf.Session() as sess:

    softmax_tensor =
sess.graph.get_tensor_by_name(‘final_result:0’)

    predictions = sess.run(softmax_tensor,

    {‘DecodeJpeg/contents:0’: image_data})

    # Sort to show labels of first prediction in order of confidence

    top_k =
predictions[0].argsort()[-len(predictions[0]):][::-1]

    for node_id in top_k:

        human_string = label_lines[node_id]

        score = predictions[0][node_id]

        print(‘%s (score = %.5f)’ % (human_string, score))

为测试你协调之图像,保存于local目录下连取名也test.jpg,运行(在容器内)
python classify.py test.jpg。输出结果如下:

sunflowers (score = 0.78311)

daisy (score = 0.20722)

dandelion (score = 0.00605)

tulips (score = 0.00289)

roses (score = 0.00073)

数说明了周!模型确定图像被之花朵是奔日葵的准确度也78.311%。数值越强表明配合配度越强。请小心,只能有一个匹类型。多标签分类则用另外一个不等的计。

复多详细信息,请点击这里查阅classify.py的事无巨细分解。

分类脚本中之图加载代码都给弄坏,在此处,我为此graph_def =
tf.GraphDef()等作为图表加载代码。

采用零基础知识以及片代码,我们建了一个一定好的花卉图像分类器,在存活的笔记本电脑上各个秒大约可拍卖5摆设图像。

    希望您会继承关注本博客的多元博文。

以上也译文。

正文由阿里云云栖社区集团翻译。

章原来标题《Learn how to classify images with
TensorFlow》,译者:Mags,审校:袁虎。

相关文章