• TensorFlow图像识别(物体分类)入门教程


    本文主要介绍了如何使用TensorFlow环境运行一个最基本的图像分类器(Win10系统)。源码地址https://github.com/sourcedexter/tfClassifier/tree/master/image_classification
    (这个大神好像改名了,原来叫akshaypai来着)

    一.基础概念介绍

    1.物体分类的思想

    物体分类,也就是训练系统识别各个物体,如猫咪、狗狗、汽车等。TensorFlow是谷歌开发出的人工智能学习系统,相当于我们的运行环境。

    2.神经网络与Inception v3体系结构模型

    神经网络示意图如下:

    通俗了讲,就是将若干个输入,进行若干次操作(线性或者非线性),最后输出结果。Inception v3模型是谷歌发布的一个深层卷积网络模型。我们使用的retrain_new.py脚本就是使用了Inception v3模型进行一个迁移学习。

    3.训练集、测试集和验证集

    训练集用来训练模型,验证集用来验证模型是否进行了过拟合,测试集用来测试模型的准确程度。三种图片集的比例会对准确度产生影响。

    4.学习速率

    不同的学习速率会导致不同的结果。如果速率过大,会导致准确率在训练的过程中不断上下跳动,如果速率过小会导致在训练结束前无法到达预期准确度。

    二.环境搭建

    1.Python环境搭建

    具体的python搭建细节可以自行百度。参考链接:
    https://blog.csdn.net/lyj_viviani/article/details/51763101
    这里要注意一下版本,因为要对应后文的cuDnn库与cuda的版本。(我用的是python 3.6.4)

    2.TensorFlow环境搭建(gpu)

    (1)直接pip安装。命令:

    pip install tensorflow-gpu
    

    这样就安装好TensorFlow了,但是我们还需要GPU加速,所以还需要安装cuda和cuDnn(专门为deep learning准备的加速库)。

    (2)cuda安装

    cuda v8.0安装包下载:https://developer.nvidia.com/cuda-downloads
    进行如下选择:

    下载完后正常安装就可以了。

    (3)cuDnn库下载

    下载链接:https://developer.nvidia.com/rdp/cudnn-archive
    我下载的是这个版本(cuDNN v7.0.5),这个版本要对应好cuda的版本。

    下载完后解压缩,出现如下文件夹结构:

    然后将这三个文件夹下的文件分别拷贝到cuda对应的文件夹下面就行了。

    到这里还不能完整的运行,还需要配置一下环境变量:cuda安装完成后默认的环境变量配置不对,CUDA_PATH是C:Program FilesNVIDIA GPU Computing ToolkitCUDAv8.0,但是这样不能直接访问到bin和libx64下的程序包,在path中加上这两个路径即可。

    (4)测试

    用如下代码测试:

    import tensorflow as tf
    

    hello = tf.constant('Hello, TensorFlow!')
    sess = tf.Session()
    

    三.基本使用

    1.数据集的收集与创建

    我用的是2018全球AI挑战赛的数据集。链接:
    https://challenger.ai/datasets/lad2018
    下载完后,将所有文件夹都放在一个文件夹下(我自己创建了一个叫DataSet),结构如下:

    文件夹的名字就是最后输出的分类的结果。
    每一个文件夹下都是图片(不能再有子文件夹),即:
    

    2.训练模型

    训练模型使用retrain_new.py脚本。在命令行运行,命令格式如下:
    

    python retrain_new.py --model_dir 存放classify_image_graph_def.pb的路径 --image_dir 刚才的创建的DataSet的路径 --output_graph 产生的,pb文件的存放路径 --output_labels 产生的output_labels.txt的 存放路径 --how_many_training_steps 训练步数 --learning_rate 学习速率 --testing_percentage 测试集比例 --validation_percentage 验证集比例

    示例命令:

    python retrain_new.py --model_dir E:	fclassifierimage_classificationinception --image_dir E:	fclassifierDataSet --output_graph E:	fclassifierimage_classificationoutput_diroutput_graph.pb  --output_labels E:	fclassifierimage_classificationoutput_diroutput_labels.txt --how_many_training_steps 500 --learning_rate 0.3 --testing_percentage 10 --validation_percentage 10
    

    说明:
    model_dir参数:指定了model的存放位置,就是我们的inception文件夹
    image_dir参数:指定了数据集的位置
    output_graph参数:产生的output_graph.pb文件的存放路径(后面要用)
    output_labels 参数:产生的output_labels.txt的存放路径(后面要用)
    how_many_training_steps参数:训练步数,和学习速率配合调整(我用的500)
    learning_rate参数:学习速率,和训练步数配合调整(我用的0.3,常用的有0.001,0.01,0.1,0.3,1,3,可自己调整尝试一下)
    testing_percentage参数:测试集比例
    validation_percentage参数:验证集比例
    注意:训练会在根目录下生成一个tmp文件夹,存放相关文件,即:

    3.测试模型

    核心的文件是output_graph.pb文件(我们训练所产生的图,是一个二进制文件)和output_labels.txt文件。
    使用retrain_model_classifier.py脚本来测试模型。命令格式如下:
    E:
    cd E: fclassifierimage_classification(进入retrain_model_classifier.py脚本所在的目录)
    python retrain_model_classifier.py 要识别图片的路径
    例如:
    python retrain_model_classifier.py D: est2 estPic.jpg

    然后会看到一些版本信息,和输出结果(红框部分):

    四.遇到的问题以及解答

    1.版本对应问题

    Python版本,cuda版本和cuDNN版本都是对应的,如果结果中出现了乱码,很大概率是版本的问题。

    2.带参数的python脚本编写与运行

    想让python脚本带参数,可以在python脚本的末尾添加如下格式的代码:

    运行时需要在python xxx.py后加上“--image_dir 参数”就可以了。

    3.测试脚本的调整

    要不断训练、测试,不断调整参数,直到训练快要结束的时候,验证比例达到稳定,并且在90以上,我们才认为系统较为完善。

    五.参考链接:

    深度学习动手入门:GitHub上四个超棒的TensorFlow开源项目
    http://www.techweb.com.cn/news/2017-07-31/2566452.shtml
    Win10 TensorFlow(gpu)安装详解
    https://blog.csdn.net/sb19931201/article/details/53648615
    用Inception-V3模型进行图像分类
    https://blog.csdn.net/xingwei_09/article/details/79152796
    谷歌机器学习速成课程
    https://developers.google.cn/machine-learning/crash-course/prereqs-and-prework

  • 相关阅读:
    pat 1123 Is It a Complete AVL Tree
    pat 1098 Insertion or Heap Sort
    pat 1147 Heaps
    Python中的Dict底层 | 字典类型删除数据为什么不直接删除?
    MySQL | 重置root密码
    MySQL | 安装后初次使用
    安装MySQL | 报缺失文件的错误
    IDEA | 不使用骨架创建Maven项目
    python | list.sort()和sorted(list)的区别
    python | 字符串不可修改
  • 原文地址:https://www.cnblogs.com/cococok2/p/9169488.html
Copyright © 2020-2023  润新知