Notes
TensorFlow Object Detection API 官方给出的安装教程是Linux的,而我现在用Win更方便一点,所以就尝试用Win运行Demo,结果问题真是层出不穷,所幸还是解决了。目前的状态仅仅是能够成功运行的Demo。后续应该还会继续写如何训练自己的数据集。
Win环境配置方法
由于在Win环境下现存的Python环境和应用会造成影响,且有的包不用anaconda安装时会报错,所以我还是使用了Anaconda创建了虚拟环境。
1. 下载Anaconda
由于国外源下载Anaconda实在是太慢太慢了,这里推荐清华镜像。链接是: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
在列表里选择合适自己的版本就好,我选择的版本是 Anaconda3-5.2.0-Windows-x86_64.exe
2. 创建虚拟环境并安装必要的包
使用命令创建虚拟环境
在Anaconda Prompt 或者 cmd/PowerShell 中执行下列命令
conda create -n <your env name here> python=3.5.2
最好不要更改python版本,其他版本的python不能保证成功运行官方Demo。另外<your env name here>整体替换成你能够记得住的名字,如我当时使用的命令是:
conda create -n tensorflow python=3.5.2
这样创建完成后,我激活虚拟环境时使用的环境名为
tensorflow
使用命令激活虚拟环境
conda activate <your env name here>
同样,我激活所使用的命令为:
conda activate tensorflow
安装依赖
确保你激活环境之后,开始安装下列依赖
pip install protobuf==3.4.0
pip install tensorflow==1.5.0
pip install Cython
pip install pillow
pip install lxml
pip install jupyter
pip install matplotlib
请务必按照我提供的顺序安装,protobuf的版本和TensorFlow的版本决定了能否成功调用API。
(另外,由于我只是在Win上做测试,最后的训练还是会在Linux服务器上进行,所以我没有选用GPU版本的TensorFlow。如果你需要使用GPU版本的TensorFlow,请另外寻找教程。大致的方法是安装cuda和cudnn之后安装tensorflow-gpu,安装时注意版本匹配问题。)
下载protoc.exe
下载地址为:点击打开链接
切记,下载版本一定要这个版本
下载之后解压,解压完成后将 bin 文件夹和 include 文件夹复制到 C:/Windows/ 目录下
另外将 bin 文件夹内的 .exe文件复制到 C:/Windows/System32/目录下
此时你在激活了环境的终端下执行
protoc --version
你应该可以看到下列输出
D:\tensorflow_models\goa-tensorflow-models-master\tensorflow-models\research
(tensorflow) λ protoc --version
libprotoc 3.4.0
如果你的版本号并非3.4.0,请仔细检查上面的复制工作你是否已经做好或下载的版本是否是我所贴出的版本
下载model并编译文件
在GitHub下载:
如果你访问GitHub下载速度过慢,可以访问我的码云,我完整Copy了Github上的项目
推荐你下载ZIP,下载完成后解压,目录随意。
解压完成后在终端访问解压后的目录,如我的访问命令为:
cd D:\tensorflow_models\goa-tensorflow-models-master\tensorflow-models\research
conda activate tensorflow
进入目录后,编译命令如下:
protoc object_detection/protos/anchor_generator.proto --python_out=. --proto_path=.
protoc object_detection/protos/bipartite_matcher.proto --python_out=. --proto_path=.
protoc object_detection/protos/box_predictor.proto --python_out=. --proto_path=.
protoc object_detection/protos/faster_rcnn.proto --python_out=. --proto_path=.
protoc object_detection/protos/grid_anchor_generator.proto --python_out=. --proto_path=.
protoc object_detection/protos/image_resizer.proto --python_out=. --proto_path=.
protoc object_detection/protos/keypoint_box_coder.proto --python_out=. --proto_path=.
protoc object_detection/protos/matcher.proto --python_out=. --proto_path=.
protoc object_detection/protos/model.proto --python_out=. --proto_path=.
protoc object_detection/protos/optimizer.proto --python_out=. --proto_path=.
protoc object_detection/protos/post_processing.proto --python_out=. --proto_path=.
protoc object_detection/protos/square_box_coder.proto --python_out=. --proto_path=.
protoc object_detection/protos/ssd.proto --python_out=. --proto_path=.
protoc object_detection/protos/string_int_label_map.proto --python_out=. --proto_path=.
protoc object_detection/protos/region_similarity_calculator.proto --python_out=. --proto_path=.
protoc object_detection/protos/ssd_anchor_generator.proto --python_out=. --proto_path=.
protoc object_detection/protos/argmax_matcher.proto --python_out=. --proto_path=.
protoc object_detection/protos/box_coder.proto --python_out=. --proto_path=.
protoc object_detection/protos/eval.proto --python_out=. --proto_path=.
protoc object_detection/protos/faster_rcnn_box_coder.proto --python_out=. --proto_path=.
protoc object_detection/protos/hyperparams.proto --python_out=. --proto_path=.
protoc object_detection/protos/input_reader.proto --python_out=. --proto_path=.
protoc object_detection/protos/losses.proto --python_out=. --proto_path=.
protoc object_detection/protos/mean_stddev_box_coder.proto --python_out=. --proto_path=.
protoc object_detection/protos/multiscale_anchor_generator.proto --python_out=. --proto_path=.
protoc object_detection/protos/pipeline.proto --python_out=. --proto_path=.
protoc object_detection/protos/preprocessor.proto --python_out=. --proto_path=.
protoc object_detection/protos/train.proto --python_out=. --proto_path=.
protoc object_detection/protos/graph_rewriter.proto --python_out=. --proto_path=.
一定要在reserach目录下执行这些命令,如果你在
D:\tensorflow_models\goa-tensorflow-models-master\tensorflow-models\research\object_detection\protos\
看到每一个 .proto 文件都对应了 _pb2.py 文件,则证明成功。
如图
配置path系统环境变量
在最后加入下列语句,注意路径换成自己的
D:\tensorflow_models\goa-tensorflow-models-master\tensorflow-models\research:D:\tensorflow_models\goa-tensorflow-models-master\tensorflow-models\research\slim;
运行setup
注意路径换成自己的
cd D:\tensorflow_models\goa-tensorflow-models-master\tensorflow-models\
python setup.py install
D:\tensorflow_models\goa-tensorflow-models-master\tensorflow-models\research\slim
python setup.py install
3. 运行Demo
终端中,在reserach目录下执行下列命令
conda activate tensorflow # 如果你已经激活了环境,就无需这一步
jupyter notebook
然后在弹出的网页中进入object_detection目录,然后运行object_detection_tutorial.ipynb按顺序执行,如果没有报错说明环境配置成功。
最后
这是我第一次写博客,如果错误和不足,欢迎指正。
如果你有任何疑问,推荐你首先尝试用bing国际版搜索解决或访问StackOverflow寻找答案。也欢迎在此留言提问,如果我看到会尽力回答你。
感谢阅读。
参考
- withzheng. 对于谷歌开源的TensorFlow Object Detection API视频物体识别系统实现教程[EB/OL]. https://blog.csdn.net/xiaoxiao123jun/article/details/76605928.
- llrraa2010. 深度学习TensorFlow:Object_Detection_API图像视频物体识别API在Windows7上的配置[EB/OL]. https://blog.csdn.net/llrraa2010/article/details/79361291.
- Google, Inc. TensorFlow[EB/OL]. https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md.
- URL-team. 目标检测笔记二:Object Detection API 小白实践指南[EB/OL]. https://www.urlteam.org/2017/09/%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B%E7%AC%94%E8%AE%B0%E4%BA%8C%EF%BC%9Atensorflow%E5%B0%8F%E7%99%BD%E5%AE%9E%E8%B7%B5/.
- 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.