如何重新训练Tensorflow图像分类模型

如何重新训练Tensorflow Inception模型在Ubuntu上添加新类

感谢谷歌,我们现在可以下载V3的预先训练模型,并设置我们的图像分类器。我们不必花费大量的时间从头开始训练这个模型。预先训练的模型可以分类1000个不同的对象,我们也可以添加更多的类或类别。重新训练Tensorflow初始模型花费的时间比从零开始训练时间少得多。

我们之所以不从头开始培训新车型,是因为在较低的硬件规格上进行培训可能需要几天或几周的时间。当我们重新训练Tensorflow初始模型时,我们可以在几个小时或一天内完成。再培训的次数越多,再培训的时间越长。要继续学习本教程,如果您熟悉Tensorflow的一些概念并开始工作,将会有所帮助。如果你不是,那么你可以在这个简单的指南中看到更多Tensorflow的概念和术语

此外,如果您还没有,请查看使用预先训练的模型设置tensorflow图像分类器的教程这是初学者测试一个深度学习建立的分类器可以做什么。

再培训如何工作?

到目前为止,你知道再培训是一个体面GPU的机器上的一个快速过程。要了解为什么它很快,您需要了解Tensorflow Bottlenecks的概念神经网络的最后一层被训练成根据所获得的图像给出不同的值。该层具有足够的汇总信息以提供进行实际分类任务的下一层。这最后一层被称为瓶颈。

Tensorflow计算所有瓶颈值作为培训的第一步。然后存储瓶颈值,因为每次迭代训练都需要瓶颈值。这些值的计算速度更快,因为张量流利用现有的预先训练的模型的帮助来协助处理。默认4000次训练将被执行。这可以根据所需的精度而变化。瓶颈值的计算在再训练过程中花费最多的时间。

步骤1:下载预先训练的模型和所需的脚本。

我已经把所有需要的文件合并成一个git仓库。通过使用以下命令下载并导航到该文件夹​​。

1
2
git clone https: //github .com /akshaypai/tfClassifier
cd tfClassifier

该文件夹包含重新训练分类器所需的脚本,以及我们将使用的预先训练的模型。

第二步:设置图片文件夹

这一步涉及设置文件夹结构,使张量流可以轻松地拾取类。假设你想培养5种新的花型,例如“玫瑰”,“郁金香”,“蒲公英”,“五月花”和“万寿菊”。要创建文件夹结构,

  1. 为每种花型创建一个文件夹。该文件夹的名称将是类的名称(在这种情况下,该特定的花)。
  2. 将所有花的图像添加到其各自的文件夹。例如; 玫瑰的所有图像进入“玫瑰”文件夹。
  3. 将所有的文件夹添加到另一个父文件夹中,比如“花朵”。

在这个练习结束时,你将会有如下结构:

1
2
3
4
6
7
8
9
10
11
12
13
14
15
~ /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的数据科学和机器学习训练营

第3步:运行重新培训脚本

使用以下命令运行脚本。

1
 
python retrain.py --model_dir ./inception --image_dir ~/flowers --output_graph ./output.pb --output_labels ./labels.txt --how_many_training_steps 500

命令行参数:

  • -model_dir - 该参数给出了预先训练的模型的位置。预先训练的模型存储在git仓库的启动文件夹下。
  • -image_dir - 在步骤2中创建的图像文件夹的路径
  • -output_graph -  存储新近训练的图形的位置。
  • -how_many_training_steps - 训练步骤指示要执行的数字迭代。默认情况下,这是4000.找到正确的数字是一个试验和错误的过程,一旦你找到最好的模型,你可以开始使用它。

你的新模型可以表现更好。因此,使用其他参数来提高准确性。

  • random_crop - 随机裁剪允许您专注于图像的主要部分。
  • Random_scale - 这与裁剪类似,但随机放大图像大小。
  • flip_left_right - 翻转是水平旋转的图像,并与此功能,翻转可以在训练图像随机诱导。

可以控制验证和测试集的大小和百分比。失真还包括随机亮度。诱导失真考虑到实时检测阶段发生的各种异常情况。适合您的失真类型取决于您正在使用的图像的类型和类别。这使参数选择和调整尝试和错误的练习。

更新1:添加了测试再培训模型的代码

一旦你有训练有素的模型,你将有两个文件作为输出。首先是“ouput.pb”文件,第二个是“labels.txt”文件。为了测试模型,你可以在名为“ retrain_model_classifier.py ” 的git Repository中找到一个新脚本要测试模型,请按照以下步骤进行。

  1. 确保ret​​rain_model_classifier.py与重新训练的模型和标签文件在同一个文件夹中。
  2. 运行以下命令。
1
2
3
4
6
7
8
9
10
11
12
13
14
15
16
17
python retrain_model_classifier.py
 
#following is an example of classifying an image present in Pictures directory: 
 
python retrain_model_classifier.py / home / akshay / Pictures / test_image_flower.jpg
 
#following is an example output
 
"""
 
rose ( score=0.78)
 
tulips( score=0.14)
 
others( score =0.02)
 
"""

注意:

  1. 输出将是每个类别中概率值最高的概率值。在下面的例子中,模型说78%的图片属于“玫瑰”类。因此,分类结果将是“玫瑰”。

你可能感兴趣的:(Python)