参考博客:tensorflow object detection api 详细实践教程
基础环境:win10+anaconda3.5 和linux云服务器+anancnda3.5
第一次安装tensorflow object detection api,完全是参考@csdn_6105博客来的,配的过程可能不太对,以后继续更正
安装环境
创建虚拟环境:
- 创建一个虚拟环境conda create -n tensorflow python=3.6,并安装tensorflow 安装tensorflow
接下来安装下面的包:
conda install -c anaconda protobuf
- 用protoc --version查看安装的版本
关于protoc的安装,还有一种方法说直接下载源码后,解压就可以用的从这里下载
这里是引用
pip install pillow
pip install lxml
pip install Cython
pip install jupyter
pip install matplotlib
pip install pandas
pip install opencv-python
(win10下安装成功)
如果opencv-python安装失败的话,可以选择离线安装,从此网站下载对应版本的whl文件,如win10+python=3.6版本就下载opencv_python-3.4.0-cp36-cp36m-win_amd64.whl文件
或者也可以参考这个链接,直接
conda install -c menpo opencv
(linux下安装成功)
查看opencv-python版本
import cv2
cv2.__version__
下载API
下载tensorflow目标检测API:tensorflow object detection api
- https://github.com/tensorflow/models,下载的文件夹名称为models-master,里面包含了google开源的模型代码,目标检测源码存放在/research/object_detection目录下。
- 在/research/object_detection/protos/目录下有很多以“.proto”结尾的文件,这些文件需要使用protoc程序编译成python文件。需要下载安装2.6.0以上版本的protoc进行编译。
配置变量
配置API的设置python搜索路径:永久性配置方法-没试过的
临时性方法(已测试):
set PYTHONPATH=pwd;pwd\research;pwd\research\slim
- pwd是指解压的API文所在的路径,注意每次激活这个环境时都需要配置一下这个路径
- 例如:set PYTHONPATH=D:\tensorflow_object_detection_api\models-master;D:\tensorflow_object_detection_api\models-master\research;D:\tensorflow_object_detection_api\models-master\research\slim 在D盘中新建一个文件夹tensorflow_object_detection_api,下载的API文件models-master解压在这里
- 或者可以通过右击我的电脑–>属性–>高级系统设置–>环境变量–>新建系统变量的方式进行设置,这样就可以避免重复执行上述指令(永久)
在linux云服务器下:执行下面命令即可
export PYTHONPATH=$PYTHONPATH:/root/tensorflow/models:/root/tensorflow/models/research:/root/tensorflow/models/research/slim
还有种通过修改.bashrc文件来改,通过vi ~/.bashrc
打开文件,按键a
进入INSERT模式,直接在末尾加上上面的路径即可,再通过Esc+:+wq
保存退出,没试过这种,因为我是在创建的虚拟环境中运行的,不清楚修改.bashrc文件后会不会影响其他环境,所以就每次启动环境时,都需要执行以下上面的命令
将API中的.proto文件编译为.py
编译API中/research/object_detection/protos/目录下以“.proto”结尾的文件
参考的博客中是一一列举了所有的.proto文件进行编译,但是我下载的是最新版本的proto里面更新了一些文件,所以也可以用另一个命令进行全部编译
方法一:注意先进入到\models-master/research文件夹下
protoc --python_out=. .\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 .\object_detection\protos\calibration.proto
方法二:全部直接编译,在\models-master/research/文件夹下输入
protoc object_detection/protos/*.proto --python_out=.
安装目标检测API
编译结束后,继续在当前窗口也就是research下安装API:
(tensorflow) D:\tensorflow_object_detection_api\models-master\research>python setup.py build
(tensorflow) D:\tensorflow_object_detection_api\models-master\research>python setup.py install
测试API安装成功没
安装好了,开始测试该API是否安装成功:
在步骤3.5执行完以后,我们cd到builders目录下,然后执行python model_builder_test.py
如果没报错的话,则表示安装成功(我的没有粗线参考博客上的那样子)。
修bug
开始bug了,不同的环境也有不同的bug,分别在win10+ananconda和linux云服务器上安装了:
- ModuleNotFoundError: No module named ‘tf_slim’
解决方法:进入到models-master/research/slim/文件夹下,运行python setup.py install
- /root/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:516: FutureWarning: Passing (type, 1) or ‘1type’ as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type,大段大段的警告
解决方法:网上说时numpy版本过高,win10和linux都遇到了,降降版本后,亲测可以pip install numpy==1.16.4
- ModuleNotFoundError: No module named ‘absl’
解决方法:pip install absl-py
- 还有ModuleNotFoundError: No module named ‘tensorflow.compat’
解决方法:说是因为tensorflow版本问题,win10遇到了,linux木有(tensorflow=1.14.0),
反正就是重装tensorflow吧pip install tensorflow==1.14
- win10还遇到过未找到文件的,那是因为在proto编译时,列举名称编译的,漏掉了一些,再重新编译下即可
- 之后就是缺啥安啥
测试官方demo
测试官方demo:退回object_detection目录下,然后输入jupyter notebook,在跳出的浏览器页面上,打开.ipynb文件
在(win10)D:\tensorflow_object_detection_api\models-master\research\object_detection\colab_tutorials文件夹下有demo
打开object_detection_tutorial.ipynb文件
检测结果:
通过在终端中按 Ctrl + C(Mac及Linux上是按两次Ctrl + C),可以关闭整个服务器。这会立即关闭所有运行中的 notebook,所有未保存的内容会丢失。