resnet_v1.resnet_v1()

2022-09-04 21:14:04 浏览数 (1)

代码语言:javascript复制
def resnet_v1(inputs,
              blocks,
              num_classes=None,
              is_training=True,
              global_pool=True,
              output_stride=None,
              include_root_block=True,
              reuse=None,
              scope=None):
  with variable_scope.variable_scope(
      scope, 'resnet_v1', [inputs], reuse=reuse) as sc:
    end_points_collection = sc.original_name_scope   '_end_points'
    with arg_scope(
        [layers.conv2d, bottleneck, resnet_utils.stack_blocks_dense],
        outputs_collections=end_points_collection):
      with arg_scope([layers.batch_norm], is_training=is_training):
        net = inputs
        if include_root_block:
          if output_stride is not None:
            if output_stride % 4 != 0:
              raise ValueError('The output_stride needs to be a multiple of 4.')
            output_stride /= 4
          net = resnet_utils.conv2d_same(net, 64, 7, stride=2, scope='conv1')
          net = layers_lib.max_pool2d(net, [3, 3], stride=2, scope='pool1')
        net = resnet_utils.stack_blocks_dense(net, blocks, output_stride)
        if global_pool:
          # Global average pooling.
          net = math_ops.reduce_mean(net, [1, 2], name='pool5', keepdims=True)
        if num_classes is not None:
          net = layers.conv2d(
              net,
              num_classes, [1, 1],
              activation_fn=None,
              normalizer_fn=None,
              scope='logits')
        # Convert end_points_collection into a dictionary of end_points.
        end_points = utils.convert_collection_to_dict(end_points_collection)
        if num_classes is not None:
          end_points['predictions'] = layers_lib.softmax(
              net, scope='predictions')
        return net, end_points
resnet_v1.default_image_size = 224

生成器为v1 ResNet模型。该函数生成一系列ResNet v1模型。有关特定的模型实例化,请参见resnet_v1_*()方法,该方法通过选择产生不同深度的resnet的不同块实例化获得。Imagenet上的图像分类训练通常使用[224,224]输入,对于[1]中定义的、标称步长为32的ResNet,在最后一个ResNet块的输出处生成[7,7]feature map。然而,对于密集预测任务,我们建议使用空间维度为32 1的倍数的输入,例如[321,321]。在这种情况下,ResNet输出处的特征映射将具有空间形状[(height - 1) / output_stride 1, (width - 1) / output_stride 1]和与输入图像角完全对齐的角,这极大地促进了特征与图像的对齐。对于密集预测任务,ResNet需要在全卷积(FCN)模式下运行,global_pool需要设置为False。[1,2]中的ResNets都有公称stride= 32,在FCN模式下,一个很好的选择是使用output_stride=16,以便在较小的计算和内存开销下增加计算特性的密度,cf. http://arxiv.org/abs/1606.00915。

参数:

  • inputs:大小张量[batch, height_in, width_in,channels]。长度等于ResNet块数量的列表。每个元素都是一个resnet_utils。块对象,描述块中的单元
  • num_classes:用于分类任务的预测类的数量。如果没有,则返回logit层之前的特性
  • is_training: batch_norm层是否处于训练模式
  • global_pool:如果为真,则在计算对数之前执行全局平均池。图像分类设为真,预测密度设为假
  • output_stride:如果没有,那么输出将在标称网络步长处计算。如果output_stride不为None,则指定请求的输入与输出空间分辨率之比
  • include_root_block:如果为真,则包含初始卷积后的最大池,如果为假则排除它
  • reuse:是否应该重用网络及其变量。为了能够重用“范围”,必须给出
  • scope:可选variable_scope

返回:

  • net:一个大小为[batch, height_out, width_out, channels_out]的秩-4张量。如果global_pool是假的,那么与各自的height_in和width_in相比,height_out和width_out将减少一个output_stride因子,否则height_out和width_out都等于1。如果num_classes为None,则net是最后一个ResNet块的输出,可能在全局平均池之后。如果num_classes不是None, net包含pre-softmax激活。
  • end_points:从网络组件到相应激活的字典。

可能产生的异常:

  • ValueError: If the target output_stride is not valid.
代码语言:javascript复制
[1] Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun Deep Residual Learning for Image Recognition. arXiv:1512.03385
[2] Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun Identity Mappings in Deep Residual Networks. arXiv: 1603.05027

0 人点赞