matlab下训练faster rcnn出现的错误

 

一、出现的问题

1、错误使用 containers.Map/values,此容器中不存在指定的键。出错 roidb_from_voc>attach_proposals (line 172)

gt_classes = class_to_id.values({voc_rec.objects(valid_objects).class})

答:你标注的目标种类与datasets/VOCdevkit2007/VOCcode/VOC2007/VOCiniy.m中指定的目标种类不匹配。比如你只在VOCinit.m中写了一个目标类型标签‘car',但你标记结果Annotations/中某个.xml中不小心标注两种对象object如'car'和'person’。这样机会报错,解决方法是重新标记那个.xml对应的图片,去掉多余的目标种类。

 

2、错误使用 proposal_prepare_image_roidb>scale_rois (line 110),两个输入数组的非单一维度必须相互匹配。

 

答:可能有如下原因:

①一是要识别的是plane并且标注的xml文件中目标名称也是plane,但VOCinit.m中写的目标类型标签是‘car',两者不匹配所以出问题,将VOCinit.m中的label改为'plane'即可;

②二是图片有问题,不是指.jpg或.png图片格式的问题,而是指图片本身存在问题。我是原因是:图片尺寸有问题,一般要求500*375或375*500,例如标准VOC数据集中基本都是这两种大小或者接近这两种大小的图片。我从百度图片上拷贝下来的图片尺寸千差万别,没有对尺寸进行修正直接训练,所以出错。

③可能是Annotations/中的xml文件文字格式有问题,我开始使用labelImg标注训练没问题,后来因为需要对xml文件内容做一定修改,就编写了一个matlab程序对所有的xml批量修改,然后就出错了。原因是修改后:紧凑型xml变为常规型,是的读取时多了几个空格节点。具体表现如下:

1°、xml开头多了一个xml声明格式语句:<?xml version="1.0" encoding="utf-8"?>;

2°、因为上述1中开头的格式设置,修改后的xml每行之间的空格也变大了。

4。有可能是因为缓存没有清理干净,imdb下和output都要清理

错误详细如下:

错误使用 proposal_prepare_image_roidb>scale_rois (line 110)
两个输入数组的非单一维度必须相互匹配。
 

出错proposal_prepare_image_roidb>@(x,y)compute_targets(conf,scale_rois(gt_rois,im_size,y),gt_labels,x,image_roidb_cell{i},y) (line 61)
           compute_targets(conf, scale_rois(gt_rois, im_size, y), gt_labels,  x, image_roidb_cell{i}, y), ...


出错 proposal_prepare_image_roidb>append_bbox_regression_targets (line 53)
    parfor i = 1:num_images


出错 proposal_prepare_image_roidb (line 43)
    [image_roidb, bbox_means, bbox_stds] = append_bbox_regression_targets(conf, image_roidb, bbox_means, bbox_stds);


出错 proposal_train (line 77)
                            = proposal_prepare_image_roidb(conf, opts.imdb_train, opts.roidb_train);


出错 Faster_RCNN_Train.do_proposal_train (line 7)
    model_stage.output_model_file = proposal_train(conf, dataset.imdb_train, dataset.roidb_train, ...


出错 script_faster_rcnn_VOC2007_ZF (line 45)
model.stage1_rpn            = Faster_RCNN_Train.do_proposal_train(conf_proposal, dataset, model.stage1_rpn, opts.do_val);

3.

错误使用 caffe_
glog check error, please check log and clear mex

出错 caffe.Net/forward_prefilled (line 109)
      caffe_('net_forward', self.hNet_self);

出错 caffe.Net/forward (line 142)
      self.forward_prefilled();

出错 fast_rcnn_test>check_gpu_memory (line 208)
        caffe_net.forward(net_inputs);

出错 fast_rcnn_test (line 67)
        max_rois_num_in_gpu = check_gpu_memory(conf, caffe_net);

出错 Faster_RCNN_Train.do_fast_rcnn_test (line 6)
    mAP                         = fast_rcnn_test(conf, imdb, roidb, ...

出错 script_faster_rcnn_VOC2007_VGG16 (line 78)
opts.final_mAP              = Faster_RCNN_Train.do_fast_rcnn_test(conf_fast_rcnn, model.stage2_fast_rcnn, dataset.imdb_test, dataset.roidb_test);

1、显存不足,需要改小batchsize

2、model里面的prototxt文件没有改好

3、如果在final test阶段出现这个问题,应该还是显存不足的问题,因为里面有一句话:出错 fast_rcnn_test>check_gpu_memory (line 208)

我的1080跑zf网络没有问题但是跑vgg16就算batchsize改小了也会报错。考虑可不可以final test阶段用cpu来跑,但是不知道从哪里改

二、.如何检查标签中的错误

1.格式有问题

删掉所有文件中utf8那一行(第一行):sed -i‘(匹配的字符串)’*.xml

2.标签有问题

把所有的标签都找出来:grep '<name>' *.xml >> serach.txt

用vim删除掉正确的标签 例如::g/ofo/d

那么剩下的标签就是错误标签

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章