tensorflow版本 Faster RCNN训练自己的数据集
0.前言
因为我用的是tensorflow的环境,所以Rbg的官方代码我是没有用的,采用的是github上tensorflow实现的faster rcnn,网址为:https://github.com/endernewton/tf-faster-rcnn
这个版本主要也是参考faster rcnn的官网代码写的,和官方版本大同小异,很适合用tf的人。如果github上下不下来,可以下载我自己保存的版本:https://pan.baidu.com/s/1oAcbRT4
1.准备数据
- 首先建议把tf-faster-rcnn的代码下下来之后,根据作者github上的提示测试一下代码,确保是能跑通的;
- 因为我用的是vgg16作为feature extractor,所以先下载在imagenet上预训练好的vgg16模型,放在data/imagenet_weight 目录下;
- 在data 目录下新建自己的数据目录,以我的为例,建立了Dianli 目录,然后在Dianli 目录下新建annotations_cache 、results 、以及VOC2010 目录,如果觉得繁琐,可以直接下载我保存的tf-faster-rcnn代码,所有的目录基本都建好的,只需要根据自己的需求做相应的更改。VOC2010 这个目录之所以这么命名,主要是和代码里面相对应,名字以voc开头的话代码里面修改的地方会少很多。
- 在VOC2010 目录下面新建Annotations 、ImageSets 、JPEGImages 以及results 目录;
- 在Annotations 目录下存放所有的标签文件,文件的格式必须是和VOC类型一致的xml文件,因此,我们首先需要将自己的label文件转成VOC风格,这里不赘述了。
- 在ImageSets 目录下新建Layout 、Main 以及Segmentations 目录,其它两个目录不用管,只需要在Main 目录下存放train.txt 以及val.txt 即可。train.txt 和val.txt 里面存放的是训练和测试的图片名,只需要存放图片名的前缀就好。
- 在JPEGImages 目录下存放所有的训练和测试图像,最好是jpg格式的。
2.修改文件
文件的需要主要设计数据IO部分,网络定义和训练过程的文件都不需要修改。
1. 在lib/dataset/ 目录下新建以自己的数据集为名字的py文件,比如我的dianli.py,这个文件主要是定义自己的数据集类,用于文件IO以及mAP计算等等。主要修改self._classes 的类别名称,get_default_path 中自己数据集的路径,其他的基本不怎么改,可以对比我修改过的dianli.py文件以及作者的pascal_voc.py文件就知道哪些地方修改过了。
2. 修改lib/dataset/factory.py 文件,加入自己的数据集,参考我的代码中是怎么加入dianli数据集的;
3. 修改experiments/scripts 目录下的train_faster_rcnn.sh 以及test_faster_rcnn.sh ,加入自己数据集的训练和测试配置,可以参照已有的其他数据集的配置进行添加;
4. 修改tools/demo.py 里面的’CLASSES‘、’NETS’以及’DATASETS’变量为和自己的数据集相关,修改main函数里面测试图片名,即可利用训练好的模型测试。
3.训练及测试
模块编译(nms等),训练以及测试的流程见作者的github:https://github.com/endernewton/tf-faster-rcnn
