当前位置: 代码迷 >> 综合 >> faster rcnn 如何训练voc2007数据集 及出现的小问题
  详细解决方案

faster rcnn 如何训练voc2007数据集 及出现的小问题

热度:53   发布时间:2023-11-18 15:30:33.0
首先下载voc数据集
可以用终端来下载 也可以用百度云
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tarwget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tarwget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar

然后解压一下:
下载后是三个文件夹
tar -xvf VOCtrainval_06-Nov-2007.tartar -xvf VOCtest_06-Nov-2007.tartar -xvf VOCdevkit_08-Jun-2007.tar
解压成一个文件夹下 需要把这几个文件夹弄一起哈。
将VOCdevkit2007文件夹放到py-faster-rcnn的data目录
注意文件解压的文件夹要命名为
VOCdevkit2007
建立文件夹的连接:数据读取的连接:
cd 到自的py_faster下/dataln -s $VOCdevkit VOCdevkit2007

不然会出现:
路径错误的哦
就是 multiprocessing的错误等。。。。。。
path does not exist:...................

模型和深度搜索的模型我都是百度云预先下载好的
也可以终端用自带程序下载:
./data/scripts/fetch_imagenet_models.sh
为啥要下载,应该是与训练的models
可以了解相关知识哦
以及各个文件 看scripts就可以 需要啥下啥;


然后就开始准备训练voc了
cd $py-faster_rcnn 的目录下./experiments/scripts/faster_rcnn_alt_opt.sh [GPU_ID] [NET] [--set ...]
这里
的gpu选着0 net可以选着vgg16 ZF, VGG_CNN_M_1024, VGG16 等 set是选择pascall_voc
例如
./experiments/scripts/faster_rcnn_end2end.sh 0 VGG16 pascal_voc
中间我遇到了文件夹路径错误
安装multi..
以及Attributerro:‘module’object has no atrribute 'text_format'的错误
这是因为caffe安装 protbuf的问题
可以用以下解决:
sudo pip install protobuf ==2.5.0
以及在FASTER根目录找到.lib/fast_rcnn/train.py 程序中增加
import goole.protobuf.text_format
解决
跑起来

借用知乎上的一幅图了解一下faster rcnn的构成及每一次训练时需要做的删除上一次运行的文件。


以上图是整体介绍faster 运行时的修改
但是我在运行时出现了一些
问题1
TypeError: 'numpy.float64' object cannot be interpreted as an index
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)
我遇到的最头疼的是下面关于numpy的问题
网上说的各种降低版本问题,可能是因为版本问题导致不实用,所以我使用修改里面的
将其强制转为int型处理:

/home/y312/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
修改为:
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
这里我的lib/roi_data_layer/minibatch.py
如果出现其他它文件中类似的错误,可以打开相应的文件夹去查看相关行的代码。。。
显示出现了in_get_bbox_regression_labls 可能是边框计算的类型问题,所以我也将期改为
以上的方式。里面的改法跟上面的方法是一样的。

  相关解决方案