最近由于实验室的要求,我做了基于Faster-RCNN网络的一些检测技术研究,对于我来说,完全是一个小白,这段时间在做实验的过程中学到了很多东西,整理了一下一路走来的实验步骤.,欢迎大家一起探讨~
(一)安装TensorFlow
博客链接:
(1)https://blog.csdn.net/u010099080/article/details/53418159
(2)https://blog.csdn.net/darlingwood2013/article/details/60322258
按照这两个博客讲的内容,应该安装TensorFlow没有什么问题,我的python版本是3.5.2,TensorFlow有两个版本:我的显卡不支持 CUDA,因此安装的cpu版本,后面做实验发现虽然速度比较慢,不过也能跑出结果。
(二)下载源码
https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5
我在这个链接下载了源码,他的README写的非常详细,就跟着它的过程一步一步的做
(1)Install tensorflow, preferably GPU version. Follow instructions. If you do not install GPU version, you need to comment out all the GPUcalls inside code and replace them with relavent CPU ones.
它上面说的最好使用GPU版本,如果能安装上GPU版本的当然最好,如果安装的CPU版本的也没关系,能跑得通,不用担心。
(2)Installpython packages (cython, python-opencv, easydict)
这些包可以通过命令行pip install安装,也可以在pycharm里面安装,我两个方法都尝试了,都可以成功。
(3)Go to ./data/coco/PythonAPI,运行上面写的代码
这里我最开始出现了问题,因为我装的是vs2013,后来我重新安装了vs2015,编译运行setup.py就没有出现报错的情况。
(三)准备数据集
(1)首先我用labelIImg标注了自己的图片,注意标注的时候一定不要用大写,不要有空格,建议全部用小写字母和数字,因为我最开始用的大写字母,导致后面运行train.py的时候出现了keyerror的报错情况,标注的时候要注意,不确定的可以选择不标,不要勉强的认为它是哪个类别就标上去,后面训练的时候对准确度有影响。
标完一张图片会生成一个xml文件,选择保存,图片和xml是一一对应的,标完之后可以确认一下是否有错误,手动标注的一般来说不会出现问题。
(2)然后就是把自己的数据做成VOC2007的格式
https://blog.csdn.net/u011574296/article/details/78953681
https://blog.csdn.net/u011574296/article/details/72956446
对照第一篇博客对自己的数据集进行整理和修改,第二篇博客我参考了他的批量命名代码。
Annotations---用于存放使用labelimage生成的xml 文件
ImageSets---用于存放trian.txt 、test.txt 、trainval.txt、 val.txt
JPEGImages—你所有的jpg格式的图片
博客上面有详细的修改txt的代码,我是按照他的代码来的,修改了一下参数和路径
(四)修改源码
(1)Pascal_VOC.py里面修改自己的标注的类别
(2)第一次训练的时候我对config.py里面的数据也进行了修改,小试牛刀的时候我把batch_size改成64,,max_iters改成1000,snapshot_iterations改成500,每500次输出一次模型,后来第一次训练成功之后,再慢慢把数据改大。后来我把batch_size改成256,,max_iters改成40000,snapshot_iterations改成5000。
(五)运行train.py
运行train.py,可以用命令行也可以用pycharm,都可以得到结果。第一次1000的运行了2个小时左右,运行40000就用了比较久的时间,不过好在没有错误,运行成功。
(六)运行demo.py
在运行train.py没有错误之后,模型已经输出了
运行之前记得改demo.py这里的代码,改成自己的类别
测试数据集改成自己的数据
然后运行demo.py,运行成功,无报错
然后会弹出类似于这种的框还有数字,证明得到了结果
(七)遇到问题
这个问题是最让我头痛的,连续困扰了我3天。我训练train.py的时候他会自动出现下图这样的情况,进入一个(pdb)的状态,
百思不得其解,在网上也查阅了一些资料也没发现什么问题,后来我看了一下代码
当fg_inds.size和bg_inds.size这两个值等于0,就会进入这个状态,我猜测是与框的大小有关,然后我重新对数据进行了标注,尽量避开一些特别小的框,但是修改了一轮之后还是出现这个问题。后来我发现我的图片大小是1280*1024,再看了人家跑成功的图片,大小都在500-600左右,所以我觉得应该是我标注的东西在图片中的比例大小不够,因此我针对我标注内容的位置,对图片进行了一个处理,把它处理成512*512的大小,这样标注的东西在图中的比例就变大了,我用的是matlab代码进行修改。
在修改了图片的尺寸之后,我再次运行train.py就没有出现任何错误。
欢迎大家一起探讨,有问题的地方请大家指出,谢谢~