Ubuntu16.04+cuda8.0+cudnn5.1配置faster-rcnn的方法以及训练自己的数据出现的问题
2017-05-22 20:38
851 查看
最近在用教研室的服务器跑faster rcnn, 服务器配置太高了ubuntu 16.04 + cuda8.0 + cudnn 5.1, 但是原本的faster rcnn 点击打开链接已经是两年前的了,所以会出现不兼容的问题.网上查了一个大神的,就用了这个点击打开链接博客里面的caffe.以为万事大吉,但是在训练自己的数据的时候还是出现一些问题,我把它们总结起来。(具体的怎么训练数据我之后的博客应该会讲,先把出现的问题讲了把).
Pro 1: 使用上述的caffe,会解决与cudnn不兼容的问题.
下面的问题是在$py-faster-rcnn的根目录下执行:./experiments/scripts/faster_rcnn_alt_opt.sh 0 VGG16 pascal_voc 出现的,主要参考大神点击打开链接
Pro 2: AttributeError: 'module' object has no attribute ‘text_format'
解决方法:在/home/xxx/py-faster-rcnn/lib/fast_rcnn/train.py的头文件导入部分加上 :import google.protobuf.text_format
Pro3: TypeError: 'numpy.float64' object cannot be interpreted as an index
这个问题是因为我用的numpy版本太高了, 最简单的方法是直接改版本 sudo python2.7 /usr/local/bin/pip install -U numpy==1.11.0;但是我不是管理员,没有办法更改,修改如下几个地方的code:
1) /home/xxx/py-faster-rcnn/lib/roi_data_layer/minibatch.py
将第26行:fg_rois_per_image = np.round(cfg.TRAIN.FG_FRACTION * rois_per_image)
改为:fg_rois_per_image = np.round(cfg.TRAIN.FG_FRACTION * rois_per_image).astype(np.int)
2) /home/xxx/py-faster-rcnn/lib/datasets/ds_utils.py
将第12行:hashes = np.round(boxes * scale).dot(v)
改为:hashes = np.round(boxes * scale).dot(v).astype(np.int)
3) /home/xxx/py-faster-rcnn/lib/fast_rcnn/test.py
将第129行: hashes = np.round(blobs['rois'] * cfg.DEDUP_BOXES).dot(v)
改为: hashes = np.round(blobs['rois'] * cfg.DEDUP_BOXES).dot(v).astype(np.int)
4) /home/xxx/py-faster-rcnn/lib/rpn/proposal_target_layer.py
将第60行:fg_rois_per_image = np.round(cfg.TRAIN.FG_FRACTION * rois_per_image)
改为:fg_rois_per_image = np.round(cfg.TRAIN.FG_FRACTION * rois_per_image).astype(np.int)
Pro4:TypeError: slice indices must be integers or None or have an __index__ method
还是numpy的版本问题:
修改 /home/lzx/py-faster-rcnn/lib/rpn/proposal_target_layer.py,转到123行:
这里的ind,start,end都是 numpy.int 类型,这种类型的数据不能作为索引,所以必须对其进行强制类型转换,转化结果如下:
Pro6:# 终端提示 AssertionError
File "/py-faster-rcnn/tools/../lib/datasets/imdb.py", line 112, in append_flipped_images
assert (boxes[:, 2] >= boxes[:, 0]).all()
AssertionError
解决方法:这些问题的根源都是faster-rcnn系列在处理生成pascal voc数据集时,为了使像素以0为起点,每个bbox的左上右下坐标都减1,如果你的数据里有坐标为0,一般是x1或y1,这时x1 = 0-1 = 65535.
打开$faster-rcnn-root/lib/datasets/imdb.py
之后,我训练好了我的model,但是我将测试的图片放在demo里面跑,根本就没有图片显示,而显示这样的结果:
Pro5: 运行demo,图片不显示问题
Loaded network /home/xxx/py-faster-rcnn/data/faster_rcnn_models/VGG16_faster_rcnn_final.caffemodel
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demo for data/demo/image.jpg
Detection took 0.067s for 300 object proposals
这里一定要注意!!!已经不是caffe和cudnn不兼容的问题了,这是因为识别率太低,把deom.py中的不断更改CONF_THRES,就能显示图片了,只是效果会很差。
Pro 1: 使用上述的caffe,会解决与cudnn不兼容的问题.
下面的问题是在$py-faster-rcnn的根目录下执行:./experiments/scripts/faster_rcnn_alt_opt.sh 0 VGG16 pascal_voc 出现的,主要参考大神点击打开链接
Pro 2: AttributeError: 'module' object has no attribute ‘text_format'
解决方法:在/home/xxx/py-faster-rcnn/lib/fast_rcnn/train.py的头文件导入部分加上 :import google.protobuf.text_format
Pro3: TypeError: 'numpy.float64' object cannot be interpreted as an index
这个问题是因为我用的numpy版本太高了, 最简单的方法是直接改版本 sudo python2.7 /usr/local/bin/pip install -U numpy==1.11.0;但是我不是管理员,没有办法更改,修改如下几个地方的code:
1) /home/xxx/py-faster-rcnn/lib/roi_data_layer/minibatch.py
将第26行:fg_rois_per_image = np.round(cfg.TRAIN.FG_FRACTION * rois_per_image)
改为:fg_rois_per_image = np.round(cfg.TRAIN.FG_FRACTION * rois_per_image).astype(np.int)
2) /home/xxx/py-faster-rcnn/lib/datasets/ds_utils.py
将第12行:hashes = np.round(boxes * scale).dot(v)
改为:hashes = np.round(boxes * scale).dot(v).astype(np.int)
3) /home/xxx/py-faster-rcnn/lib/fast_rcnn/test.py
将第129行: hashes = np.round(blobs['rois'] * cfg.DEDUP_BOXES).dot(v)
改为: hashes = np.round(blobs['rois'] * cfg.DEDUP_BOXES).dot(v).astype(np.int)
4) /home/xxx/py-faster-rcnn/lib/rpn/proposal_target_layer.py
将第60行:fg_rois_per_image = np.round(cfg.TRAIN.FG_FRACTION * rois_per_image)
改为:fg_rois_per_image = np.round(cfg.TRAIN.FG_FRACTION * rois_per_image).astype(np.int)
Pro4:TypeError: slice indices must be integers or None or have an __index__ method
还是numpy的版本问题:
修改 /home/lzx/py-faster-rcnn/lib/rpn/proposal_target_layer.py,转到123行:
for ind in inds: cls = clss[ind] start = 4 * cls end = start + 4 bbox_targets[ind, start:end] = bbox_target_data[ind, 1:] bbox_inside_weights[ind, start:end] = cfg.TRAIN.BBOX_INSIDE_WEIGHTS return bbox_targets, bbox_inside_weights
这里的ind,start,end都是 numpy.int 类型,这种类型的数据不能作为索引,所以必须对其进行强制类型转换,转化结果如下:
for ind in inds: ind = int(ind) cls = clss[ind] start = int(4 * cls) end = int(start + 4) bbox_targets[ind, start:end] = bbox_target_data[ind, 1:] bbox_inside_weights[ind, start:end] = cfg.TRAIN.BBOX_INSIDE_WEIGHTS return bbox_targets, bbox_inside_weights
Pro6:# 终端提示 AssertionError
File "/py-faster-rcnn/tools/../lib/datasets/imdb.py", line 112, in append_flipped_images
assert (boxes[:, 2] >= boxes[:, 0]).all()
AssertionError
解决方法:这些问题的根源都是faster-rcnn系列在处理生成pascal voc数据集时,为了使像素以0为起点,每个bbox的左上右下坐标都减1,如果你的数据里有坐标为0,一般是x1或y1,这时x1 = 0-1 = 65535.
打开$faster-rcnn-root/lib/datasets/imdb.py
oldx1 = boxes[:, 0].copy() oldx2 = boxes[:, 2].copy() boxes[:, 0] = widths[i] - oldx2 - 1 boxes[:, 2] = widths[i] - oldx1 - 1 assert (boxes[:, 2] >= boxes[:, 0]).all()改为:
oldx1 = boxes[:, 0].copy() oldx2 = boxes[:, 2].copy() boxes[:, 0] = widths[i] - oldx2 - 1 boxes[:, 2] = widths[i] - oldx1 - 1 for b in range(len(boxes)): if boxes[b][2]< boxes[b][0]: boxes[b][0] = 0 assert (boxes[:, 2] >= boxes[:, 0]).all()并且打开:$faster-rcnn-root/lib/datasets/pascal.py(这一步很重要!!)将:
x1 = float(bbox.find('xmin').text) - 1 y1 = float(bbox.find('ymin').text) - 1 x2 = float(bbox.find('xmax').text) - 1 y2 = float(bbox.find('ymax').text) - 1改为:
x1 = float(bbox.find('xmin').text) y1 = float(bbox.find('ymin').text) x2 = float(bbox.find('xmax').text) y2 = float(bbox.find('ymax').text)
之后,我训练好了我的model,但是我将测试的图片放在demo里面跑,根本就没有图片显示,而显示这样的结果:
Pro5: 运行demo,图片不显示问题
Loaded network /home/xxx/py-faster-rcnn/data/faster_rcnn_models/VGG16_faster_rcnn_final.caffemodel
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demo for data/demo/image.jpg
Detection took 0.067s for 300 object proposals
这里一定要注意!!!已经不是caffe和cudnn不兼容的问题了,这是因为识别率太低,把deom.py中的不断更改CONF_THRES,就能显示图片了,只是效果会很差。
相关文章推荐
- Ubuntu16.04+GTX1070+cuda8.0+cudnn5.1配置faster-rcnn的方法
- Ubuntu16.04 caffe py-faster-rcnn安装以及训练自己的数据
- Ubuntu16.04+cuda8.0+cudnnV5.1配置faster-rcnn的方法
- [深度学习] RCNNs系列(1) Ubuntu下Faster RCNN配置及训练和测试自己的数据方法
- ubuntu16.04 cuda8.0 cudnn6.0 faster-rcnn配置
- ubutnu16.04+caffe+cuda8.0+NVIDIA TX2环境下,Faster RCNN 训练中的一些问题及解决办法
- Ubuntu16.04+CUDA8.0+OpenCV3.1+python+caffe+faster-rcnn环境配置
- faster-rcnn安装配置,训练自己的数据,MATLAB,Ubuntu14
- Ubuntu16.04 cuda8.0+cudnn5.1 opencv3.3 caffe-faster-rcnn 服务器配置
- Ubuntu16.04 cuda8.0+cudnn5.1 opencv3.3 caffe-faster-rcnn
- faster-rcnn训练和测试自己的数据(VGG/ResNet)以及遇到的问题
- [深度学习] RCNNs系列(1) Ubuntu下Faster RCNN配置及训练和测试自己的数据方法
- faster rcnn训练自己地数据时遇到地问题
- faster rcnn训练自己地数据时遇到地问题
- faster rcnn训练自己地数据时遇到地问题
- Caffe+CUDA8.0+CuDNNv5.1+OpenCV3.1+Ubuntu14.04 配置参考文献 以及 常见编译问题总结
- ubuntu16.04配置caffe+cuda8.0+cudnn5.1
- faster rcnn训练自己地数据时遇到地问题
- DL开源框架Caffe | 目标检测Faster-rcnn训练自己数据问题整理
- Ubuntu 16 下配置Faster_rcnn 訓練自己的数据