cloud执行:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_pets.md

本地执行:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_locally.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/
object_detection/
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=
  --num_eval_steps=
  --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会快一些

TensorFlow object detection API的更多相关文章

  1. 使用TensorFlow Object Detection API+Google ML Engine训练自己的手掌识别器

    上次使用Google ML Engine跑了一下TensorFlow Object Detection API中的Quick Start(http://www.cnblogs.com/take-fet ...

  2. 谷歌开源的TensorFlow Object Detection API视频物体识别系统实现教程

    视频中的物体识别 摘要 物体识别(Object Recognition)在计算机视觉领域里指的是在一张图像或一组视频序列中找到给定的物体.本文主要是利用谷歌开源TensorFlow Object De ...

  3. Tensorflow object detection API 搭建属于自己的物体识别模型

    一.下载Tensorflow object detection API工程源码 网址:https://github.com/tensorflow/models,可通过Git下载,打开Git Bash, ...

  4. Tensorflow object detection API ——环境搭建与测试

    1.开发环境搭建 ①.安装Anaconda 建议选择 Anaconda3-5.0.1 版本,已经集成大多数库,并将其作为默认python版本(3.6.3),配置好环境变量(Anaconda安装则已经配 ...

  5. Tensorflow object detection API 搭建物体识别模型(四)

    四.模型测试 1)下载文件 在已经阅读并且实践过前3篇文章的情况下,读者会有一些文件夹.因为每个读者的实际操作不同,则文件夹中的内容不同.为了保持本篇文章的独立性,制作了可以独立运行的文件夹目标检测. ...

  6. Tensorflow object detection API 搭建物体识别模型(三)

    三.模型训练 1)错误一: 在桌面的目标检测文件夹中打开cmd,即在路径中输入cmd后按Enter键运行.在cmd中运行命令: python /your_path/models-master/rese ...

  7. Tensorflow object detection API 搭建物体识别模型(一)

    一.开发环境 1)python3.5 2)tensorflow1.12.0 3)Tensorflow object detection API :https://github.com/tensorfl ...

  8. Tensorflow object detection API 搭建物体识别模型(二)

    二.数据准备 1)下载图片 图片来源于ImageNet中的鲤鱼分类,下载地址:https://pan.baidu.com/s/1Ry0ywIXVInGxeHi3uu608g 提取码: wib3 在桌面 ...

  9. 基于TensorFlow Object Detection API进行相关开发的步骤

    *以下二/三.四步骤确保你当前的文件目录是以research文件夹为相对目录. 一/安装或升级protoc 查看protoc版本命令: protoc --version 如果发现版本低于2.6.0或运 ...

随机推荐

  1. vue上传图片 base64+canvas压缩图片

    这是先将图片 base64转码 在拿canvas压缩的

  2. Jetson TX1 SD card启动

    上网DNS /var/run/NetworkManager/resolv.conf nameserver 211.100.225.34 nameserver 219.239.26.42

  3. C博客作业01--分支、顺序结构

    1.本章学习总结 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 在暑假已经有初步接触c语言,所以在学习c语言的开始会比较轻松,但仍然解题时候步骤太过于繁琐,简单的题目复 ...

  4. 洛谷P5119 Convent 题解

    题目 很好想的一道二分题,首先,二分一定满足单调性,而题目中非常明显的就是用的车越多,所用时间越少,所以可以枚举时间,判断是否可以比\(m\)少. 然后在二分时,更是要注意下标的一些问题,也要注意车和 ...

  5. 怎么用MATLAB产生FPGA所需的hamming窗系数

    需求 在FPGA处理中如果需要对待处理数据加窗,则需要窗系数存储在ROM中以供使用. 前言 MATLAB窗函数说明 流程 比如加个hamming窗,8192点,16bit放大,最终系数18bit位宽. ...

  6. python学习日记(面向对象——组合)

    组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合 圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积.圆环的周长是内部圆的周长加上外部圆的周长.这个时候,我们就首先实现一 ...

  7. jforum(2)--中文乱码的解决方式

    安装好jforum后可能出现如下乱码页面: 解决方式 1.在建数据库时要用如下语句: CREATE DATABASE JForum DEFAULT CHARACTER SET utf8 COLLATE ...

  8. 初入 nodejs -遍历文件夹

    //操作文件 /* 1.fs.stat 获取文件状态 2.fs.readdir 读取文件夹数据 3.fs.access 判断文件夹是否存在 4.path.join 拼路径 */ //操作文件 cons ...

  9. 【洛谷P1963】变换序列

    题目大意:对于一个顺序序列,求一个合法置换,可以满足一些约束,若存在多个合法置换,则输出字典序最小的一个置换. 题解:对于序列的置换是否有解的问题,可以和二分图的完美匹配相关联.由于是字典序最小,显然 ...

  10. Mac下查看已安装的jdk版本及其安装目录

    1.打开终端,输入:/usr/libexec/java_home -V 注意:输入命令参数区分大小写(-v是不对的,必须是-V) 2.如图:为输入命令: 当前Mac已安装jdk目录: Mac默认使用的 ...