最近在接触TensorFlow物体检测相关的模型,采用的开源object_detection_model_zoo API。由于本人纯小白,因此在有教程的基础上依然遇到一些坑,现在把曲折的过程梳理一下,供和我一样的小白顺利跳坑。
该API包含了多个主要在COCO数据集上训练好的经典深度学习物体检测模型(也包括个别在Kitti, Open Images 和AVA v2.1数据集上训练的模型),用户可以直接调用继续fine_tuning自己的数据,或者重新训练自己的数据。不久前该API的模型又进行了更新,当前包含的模型和对应的mAP结果下图所示:
其中带有星号‘☆’标记的即7月末刚刚新增的模型(突然发现’ssd_resnet_50_fpn_coco ☆‘这个模型又快又好啊,忍不住试了一下,最后研究发现作者上传的模型有问题,到目前为止还没有更新,持续关注)。接下来把相关资料和遇到的坑(也许路过大神会觉得非常低级的问题,可是纯小白真心艰难)进行一下汇总。
TensorFlow Object Detection API的GitHub网址:
相关中文教程博客
https://www.urlteam.org/2017/09/%E7%9B%AEx%E6%A0%8
https://blog.csdn.net/RobinTomps/article/details/78115628
https://blog.csdn.net/chenmaolin88/article/details/79357263
https://blog.csdn.net/wangjian1204/article/details/79124018
API和相关教程资源找到以后,接下来即开始自己的Windows复现之路(Linux会相对简单一点),以上汇总博客中已经包含了主要的操作,但是综合下来比较混乱,大家可以先浏览一下博客内容,本渣渣把自己复现的通用流程进行归纳总结,不重复灌水已有内容,主要步骤简述如下:
- 安装好TensorFlow等相关依赖环境,现在比较方便的是先安装Anaconda,然后再安装TensorFlow,然后测试安装成功。这一步默认大家略过
- 下载TensorFlow Object Detection API,即把整个文件夹下载到本地即可,下载下来的应该是一个名为models-master的压缩包,解压到本地,这里我放到了个人E盘的新建文件夹TensorFlow里,并把API的文件名字改为model,即‘E:TensorFlowmodels’,这个没有什么要注意的,就是个人习惯。
- 安装protoc(※第一个坑※)。在Linux下直接编译Protobuf库即可,但是在Windows下没法直接pip安装,这个部分参照第一个推荐博客中的window 7下的protoc安装即可。我这里只将下载解压的protoc-3.4.0-win32中bin目录下的exe文件放到C:Windows目录下直接测试成功。注意注意,一定下载3.4.0版本的啊,至于为什么,下一步说。 (顺便解释一下,protoc是Protobuf 的编译器,Protobuf是谷歌开发的处理结构化数据的工具。如果有想进一步了解的可以翻看《TensorFlow 实战Google深度学习框架》一书2.1.1节)
- 放置好exe之后,就开始编译Protobuf,生产py文件。通过cmd进入到models/research/目录,然后执行以下命令:
protoc object_detection/protos/*.proto --python_out=.
这样你会在object_detection/protos文件夹下发现所有以‘.proto’结尾的文件都生成了对应的py文件。 这里解释一下刚刚上述中提到的为什么要下载protoc-3.4.0版本,如果是其他版 例如最新的3.6.1,肯能在执行编译命令后出现一下报错:‘object_detection/protos/*.proto: No such file or directory’,这个解决办法就是你需要一个一个去编译.proto文件,例如:
protoc object_detection/protos/ anchor_generator.proto --python_out=.
- 一个坑跳过,马上下一个(※第二个坑※)。这里直接说,首先cmd执行命令安装protobuf:pip install protobuf,然后在本机增加Python的环境变量,根据我的目录,添加的系统环境变量为‘PYTHONPATH’,‘E:TensorFlowmodelsresearch;E:TensorFlowmodelsresearchslim;’。
- 然后进行测试命令,看自己的API基本运行环境是否走通,cmd到research目录下运行:
python object_detection/builders/model_builder_test.py
如果不安装protobuf,会报没有google什么什么协议什么的;不配置PYTHON变量,执行命令的时候找不到object_detection文件夹,具体因为什么不再解释了,还有如果添加PYTHON变量之后还是报错,可以重启一下cmd,让环境设置生效。(这里确实是没有什么难度,但是对于刚上手的小白如我,python还不怎么会的,确实困惑了好久啊,还得会基础才行)
通过以上步骤,API已经部署好了,剩下的就是准备数据,利用API提供的代码进行训练测试了,具体包括:制作tfrecord训练、验证集,训练,验证,保存图模型、测试。
文件的执行对应的命令参数,通过推荐博客可以直接使用,推荐大家看一下每个执行文件内部的具体参数提示,可以直接了解每一个参数选项的作
其中制作数据集例如标准VOC 2007这样的可以直接利用‘object_detection/dataset_tools/’文件夹下的py文件直接制作,如果是自己的数据,可以根据推荐博客里的先将标签xml 文件制作csv,然后再制作tfrecord文件,博客里有详细代码,这里不再灌水搬迁。
训练和测试需要修改采用的对应模型的config文件,这里提示一点,config文件中的eval_config字段中有一个属性是metrics_set,模型的评估模型是”pascal_voc_metrics”,这个出来的结果是每一张图像的相关类别信息之类的,可以设置成metrics_set: “coco_detection_metrics”,采用coco测试标准的显示模式
最后给大家提供一个可以用迅雷直接下载的ImageNet2012物体检测数据集的博客链接
http://www.aqinet.cn/thread-53-1-1.html
OK,以上灌水完成,主要把个人在使用TensorFlow object_detection API中遇到的几个坑点重点说明了一下,仅供和我一样的刚刚接触深度学习和物体检测的小伙伴参考,这也是本人的第一篇博客,所以写的有点混乱,通过第一次博客也发现自己的技术栈基本为零,希望以后能够有所积累。感谢路过各位大神的包容,如有错误,感谢批评,祝大家每天有所成长!