zoukankan      html  css  js  c++  java
  • google-inceptionV4的训练与部署过程

    1、源码下载与依赖安装

    (1)安装git,git安装过程可自行百度。

    (2)下载一个由tensorflow搭建的训练框架,该框架封装了google-inceptionV4算法及其他一些图像分类算法。下载命令如下:

    git clone https://github.com/MachineLP/train_arch

    2、安装参数配置、算法安装与demo验证

    (1)进入train_arch /train_cnn_v1目录,命令如下:

    cd train_arch/ train_cnn_v1

    该目录下除了test目录是用于模型测试的以外,剩下的所有目录和文件均用于模型训练。

    以下是对各个目录及文件作用的简要描述:

    gender:存放训练集图片的目录。这是一个示例训练集,如果想训练自己的模型,只需要新建一个自己的目录,不同类别的图片以不同的目录存放。

    lib:当前框架所依赖的各种核心库目录。

    1)model: 各网络模型模块。

    2)data_aug: 用于图像增强,里边包含两种方法。

    3)grad_cam: 可视化模块。

    4)data_load: 加载训练数据模块。

    5)train: 模型训练模块。

    6)utils: 工具模块。

    7)loss: 损失函数模块。

    8)optimizer: 优化方法模块。

    model: 训练过程中保存模型的目录。

    pretrain: 存放迁移学习中预训练模型的目录。

    config.py: 用于设置训练过程中模型参数的脚本。

    main.py: 启动训练脚本 (python main.py)

    vis_cam.py:可视化脚本(python vis_cam.py)

    ckpt_pb.py:用于将训练生成的ckpt模型文件转成tensorflow支持的pb格式的模型。

    test:用于模型测试目录,包括单张和批量图片测试的脚本。

    (2)执行训练脚本,验证是否能生成分类模型

    在config.py中,已经配置了针对gender目录中图片分类的模型参数,可以直接进行模型训练,执行:

    python3 main.py

    在迭代2000次之后,就可以在model目录中看到生成的模型。

    3、训练数据制作与训练参数配置

    (1)数据集制作:

    新建一个目录,作为存放训练集图片的根目录,在该目录下,根据图片类别数新建相同个数的目录(至少要有两个类别),有多少个类别,就新建多少个目录,目录名就是类别名。将相同类别的图片放到对应的同一个目录中。

    (2)配置文件修改

    config.py脚本中包含了google-inceptionV4在训练时需要配置的参数。这些参数包括:

    # 训练集根目录

    sample_dir = "gender"

    # 需要分类的类别数量

    num_classes = 4

    # 最小批训练的大小

    batch_size = 2

    #
    选择使用的模型,还可以根据自己的喜好,选择arch_multi_alexnet_v2或arch_multi_vgg16_conv

    arch_model="arch_inception_v4"

    # 选择训练的网络层

    checkpoint_exclude_scopes = "Logits_out"

    # dropout的大小

    dropout_prob = 0.8

    # 选择训练样本的比例

    train_rate = 0.9

    # 整个训练集上进行多少次迭代

    epoch = 2000

    # 是否使用提前终止训练

    early_stop = True

    EARLY_STOP_PATIENCE = 1000

    # 是否使用learning_rate

    learning_r_decay = True

    learning_rate_base = 0.0001

    decay_rate = 0.95

    height, width = 299, 299

    # 模型保存的路径

    train_dir = 'model'

    # 是否进行fine-tune。 选择fine-tune的的参数

    fine_tune = False

    # 是否训练所有层的参数

    train_all_layers = True

    # 迁移学习的网络模型参数

    checkpoint_path = 'pretrain/inception_v4/inception_v4_2016_09_09.ckpt'

    注意,checkpoint_path参数设置的值要跟arch_model对应,比如arch_model设置的是arch_inception_v4,那么checkpoint_path就要设置inception_v4相关的预训练模型参数,而不能使用inception_resnet_v2相关的预训练模型参数。

    模型训练中途停止后,如果想继续训练,需要修改上述的checkpoint_path,步骤是:

    将model中的最新生成的模型文件移动至新建的目录中,比如,最新生成的模型文件是model.ckpt-808.index

    model.ckpt-808.data-00000-of-00001

    注意,每次迭代生成的模型文件都是成对出现的,类似上面这两个文件的命名格式。那么就将这两个文件移动到新建的model_continue中,然后修改checkpoint_path
    = 'model_continue/model.ckpt-808'

    4、模型训练与测试

    (1)模型训练:

    这里使用迁移学习的方式进行训练,所以要先下载inception_v4相关的预训练模型参数inception_v4_2016_09_09.ckpt(即在别人预先训练好的模型基础上,接着训练自己的数据集,用别人已训练好的网络参数作为自己网络的初始化参数,并对其进行训练),下载地址为:

    http://download.tensorflow.org/models/inception_v4_2016_09_09.tar.gz

    下载完成后,将预训练模型移动到pretrain目录中,即进行如下操作:

    tar -zxvf inception_v4_2016_09_09.tar.gz

    cd pretrain

    mkdir inception_v4

    mv ../inception_v4_2016_09_09.ckpt inception_v4

    开始训练,命令如下:

    python3 main.py

    训练过程中,会在model目录中生成各迭代阶段的模型。最终会保存最近几次迭代生成的模型。

    (2)模型格式转换

    模型训练完成后并不能直接使用,而要将其转成tensorflow支持的pb格式。利用ckpt_pb.py进行转换,命令如下:

    python3 ckpt_pb.py

    脚本执行完成后,会在model目录中生成frozen_model.pb,这就是转换格式后的模型文件,文件名可在ckpt_pb.py中修改:

    如果修改了模型文件名,该脚本中的以下位置的文件名也要做相应修改:

    (3)模型测试

    选择一张测试图片test.png(属于训练集类别中的某一种类别的图片)进行模型测试,命令如下:

    python3 predict.py -m model/frozen_model.pb test.png

    其中,-m model/frozen_model.pb 是指定模型路径,最后面是待测试的图片路径。

    此时就可以在命令行看到模型对当前图片的预测结果。

  • 相关阅读:
    Dubbo学习系列之六(微服务架构实战)
    流式计算(二)-Kafka Stream
    流式计算(一)-Java8Stream
    Dubbo学习系列之七(分布式订单ID方案)
    Dubbo学习系列之十六(ELK海量日志分析框架)
    什么情况下不能使用 Java 泛型
    Java Stream 流如何进行合并操作
    可别在代码中写那么多魔法值了,脑壳疼!
    你知道如何自动保存 Spring Boot 应用进程号吗
    Spring 官方发起Spring Authorization Server 项目
  • 原文地址:https://www.cnblogs.com/shenggang/p/12144887.html
Copyright © 2011-2022 走看看