py-faster-rcnn遇到问题总结
1.AttributeError: 'module' object has no attribute 'text_format'
pb2.text_format.Merge(f.read(), self.solver_param) AttributeError: 'module' object has no attribute 'text_format'
经过google之后发现是protobuf的本版发生了变换,之前在配置caffe的时候手动安装了protbuf,版本是2.5.0,后来安装了tensorflow 我回忆了一下,protobuf的版本貌似是发生了变换。
所以解决办法:sudo pip install protobuf==2.5.0
刚才又发现一个新的解决方法:
在文件./lib/fast_rcnn/train.py增加一行import google.protobuf.text_format 即可解决问题
2.编译caffe出现错误:make: *** [.build_release/src/caffe/common.o] Error 1
这是因为当前版本的caffe的cudnn实现与系统所安装的cudnn的版本不一致引起的。
解决办法:
1.将./include/caffe/util/cudnn.hpp 换成最新版的caffe里的cudnn的实现,即相应的cudnn.hpp.
2. 将./include/caffe/layers里的,所有以cudnn开头的文件,例如cudnn_conv_layer.hpp。 都替换成最新版的caffe里的相应的同名文件。
3.将./src/caffe/layer里的,所有以cudnn开头的文件,例如cudnn_lrn_layer.cu,cudnn_pooling_layer.cpp,cudnn_sigmoid_layer.cu。
都替换成最新版的caffe里的相应的同名文件。
rbgirshick的py-faster-rcnn实现,因为其cudnn实现为旧版本的实现,所有出现了以上问题.
3.TypeError: 'numpy.float64' object cannot be interpreted as an index
这个是因为numpy在1.12弃用了浮点索引功能
解决方法就是替换下列文件:
(1)lib/roi_data_layer/minibatch.py :
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)lib/datasets/ds_utils.py line 12 : hashes = np.round(boxes * scale).dot(v) 替换为:
hashes = np.round(boxes * scale).dot(v).astype(np.int)
(3)lib/fast_rcnn/test.py line 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)lib/rpn/proposal_target_layer.py line 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)
4.TypeError: 'numpy.float64' object cannot be interpreted as an index
(1)py-faster-rcnn/lib/roi_data_layer下的minibatch.py文件转到172行:
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
改为:
for ind in inds:
ind = int(ind)
cls = clss[ind]
start = int(4 * cos)
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
(2)lib/rpn/proposal_target_layer.py 第126行:
start = int(start)
end = int(end)
第166行:
fg_rois_per_this_image = min(fg_rois_per_image, fg_inds.size)
下面加上一行:
fg_rois_per_this_image = int(fg_rois_per_this_image)