在做Mask RCNN测试图片的过程中遇到了太多问题 总结一下
1.Dataset数据集
源代码train_shapes.py中给的是ShapesDataset,实际上这是生成一个简单形状(正方形/三角形/原型)的数据集
我们需要将它修改成自己想要测试的数据集
个人建议根据自己的数据集命名,比如我是对于树木的检测,就将其命名为TreeDataset
我的修改方式是将训练文件coco.py中的CocoDataset改为TreeDataset,并创建一个test_shape.py作为测试文件,同时将class里面的方法都拿到test_shape.py中,后续可能会有用到
之后调用自己的TreeDataset数据集就行:
# Validation dataset
dataset_val = TreesDataset()
dataset_val.load_trees("验证集所在路径","val", year="2014", auto_download=False)
dataset_val.prepare()
2.加载ground truth
original_image, image_meta, gt_class_id, gt_bbox, gt_mask = modellib.load_image_gt(dataset_val, inference_config, image_id, use_mini_mask=False)
3.测试结果可视化
源码中已经给出了可视化的方法:
visualize.display_instances(original_image, r['rois'], r['masks'], r['class_ids'], class_names, r['scores'])
如果我们想要在测试图片上显示一些面积等数据,就可以在display_instances方法中添加修改一些代码
我是想显示一些面积数据,就从IoU计算的方法里拿了mask面积的计算方法
pre_mask1 = np.reshape(masks > .5, (-1, masks.shape[-1])).astype(np.float32)
pre_mask_area = np.sum(pre_mask1, axis=0)
这里有一个需要注意的地方,因为在test_shape.py中的ShapesConfig有一个IMAGE_MAX_DIM = 1280参数
这是将我们输入的测试图片缩放成1280,所以如果想要显示真实数据,要把数据按比例缩放回去