最近由于想需要,转战机器学习。在看了很多机器学习理论的情况下,想实战一把,于是在网上翻阅了大量的blog和GitHub之后,心中也大概有了一些眉目。
再次先感谢前人的贡献,使他们的经验总结,才让我逐步实现我的自己的物体识别模型的搭建!现在也是相当于做一点笔记,让后面的小伙伴们如果遇到我一样的问题的时候能够有一些参考,能够快速从坑里爬出来。
首先是环境的搭建,参考Tensorflow object detection API 搭建属于自己的物体识别模型(1)——环境搭建与测试。博主写得相当详细,但是在我自己的实践过程中还是发生了一系列的bug。现在总结如下:
1.Protobuf安装与配置
在这个阶段运行代码:
protoc object_detection/protos/*.proto --python_out=.
报错:object_detection/protos/*.proto: No such file or directory
解决方法:
这是因为目前的protoc3.6有Bug,换成3.4就好了:https://github.com/google/protobuf/releases/tag/v3.4.0
2.测试API
在models/research/文件夹下面运行命令行:
python object_detection/builders/model_builder_test.py
1)如果报错:ModuleNotFoundError: No module named 'object_detection'
解决方法:
在research目录下运行命令行:
python setup.py install
2)如果报错:ImportError: No module named nets
解决方法:
将reserch/slim目录下的BUILD删除,然后在该文件夹下运行里面的setup.py:
python setup.py install
3)测试自带的案例,如果报错:
解决方法:在命令行下面使用pip安装jupyter:
pip install jupyter
然后环境搭建里面的问题基本上没有了,接下来就是测试自带的案例。这里有一点小tips,就是在jupyter notebook中,如果代码已经运行了,那么代码左边的 In[1]中显示的是数字,还没呀运行的代码显示的是:In[*]。这样可以查看自己代码的运行的状态。
前面搭建好自己的环境之后,我就迫不及待的要准备自己的数据,建立自己的模型并训练。此时还是参照上一个博主的博客:(更新视频教程)Tensorflow object detection API 搭建属于自己的物体识别模型(2)——训练并使用自己的模型,具体步骤参考博主的博客和视频:【教程】Tensorflow object detection API 打造属于自己的物体检测模型(深度学习实战),我就不在一一重复。我此处只是指出我在实战过程中所遇到的问题以及我的解决方法:
1、将*.csv文件转换成*.record文件
此处我遇到了一个坑,那就是我的图片的标签不是自己打的,从而导致我在运行generate_tfrecord过程中一直报错。报错如下,供大家参考:
tensorflow.python.framework.errors_impl.NotFoundError:NewRandomAccessFile failed to Create/Open: G:\Tensorflow\models\research\object_detection\images\1.jpg : ϵͳ\udcd5Ҳ\udcbb\udcb5\udcbdָ\udcb6\udca8\udcb5\udcc4\udcceļ\udcfe\udca1\udca3; No such file or directory
然后我查阅了大量的博客,仍然没有找到有效的解决办法,最后我试着把之前的train文件夹下面的图片重新打了一次标签,然后再将xml转换成csv,然后再次运行generate_tfrecord程序,然后就成功了。现在我也不是很明白为什么别人打得标签我不能直接使用。所以我提醒大家还是自己动手打打标签,不要像我这样最后花了更多的时间在debug上面。
2、训练模型
然后后面的过程一直按照着视频也还是很顺利,直到执行命令:
python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/ssd_mobilenet_v1_coco.config
我发现我的object detection文件夹下面没有train.py脚本,然后执行上面的命令肯定是要报错的了。最后我发现train.py在legacy文件下面,然后我就把legacy下面的脚本全拷到了object detection文件下面,再次执行上面的命令,成功了:
3、Tensorboard来可视化训练过程
在object detection下面执行命令行:
tensorboard --logdir='training'
能够正确执行,但是生成的:http://ADAM:6006 复制在浏览器无法正确打开,前几天也遇到了这个问题。
解决方法:
执行命令行:
tensorboard --logdir='training' --host=127.0.0.1
然后生成的链接时:http://127.0.0.1:6006,现在就能正常显示了。如下图:
以上是loss函数的图像,loss函数总体是一个衰减的趋势,逐渐收敛。所以模型是没有什么问题的,但是总体误差还很高,所以现在就等着让它慢慢训练。
下面是模型网络:
以上就是我在开始我的机器学习之旅上遇到的一些坑,以后后面的小伙伴如果遇到一样的坑能够有个借鉴,快速爬坑!
参考文献:https://github.com/datitran/raccoon_dataset
https://stackoverflow.com/questions/50113683/modulenotfounderror-no-module-named-object-detection