首页 文章

使用卷积层训练的权重用于不同的图像大小

提问于
浏览
0

我想使用vgg-16的前三个卷积层来生成特征映射 . 但我想用它来改变图像大小,即不像224x224或256x256的imagenet大小 . 如480x640或任何其他randome图像尺寸 .

由于卷积层与图像空间大小无关,如何使用权重来改变图像大小?那么我们如何使用预先训练的权重vgg-16到前三个卷积层 . 如果可能,请告诉我 .

2 回答

  • 0

    As convolution layer are independent of image size

    实际上它比那更复杂 . 内核本身与图像大小无关,因为我们将其应用于每个像素 . 事实上,这些内核的培训可以重复使用 .

    但这意味着输出大小取决于图像大小,因为这是每个输入像素从图层中馈出的节点数 . 因此,即使特征提取器是独立的,密集层也不适合您的图像 .

    因此,您需要预处理图像以适应第一层的大小,或者从头开始重新训练密集层 .

    当人们谈论“转移学习”时,人们在分割方面已经做了几十年 . 您可以重用最佳特征提取器,然后训练具有这些特征的专用模型 .

  • 0

    很容易重用卷积层的变量 . 首先,定义包含卷积图层的图形,然后恢复它们的值 . 以下是伪代码

    def network(your_inputs):
        filter1 = tf.get_variable(shape=[filter_size, filter_size, in_channel, out_channel], name="vgg16/layer1")
        features = tf.nn.conv2d(your_inputs, filter1, strides=[1,1,1,1])
        filter2 = tf.get_variable(shape=[filter_size, filter_size, in_channel, out_channel], name="vgg16/layer2")
        features = tf.nn.conv2d(features, filter2, strides=[1,1,1,1])
    
        restore_filters = [filter1, filter2]
    
        ...
    
        return logits, restore_filters 
    
    outputs, restore_filters = network(inputs)
    saver = tf.train.Saver(restore_filters)
    saver.restore(sess, "vgg-checkpoint.ckpt")
    

    当然,您必须将过滤器大小与VGG网络匹配 . 当变量名与检查点文件的名称不同时,可以将Saver与字典参数一起使用 .

相关问题