http://www.voidcn.com/article/p-wyaahqji-dr.htmlhtml
从咱们见到的各类图像识别软件来看,机器彷佛能认出人脸、猫、狗、花草、各类汽车等等平常生活中出现的物体,但实际上,这有一个前提:你要用这些类别的图像,对它进行过训练。python
确切地说,该叫它“图像分类”。git
创建一个图像分类器并不复杂,技术博客Source Dexter上最近发表的一篇文章,介绍了该如何快速用TensorFlow实现图像分类。github
如下是小编节选自这篇文章的内容:网络
在进入正题以前,咱们先讲一些基本概念。框架
向一个训练过的系统输入图像,咱们会获得一组几率值:每一个训练过的类别都有一个,而后,系统会将图像归到几率最高的类。dom
好比说你训练了一个系统,来识别猫和狗。当你输入一张图像时,系统会输出这张图像属于猫的几率和属于狗的几率。学习
不过,这种分类器也有一个缺陷:若是你输入一张蛇的图片,它也只能判断这张图片包含猫的几率高,仍是包含狗的几率高一点。ui
归纳地说,神经网络是计算单元的链接,可以从提供给它的一组数据中进行学习。命令行
把多层神经网络堆叠在一块儿,咱们就获得了深度神经网络。创建、训练和运行深度神经网络的过程,称为深度学习。
关于深度学习,以前网上发布很火的文章详细介绍了包括神经网络在内的《25个深度学习基础概念》,
TensorFlow是一个数学库,也是深度学习领域使用最广的开源框架,由Google开发。
在这篇文章中,咱们将用TensorFlow预训练模型来设置咱们的分类器。
想要设置这个分类器,还有几个先决条件:
你的机器上安装并设置好了TensorFlow;
你会用Python。
从零开始训练一个深度学习的分类器须要几周、甚至几个月的时间,这取决于你用什么硬件。为了不这种麻烦,咱们将使用预先训练的模型。 Tensorflow预训练的模型一般可以识别大约1000类不一样的物体。
接下来,咱们开始设置本身的图像分类器:
clone这个存储区,并用如下命令进入:
git clone https://github.com/akshaypai/tfClassifier cd tfClassifier
你能够提供要分类的图像,来运行这个脚本。默认状况下,将显示几率最高的结果。
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%。
如今让咱们尝试给出一个具备更多属性的图像,以下面的房子的形象:
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预训练的模型对图像进行分类,就是这么简单。不过,预训练模型能识别的类是有限的,若是你但愿分类器来区分你须要的类别,须要从新训练这个模型。
下面,咱们再介绍一下如何对模型进行从新训练。
这一步涉及设置文件夹结构,好让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 ...
全部文件夹都这样设置,文件夹结构就准备好了。
用下面的命令来运行脚本:
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:翻转。
以上,就是从新训练深度学习模型所需的步骤,这样就能够识别自定义的物体了。