Mask-RCNN校验结果计算mAP值

       Mask-RCNN校验结果可以通过计算mAP值得到一个数值的衡量,在10张图片上计算平均值,增加更高的准确性。

一、 mAP值的计算

P:precision,即准确率;

R:recall,即 召回率。

PR曲线:即以precision和recall作为纵、横轴坐标的二维曲线。

AP值:Average Precision,即平均精确度。

mAP值:Mean Average Precision,即平均AP值;是对多个验证集个体求平均AP值。

二、Mask-RCNN计算mAP代码

Mask-RCNN计算mAP值时,会从logs文件中找到h5权重文件,然后用于测试。在train_shapes.ipynb文件后面加上以下代码:

train_shapes.ipynb代码下载地址:https://download.csdn.net/download/yql_617540298/10546011

(该代码是在Mask-RCNN原始train_shapes.ipynb代码基础上更改的,可以训练自己的数据集)

用Mask-RCNN训练自己的数据集遇到的问题可以查看之前的博客

地址如下:https://blog.csdn.net/yql_617540298/article/details/81078405

#mAP
# Compute VOC-Style mAP @ IoU=0.5
# Running on 10 images. Increase for better accuracy.
class InferenceConfig(ShapesConfig):
    GPU_COUNT = 1
    IMAGES_PER_GPU = 1

inference_config = InferenceConfig()

# Recreate the model in inference mode
model = modellib.MaskRCNN(mode="inference", 
                          config=inference_config,
                          model_dir=MODEL_DIR)

# Get path to saved weights
# Either set a specific path or find last trained weights
# model_path = os.path.join(ROOT_DIR, ".h5 file name here")
model_path = model.find_last()

# Load trained weights
print("Loading weights from ", model_path)
model.load_weights(model_path, by_name=True)

# Test on a random image
image_id = random.choice(dataset_val.image_ids)
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)

log("original_image", original_image)
log("image_meta", image_meta)
log("gt_class_id", gt_class_id)
log("gt_bbox", gt_bbox)
log("gt_mask", gt_mask)

visualize.display_instances1(original_image, gt_bbox, gt_mask, gt_class_id, 
                            dataset_train.class_names, figsize=(8, 8))

results = model.detect([original_image], verbose=1)

r = results[0]
visualize.display_instances1(original_image, r['rois'], r['masks'], r['class_ids'], 
                            dataset_val.class_names, r['scores'], ax=get_ax())

image_ids = np.random.choice(dataset_val.image_ids, 10)
APs = []
for image_id in image_ids:
    # Load image and ground truth data
    image, image_meta, gt_class_id, gt_bbox, gt_mask =\
        modellib.load_image_gt(dataset_val, inference_config,
                               image_id, use_mini_mask=False)
    molded_images = np.expand_dims(modellib.mold_image(image, inference_config), 0)
    # Run object detection
    results = model.detect([image], verbose=0)
    r = results[0]
    # Compute AP
    AP, precisions, recalls, overlaps =\
        utils.compute_ap(gt_bbox, gt_class_id, gt_mask,
                         r["rois"], r["class_ids"], r["scores"], r['masks'])
    APs.append(AP)
    
print("mAP: ", np.mean(APs))

三、结果显示

猜你喜欢

转载自blog.csdn.net/yql_617540298/article/details/81780850