训练自己的数据
参考网址:https://blog.youkuaiyun.com/kalenee/article/details/80629262
https://blog.youkuaiyun.com/zong596568821xp/article/details/82015126 (比较详细)
https://blog.youkuaiyun.com/zj1131190425/article/details/80711857
生成 TFRecord 文件
Object Detection API 的训练框架使用 TFRecord 格式的文件作为输入。所以这里需要将图片和标注转换为 TFRecord 格式的文件。TFRecord 数据文件是一种将图像数据和标签统一存储的二进制文件,能更好的利用内存,在 TensorFlow 中快速的复制、移动、读取、存储等。因在制作用于训练的.record格式文件时用到的是csv格式文件,所以需要将xml转换到csv。
准备配置文件:
还需要一个配置文件来对训练的流程进行配置,如使用什么算法,选用什么优化器等。
在 object_detection/samples/configs/ 可以找到很多配置模板,在这里使用 object_detection/samples/configs/ssd_mobilenet_v1_pets.config 作为起始的配置文件,需要在这个模板上面稍作修改。
例如修改faster_rcnn_inception_resnet_v2_atrous_pets.config。
- 将num_classes 修改为实际类别
- 搜索其中的 PATH_TO_BE_CONFIGURED ,将5处对应的路径改为自己的路径,注意不要把test跟train弄反了;
- 如果将from_detection_checkpoint设为true的话,代表将从一个事先训练好的模型开始继续训练(迁移学习),此时需要将CHECK_POINT_PATH替换为 model.ckpt 的绝对路径(注意之前有三个文件,model.ckpt.index、model.ckpt.meta、model.ckpt.data-xxx 在配置时不需要加model.ckpt 之后的后缀),如:fine_tune_checkpoint:
- num_steps 为训练迭代的步数
- 批次(batch)是每一次迭代中模型训练使用的样本集,批次规模(batch_size)为一个批次中的样本数量。一般情况下对于小数据集批次规模越大越好,这样可以提高计算的速度和效率,同时降低训练震荡,若数据集足够小,可采用全数据集的形式进行训练,但这种情况容易造成计算量增长过大导致溢出,因此批次规模的大小需根据实际情况进行设置。
- 学习速率(learning rate)是在训练模型过程中用于梯度下降的一个变量,在训练过程中,每次迭代梯度下降法都会将学习速率与梯度相乘,因此其值是随着训练进行不断变化。而初始学习速率(initial_learning rate)是模型开始训练前设置的最开始的学习速率,在训练过程中,模型会根据学习率变化策略以初始学习速率为起点设置学习速率,初始学习速率一般情况下应设置为一个较小的值,然后在之后训练过程中逐步调大。
创建label_map.pbtxt
下载预先训练的模型
model.ckpt文件为训练模型,一般采用预训练模型,可降低训练所需时间,根据实际需求选择适合自己的模型,下载完成后解压,将名字带有model.ckpt的三个文件移动到配置文件中fine_tune_checkpoint对应目录下。
修改train文件
train_dir #训练模型保存路径
pipeline_config_path #配置文件路径
修改的配置文件好像存在问题,运行train.py报错。将俊星哥的配置文件以及model.ckpt拷贝到本机,并将配置文件中的地址替换为本机中的地址,运行train.py 之前出现的配置文件报错解决,出现新的错误。
生成pb文件
修改export_inference_graph.py 文件。
pipeline_config_path #配置文件路径
output_directory #pb文件保存路径
trained_checkpoint_prefix #.ckpt 文件路径
write_inference_graph # 设置为true则,将图结构写到.pbtxt中
运行export_inference_graph.py。
验证
object_detection_tutorial.py
PATH_TO_FROZEN_GRAPH #pb文件地址
PATH_TO_LABELS #标签文件地址
概括为如下: