首页 > 解决方案 > Matterport Mask R-CNN - 较大图像的不可预测的损失值和奇怪的检测结果

问题描述

我无法使用 Mask R-CNN 获得可行的结果,我似乎无法确定原因。我正在使用相当有限的大型灰度图像(2560 x 2160)数据集(13 幅图像),其中检测目标非常小(平均面积为 26 像素)。我在我的数据中运行了 inspect_nucleus_data.ipynb 并验证了掩码和图像被正确解释。我还按照 wiki 指南 ( https://github.com/matterport/Mask_RCNN/wiki ) 将我的图像作为灰度图像读取和处理,而不仅仅是将它们转换为 RGB。这是标记了检测目标的图像之一。

注释图像

在训练期间,损失值非常不可预测,在 1 和 2 之间反弹,而从未达到稳定下降,看起来似乎完全收敛。我现在正在使用这些配置值;它们是我在解决 OOM 错误时能想到的最好的:

Configurations:
BACKBONE                       resnet101
BACKBONE_STRIDES               [4, 8, 16, 32, 64]
BATCH_SIZE                     1
BBOX_STD_DEV                   [0.1 0.1 0.2 0.2]
COMPUTE_BACKBONE_SHAPE         None
DETECTION_MAX_INSTANCES        450
DETECTION_MIN_CONFIDENCE       0
DETECTION_NMS_THRESHOLD        0.3
FPN_CLASSIF_FC_LAYERS_SIZE     1024
GPU_COUNT                      1
GRADIENT_CLIP_NORM             5.0
IMAGES_PER_GPU                 1
IMAGE_CHANNEL_COUNT            1
IMAGE_MAX_DIM                  1024
IMAGE_META_SIZE                14
IMAGE_MIN_DIM                  1024
IMAGE_MIN_SCALE                0
IMAGE_RESIZE_MODE              square
IMAGE_SHAPE                    [1024 1024    1]
LEARNING_MOMENTUM              0.9
LEARNING_RATE                  0.001
LOSS_WEIGHTS                   {'mrcnn_class_loss': 1.0, 'mrcnn_bbox_loss': 1.0,     'rpn_bbox_loss': 1.0, 'mrcnn_mask_loss': 1.0, 'rpn_class_loss': 1.0}
MASK_POOL_SIZE                 14
MASK_SHAPE                     [28, 28]
MAX_GT_INSTANCES               450
MEAN_PIXEL                     [16.49]
MINI_MASK_SHAPE                (56, 56)
NAME                           nucleus
NUM_CLASSES                    2
POOL_SIZE                      7
POST_NMS_ROIS_INFERENCE        1000
POST_NMS_ROIS_TRAINING         2000
PRE_NMS_LIMIT                  6000
ROI_POSITIVE_RATIO             0.33
RPN_ANCHOR_RATIOS              [0.5, 1, 2]
RPN_ANCHOR_SCALES              (2, 4, 8, 16, 32)
RPN_ANCHOR_STRIDE              1
RPN_BBOX_STD_DEV               [0.1 0.1 0.2 0.2]
RPN_NMS_THRESHOLD              0.9
RPN_TRAIN_ANCHORS_PER_IMAGE    512
STEPS_PER_EPOCH                11
TOP_DOWN_PYRAMID_SIZE          256
TRAIN_BN                       False
TRAIN_ROIS_PER_IMAGE           256
USE_MINI_MASK                  True
USE_RPN_ROIS                   True
VALIDATION_STEPS               1
WEIGHT_DECAY                   0.0001

我正在所有层次上进行训练。我得到的输出通常看起来像这样,在奇怪的地方发现了类似网格的检测,但似乎从来没有准确地识别出一个核。我添加了红色方块只是为了突出一个非常明显的被遗漏的原子核簇:

输出图像

这是这些相同检测的二进制掩码,因此您可以看到它们的形状: 输出掩码

任何人都可以阐明这里可能出了什么问题吗?

标签: tensorflowimage-processingmachine-learningkerasconv-neural-network

解决方案


当您将训练图像尺寸调整一半时,一些信息会丢失。Square 也使用大量内存。所以你可能想用crop代替。在方形模式下,您将拥有 512*512,而不是 1024*1024。由于边界框超出范围,您可能会遇到 NAN,在这种情况下,您需要对数据馈送进行一些调整。

您想关闭迷你面具,因为这会影响您的准确性。使用裁剪模式应该有助于大量记忆。所以你不应该担心。


推荐阅读