项目:检测模型的训练及使用

训练过程参考object_detection下的官网教程:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_pets.md

一、下载代码库、设置环境变量、预编译:

1、本次代码使用tensorflow官方代码,代码地址如下:

https://github.com/tensorflow/models/tree/r1.5

注意这里是

仅保留如下目录

tensorflow/models/research/object_detection/

tensorflow/models/research/slim/

> 因为最新的代码做了一些变化,需要使用pycocotool这个库,但是这个库的安装很复杂,目前暂时无法在tinymind上进行,所以这里使用比较老的r1.5版本的代码。

2、主要使用的是research/object_detection目录下的物体检测框架的代码。这个框架同时引用slim框架的部分内容,需要对运行路径做一下设置,不然会出现找不到module的错误。
设置运行路径的方式有两种:

- 直接在代码中插入路径,使用**sys.path.insert**,请自行查找相关资料

&&参考https://blog.csdn.net/dcrmg/article/details/79546962   未实践

- 使用环境变量PYTHONPATH,参考https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md

# From tensorflow/models/research/
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

>本次代码中,run.sh已经做好相关的path设置工作,在tinymind上运行可以不用考虑这个问题。

3、代码中需要预先编译一些proto buffer的class,不然会出现如下错误

```
Traceback (most recent call last):
  File "Data_preprocessing.py", line 16, in <module>
    from object_detection.utils import label_map_util
  File "/path/to/object_detection/utils/label_map_util.py", line 22, in <module>
    from object_detection.protos import string_int_label_map_pb2
ImportError: cannot import name string_int_label_map_pb2
```
解决方式是直接在research目录下运行如下代码
```
sudo apt install protobuf-compiler
protoc object_detection/protos/*.proto --python_out=.
```

编译一次后就不用再编译了。

二、下载数据、课程代码及预训练模型

数据:https://gitee.com/ai100/quiz-w8-data.git

课程代码:课件里quiz-object-detection,或者码云下载

预训练模型:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

三、生成tfrecord文件

python3 quiz-object-detection/create_data.py --label_map_path=./quiz-w8-data/labels_items.txt --data_dir=./quiz-w8-data --output_dir=./

creat_data.py为课程给的代码

label_map_path是类比标签labels_items.txt的全路径,data_dir是jpg数据集的全路径,output_dir是生成的tfrecord的存放路径

四、开始训练

1、修改配置文件ssd_mobilenet_v1_pets.config,有了这个配置文件就不用在终端中设置参数了。

(1)分类数目:num_classes: 5

(2)输入图片的尺寸(44行):image_resizer

(3)修改funetune文件的路径(158行处):fine_tune_checkpoint: "/data/ai100/quiz-w8/model.ckpt"

(4)训练数据的全路径(175行):input_path: "/data/ai100/quiz-w8/pet_train.record"

(5)标签的全路径(179行):label_map_path: "/data/ai100/quiz-w8/labels_items.txt"

(6)验据的条数(183行):num_examples: 47

(7)验证的轮数(186行):max_evals: 1

(8)验证数据的全路径(191行):input_path: "/data/ai100/quiz-w8/pet_val.record"

注意:以上路径需为相对路径,绝对路径会找不到!

2、将下述文件放到data文件夹中:标签文件、三个预训练的ckpt文件、训练集和验证集tfrecord文件、config配置文件。

服务器运行:将data文件价与models文件夹(modes/research下有object_detection、slim库)传到服务器上

3、本地训练

#models及data所在目录下

python3 ./models/research/object_detection/train.py --train_dir=./train_dir --pipeline_config_path=./data/ssd_mobilenet_v1_pets.config

train_dir为存放训练结果的目录,pipeline_config_path为训练所用config配置文件所在路径

 

4、本地验证

#models及data所在目录下

python ./models/research/object_detection/eval.py --checkpoint_dir=./train_dir --eval_dir=./eval_dir --pipeline_config_path=./data/ssd_mobilenet_v1_pets.config

checkpoint_dir为存放训练结果的目录,eval_dir为存放验证结果的目录,pipeline_config_path为config配置文件(与训练时同一文件)路径

注:本文为将tinymind的output/train的输出下载到本地进行验证,需要修改checkpoint中的路径

改为:

 

5、查看训练及验证结果

tensorboard --logdir ./train_dir

./train_dir为存放训练结果的目录

tensorboard --logdir ./eval_dir

./eval_dir为存放验证结果的目录

6、模型导出

python ./object_detection/export_inference_graph.py --input_type image_tensor --pipeline_config_path /path/to/pipeline_config_file --trained_checkpoint_prefix /path/to/train_dir/model.ckpt-[last_chekpoint_number] --output_directory /path/to/output_dir/exported_graphs

此处路径未更改,./object_detection/export_inference_graph.py为object_detection模块代码,--input_type image_tensor为固定的参数,--pipeline_config_path /path/to/pipeline_config_file为训练时的config文件,--trained_checkpoint_prefix /path/to/train_dir/model.ckpt-[last_chekpoint_number] 为训练后的checkpoint文件,--output_directory /path/to/output_dir/exported_graphs为模型导出后存放的路径

.pb文件为导出的模型

五、使用导出的模型

将课程里的inference.py放到object_detection中,再运行如下代码

python ./inference.py --output_dir=/path/to/output_dir --dataset_dir=/path/to/dataset_dir

--output_dir=/path/to/output_dir为上一步导出的.pb文件的路径,--dataset_dir=/path/to/dataset_dir为输入图像的路径,需要事先在该路径下放一张图片,名字取为test.jpg。模型输出放到了output_dir中,名字为output.png。

六、使用tinymind运行时,本课程提供了run.sh和run.py两个脚本,解决了训练和验证不能同时进行的问题。

1、上传数据集dataset_dir

包括tfrecord文件、预训练的模型文件、config文件,需要一个一个上传

注:config文件要放在dataset_dir里,见run.sh代码,注意修改config文件中数据的路径../data/jasonxu/数据集名称

2、上传代码

代码上传的是压缩文件

压缩包里需要有一层文件目录,否则上传后解压时会自动创建一个目录,不受控制。

设置载入点,载入点的先导就是上面的压缩包里的文件目录,载入点为:文件目录/XX.py

run.py和run.sh、验证导出的模型的reference.py要和slim库、objection_dection库一起放到week12-object_detection目录下一起压缩

需要更改run.sh中的数据集目录,为tinymind上的数据集目录

注:tinymind启动脚本时是直接从根目录启动的(即运行时当前目录为根目录),而不是从脚本所在目录,因此run.py和run.sh有操作将当前目录转到脚本所在目录。

3、本例没有要设置的参数,都在config文件和run.py、run.sh中

4、保存模型并运行

 

将tinymind上output/train中的训练结果全部下载到./train_dir目录中,输出本地验证代码

python3 ./models/research/object_detection/eval.py --checkpoint_dir=./train_dir --eval_dir=./eval_dir --pipeline_config_path=./data/ssd_mobilenet_v1_pets.config

报错:

查找ssd_mobilenet_v1_pets.config、eval.py、eval.util.py均无此错误,发现是./train_dir中从tinymind上下载的checkpoint文件里的路径不对

将路径修改为"./train_dir/model.ckpt*后报如下错误

将路径改成如下后正常运行

使用tensorboard查看验证结果

$tensorboard --logdir ./eval

可以看出水桶的map(平均准确率?)值为0.9518,还是很准

由于只是验证了第500步的数据,故只有一个点。

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值