本文用于记录tensorflow object detection api的安装与使用,主要包括COCO 数据集和更大的The Open Images Dataset数据集,以便将来快速查找。
主要步骤为:
- 下载代码 (https://github.com/tensorflow/models)
使用zip压缩包下载,将“models-master”修改为“models” - 创建并激活conda环境:
conda create -n tfapi python=3.6 tensorflow-gpu=1.12.0
安装tensorflow-gpu(2019/8/24 jupyter测试代码中要求使用1.12.0及以上版本)
可能出现cuda 与 tensorflow的版本匹配问题,可参考tensorflow各个版本的CUDA以及Cudnn版本对应关系进行选择
3. 安装其他依赖包
pillow,lxml,Cython,jupyter,matplotlib,pandas,opencv-python
pip install 依赖包名称
可能出现cuda 与 tensorflow的版本匹配问题,可参考tensorflow各个版本的CUDA以及Cudnn版本对应关系进行选择
此步可能提示版本不匹配问题,根据提示更改即可。
4. 安装protoc
打开网址https://github.com/protocolbuffers/protobuf/releases,根据自己的ubuntu位数,下载想要的包,我这里下载的是protoc-3.14.0-linux-x86_64.zip。
下载后解压,执行如下命令:
sudo cp bin/protoc /usr/bin/protoc
编译proto文件
#在models/research下运行
protoc object_detection/protos/*.proto --python_out=.
运行完成后,可以检查object_detection/protos/文件夹,如果每个proto文件都成了对应的以py为后缀的python源码,就说明编译成功了。
5. 将slim加入PATHPATH
(1)在models/research/slim中找到setup.py,执行以下命令:
python setup.py build
python setup.py install
(2)将slim加入PYTHONPATH,输入命令如下:
sudo gedit ~/.bashrc
在打开的文件最下方输入:
pwd: 指的是slim所在的绝对路径
export PYTHONPATH=$PYTHONPATH:'pwd':'pwd'/slim
使得~/.bashrc的修改生效:
source ~/.bashrc
执行import slim成功则说明已经正确设置好了。
- 运行models/research下的setup.py
python setup.py build
python setup.py install
安装完成测试
在models/research下运行如下命令:
python object_detection/builders/model_builder_test.py
出现如下信息,说明已安装成功:
- 安装COCO API
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
python setup.py build
python setup.py install
- 执行已经训练好的模型
在research文件夹下运行命令:jupyter notebook,接着在jupyter中打开object_detection文件夹,并单击object_detection_tutorial.ipynb运行试例文件。
1)安装环境直接使用
2)转换成.py文件,本地使用,删除get_ipython()之类的代码,删除 Instance Segmentation部分的代码。
3)Error: load() missing 2 required positional arguments: ‘tags’ and ‘export_dir’
解决办法,删除1.x老版的TensorFlow,更新为2.x
pip uninstall tensorflow
pip install tensorflow-gpu==2.0
4)Segmentation fault或者 Process finished with exit code 139。 GPU现存溢出,可以使用CPU版本的TensorFlow做inference。
解决方法:将tensorflow-gpu的版本从2.x降低到1.15即可使用GPU加速。
tensorflow-gpu==2.0 时不能GPU加速,会报错Segmentation fault,但是在运行object_detection_tutorial.ipynb时,需要2.0才不会报错load() missing 2 required positional arguments: 'tags' and 'export_dir'
tensorflow-gpu==1.15.0 时可以使用GPU加速,但是运行object_detection_tutorial.ipynb时,会报错load() missing 2 required positional arguments:
5)ImportError: No module named tensorflow.compat.v1 解决方法:更新TensorFlow版本,例如更到1.15 或者 2.x。
运行所有代码后的结果如下:
- 使用Open Images Dataset 预训练模型
(1)将PATH_TO_LABELS替换
PATH_TO_LABELS = "models/research/object_detection/data/oid_v4_label_map.pbtxt"
(2)将代码中的model替换
model_name = "faster_rcnn_inception_resnet_v2_atrous_oid_v4_2018_12_12"
删除Instance Segmentation模块,只留下Object Detection部分。
- 编译及测试
参见:Ubuntu18.04下安装TensorFlow Object Detection API
运行jupyter notebook测试时,未能绘制图像,问题及解决方法参考:
解决问题:UserWarning: Matplotlib is currently using agg, which is a non-GUI backend.
执行代码,没有弹出图像窗口,提示下面的内容
训练自己的数据集, TensorFlow Object Detection API 技术手册(6)——模型文件配置及模型训练添加链接描述
参考:
1-Ubuntu18.04下安装TensorFlow Object Detection API
2-tensorflow object detection api 详细实践教程
3-ubuntu18.04 tensorflow object detection api 安装