训练可以参考这篇文章:
http://blog.csdn.net/samylee/article/details/52860038
继fasterrcnn后,又一个pva-fasterrcnn的配置教程,希望可以帮助大家。若不能配置成功,请与我联系,邮箱:[email protected]
注意:有些复制的终端命令如果不能在终端运行,请注意英文全角半角问题,可以将命令输入终端,无须复制粘贴命令
第一部分:下载并编译pvanet
1、终端输入:
Git clone --recursive https://github.com/sanghoon/pva-faster-rcnn.git
2、建立Cython模块:
这个地方很容易错,缺什么下载什么就能解决啦,出现问题的小伙伴可以来群里讨论哈,很多问题我当时没有记录,所以来群里讨论讨论就行啦,群号你懂得
cd $pva-faster-rcnn/lib
make –j16(为啥用16相信大家也很清楚啦)
3、编译caffe及pycaffe
cd $pva-faster-rcnn/caffe-fast-rcnn
cp Makefile.config.example Makefile.config
修改Makefile.config文件:
去掉cudnn前面#(我用cudnn4.0,仅供参考)
Opencv_version不用注释(我用的2.4.10,3.0没有测试过,所以不用注释)
BLAS=atlas(我测试的库,mkl没有试过)(sudo apt-get install libatlas-base-dev即可安装)
去掉with_python_layer前面的#,注意一定要去掉,不然无法训练数据(测试的时候不需要)
修改后保存退出
make –j16
make pycaffe –j16
第二部分:下载预训练模型(外网真心慢啊)
为小伙伴们提供百度网盘下载链接:
链接:http://pan.baidu.com/s/1kVRRPDd 密码:1cdt
1、打开文件将test.model放入$pva-faster-rcnn/models/pvanet/full/这个目录下
2、将test(1).model重命名为test.model放入$pva-faster-rcnn/models/pvanet/comp/目录下
其他的模型我就没有去试验啦,后续有时间就会更新这些模型的训练方法的
第三部分:下载voc07数据
打开终端(任何目录)输入:
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
解压(严格按照此顺序):
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar
将生成的VOCdevkit文件夹更名为VOCdevkit2007移动至$pva-faster-rcnn/data/目录下面
第四部分:voc07测试预训练模型
终端输入:
cd $pva-faster-rcnn
1、full/test.model测试:
./tools/test_net.py --gpu 0 --def models/pvanet/full/test.pt --net models/pvanet/full/test.model --cfg models/pvanet/cfgs/submit_160715.yml
2、Comp/test.model测试:
./tools/test_net.py --gpu 0 --def models/pvanet/comp/test.pt --net models/pvanet/comp/test.model --cfg models/pvanet/cfgs/submit_160715.yml
此测试会得到系列类别的AP值
第五部分:预训练model训练并测试voc07数据
终端输入:
1、训练:
cd $pva-faster-rcnn
./tools/train_net.py --gpu 0 --solver models/pvanet/example_finetune/solver.prototxt --weights models/pvanet/full/test.model –iters 100000 --cfg models/pvanet/cfgs/train.yml –imdb voc_2007_trainval(其他参数默认)
训练结果会在pva根目录生成output文件夹,模型就在里面
2、测试:
./tools/test_net.py --gpu 0 --def models/pvanet/example_finetune/test.prototxt --net output/faster_rcnn_pavnet/voc_2007_trainval/pvanet_frcnn_iter_100000.caffemodel --cfg models/pvanet/cfgs/submit_160715.yml(其他参数默认)
第六部分:预训练model训练并测试自己数据
1、数据制作:
还记得fasterrcnn数据如何制作的吗?参考博客http://blog.csdn.NET/samylee/article/details/51201744
Tips:参考voc07的数据格式,我们可发现,生成的数据最后只需保留Annotations、ImageSets和JPEGImages三个文件夹即可,ImageSets/Main文件中用到的只有trainval.txt和test.txt这两个文件(数据分布:trainval=train+val,all_data=trainval+test),多类别如果增加负样本或模糊样本可以考虑1、0及-1操作(其中1表示有目标,0表示模糊目标,-1表示没有目标)
数据集制作完成后将这三个文件夹复制至一个文件夹(命名为VOC2007)当中,再移动至$pva-faster-rcnn/data/VOCdevkit2007中,替换原来的VOC2007
2、类别设置:(有几类设置几类,类似fasterrcnn,我的数据集为1类行人数据)
1)打开文件/models/pvanet/example_finetune/train.prototxt
num_classes:2(开头处)(我实验时一类)
2)修改lib/datasets/pascal_voc.py
self._classes = ('__background__', # always index 0
'people')(只有这一类)
3)修改lib/datasets/imdb.py
数据整理,在一行代码为 boxes[:, 2] = widths[i] - oldx1 - 1 下加入代码:if boxes[b][2]< boxes[b][0]:
boxes[b][0] = 0
4)修改完pascal_voc.py和imdb.py后进入lib/datasets目录下删除原来的pascal_voc.pyc和imdb.pyc文件。
5)删除:"/home/~~~~~/pva-faster-rcnn/data/cache/voc_2007_trainval_gt_roidb.pkl"
3、训练数据:
cd $pva-faster-rcnn
./tools/train_net.py --gpu 0 --solver models/pvanet/example_finetune/solver.prototxt --weights models/pvanet/full/test.model –iters 100000 --cfg models/pvanet/cfgs/train.yml –imdb voc_2007_trainval(其他参数默认)
4、测试模型:
./tools/test_net.py --gpu 0 --def models/pvanet/example_finetune/test.prototxt --net output/faster_rcnn_pavnet/voc_2007_trainval/pvanet_frcnn_iter_100000.caffemodel --cfg models/pvanet/cfgs/submit_160715.yml(其他参数默认)
1、
出现错误operands could not be broadcast together with shapes (84,4096) (12,1)
出现这种错误主要是train.prototxt 中的文件类别没改过来,可以下载原来的VOC的num_classes进行修改
2、
Cannot copy param 0 weights from layer 'cls_score'; shape mismatch.
Source param shape is 21 4096 (86016); target param shape is 3 4096
(12288). To learn this layer's parameters from scratch rather than
copying from a saved net, rename the layer.
这个错误要把对应的层rename。比如把cls_score改为cls_score1