本文介绍如何使用Tensorflow机器学习平台使用Transfer Learning对图像进行分类 。 在机器学习环境中, 转移学习是一种使我们能够重用已经训练的模型并将其用于其他任务的技术 。 图像分类是将图像作为输入,并为其分配具有概率的类别(通常是标签)的过程。 此过程使用深度学习模型,这些模型是深度神经网络,或更详细地说是卷积神经网络(CNN)。 CNN由多层组成,这些层中的每一层都负责学习和识别特定功能。 较低的层可以识别零件,边缘等。

最后一层确定图像类别。 现代的图像识别模型具有数百万个参数,并且需要大量的计算能力才能训练模型。 使用转移学习 ,可以使用一组自定义图像来重新训练网络的最后一层,并重复使用所有其余模型而无需更改它。 使用转移学习可以大大减少训练模型所需的时间。 机器学习的另一个有趣的好处是我们不需要大图像数据集来训练新模型,因为几乎所有模型都已经被训练了

本文逐步介绍了如何在TensorFlow中使用Transfer Learning。

安装Tensorflow

第一步是设置我们将在本文中使用的环境。 有多种方法可以开始使用Tensorflow,最简单快捷的方法是使用Docker:

cnn图像分类器 cnnlstm图像分类_cnn图像分类器

您可以从此链接下载它。 完成docker安装后,即可开始安装Tensorflow。 您可以使用docker hub下载Tensorflow。

cnn图像分类器 cnnlstm图像分类_cnn图像分类器_02

使用标签,您可以选择所需的版本。 在本教程中 我们正在使用1.12.0-devel版本。 开发发行版添加了一些其他功能,我们将在本教程的后面部分中使用这些功能。 要安装Tensorflow Docker映像,请输入

docker pull tensorflow/tensorflow:devel-1.12.0

等待安装完成。 我们准备使用Tensorflow

影像数据集

一旦安装了Tensorflow,就该选择我们想要用来训练模型的数据集了。 有几个可用的图像数据集。 有趣的是,即使更改图像数据集,我们也可以使用相同的步骤。 为了创建Tensorflow模型,我们将使用猫图像数据集。 我们想要训练我们的模型,以便它可以识别猫的品种。 The Oxford-IIIT Pet Dataset提供了一个有趣的猫狗图像数据集 。 该图像数据集包含狗和猫的图像,这是训练机器学习模型并应用Transfer学习的理想图像数据集。 让我们下载图像数据集并解压缩。

创建目录映像结构

为了应用转移学习,有必要根据猫的品种对图像进行分组。 让我们创建一个名为tensor的新目录,并在此目录下创建一个名为cat-images的新目录。 图像结构应为:

cnn图像分类器 cnnlstm图像分类_机器学习_03

现在开始Tensorflow图像:

docker run -it -p 6006:6006 
           -v /Users/francesco/Desktop/tensor/:/tensor_flow      
           your_tensorflow_docker_name

使用Tensorflow创建机器学习自定义模型

我们准备创建自定义模型。 让我们克隆存储库tensorflow-for-poets :

git clone https://github.com/googlecodelabs/tensorflow-for-poets-2

这样,我们就有了可以轻松创建模型的脚本。 就这样。 让我们开始训练模型:

python tensorflow-for-poets-2/scripts/retrain.py 
--model_dir=/tensor_flow/inception-v3  
--output_graph=/tensor_flow/cats_retrained.pb 
--output_labels=/tensor_flow/cats_labels.txt  
--image_dir=/tensor_flow/cat-images/  
--bottleneck_dir=/tensor_flow/cats_bottleneck

有几件重要的事情要注意:

--model_dir是模型的存储位置(在这种情况下为tensor_flow)

--output_graph是我们将创建的图形的名称(cats_retrained.pb)

--output_labels是标签的名称(cats_labels.txt)

--image_dir是存储图像以训练模型的位置

--bottleneck_dir是创建瓶颈的位置

“ Bottleneck”是一个非正式术语,我们经常在实际上进行分类的最终输出层之前使用该层

此步骤需要很多时间,具体取决于您的PC的功能和将要使用的迭代次数。

使用Tensorflow板分析模型

一旦机器学习模型准备好并且训练过程完成,我们就可以分析模型。 这是一个重要方面,因为我们可以评估已创建的模型。 输入以下命令:

tensorboard --logdir /tmp/retrain_logs/

它运行Tensorflow板。 使用浏览器,我们可以打开仪表板。 键入:localhost:6006以访问Web控制台。

现在选择图形,您将看到模型:

cnn图像分类器 cnnlstm图像分类_机器学习_04

现在,在顶部菜单中选择“标量”以评估模型。 这是准确性:

cnn图像分类器 cnnlstm图像分类_人工智能_05

训练精度是系统用来训练模型的图像的分类精度。 验证准确性是指训练过程中未使用的图像的准确性。 验证精度是模型的“实际”精度。 通常它应该小于火车的精度。

如果火车精度较高,而验证精度较低,则说明创建的模型过度拟合。 这意味着该模型不能很好地概括测试数据。 在相反的情况下,该模型拟合不足,因此我们可以对其进行改进。

下图显示了熵。 该曲线应减小。

cnn图像分类器 cnnlstm图像分类_cnn图像分类器_06

如何测试Tensorflow模型

对模型满意后,我们可以对其进行测试:

bazel-bin/tensorflow/examples/label_image/label_image  
 --graph=/tensor_flow/cats_retrained.pb  
 --image=/tmp/lab1.jpg  
 --input_layer=Mul  
 --output_layer=final_result  
 --labels=/tensor_flow/cats_labels.txt

作为测试模型的图像,我们使用了以下代码:

cnn图像分类器 cnnlstm图像分类_人工智能_07

结果如下所示:

cnn图像分类器 cnnlstm图像分类_机器学习_08

如您所见,模型正确地检测了汽车品种。

摘要

在本文的结尾,您希望获得了如何使用Transfer Learning来创建要在Machine Learning应用程序中使用的自定义模型的知识。 如果要在其他场景(例如移动应用程序)中使用此模型,则应考虑使用其他体系结构模型(即Mobilenet)。

翻译自: https://www.javacodegeeks.com/2019/03/transfer-learning-how-to-classify-images-using-tensorflow-machine-learning.html