Simple Faster Rcnn 采坑实录(训练自己的数据集)

写在前面:在跑自己的数据集前非常有必要 先是用VOC数据集跑一遍,以证环境以及其他方面没有问题,这样训练自己的数据集时,可以只从这方面找问题。

参考了这位博主:链接

  • 将voc_dataset.py和vis_tool.py里面的VOC_BBOX_LABEL_NAMES类别替换成自己标签中类别名称,必须和xml文件里面的标签名字一致,否则会直接跳过这个样本。
  • 修改config.py中的config.py中的voc_data_dir路径,改成自己的路径。
  • 修改faster_rcnn_vgg16.py 中的n_fg_class参数值,来调整最后一层,改成自己标签的数量。
  • 修改trainer.py中self.roi_cm = ConfusionMeter(21) 将21改成自己标签中类别名+1。

然后我就报错了:ValueError: need at least one array to stack
具体信息:

File "\simple-faster-rcnn-pytorch-master\data\dataset.py", line 107, in getitem
ori_img, bbox, label, difficult = self.db.get_example(idx)
File "\simple-faster-rcnn-pytorch-master\data\voc_dataset.py", line 131, in get_example
bbox = np.stack(bbox).astype(np.float32)
File "", line 6, in stack
File "\simple-faster-rcnn-pytorch-master\venv\lib\site-packages\numpy\core\shape_base.py", line 423, in stack
raise ValueError('need at least one array to stack')
ValueError: need at least one array to stack

先说解决办法:

排查标签中的空标签,如果遇到空标签的话就会报错。

Simple Faster Rcnn 采坑实录(训练自己的数据集)_第1张图片可以在这个地方输出一下,idx号,最后卡在bug那里的就是有问题的。
但是需要注意的是!idx是一个匹配
我的输出是11,所以他出现问题的地方可能是11,111,211,311
再去 get_example里面打印输出日志,就可以定位到具体哪张图片了。
Simple Faster Rcnn 采坑实录(训练自己的数据集)_第2张图片

你可能感兴趣的:(FasterRcnn)