前言
环境准备:ubuntu16.04,Python2.7 ,cuda9.0 ,cudnn7.1.4,tensorflow 1.8.0
一、安装 TensorFlow Object Detection API
参考:https://blog.csdn.net/chenmaolin88/article/details/79371891
不同的是我这里的tensorflow版本是1.8.0,编译Protobuf的版本是3.3,下载好Protobuf之后,
cd ~/tensorflow/models/research/
/home/wlw/Downloads/protoc_3.3/protoc-3.3.0-linux-x86_64/bin/protoc(前面是可执行文件的地址) object_detection/protos/*.proto --python_out=.
其他步骤与上面参考教程类似。
二、安装cuda9.0+cudnn7.1.4,与cuda8.0共存,可随意切换
参考:https://blog.csdn.net/tunhuzhuang1836/article/details/79545625
安装cuda9.0
因为之前系统中已经有cuda8.0,所以在安装cuda9.0时,务必选择runfile安装
下载好cuda9.0后(下载地址),进入终端:
# if deb
sudo dpkg -i cuda-repo-ubuntu1604-9-0-local-rc_9.0.103-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
# if runfile
sudo chmod +x cuda_9.0.176_384.81_linux.run
./cuda_9.0.176_384.81_linux.run
安装好后我们可以去/usr/local/下看到安装好的cuda-9.0文件夹:
安装cudnn
其次我们需要安装cudnn,同理去nvidia官网下载cudnn。这里我们安装的是cudnn7.1.4
注意,我们这里选择cuda9.0下cuDNN v7.1.4 Library for Linux。下载好后直接命令行解压然后复制lib64和include文件夹到usr/local/cuda-9.0,命令如下:
sudo cp cuda/include/cudnn.h /usr/local/cuda-9.0/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64
sudo chmod a+r /usr/local/cuda-9.0/include/cudnn.h /usr/local/cuda-9.0/lib64/libcudnn*
cuda版本的自由切换
按上述过程安装好后,命令行sudo gedit ~/.bashrc打开.bashrc,因为之前已经装过cuda8.0,则.bashrc下将所有cuda8.0改为cuda:(前两行是在前面安装tf的目标检测API时候添加的)
下面我们只需要根据需求随意切换cuda8.0或9.0即可,命令行如下:
sudo rm -rf /usr/local/cuda
sudo ln -s /usr/local/cuda-9.0 /usr/local/cuda
下面我们可以查看当前版本的情况:
至此,cuda9.0就安装完成。
注意:cuda9.0对应的cudnn以及tensorflow版本一定要符合要求,后面训练自己的数据集时会深刻体现。
三、正式训练自己的数据集
准备数据集
主要包括制成pascal_voc格式、制作XML标签文件、图片命名以及划分数据集等操作,与利用py-faster-rcnn制作数据集过程相同,见我之前的博客:py-faster-rcnn用自己的数据训练模型
训练环境准备
(1)首先新建一个项目文件夹:tensorflow_api_learn,在当前项目文件夹下新建一个dataset文件夹,里面存放上面中制作好的数据集,命名为myVOC
(2)接着复制models\research\object_detection\dataset_tools\create_pascal_tf_record.py
文件到dataset,
(3)复制models\research\object_detection\data\pascal_label_map.pbtxt
文件到dataset
(4)在项目文件夹下新建一个model文件夹,下载预训练模型ssd_mobilenet_v1_coco_11_06_2017放如model文件下,预训练模型文件下包括:
(5)复制models\research\object_detection\samples\configs\
ssd_mobilenet_v1_pets.config到项目根目录下。
(6)复制models\research\object_detection
目录下的train.py、eval.py和export_inference_graph.py
文件到项目根目录下
(7)复制models\research\object_detection
文件夹下的utils目录到项目根目录下,create_pascal_tf_record.py会用到。
(8)新建record文件夹,用于存放TFrecord数据。
修改配置文件
(1)修改pascal_label_map.pbtxt中类标名,根据自己数据集修改
(2)修改dataset中的create_pascal_tf_record.py,修改后如下:
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import hashlib
import io
import logging
import os
from lxml import etree
import PIL.Image
import tensorflow as tf
from object_detection.utils import dataset_util
from object_detection.utils import label_map_util
flags = tf.app.flags
flags.DEFINE_string('data_dir', '', 'Root directory to raw PASCAL VOC dataset.')
flags.DEFINE_string('set', 'train', 'Convert training set, validation set or '
'merged set.')
flags.DEFINE_string('annotations_dir', 'Annotations',
'(Relative) path to annotations directory.')
flags.DEFINE_string('