【MaskRCNN】源码系列五:train的MASK

            mrcnn_mask = build_fpn_mask_graph(rois, mrcnn_feature_maps,
                                              input_image_meta,
                                              config.MASK_POOL_SIZE,
                                              config.NUM_CLASSES,
                                              train_bn=config.TRAIN_BN)

输入参数

rois:(1,200,4)这里的200包含有3部分,正样本、负样本和填补的0;

feature_maps:mrcnn_feature_maps = [P2, P3, P4, P5]

image_meta:请查看https://blog.csdn.net/u013066730/article/details/102501128,主要就是记录图片从原图像变化到输入网络的图像的各种变化参数;

pool_size:14;

num_classes:81;

train_bn:False。

def build_fpn_mask_graph(rois, feature_maps, image_meta,
                         pool_size, num_classes, train_bn=True):
    """Builds the computation graph of the mask head of Feature Pyramid Network.

    rois: [batch, num_rois, (y1, x1, y2, x2)] Proposal boxes in normalized
          coordinates.
    feature_maps: List of feature maps from different layers of the pyramid,
                  [P2, P3, P4, P5]. Each has a different resolution.
    image_meta: [batch, (meta data)] Image details. See compose_image_meta()
    pool_size: The width of the square feature map generated from ROI Pooling.
    num_classes: number of classes, which determines the depth of the results
    train_bn: Boolean. Train or freeze Batch Norm layers

    Returns: Masks [batch, num_rois, MASK_POOL_SIZE, MASK_POOL_SIZE, NUM_CLASSES]
    """
    # ROI Pooling
    # Shape: [batch, num_rois, MASK_POOL_SIZE, MASK_POOL_SIZE, channels]
    x = PyramidROIAlign([pool_size, pool_size],
                        name="roi_align_mask")([rois, image_meta] + feature_maps)

    # Conv layers
    x = KL.TimeDistributed(KL.Conv2D(256, (3, 3), padding="same"),
                           name="mrcnn_mask_conv1")(x)
    x = KL.TimeDistributed(BatchNorm(),
                           name='mrcnn_mask_bn1')(x, training=train_bn)
    x = KL.Activation('relu')(x)

    x = KL.TimeDistributed(KL.Conv2D(256, (3, 3), padding="same"),
                           name="mrcnn_mask_conv2")(x)
    x = KL.TimeDistributed(BatchNorm(),
                           name='mrcnn_mask_bn2')(x, training=train_bn)
    x = KL.Activation('relu')(x)

    x = KL.TimeDistributed(KL.Conv2D(256, (3, 3), padding="same"),
                           name="mrcnn_mask_conv3")(x)
    x = KL.TimeDistributed(BatchNorm(),
                           name='mrcnn_mask_bn3')(x, training=train_bn)
    x = KL.Activation('relu')(x)

    x = KL.TimeDistributed(KL.Conv2D(256, (3, 3), padding="same"),
                           name="mrcnn_mask_conv4")(x)
    x = KL.TimeDistributed(BatchNorm(),
                           name='mrcnn_mask_bn4')(x, training=train_bn)
    x = KL.Activation('relu')(x)

    x = KL.TimeDistributed(KL.Conv2DTranspose(256, (2, 2), strides=2, activation="relu"),
                           name="mrcnn_mask_deconv")(x)
    x = KL.TimeDistributed(KL.Conv2D(num_classes, (1, 1), strides=1, activation="sigmoid"),
                           name="mrcnn_mask")(x)
    return x

中间涉及pyramidroialign和timedistributed,可以参考https://blog.csdn.net/u013066730/article/details/102664978#PyramidROIAlign 

https://blog.csdn.net/u013066730/article/details/102664978#TimeDistributed

 input_shapeoutput_shape
PyramidROIAlign[rois, image_meta] + feature_maps(1,200,14,14,256)
TimeDistributed-Conv2D(k=3,same,i=256,o=256)(1,200,14,14,256)(1,200,14,14,256)
TimeDistributed-BN(1,200,14,14,256)(1,200,14,14,256)
Relu(1,200,14,14,256)(1,200,14,14,256)
TimeDistributed-Conv2D(k=3,same,i=256,o=256)(1,200,14,14,256)(1,200,14,14,256)
TimeDistributed-BN(1,200,14,14,256)(1,200,14,14,256)
Relu(1,200,14,14,256)(1,200,14,14,256)
TimeDistributed-Conv2D(k=3,same,i=256,o=256)(1,200,14,14,256)(1,200,14,14,256)
TimeDistributed-BN(1,200,14,14,256)(1,200,14,14,256)
Relu(1,200,14,14,256)(1,200,14,14,256)
TimeDistributed-Conv2D(k=3,same,i=256,o=256)(1,200,14,14,256)(1,200,14,14,256)
TimeDistributed-BN(1,200,14,14,256)(1,200,14,14,256)
Relu(1,200,14,14,256)(1,200,14,14,256)
TimeDistributed-Conv2DTranspose(k=2,s=2,i=256,o=256,relu)(1,200,14,14,256)(1,200,28,28,256)
TimeDistributed-Conv2D(k=1,s=1,i=256,o=81,sigmoid)(1,200,28,28,256)(1,200,28,28,81)

 最终返回的mrcnn_mask的形状为(1,200,28,28,81)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值