Tensorflow Objection_Detection API 使用心得
最近这个星期根据网上的一些TF教程,开始学着自己做hand_detection玩一下,但是捣鼓来捣鼓去。总是在TF安装包、Anaconda安装等问题上一直来回浪费时间。这篇文章主要是说一下博主玩这个API遇到的一些坑,以及如何一步步去解决,方便后人更快地入手,体验Objection_DetectionAPI。
Tensorflow安装
首先博主安装Tensorflow1.4-gpu
的版本,因为以前的教程基本多数都是1.0
版本,2.0
版本暂时教程没那么齐全,然后玩API没有那么方便,遇到坑也难以找到解决方法。
在确定了自己是安装TF的版本后,就是要下载Anaconda
。
Anaconda的安装
首先Anaconda
的好处在于可以使用虚拟环境env
,意味着你可以在其上面下载多个Python
的版本,3.5
、3.6
、3.7
等。然后进入不同的环境里面安装跟Python
版本对应的Tensorflow
版本。 这也就意味着你的电脑可以同时有TF1.0
、TF2.0
等版本。这就是强烈推荐用Anaconda
的原因,且安装各种Python库和包都极其方便。
下面说一下博主遇到的坑
- 博主的电脑是Win10,由于Anaconda Navigator总是出问题,不能正常打开,所以安装过好多个版本的
Anaconda
,最新的2020
版本也试过。但是会问题依旧存在。但是安装以前的旧版本就不会出现这个问题。可能是我的电脑兼容性问题,也可能是Anaconda往后没有做好系统兼容。后来就选用了Anaconda3 5.0.1
的老版本,可以正常打开Anaconda里面的Spyder、Navigator,且这个版本默认安装的Python
环境是3.6
,刚好可以对应我需要安装Tensorflow1.4-gpu
所需的Python
环境,对我来说不需要另外开辟虚拟环境。但是,你要根据你自己的TF版本对应好Python
环境去下载。 强烈建议安装Anaconda
用国内镜像,如清华,阿里云等下载,速度快得多。 - 安装
TF-GPU
版本网上有很多博主已经写了,而且教程详细,跟着安装即可,但是在pip install
时强烈推荐国内镜像源,否则容易出现安装失败的情况。
玩API碰到大坑
- 首先在安装好
TF-GPU
版本后,就是开始去尝试API,跟着网上博客去做目标检测,只要网上搜索Tensorflow目标检测API
就有很多博客教程。但是他们已经是1-2年前写的博客,在下载Tensorflow object detection API上,没有给到提醒。博主就是因为这样浪费了一个下午的时间,各种配置环境,调试。后来发现了最重要的点API需要对应TF版本下载 API需要对应TF版本下载 API需要对应TF版本下载。重要的事情说三遍。
当时博主直接在github下载最新的models
,它是对应最新版本的TF设计的。而以前就的版本在其官方github的branch
上可以找到。玩这个API的时候,必须下载跟自己TF版本对应的models
,否则会遇到很多问题。
当时最让我崩溃的还是官方的删库行为,我发现自己TF版本对应的tensorflow1.4.0
的models
居然被官方删库,删掉了一部分。幸好在github上搜索tensorflow1.4.0 models
发现有人之前fork
了,得以让博主可以安心地进行玩耍。 - 在下载好跟tf对应的
models
后面跟着网上的教程走都很流畅,如果遇到没有absl
的报错,直接下载pip install absl-py
的库即可完成。
Objection Detection API 总结
首先,label_map对应的 .pbtxt 文件里面的 id 可以是多个,相当于到后面检测的物体是有多个的。这是给检测物体定义标签。
其次在训练模型时需要配置的 .config文件中的num_class是类的数量,也就是检测物体种类的数量。
然后训练模型主要使用tf.record
文件和神经网络框架,也就是.config
配置文件对应的网络框架,官方github有很多神经网络框架,使用迁移学习可以加快训练速度,数据集主要是为了生成tf.record
文件用于训练,所以图片可以放在别的地方,最重要的是.record
文件。
其次,在配置文件路径时path
需要双斜杠不能单斜杠,例如:F:\\deep_learning\\models\\research\\object_detection\\hand_detection\\test_images
最后,在测试自己训练过模型的效果时,推荐用spyder编辑器去跑训练模型的测试效果,因为可以一目了然地查看状态变量和直接保存测试后的效果图片。pycharm需要搭配ipython的console
环境,博主懒得搭配,且jupyter notebook也可以运行测试,但是不直观和不方便。
- 神经网络一般都是迁移学习来加快训练过程,除非学术研究,通常用别人已经做好的神经网络,然后我们利用数据集转化成的
tf.record
文件进行训练模型。 - 模型训练结束后,训练模型就是
frozen_inference_graph.pb
文件,利用它来检测识别物体。