目标检测实战5-训练自己的目标检测模型

1. 准备数据集,标注数据(使用labelimg)

注1. 本次实验中使用到的 generate_tfrecord.py 以及 xml_to_csv.py文件下载地址github代码

注2. 本次实验准备的VOC2007的数据集,数据集下载地址如下参考我的第一篇实战的博客

本次实验中,建立文件夹,将VOC2007中的训练图片,以及标注放到刚文件夹下,如图

目标检测实战5-训练自己的目标检测模型_第1张图片

2. xml文件转化为csv文件,为做训练的.record格式文件做准备

创建 xml_to_csv.ipynb文件,编写代码如下:参考我的博客目标检测实战2-XML文件转换为CSV文件

目标检测实战5-训练自己的目标检测模型_第2张图片

3. 生成tfrecord格式文件

创建generate_tfrecord.ipynb文件,生成tfrecord格式文件,其中# TO-DO replace this with label map下的内容需要你根据自己的数据集制作的标注进行修改,我们使用的VOC2007数据集中的标注类别为20类,本次我们创建自己的模型,generate_tfrecord.ipynb需要使用TensorFlow models中object_detection.utils中的文件,所以我们将该utils文件夹复制到当前文件夹中,对于TensorFlow models下载,参考我的博客目标检测实战4-运行object_detection_tutorial demo

注:如果出现 错误

tensorflow.python.framework.errors_impl.NotFoundError: NewRandomAccessFile failed to Create/Open:

参考我的博客目标检测实战3-generate_tfrecord错误tensorflow.python.framework.errors_impl.NotFoundError:
或者参考这篇博客TensorFlow之目标检测API接口调试(超详细)

目标检测实战5-训练自己的目标检测模型_第3张图片
目标检测实战5-训练自己的目标检测模型_第4张图片
目标检测实战5-训练自己的目标检测模型_第5张图片

4. 准备 .pbtxt文件,该文件的格式需要与generate_tfrecord文件中的TO-DO下面的类别编号一致

目标检测实战5-训练自己的目标检测模型_第6张图片

5. 选取预训练模型

model.ckpt文件为训练模型,一般采用预训练模型,可以降低训练所需要的时间,根据实际需求选择适合自己的模型,可以在github目标检测模型中下载自己想要的模型,然后将名字中有model.ckpt文件移动到一个目录中,本次实验中使用的模型是***ssd_mobilenet_v1_coco_2017_11_17***,将该模型解压,选择.ckpt文件,复制到文件夹trainingModel中,如图所示

目标检测实战5-训练自己的目标检测模型_第7张图片
目标检测实战5-训练自己的目标检测模型_第8张图片

6. 修改配置文件

可以在下载的TensorFlow model中的objectDetec\models-r1.5\research\object_detection\samples\configs下找到与模型相关的config文件,然后对config文件进行修改

目标检测实战5-训练自己的目标检测模型_第9张图片

配置文件的修改:

  1. num_classes:?## 根据你标注的类别进行修改
  2. batch_size:? ### 批次的大小,根据自己的CPU或者GPU修改
  3. num_steps: ? ### 训练次数(后期更改训练次数,模型可以从以前训练结束的地方开始继续训练)
  4. fine_tune_checkpoint: /x/x/model.ckpt ### 对已经训练好的模型进行微调
  5. train_input_reader/input_path: 训练保存的record文件
  6. train_input_reader/label_map_path:label_map的.pbtxt文件
  7. eval_input_reader/input_path: 验证集的record文件(没有验证集就填写训练集或者空)
  8. eval_input_reader/label_map_path:label_map的.pbtxt文件
    9.eval_config/num_examples: 验证集中的图片数量
配置如图:

目标检测实战5-训练自己的目标检测模型_第10张图片
目标检测实战5-训练自己的目标检测模型_第11张图片
目标检测实战5-训练自己的目标检测模型_第12张图片
目标检测实战5-训练自己的目标检测模型_第13张图片
目标检测实战5-训练自己的目标检测模型_第14张图片

7. 训练模型

将 TensorFlow model中的object_detection文件夹复制到当前文件夹中,然后运行如下命令,就开始训练

python train.py --logtostderr --train_dir=模型输出文件夹 --pipeline_config_path=config文件

python train.py --logtostderr --train_dir=train_dir --pipeline_config_path=ssd_mobilenet_v1_coco.config

使用当前版本(2.0-alpa)执行命令时,出现了错误:

1. AttributeError: module ‘tensorflow.compat.v1’ has no attribute ‘contrib’

所以无奈之下,进行重新安装TensorFlow的版本,要卸载原来的版本
卸载命令 pip uninstall tensorflow
安装命令 pip install tensorflow==1.14
接着又是各种错误信息出现,所以在忍无可忍的情况下,开始创建虚拟环境进行该实验,出错信息如下:

2. UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xc0 in position 365: invalid start byte

在github上面有 issues

错误原因,是我在config文件之中写了中文的注释,导致的问题!!!!!去掉中文注解后,运行程序,出现一个错误:
3. ValueError: axis = 0 not in [0, 0),然后又是解决错误的时候,通过这个issues解决问题

该过程中可能出现的一个错误是

4. ModuleNotFoundError: No module named ‘deployment’

该错误的解决方案可以去参考一些博客,别人写的比较详细,不做重复劳动,简言之就是将路径添加进环境变量中,windows中,设置变量是使用 set, linux系统中使用 export
知乎解决方案
issues
github项目参考

目标检测实战5-训练自己的目标检测模型_第15张图片

出现期待的训练过程

目标检测实战5-训练自己的目标检测模型_第16张图片
目标检测实战5-训练自己的目标检测模型_第17张图片

8. 模型的导出(将ckpt文件转化为pb文件)

执行命令

python export_inference_graph.py --input_type image_tensor --pipeline_config_path my.config --trained_checkpoint_prefix train_dir/model.ckpt-XXXX --output_directory models

目标检测实战5-训练自己的目标检测模型_第18张图片

生成自己的模型之后,就可以使用实战4来进行检测成果

9. 评估模型(生成可视化的tfbord,在训练的时候也生成了可视化的文件)

评估模型的时候,会使用到配置文件之中的验证集
执行命令

python eval.py --logtostderr --pipeline_config_path=my.config --eval_dir=eval_dir/ --checkpoint_dir=train_dir/

你可能感兴趣的:(目标检测,深度学习)