使用Tensorflow object detection训练maskrcnn,并使用opencv4.0集合c++调用训练模型

前言:opencv4.0可以直接调用TensorFlow Object Detection API训练的maskrcnn模型。

我是在Windows上安装的,首先安装了cuda9以及cudnn7;然后装了anaconda3.5,Python3.6.7。
cuda9 百度云链接:https://pan.baidu.com/s/1xauBu0I8OuPLyTqlGWSGcw,密码:biwv
cuDNN7 百度云链接:https://pan.baidu.com/s/1hfqLpQgTJOxiCD1Rze9peQ,密码:6zlv
anaconda3.5 百度云链接:https://pan.baidu.com/s/1Zfyp8t_OWHimHC8_uu1jbg ,密码:q4en

*********************** 上述软件以及Python安装教程可自行百度 ***********************

安装 TensorFlow Object Detection API参考链接:https://blog.csdn.net/weixin_42499236/article/details/83823779

一、数据准备

如果你数据的标签是用labelme手动标注的,那么训练过程可以完全按照:https://www.jianshu.com/p/27e4dc070761 来进行。

如果你数据的标签不是标注的,而是像我这样(或者可以转化成我这样),比如一张原图里有五个目标,标签是五张对应于五个类别的.png格式的二值图(每张.png图像内只有一个类别,且目标像素为1,背景像素为0;且每个.png图像以“原图名_类别名_原图名”方式命名,参考下图),那么我们可以用我写的代码直接将数据转换为训练所需的train.record和val.record。代码链接:https://download.csdn.net/download/yu734390853/11457462 。
原图:(RGB彩色图,其中图片名为2-11-1)
使用Tensorflow object detection训练maskrcnn,并使用opencv4.0集合c++调用训练模型_第1张图片
原图对应的标签图像:(原图上包含五个类别,因此原图对应五个标签图像二值图;第一张标签图像名为2-11-1_CTV_2-11-1,其中2-11-1为原图像名,CTV表示类别,以此类推)

使用Tensorflow object detection训练maskrcnn,并使用opencv4.0集合c++调用训练模型_第2张图片
假设你的训练集原图的路径为 path_to_train_dir,训练集对应的图像标签路径为 path_to_train_png_dir,在终端先后执行如下指令:

python3 pngto_tf_record.py \
    --images_dir=path_to_train_dir \    
    --label_map_path=path_to_label_map.pbtxt \
    --output_path=path_to_train.record

其中,以上所有路径都支持相对路径。output_path 为输出的 train.record 以及 val.record 的路径,label_map_path 是所有需要检测的类名及类标号的配置文件,该文件的后缀名为 .pbtxt,写法很简单,假如你要检测 ’person’ , ‘car’ ,‘bicycle’ 等类目标,则写入如下内容:
使用Tensorflow object detection训练maskrcnn,并使用opencv4.0集合c++调用训练模型_第3张图片
***************到此,训练数据准备完毕,进入训练时间。

二、训练maskrcnn模型

可完全参考:https://www.jianshu.com/p/27e4dc070761

三、模型转换

1.将Tensorflow训练出来的.ckpt模型转化为.pb文件,在 TensorFlow models/research/object_detection 目录下的终端执行:

$ python3 export_inference_graph.py --input_type image_tensor  
  --pipeline_config_path /home/.../training/pipeline.config
  --trained_checkpoint_prefix /home/.../training/model.ckpt-200000
  --output_directory /home/.../training/output_inference_graph

执行上述代码之后会在 /home/…/training 文件夹内看到新的文件夹 output_inference_graph,里面存储着训练好的最终模型,如直接调用的用于推断的文件:frozen_inference_graph.pb。其中命令中 model.ckpt-200000 表示训练 200000 生成的模型,实际执行上述代码时要修改为自己训练多少次后生成的模型。其它路径和文件(夹)名称也由自己任意指定。

2.生成.pbtxt文本图文件,告诉OpenCV如何加载模型权重。在 TensorFlow models/research/object_detection 目录下的终端执行:

python3  tf_text_graph_mask_rcnn.py --input /path/to/model.pb --config /path/to/example.config --output /path/to/graph.pbtxt

就会在相应目录下生成graph.pbtxt

你可能感兴趣的:(深度学习入门)