1、安装Tensorflow
请参考官方说明及其它博客安装tensorflow,要使用Tensorflow Object Detction API,tensorflow版本需1.4及以后版本。
我的系统已经安装Ubuntu 16.04系统,基础软件安装如下表,tensorflow,opencv均正常工作
软件 版本 说明
Tensorflow 1.4.0-rc1 源码编译,支持GPU
CUDA 9.0.176
CUDNN 7.0.3
OpenCV 3.3.1
2、安装必要的包及库
sudo apt-get install protobuf-compiler
sudo apt-get install python-pil
sudo apt-get install python-lxml
sudo pip3 install jupyter
sudo pip3 install matplotlib
3、安装TensorFlow Object Detection API
在home目录下新建tensroflow目录。TensorFlow Object Detection API 存放在 tensorflow /models 项目下的。(地址: https://github.com/tensorflow/models)
mkdir tensorflow
cd tensorflow
git clone https://github.com/tensorflow/models.git
在clone的时候有可能比较慢,或提示网络超时。多试几次即可。clone完成后在tensorflow文件夹下有名为models的文件夹,在models文件夹下有research文件夹
4、protobuf编译
在research/object_detection/protos目录下有很多.proto文件,需要将这些.ptoto文件编译成.py文件。使用protoc对proto文件进行编译
protoc ~/tensorflow/models/research/object_detection/protos/*.proto --python_out=.
执行上述命令后,提示如下错误:
object_detection/protos/ssd.proto:104:3: Expected "required", "optional", or "repeated".
object_detection/protos/ssd.proto:104:12: Expected field name.
object_detection/protos/model.proto: Import "object_detection/protos/ssd.proto" was not found or had errors.
object_detection/protos/model.proto:12:5: "Ssd" is not defined.
查看protoc的版本是2.6.1,在以前的文章中说明2.6.1版本上OK的。但我下载的TensorFlow Object Detection API是2018年9月初的版本,protoc的2.6.1版本太低了。
protoc --version
libprotoc 2.6.1
我用的是3.6的版本.
需要升级protoc版本。首先卸载protoc旧版本。注意与第1步骤中安装protoc的命令参数对应
sudo apt-get remove protobuf-compiler
protoc --version
bash: /usr/bin/protoc: No such file or directory
到 https://github.com/google/protobuf/releases 下载最新的protoc安装包 protobuf-all-3.6.1.tar.gz
下载完后解压,然后执行下面的命令编译安装:
$ cd protobuf-3.6.1
$ ./configure --prefix=/usr
$ make -j15
$ make check -j15
$ sudo make install -j15
$ sudo ldconfig
$ protoc --version
libprotoc 3.6.1
安装后查看protoc版本为3.6.1 版本。再重新执行编译命令
protoc ./object_detection/protos/*.proto --python_out=.
命令执行成功,没再报错。查看protos目录下,有相应的.py文件
anchor_generator_pb2.py
anchor_generator.proto
argmax_matcher_pb2.py
argmax_matcher.proto
bipartite_matcher_pb2.py
bipartite_matcher.proto
5、将slim添加到PYTHONPATH
TensorFlow Object Detection API 是以 Slim 为基础实现的,需要将 Slim 的目录加入 PYTHONPATH 后才能正确运行。为方便起见,直接在.bashrc 文件中添加如下一行。
export PYTHONPATH=$PYTHONPATH:/your home path/tensorflow/models/research:/your home path/tensorflow/models/research/slim
或者执行下列命令:
export PYTHONPATH=$PYTHONPATH:${PWD}:${PWD}/slim
其中/your home path/请根据你自己的安装目录修改。然后执行
source ~/.bashrc
6、验证测试
执行如下命令:
yajun@act:~/tensorflow/models/research$ python object_detection/builders/model_builder_test.py