Deep learning Keras:扩大层输出斑点空间尺寸的方法

Deep learning Keras:扩大层输出斑点空间尺寸的方法,deep-learning,keras,conv-neural-network,convolution,keras-layer,Deep Learning,Keras,Conv Neural Network,Convolution,Keras Layer,什么方法可以用来扩大图层输出blob的空间尺寸 据我从文件中所见,它可以是: 它是否仅在2的幂次下进行上采样? 而且它分别按大小[0]和大小[1]重复数据的行和列。而且它不是很聪明 它可以有任意的输出大小(不是2 upsapple的幂) 如何实现任意维数的双线性插值(可以使用固定权重进行转置?) 还有什么其他选项可以用来扩大图层输出blob的空间尺寸 在上展开,下面是在Keras Lambda层中包裹TensorFlow双线性图像大小调整的完整示例: 从keras导入顺序 从keras.la

什么方法可以用来扩大图层输出blob的空间尺寸

据我从文件中所见,它可以是:

  • 它是否仅在2的幂次下进行上采样? 而且它
    分别按大小[0]和大小[1]重复数据的行和列。
    而且它不是很聪明
  • 它可以有任意的输出大小(不是2 upsapple的幂)

    如何实现任意维数的双线性插值(可以使用固定权重进行转置?)

    还有什么其他选项可以用来扩大图层输出blob的空间尺寸

  • 在上展开,下面是在Keras Lambda层中包裹TensorFlow双线性图像大小调整的完整示例:

    从keras导入顺序
    从keras.layers导入Lambda
    导入tensorflow作为tf
    def上采样2双线性(大小):
    返回Lambda(Lambda x:tf.image.resize_双线性(x,size,align_corners=True))
    上取样器=顺序([UpSampling2DBilinear((256,256)))
    upsampled=upsampler.predict(图像)
    
    请注意,
    align_corners=True
    可获得与其他双线性图像上采样算法类似的性能,如中所述

    要使用双三次重采样,请创建一个新函数并将
    resize\u bilinear
    替换为
    resize\u bicubic

    对于更类似于UpSampling2D的实现,请尝试以下操作:

    从keras导入后端为K
    def上采样2双线性(步幅,**kwargs):
    def层(x):
    输入形状=K.int形状(x)
    输出形状=(步幅*输入形状[1],步幅*输入形状[2])
    返回tf.image.resize\u双线性(x,输出\u形状,对齐\u角=真)
    返回Lambda(层,**kwargs)
    

    这将允许您使用
    name='
    input\u shape='
    Lamba
    的其他参数,并允许您传递整数步长/上采样量。

    您可以定义自己的调整层:

    from keras import layers, models, utils
    from keras.backend import tf as ktf
    
    class Interp(layers.Layer):
        def __init__(self, new_size, **kwargs):
            self.new_size = new_size
            super(Interp, self).__init__(**kwargs)
    
        def build(self, input_shape):
            super(Interp, self).build(input_shape)
    
        def call(self, inputs, **kwargs):
            new_height, new_width = self.new_size
            resized = ktf.image.resize_images(inputs, [new_height, new_width],
                                              align_corners=True)
            return resized
    
        def compute_output_shape(self, input_shape):
            return tuple([None, self.new_size[0], self.new_size[1], input_shape[3]])
    
        def get_config(self):
            config = super(Interp, self).get_config()
            config['new_size'] = self.new_size
            return config
    

    没有内置的方法可以做到这一点。如果您使用的是TF后端,您可以使用它并将其包装在Keras Lambda层中。Zeropadding呢?