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运行就可以测试。
我的测试结果如下,由于数据集不理想,效果不是很好。