利用Tensrflow下的object detection api进行水面垃圾检测

object detection这个接口需要配置好之后才可以开始训练,我的项目下的文件夹格式是这样的:
文件夹图片
首先做数据集准备,采用labelImage进行数据标注,标注后的xml文件存放到merged_xml中。然后将数据集划分为三部分,train,test,validation(这三部分是annotations文件夹下)。将所有经过标注的xml文件转换为csv文件,再生产tfrecord文件(所有的csv文件和tfrecord文件都在data文件夹下)。具体数据集制作可以参考下面这篇文章:https://blog.csdn.net/w5688414/article/details/78970874
然后开始训练准备,训练时需要两个文件,label文件和config文件,都在traing文件夹下,如果需要在预先训练好的模型基础上开始训练,可以下载已有的模型也放在traing文件夹下。traing文件夹内容如下:

在这里插入图片描述
各种模型下载链接如下:
https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md
其中label_map.pbtxt里面标注需要检测的物体标签,我这里只检测一类,所以内容如下:`

item {
  id: 1
  name: 'trash'
}

配置文件ssd_inception_v2_coco.config需要修改的地方如下:
1.num_classes修改成自己的类别数;
在这里插入图片描述
2.如果是在预训练的模型基础上进行训练,修改fine_tune_checkpoint,后面改成model.ckpt的路径,最好是写绝对路径,我写图中的相对路径有出错。
在这里插入图片描述
3.然后必须要修改的就是各种输入的路径,分别是train.tfrecord,label_map.pbtxt,validation.tfrecord的路径,同上,最好写绝对路径。

在这里插入图片描述
4.其它的修改,是关于一些训练的配置,batch_size和num_steps,我的数据量比较少设置了5000次,默认是20万次。
在这里插入图片描述
在这里插入图片描述
最后就可以开始训练了,
1.训练命令如下:

python train.py \
--logtostderr \
--pipeline_config_path={ssd_inception_v2_coco.config所在的路径} \
--train_dir={训练结果要存放的目录}

在tensorboard下查看运行情况命令如下:

tensorboard --logdir=training

2.训练完成后导出模型的命令:

python export_inference_graph.py \
--input_type image_tensor \
--pipeline_config_path {ssd_inception_v2_coco.config所在的路径} \
--trained_checkpoint_prefix {训练结果中model.ckpt-5000文件路径} \
--output_directory {输出结果路径}

3.利用导出的模型进行测试

  • 先把需要测试的图片放到object detection的 test_images文件夹下,图片名字都修改成image数字.jpg,按照顺序标注
  • 在research文件夹下打开命令窗口,利用jupyter notebook打开jupyter窗口,打开object detection下的object_detection_tutorial.ipynb,进行修改,将下载模型这一段在上面的窗口改成标记。
    在这里插入图片描述
  • 这里的PATH_TO_FROZEN_GRAPH改成你导出后的模型中frozen_inference_graph.pb的路径,PATH_TO_LABELS改成你自己的label_map.pbtxt的路径。

在这里插入图片描述

  • 最后这里的数字修改为你的图片总数+1
    在这里插入图片描述

  • 点击run all运行就可以测试。
    在这里插入图片描述
    我的测试结果如下,由于数据集不理想,效果不是很好。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Boom_1/article/details/84790480
今日推荐