天天看点

Tensorflow Object Detection API使用一、安装 Tensorflow 及 Object Detection API二、使用 Oxford-IIIT Pet 数据集进行测试三、使用模型进行检测

一、安装 Tensorflow 及 Object Detection API

1.安装Tensorflow

TensorFlow中文社区文档:Tensorflow安装。

2.安装Object Detection API

参考Github上,TensorFlow

models/research/object_detection

里的安装教程。

添加库的路径到PYTHONPATH,使用编辑器如gedit打开

~/.bashrc

文件,将以下命令添加到一个新行。其中

pwd

代表

models/research

的路径,可去掉`符号,然后在终端

bash

一下。

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

注:pip install 如果是用sudo,则安装系统默认python下的包,如果TensorFlow是安装在其他python下(如miniconda),则不加sudo。

二、使用 Oxford-IIIT Pet 数据集进行测试

1.下载解压数据集,并将其转换为TFRecords

参考Github上,TensorFlow

models/research/object_detection

里的说明文档。

Pet数据集里有部分图片损毁,应该删除掉,否则会在运行eval.py时报以下错误:

Corrupt JPEG data: 240 extraneous bytes before marker 0xd9

。参考文档可知,

egyptian_mau_14, 139, 145, 156, 167, 177, 186, 191; abyssinian_5, 34; chihuahua_121; beagle_116

为损坏的文件,应删去对应的

.jpg; .xmls;

以及

list.txt、test.txt、trainval.txt

里对应的行。

2.下载用于迁移学习的预训练模型

在Tensorflow Detection Model Zoo里下载 COCO-pretrained SSD with MobileNet model,存放在

models/research

文件夹中,并解压。

3.配置对象检测管道

参考文档

在 Tensorflow object detection API 里,配置文件定义了模型参数、训练参数等参数,文件为

object_detection/protos/pipeline.proto

。在此实验中,采用一些预定义模板,选择在

object_detection/samples/configs

文件夹中的模板,此处采用

ssd_mobilenet_v1_pets.config

作为而配置管道的起点。如果不采用预定义模板配置管道,参考Configuring the Object Detection Training Pipeline。

ssd_mobilenet_v1_pets.config

文件中,修改

fine_tune_checkpoint

input_path

label_map_path

路径。

fine_tune_checkpoint

应该提供一个已存在的checkpoint路 ,在下载的预训练模型的文件中包含有

model.ckpt.data-00000-of-00001, model.ckpt.index, model.ckpt.meta

,比如

fine_tune_checkpoint

的路径可设置为

/home/cyj/Project/models/research/ssd_mobilenet_v1_coco_2017_11_17/model.ckpt

4.运行

运行训练程序

# From the tensorflow/models/research/ directory
python object_detection/train.py \
    --logtostderr \
    --pipeline_config_path=${PATH_TO_YOUR_PIPELINE_CONFIG} \
    --train_dir=${PATH_TO_TRAIN_DIR} \
           

${PATH_TO_YOUR_PIPELINE_CONFIG}

指向管道训练文件,如

/home/cyj/Project/models/research/object_detection/samples/configs/ssd_mobilenet_v1_pets.config

${PATH_TO_TRAIN_DIR}

定义训练事件写入路径,先新建相关

train

文件夹,如

/home/cyj/Project/models/research/train

output_inference_graph.pb

为导出的训练的模型。

Tensorflow Object Detection API使用一、安装 Tensorflow 及 Object Detection API二、使用 Oxford-IIIT Pet 数据集进行测试三、使用模型进行检测

TensorFlow 模型保存参考文档。

运行测试程序

# From the tensorflow/models/research/ directory
python object_detection/eval.py \
    --logtostderr \
    --pipeline_config_path=${PATH_TO_YOUR_PIPELINE_CONFIG} \
    --checkpoint_dir=${PATH_TO_TRAIN_DIR} \
    --eval_dir=${PATH_TO_EVAL_DIR}
           

${PATH_TO_EVAL_DIR}

定义测试事件写入路径,先新建相关

eval

文件夹,如

/home/cyj/Project/models/research/eval

运行Tensorboard

模型训练和测试的过程可通过Tensorboard进行查看,使用以下命令运行Tensorboard:

其中

${PATH_TO_MODEL_DIRECTORY}

指向包含

train

eval

的目录。例如

~$ tensorboard --logdir=/home/cyj/Project/models/research

Tensorflow Object Detection API使用一、安装 Tensorflow 及 Object Detection API二、使用 Oxford-IIIT Pet 数据集进行测试三、使用模型进行检测

输出训练的模型

模型训练后,将其导出为TensorFlow Graph样式。一个checkpoint由以下三个部分组成:

model.ckpt-${CHECKPOINT_NUMBER}.data--of-,
model.ckpt-${CHECKPOINT_NUMBER}.index
model.ckpt-${CHECKPOINT_NUMBER}.meta
           

当要把已有的checkpoint转化为graph,执行以下代码即可得到名为

output_inference_graph.pb

的graph。

# From tensorflow/models/research/
python object_detection/export_inference_graph.py \
    --input_type image_tensor \
    --pipeline_config_path ${PIPELINE_CONFIG_PATH} \
    --trained_checkpoint_prefix ${TRAIN_PATH} \
    --output_directory output_inference_graph.pb
           

三、使用模型进行检测

参考代码 Github: Video_Object_Detection, 此实验中可通过模型,进行照片和视频中的目标检测。

继续阅读