https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_pets.md
1. 获取数据 Oxford-IIIT Pets Dataset
- # From tensorflow/models/research/
- wget http://www.robots.ox.ac.uk/~vgg/data/pets/data/images.tar.gz
- wget http://www.robots.ox.ac.uk/~vgg/data/pets/data/annotations.tar.gz
- # 解压
- tar -xvf images.tar.gz
- tar -xvf annotations.tar.gz
最后 tensorflow/models/research / 下文件结构
images/ annotations/
others
|
2. 对数据进行转换
Tensorflow Object Detection API 希望数据是 TFRecode 格式, 所以先执行 create_pet_tf_record 脚本来将 Oxford-IIIT pet 数据集进行转换
注: 要提前安装好需要的库, 不然这一步会有不少错
- #From tensorflow/models/research/
- python object_detection/dataset_tools/create_pet_tf_record.py --label_map_path=object_detection/data/pet_label_map.pbtxt --data_dir=`pwd` --output_dir=`pwd`
- # 在 tensorflow/models/research / 会生成 10 个标准的 TFRecord 文件: pet_faces_train.record-* pet_faces_val.record-*
- cp pet_faces_train.record-*/tensorflow/models/research/object_detection/data
- cp pet_faces_val.record-*/tensorflow/models/research/object_detection/data
- cp object_detection/data/pet_label_map.pbtxt ${YOUR_DIRECTORY}/data/pet_label_map.pbtxt
最后结果:
两个 TFRecode 文件将会在 tensorflow/models/research / 下生成, 分别为 pet_train_with_mask.record 和 pet_val_with_mask.record(和例子中给出的不一样)
遇到的问题:
TypeError: __init__() got an unexpected keyword argument 'serialized_options'
protobuf 原来用的 3.6.1 版本, 改成 3.5.1 就对了
可以在 https://github.com/google/protobuf/releases 下载 exe 文件, 然后在系统变量中配置其路径
NewRandomAccessFile failed to Creat/Open: xxxx No such process
文件的路径写错了, 没有找到相应的文件
3. 下载已经训练好的 COCO 模型
下载训练好的模型, 且放到 data 目录下
- wget http://storage.googleapis.com/download.tensorflow.org/models/object_detection/faster_rcnn_resnet101_coco_11_06_2017.tar.gz
- tar -xvf faster_rcnn_resnet101_coco_11_06_2017.tar.gz
- cp faster_rcnn_resnet101_coco_11_06_2017/model.ckpt.* ${YOUR_DIRECTORY}/data/
4. 配置对象检测 pipeline
Tensorflow Object Detection API 中模型参数, 训练参数, 评估参数都是在一个 config 文件中配置
object_detection/samples/configs 下式一些 object_detection 配置文件的结构. 这里用 faster_rcnn_resnet101_pets.config 作为配置的开始. 搜索文件中的 PATH_TO_BE_CONFIGURED, 并修改, 主要是数据存放的路径
5. object dectection 代码进行打包
调用. sh 文件, 后面的 / tmp/pycocotools 是输出目录
.sh 文件做的事情:
下载 https://github.com/cocodataset/cocoapi.git
并且创建 pycocotools 目录, 需要放到 object_detection 下
- # From tensorflow/models/research/
- # 下载 pycocotools-2.0.tar 到 / tmp/pycocotools 下
- bash object_detection/dataset_tools/create_pycocotools_package.sh /tmp/pycocotools
- # 然后解压到 object_detection / 下
- tar -xvf faster_rcnn_resnet101_coco_11_06_2017.tar.gz /object_detection
- # 进入 PythonAPI, 调用 setup.py
- python setup.py
问题:
cl: 命令行 error D8021 : 无效的数值参数 "/Wno-cpp"
https://blog.csdn.net/heiheiya/article/details/81128749
可以把这个项目下载下来, 然后在 PythonAPI 中执行 set up
原教程中的 cd slim&python setup.py sdists, 是用来打包的 (因为我是本地跑所以没有执行)
6. 开始训练和评估
为了开始训练和执行, 在 tensorflow/models/research/ 目录下执行如下命令
- # From tensorflow/models/research/
- python object_detection/model_main.py
- --pipeline_config_path=${YOUR_DIRECTORY}\object_detection\samples\configs\faster_rcnn_resnet101_pets.config
- --model_dir=${YOUR_DIRECTORY}\object_detection\data
- --num_train_steps=50000
- --num_eval_steps=2000
- --alsologtostderr
问题:
\object_detection\models\faster_rcnn_inception_resnet_v2_feature_extractor.py", line 28, in <module> from nets import inception_resnet_v2 ModuleNotFoundError: No module named'nets'
因为我的目录中 nets 是在 slim 下的, 只要到 py 文件中改下路径就好了
File "xx\tensorflow\models\research\object_detection\core\post_processing.py", line 150, in multiclass_non_max_suppressionscore_threshold=score_thresh)TypeError: non_max_suppression() got an unexpected keyword argument 'score_threshold'
post_processing.py 中把 multiclass_non_max_suppression 的参数删除就可以了
7. tensorboard 对过程进行监视
tensorboard --logdir=${YOUR_DIRECTORY}/model_dir
8. 导出 tensorflow 图
文件保存在 ${YOUR_DIRECTORY}/model_dir, 一般包括如下三个文件
- model.ckpt-${CHECKPOINT_NUMBER}.data-00000-of-00001
- model.ckpt-${CHECKPOINT_NUMBER}.index
- model.ckpt-${CHECKPOINT_NUMBER}.meta
找到一个要导出的 checkpoint, 执行命令
- # From tensorflow/models/research/cp ${YOUR_DIRECTORY}/model_dir/model.ckpt-${CHECKPOINT_NUMBER}.* .
- python object_detection/export_inference_graph.py --input_type image_tensor --pipeline_config_path object_detection/samples/configs/faster_rcnn_resnet101_pets.config --trained_checkpoint_prefix model.ckpt-${CHECKPOINT_NUMBER} --output_directory exported_graphs
最后 exported_graphs 中包含保存的模型和图
9. 一些小坑
原来用 git clone 来下 models 文件, 很容易失败. 直接下载 models.zip 会快一些
来源: http://www.bubuko.com/infodetail-2723135.html