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 是指定模型路径,最后面是待测试的图片路径。

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

posted @ 2020-01-03 14:48  GC_AIDM  阅读(1739)  评论(0编辑  收藏  举报