前言
都说Linux是最适合程序员使用的操作系统,这话还真不假。
之前一直在云服务器上跑代码,近期接手了师兄的台式机(GTX 1050),虽然配置很渣,但想在本地玩玩看,于是乎先安装一波Tensorflow Object Detection API。
之前云服上配置的时候十分顺利,可是到了windows下很容易进坑,这里简单整理下踩坑后的总结。
目录
大致的安装步骤其实差不多,只是在些细节上会遇到坑,在这些坑上注意避免即可。
- 从GitHub下载官方的存储库
- 依赖库的安装
- 用protobuf解析API中的一些文件
- 测试API是否安装成功
- 运行官方教程中的代码查看效果
具体操作
不谈基本依赖库和框架版本的教程就是耍流氓!
相信在各种博客上查找教程的小伙伴们一定有这种感觉吧。所以先说下自己的版本情况:
- Tensorflow-gpu-1.10.0
- cuda9
- cuDNN7
- Python3.6.8
- Protobuf3.7.1
从GitHub下载官方存储库
官方github网站链接为:
https://github.com/tensorflow/models
在本地建立文件夹用于存储(这个自定义即可),然后将官方存储库下载到本地,至于是下载压缩包还是直接git取决于个人喜好就好。下图即为小詹的本地截图。
依赖库的安装
想运行官方教程,需要的第三方库有:pillow、lxml、Cython、jupyter、matplotlib、pandas等,如果使用anoconda安装的Python,大多数第三方库已经有啦。缺少第三方库的直接pip install就好了。
另外就是安装TensorFlow,CUDA,cuDNN了,这里主要是注意版本对应关系,其他的问题应该不大。
用protobuf解析API中的一些文件
官方API需要使用一些proto文件,这里需要用protobuf将其转换为Python的可运行代码格式。这些文件放置在官方库的research\object_detection\protos路径下。
这里需要使用protobuf将其转换格式,官方给的转换执行语句是:
#小詹提醒:在model/research路径下打开cmd执行下语句 protoc object_detection/protos/*.proto --python_out=.
这里就涉及到protoc到版本了,如前面所述,小詹下载TensorFlow-gpu1.10.0点时候自带了protobuf3.7.1。直接执行这语句会提示:No such file.
是一个小坑了,查阅到官方的issue,有前辈们说说版本小bug,不支持正则查找。有两种方法,小詹亲测有效。
方法一:去官网查找下载使用protoc3.4.0版本,官方地址:https://github.com/protocolbuffers/protobuf/releases
方法二:不支持正则,可以考虑一个个proto文件进行处理转换,这个在量不大的时候可以这么做。小詹这里把逐个进行转换命令语句放置在下面,如果你需要可以复制粘贴即可。
protoc .\object_detection\protos\anchor_generator.proto .\object_detection\protos\argmax_matcher.proto .\object_detection\protos\bipartite_matcher.proto .\object_detection\protos\box_coder.proto .\object_detection\protos\box_predictor.proto .\object_detection\protos\eval.proto .\object_detection\protos\faster_rcnn.proto .\object_detection\protos\faster_rcnn_box_coder.proto .\object_detection\protos\grid_anchor_generator.proto .\object_detection\protos\hyperparams.proto .\object_detection\protos\image_resizer.proto .\object_detection\protos\input_reader.proto .\object_detection\protos\losses.proto .\object_detection\protos\matcher.proto .\object_detection\protos\mean_stddev_box_coder.proto .\object_detection\protos\model.proto .\object_detection\protos\optimizer.proto .\object_detection\protos\pipeline.proto .\object_detection\protos\post_processing.proto .\object_detection\protos\preprocessor.proto .\object_detection\protos\region_similarity_calculator.proto .\object_detection\protos\square_box_coder.proto .\object_detection\protos\ssd.proto .\object_detection\protos\ssd_anchor_generator.proto .\object_detection\protos\string_int_label_map.proto .\object_detection\protos\train.proto .\object_detection\protos\keypoint_box_coder.proto .\object_detection\protos\multiscale_anchor_generator.proto .\object_detection\protos\graph_rewriter.proto --python_out=.
经过小坑,选择解决方法后应该就处理完所有的proto文件,转换成啦对应的py文件。
测试API是否安装成功
测试API是否安装成功可以在research路径下执行下列语句:
python object_detection/builders/model_builder_test.py
这里肯定是不行的,因为还没有将必要的路径加入PYTHON环境中。会出现各种报错,诸如不能导入****pb之类的或者导入错误之类的。
网上教程有的说要先在Anaconda\Lib\site-packages 文件夹下新建一个txt文件,输入对应路径后改名tensorflow_model.pth的,也有其他说法的。
小詹最后亲测有效的是直接添加设置即可。将\models;\models\research;\models\research\slim;三个路径加入pythonpath中,代码执行如下:(注意前方路径要换成你自己的)
set PYTHONPATH=E:\Jan_Project\tf_models;E:\Jan_Project\tf_models\research;E:\Jan_Project\tf_models\research\slim
设置后再次执行测试语句没有报错,表示设置完成。
运行官方教程中的代码查看效果
官方的目标检测教程路径在第一步git到本地的文件中,路径为:
models/research/object_detection/object_detection_tutorial.ipynb
可以中jupyter中打开运行,成功执行结果如下图。
以上就是中windows系统安装Tensorflow Object Detection API的过程。注意版本问题和环境问题即可。