Tensorflow Object Detection API 实例运行(本地训练测试宠物识别模型)

本章继续结合上一节内容,教大家如何在本地基于安装好的Tensorflow Object Detection API 训练,测试一个宠物识别模型实例.

以下内容均参照官网代码(官网宠物模型训练是在google could上训练的,为了节省实际,我们直接在本地训练,本次所有操作依然在linux下, 使用基于gpu的tensorflow)

1,进入安装好的tensorflow object detect api的~/models/research/目录,新建一个data目录,在data目录下载需要的训练和测试数据:(记得在新建好的data目录执行哈,我们把下载的数据放在data目录就行,后续所有东西都在这个目录)

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

2,将数据转成api需要的tfrecord格式.在~/models/research/目录下执行

python3 object_detection/dataset_tools/create_pet_tf_record.py \
    --label_map_path=object_detection/data/pet_label_map.pbtxt \
    --data_dir=~/models/research/data/ \
    --output_dir=~/models/research/data

(注意最后两行要是你下载的数据目录,--data_dir和--output_dir保持一样就行,执行完在data目录会看到很多pet_faces_train.record-* and pet_faces_val.record-*文件,这些就是训练需的数据)

3,在~/models/research/目录执行依次执行

cp object_detection/data/pet_label_map.pbtxt ./data (目标是把需要的标签文件也复制到data目录)

cp object_detection/samples/configs/faster_rcnn_resnet101_pets.config ./data(复制配置文件到data目录)

4,在~/models/research/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.* ./

(该步骤是为了下载一个预先训练好的模型,这使用了在coco上训练的faster_rcnn_resnet101网络,然后在后续训练的时候加载用来做初始化)

5,修改配置文件内容,在~/models/research/data目录执行(注意这是一句代码,~/models/research/data确定是你的数据路径就行)

sed -i "s|PATH_TO_BE_CONFIGURED|~/models/research/data|g" ./faster_rcnn_resnet101_pets.config

至此训练数据准备完毕.接下来开始训练

6,开始训练之前先改一些代码,因为毕竟本人使用的python3,和源码是python2,

修改research/object_detection/model_lib.py的395行的eval_metric_ops.iteritems()为eval_metric_ops.items()

修改research/object_detection/metric/coco_tools.py118行copy.deepcoy(self.dataset['categories'])为self.dataset['categories']

可能还会报一个xrange的错误,原因是python3换成了range,如果保存就定位到改行,把xrange换成range就行.

 

7,在~/models/research目录下直接执行即可开始训练(--model_dir指定了训练的模型目录,会直接创建,num_train_steps是总的训练次数,我指定五万,gpu训练了四个小时,如果是cpu就设置少一点)

python object_detection/model_main.py \
    --pipeline_config_path=data/faster_rcnn_resnet101_pets.config \
    --model_dir= data/log \
    --num_train_steps=50000 \
    --num_eval_steps=2000 \
    --alsologtostderr

(训练过程不会打印训练的loss信息,所以可能出现卡的情况,很正常,同时开启tensorboard查看训练情况就行 tensorboard --logdir data/log --port 6006, 然后打开浏览器http://dizhi:6006即可看到训练情况和训练图片)

Tensorflow Object Detection API 实例运行(本地训练测试宠物识别模型)

Tensorflow Object Detection API 实例运行(本地训练测试宠物识别模型)

上图为训练过程.

漫长的等待后在~/models/research/data/log目录就能看到训练的模型,然后将模型转换成.pb文件就可以使用了.

8,在~/models/research目录执行:

python object_detection/export_inference_graph.py \
    --input_type=image_tensor \
    --pipeline_config_path=data/faster_rcnn_resnet101_pets.config \
    --trained_checkpoint_prefix=data/log/model.ckpt-2000 \
    --output_directory=data/log/pb_model

执行后会在data/log/pb_model目录生成多个文件,其中.pb文件是后续需要预测的文件

9, 预测:

在research/object_detection目录下启动jupyter notebook,通过浏览器打开object_detection_tutorial.ipynb,

修改Model preparation单元下的内容为:

# What model to download.
# MODEL_NAME = 'ssd_mobilenet_v1_coco_2017_11_17'
# MODEL_FILE = MODEL_NAME + '.tar.gz'
# DOWNLOAD_BASE = 'http://download.tensorflow.org/models/object_detection/'

# Path to frozen detection graph. This is the actual model that is used for the object detection.
PATH_TO_FROZEN_GRAPH = '/home/user/tensorflowAPI/research/train_data/pet_data/train_pd/frozen_inference_graph.pb' #.pb文件的路径

# List of the strings that is used to add correct label for each box.
PATH_TO_LABELS = '/home/user/tensorflowAPI/research/train_data/pet_data/pet_label_map.pbtxt' #label_map.pbtxt的路径

NUM_CLASSES = 37 #f分类数量

修改detection单元下面的内容为:

# For the sake of simplicity we will use only 2 images:
# image1.jpg
# image2.jpg
# If you want to test the code with your images, just add path to the images to the TEST_IMAGE_PATHS.
PATH_TO_TEST_IMAGES_DIR = '/home/user/tensorflowAPI/research/train_data/pet_data/images' #存放训练图片的路径
im = os.listdir(PATH_TO_TEST_IMAGES_DIR)
TEST_IMAGE_PATHS = [ os.path.join(PATH_TO_TEST_IMAGES_DIR, e) for e in im]

# Size, in inches, of the output images.
IMAGE_SIZE = (12, 8)

然后shift+enter依次执行各单元(Download Model单元不需要执行),便可以看到宠物的识别结果

Tensorflow Object Detection API 实例运行(本地训练测试宠物识别模型)

Tensorflow Object Detection API 实例运行(本地训练测试宠物识别模型)

上一篇:Tensorflow Object Detection API安装


下一篇:Graylog 部署文档