Tensorflow Object Detection API
Tensorflow Object Detection API 是Tensorflow官方提供的一个目标检测的实现,可靠而且更新速度极快。就我个人使用的感受而言,好用但是坑也不少。现在就写一下我个人的训练过程,希望能给各位提供一个参考。
环境配置
Tensorflow Object Detection API 最近更新之后我个人是觉得环境配置方面更省心了,出的问题也少了很多。然而虽然环境配置问题少了,但是训练和测试的问题反而多了起来。
根据官方的指引,配置其实非常简单,官方指引 在这里 。
1. 拉取必要的文件
第一步当然是拉取一大堆的代码了,在你的工作目录使用下面的命令拉取。 无论是否是从源码编译的Tensorflow,我都建议你重新获取,因为最近Tensorflow Object Detection API 有更新,我是按照目前最新的版本来写的(我是8月8日拉取的代码)。如果你使用的版本和我不一致,可能出现一些我没有遇到的问题。
git clone https://github.com/tensorflow/models.git
如果你在国内拉取,可能出现速度缓慢的问题,可以参照我的另一篇博客解决这个问题。
2. 安装必要依赖
这里的依赖全部按照官方要求安装就可以了,另外注意,如果你最后想使用的 xx_fpn 的算法,最好将你的Tensorflow 更新至**1.9.0及以上**,这样在export inference graph 时候不会出现问题。
**具体依赖在这里:**
Tensorflow Object Detection API depends on the following libraries:
Protobuf 3.0.0
Python-tk
Pillow 1.0
lxml
tf Slim (which is included in the "tensorflow/models/research/" checkout)
Jupyter notebook
Matplotlib
Tensorflow (>=1.9.0)
Cython
contextlib2
cocoapi
**安装依赖:**
# For CPU
pip install tensorflow
# For GPU
pip install tensorflow-gpu
sudo apt-get install protobuf-compiler python-pil python-lxml python-tk
pip install --user Cython
pip install --user contextlib2
pip install --user jupyter
pip install --user matplotlib
# 如果你的apt-get总出问题 可以尝试sudo apt-get update 命令,执行完毕后再使用上述 apt-get install 命令安装必要依赖。
# 如果未能解决,可以尝试仅使用 pip install 安装依赖, 命令如下
pip install --user Cython
pip install --user contextlib2
pip install --user pillow
pip install --user lxml
pip install --user jupyter
pip install --user matplotlib
# 这个 '--user' 的参数是仅给当前用户组安装,如果你是使用虚拟环境的,别忘记加上这个参数
3. 使用 Protobuf 完成配置
这一步经常出各种各样的问题,找不到文件或者执行过程中有一两个文件报错说缺少参数什么的。这些我都一一解决过了,下面是具体步骤
**检查当前 protoc 版本号 :**
使用下面的命令检查当前版本号:
protoc --version
# 我的输出为 libprotoc 3.4.0
如果你的版本号低于3.4.0 执行过程中将会出现问题,具体更改 protoc 版本的方法为
# 查询protoc的具体位置,命令如下
which protoc
# 我的输出为 /usr/bin/protoc,这就意味着我当前使用的protoc位置在此
# 下载linux_x64对应的protoc,亲测适合Ubuntu 16.04,命令如下
wget https://github.com/google/protobuf/releases/download/v3.4.0/protoc-3.4.0-linux-x86_64.zip
# 此版本应该适合绝大多数linux
# 如果不适合你或者你是windows用户
# 请参考我的另一篇windows环境配置博客
# 或者 在github protobuf/releases下寻找自己合适的包下载
# 下载完成后需要解压, wget 和 unzip 都需要安装
# 如果提示你未找到该命令,可以使用下面命令安装
# installing wget
sudo apt-get install wget
# installing unzip
sudo apt-get install unzip
# 解压 -d参数指定解压出来的目录名为 protoc3
unzip protoc-3.4.0-linux-x86_64.zip -d protoc3
# 复制protoc 到对应目录
sudo cp -rf protoc3/bin/* /usr/bin/
# 这个 /usr/bin/就是你刚刚 which protoc 执行打印的那个目录,有人是 /usr/local/bin/
# 注意不要复制错了目录
sudo cp -rf protoc3/include/* /usr/include/
# 同理,有的人是 /usr/local/include/
# 重新查询protoc 版本号,如果你复制的目录没错,应该已经是 3.4.0了
protoc --version
此时你的protoc 版本号应该已经正确了,那么下一步就是执行protoc
# 执行此命令的目录为 xx/models/research/
protoc object_detection/protos/*.proto --python_out=.
# 未报错即为成功
4. 添加 Libraries 路径并测试
# 执行此命令的目录为 xx/models/research/
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
如果不每次跑之前都手动添加Libraries,就需要改一堆文件,还不如这样省心。你可以把这个 `pwd`改为 xx/models/research/ 然后写入 ~/.bashrc 就不用每次都重新执行一遍了。
**测试命令如下:**
python object_detection/builders/model_builder_test.py
# 如没有错误,会输出OK
至此,环境配置方面就算是完成了。下一部分将讲解如何将自己的图片制作为训练集,并如何送入训练。同时,如果你有任何问题,欢迎你在这里提问。也推荐你到Github官方讨论区提问,地址在这里。
参考目录
- Peter, Szoldan. ObjectDetecionAPI TypeError: __new__() got an unexpected keyword argument 'serialized_options'[EB/OL]. https://stackoverflow.com/questions/50338968/objectdetecionapi-typeerror-new-got-an-unexpected-keyword-argument-seria.
- pkulzc. Installation[EB/OL]. https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md.