pvanet训练并检测自己的数据_流程_报错_总结

来源:互联网 发布:淘宝能买哪些虚拟产品 编辑:程序博客网 时间:2024/06/05 02:59

1.训练数据的准备

VOC2007数据格式,和faster-rcnn数据一样,数据集组织结构和制作参见:[训练样本制作](http://blog.csdn.net/burning_keyboard/article/details/71055557)准备好了VOC2007格式的数据集后,可以把VOC2007文件夹和testimg文件夹一起放在sample文件夹。(testimg,sample自己根据需要命名)进入pvanet/data, 给sample文件夹创建超链接,起名为‘VOCdevkit2007’:
cd pvanet/dataln -s  '/home/cvrsg/RzWu/sample' VOCdevkit2007

2.修改网络参数

我的网络结构文件路径是:/home/wurui/pvamsNET/pvanetWRZ/pvanet/models/pvanet/example_train_384这里有3个文件要修改:[1]solver.prototxt:学习率,使用的网络文件,没特殊要求可以不改啦。[2]train.prototxt: 4 处修改(1)ctrl + f : 'num_classes' 。一共2处类别数修改。(2)cls_score 层:     inner_product_param {       num_output: 5 // 改成目标类别数(背景也算一类,要 +1 !)(3)bbox_pred 层:    inner_product_param {       num_output: 20 // 改成 类别数 × 4[3]test.prototxt: 2 处修改  就是train.prototxt里cls_score层和bbox_pred层一样的修改方法。

3.lib/datasets/pascal_voc.py

 这里要先删除pascal_voc.pyc文件,否则会直接运行二进制的.pyc文件。 在pascal_voc.py里修改类别的名称。

4.删除已经存在的ROI

在 data/cache 目录下删除 .pkl文件。如果之前自己成功训练过pvanet,这里会生成.pkl保存ROI,下次再训练其他检测任务时,会因为ROI不匹配出现一些关于RPN和ROI的报错。例如:
overlaps = entry['max_overlaps']KeyError: 'max_overlaps'
roidb[i]['image']=imdb.image_path_at(i) IndexError:list index out of rang

5.检测脚本修改

修改一下类别名。另外这里提供一个好用的检测脚本pva_demon.py(师兄送的)链接: https://pan.baidu.com/s/1i48ojqd 密码: 577u[ps] 师兄的博客:[ Ubuntu上编译Caffe和拓展应用(faster-rcnn, pvanet)的错误及解决方案 ](http://blog.csdn.net/tingyue_/article/details/53432071)[ 关于pvanet中original model和test model的理解 ](http://blog.csdn.net/tingyue_/article/details/53545027)

6.训练/检测命令

./tools/train_net.py --gpu 0 --solver models/pvanet/example_train_384/solver.prototxt --cfg models/pvanet/cfgs/train.yml --weights models/pvanet/imagenet/original.model --iters 100000 --imdb voc_2007_trainval
./tools/pva_demo.py --net /home/cvrsg/pvanet/output/faster_rcnn_pvanet/voc_2007_trainval/pvanet_frcnn_384_iter_32000.caffemodel --cfg models/pvanet/cfgs/submit_160715.yml --def /home/cvrsg/pvanet/models/pvanet/example_train_384/test.prototxt
[1]训练得到的model保存在../output/faster_rcnn_pvanet/voc_2007_trainval[2]train.yml文件里指定了一些训练时rpn相关参数。这里的参数有些和下面的config.py参数重复,.yml中的参数设置是优先的。[3]在pvanet/lib/fast_rcnn/config.py 中是训练策略相关参数的设置:   例如:   # Iterations between snapshots   __C.TRAIN.SNAPSHOT_ITERS = 1000 // 每隔多少次迭代保存model   例如:   # Use horizontally-flipped images during training?         __C.TRAIN.USE_FLIPPED = True  // 水平镜像数据增强 **[注意]这里的 __C.TRAIN.USE_FLIPPED = True 最好设置成 TRUE      否则可能会报错:**
Traceback (most recent call last):  File "./tools/train_net.py", line 112, in <module>    max_iters=args.max_iters)  File "/home/cvrsg/wrz_graduate_project/pvanet/tools/../lib/fast_rcnn/train.py", line 158, in train_net    pretrained_model=pretrained_model)  File "/home/cvrsg/wrz_graduate_project/pvanet/tools/../lib/fast_rcnn/train.py", line 54, in __init__    self.solver.net.layers[0].set_roidb(roidb)  File "/home/cvrsg/wrz_graduate_project/pvanet/tools/../lib/roi_data_layer/layer.py", line 68, in set_roidb    self._shuffle_roidb_inds()  File "/home/cvrsg/wrz_graduate_project/pvanet/tools/../lib/roi_data_layer/layer.py", line 35, in _shuffle_roidb_inds    inds = np.reshape(inds, (-1, 2))  File "/usr/local/lib/python2.7/dist-packages/numpy/core/fromnumeric.py", line 225, in reshape    return reshape(newshape, order=order)ValueError: total size of new array must be unchanged
 这是因为训练图片数量要求是偶数,而你训练数据图片是奇数,开了镜像就一定是偶数输入啦。当然你也可以删掉一张训练图片解决这个问题。

7.关于网络报错Debug

 pvanet是python脚本调用c++源码,在调试tools里和lib里的py脚本时可以修改了即时debug。lib里修改.py后要删掉相应的.pyc文件。 但是修改caffe-fast-rcnn里的py脚本时(调试rpn这部分),修改.py文件后,cd到caffe-fast-rcnn,make一下才会生效。

8.关于gpu加速的设置

使用cpu计算,使用gpu计算,使用cudnn加速,都在Makefile.config文件里。开启cudnn比起只用cuda计算速度快了不止5倍。
# cuDNN acceleration switch (uncomment to build with cuDNN).# USE_CUDNN := 1# CPU-only switch (uncomment to build without GPU support).# CPU_ONLY := 1
修改好makefile,然后:
cd caffe-fast-rcnnmake cleanmake allmake pycaffe

9.编译时遇见的报错(Makefile)

[1]找不到 hdf5:   在 makefile.config 中添加路径
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serialLIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial
[2]找不到 libprotobuf.so.9 先在计算机里 ctrl+f 找一下 libprotobuf.so,或者在命令行执行: locate libprotobuf.so看看是否安装了libprotobuf,看看版本对不对。如果都没问题,在makefile.config里添加已经安装的libprotobuf.so的路径。ps:这个protobuf安装的路径问题参考一下别的博客吧:(http://blog.csdn.net/csqingchen/article/details/50669725)
1 0
原创粉丝点击