配置环境
首先,有一个概念性的东西,Tensorflow object_detection API 是什么?
以下这段文字来自:Tensorflow Object Detection API使用
Tensorflow提供了基于深度学习方法的目标检测库Object Detection API,库中提供了目前比较流行的Faster-RCNN和SSD框架用于目标检测任务,也可以自定义模型框架进行学习用于目标检测。库中基于目前比较流行的数据集coco,PASCAL,Oxford Pet等数据集对一部分模型进行了预训练,用户可以基于这些预训练模型利用自己的数据集对自己的应用进行微调训练得到自己所需要的模型并导出应用。
简单来说,它就是一个函数库,跟opencv一样。在opencv调用之前,需要配置环境,还需要添加调试文件路径等等,Tensorflow object_detection API在python下运行居多,配置环境也比opencv简单得多,在系统的环境变量添加对应路径就可以。
具体配置环境参考:Tensorflow object_detection API 目标检测环境搭建
Python代码看似简单,但身后是很多复杂的工具库,很多地方需要编译,比如proto格式等等,所以多点耐心,哪一步遇到什么不可识别的问题,copy到百度,肯定有人也遇到过。
数据集位置和配置文件
1. 原始图片
在文件里很多用的是相对路径。在工程目录下,新建文件夹用于存放训练所需的原始图片。
因为是交叉训练,所以分train和test两个文件夹,各自保存图片,生成对应的tfrecord文件即可。
2. tfrecord数据
该目录下有一个名为data的文件夹,将自己样本生成的tfrecord数据copy进去。
同时,新建一个pbtxt格式的文件,存放着样本类别和名称,用notepad打开编辑。
像我这样的格式:
item {
name: "car"
id: 1
display_name: "car"
}
item {
name: "boat"
id: 2
display_name: "boat"
}
这个格式的文件,是他们自己内部制定的,有相应的解编程序。
新建自己的数据集可以选择从该目录下复制该类型文件,重新编辑命名。
3. 配置文件
配置文件存放了训练所需要的参数,既有样本源数据,又有神经网络的配置参数等等。
在当前路径新建文件夹training,将配置文件复制粘贴进去。
这个是在对应网站下载后,按照自己样本对应路径修改的。具体代码不粘贴,按照指示流程修改即可。
4. 运行指令
python还真是方便,直接在cmd下就能运行指令,竟然都不需要打开pycharm。
(当然,这是程序不报错的情况下;寻找错误原因一类的,还是有必要单步调试的)
贴几个常用指令,是另一位朋友写的,我稍微备注下。
**训练:**
python model_main.py --logtostderr --pipeline_config_path=training/ssd_mobilenet_v1_coco.config --model_dir=training/ --num_train_steps=50000 --num_eval_steps=2000
// pipeline_config_path=training/ssd_mobilenet_v1_coco.config,表示配置文件所在路径,改成自己的就可以;因为自己图片路径在该文件下也已经做了设置。
**可视化:**
tensorboard --logdir=training
**导出模型:**
python export_inference_graph.py \ --input_type image_tensor \ --pipeline_config_path training/ssd_mobilenet_v1_coco.config \ --trained_checkpoint_prefix training/model.ckpt-638 \ --output_directory person_car_inference_graphmatch30
// output_directory 输出文件夹名称
这个指令怎么运行呢?
当前路径,鼠标指向空白,shift+右键,出现powershell窗口,自动切换路径到当前,然后将指令粘贴过去运行即可。
披荆斩棘 ,开始训练。
具体的配置文件方法见:目标检测Tensorflow object detection API之构建自己的模型 我是参考他这边居多。
训练时候还遇到这个问题,尽量路径只有下划线一类,删除代码中的注释多行,问题消失了。
总结
在这里稍微说几句:
菜鸟界有句行话:配置环境是一门玄学。
遇到问题不要担心,肯定也有人遇到过的,耐心寻找原因,该自己查找自己查找,该请教的就请教,然后一路走下去。
感谢那些遇到的前辈提供教程,和言传身教,都是我们成长过程,所走的捷径。