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
- pvanet训练并检测自己的数据_流程_报错_总结
- pvanet训练自己的数据过程记录
- pvanet 修改demo.py来载入自己训练过的模型并显示检测结果
- Detection:pvanet训练自己数据
- ^_^
- ^_^
- ^_^
- ^_^
- *_&
- ...!@~....!@#....+_#%.
- ^_^
- ^_^
- ^_^
- ^_^
- *_*
- ^_^
- ^_^
- ~~~~(>_<)~~~~
- JavaScript中本地对象、内置对象和宿主对象
- C语言程序设计(7)
- Spring IOC 透彻解析
- Java之JSON数据
- 算法细节系列(14):动态规划之字符串处理
- pvanet训练并检测自己的数据_流程_报错_总结
- C语言程序设计(8)
- Python中的元类(__metaclass__)
- 手机常用分页加载loading框
- IOS开源项目--通讯录(附源代码)
- Java多线程(二)
- Android Studio 中 layout 目录分类
- Ubuntu14.04下配置PHP7.0+Apache2+Mysql5.7
- ffmpeg实战教程(三)音频PCM采样为AAC,视频YUV编码为H264/HEVC