用faster rcnn训练其他的数据集,实现特定的目的,如车辆检测、行人检测等。其它博客上有关于如何训练自己的数据集的介绍,都是做成VOC的格式,我觉得比较麻烦,于是我直接处理下载到的数据集,保存为mat文件,可以直接在matlab版的faster rcnn读入后处理。
我使用的是bmvc_2012的数据集,地址:http://ai.stanford.edu/~jkrause/ 。这是一个车辆的数据集,共有14类。用里面给的代码处理后可以得到每张图片的路径、类别、大小、bbox等属性,利用这些属性可以转换到faster rcnn 可以处理的格式。
matlab版的faster rcnn中主要利用 dataset 这个变量,后面训练过程中都依赖这个变量得到图片的各种属性:类别、路径、大小、roi等。把其他的数据集转化成dataset的格式就可以了。
dataset包括四个部分: imdb_train: {[1x1 struct]}、roidb_train: {[1x1 struct]}、imdb_test: [1x1 struct]、roidb_test: [1x1 struct],
imdb_train和imdb_test包括的内容如下 :
roidb_train和roidb_test包括的内容如下:
在源代码中,这几个部分是通过调用imdb_from_voc、roidb_from_voc两个函数得到的。改写这两个函数处理其他数据集,得到自己的 dataset 后保存,在训练时去掉下面两行,改成直接 load 保存的 dataset 。
(1)、需要修改fast rcnn 定义的prototxt文件,类别数改成自己数据集的类型数,以及相应输入数据的维度。(要改四个文件:zf、zf_fc6)。
(2)、处理过程中注意图片的路径,保证训练过程中可以找到图片。
(3)、现在只能训练,如果想把测试过程加进去,要修改 imdb_eval_voc 函数。