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 是指定模型路径,最后面是待测试的图片路径。
此时就可以在命令行看到模型对当前图片的预测结果。