【问题标题】:What kernel size do I have to use when there are 3 channels on Conv2D Keras Layer?当 Conv2D Keras 层上有 3 个通道时,我必须使用什么内核大小?
【发布时间】:2020-05-13 10:22:26
【问题描述】:

我刚刚开始使用 Tensorflow 和 Keras 学习 CNN。

我找到了这两个实现,第一个是针对 U-NET 的,第二个是针对 VGG-16 的:

def unet(pretrained_weights = None,input_size = (256,256,1)):
    inputs = Input(input_size)
    conv1 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(inputs)

VGG-16:

def vgg16(input_size = (224,224,3)):
    model = Sequential()

    model.add(Conv2D(input_shape=input_size,filters=64,kernel_size=(3,3),padding="same", activation="relu"))
    model.add(Conv2D(filters=64,kernel_size=(3,3),padding="same", activation="relu"))

我注意到在 U-NET 上,他们使用的是单通道图像,而 VGG-16 使用的是三通道图像。而且,U-NET Conv2D 层使用kernel_size 等于 3,而在 VGG-16 上,等于 (3, 3)。

单通道图像使用 1D 内核大小和三通道图像使用 2D 内核大小之间有什么关系吗?

【问题讨论】:

    标签: tensorflow keras computer-vision conv-neural-network


    【解决方案1】:

    U-Net 用于语义分割,而 VGG-16 用于分类。

    通常,我们使用 U-Net 预测单通道掩码。输入可以有 3 个通道,但为了生成二进制掩码,我们几乎总是使用单通道输出。

    另一方面,VGG 只是给出输入图像的 softmax 概率,我们用它来决定图像属于哪个类别。

    最后,在 keras/tensorflow 中,kernel_size = 3kernel_size = (3,3) 是等价的。对于 Conv2D,你总是需要二维内核,当我们传递像 3 这样的整数时,keras 使用相同维度的内核,这意味着内核的宽度和高度为 3。

    所以,kernel_size 与通道无关,内核与空间维度(图像/特征图的宽度和高度)有关,过滤器的数量与通道有关。

    相关论文和代码:

    https://arxiv.org/pdf/1411.4038.pdf(vgg16分段)

    https://courses.cs.washington.edu/courses/cse576/17sp/notes/Sachin_Talk.pdf(编码-解码器架构)

    https://arxiv.org/pdf/1511.00561.pdf(vgg16 编码-解码器(+跳过连接)用于分段)

    https://github.com/divamgupta/image-segmentation-keras

    https://github.com/upul/Semantic_Segmentation

    【讨论】:

    • 对不起,我可以多点赞。非常感谢您的时间和支持。
    • 乐于助人,添加了相关论文和github repos。
    • 您可以使用 Upsampling2D 或/和 Conv2DTranspose(与传统 vgg-16 中的 max pooling 和 conv2d 相比)tensorflow.org/api_docs/python/tf/keras/layers/Conv2DTranspose 它们都将帮助您从缩减的特征图中获得初始图像形状。通常,解码器将具有与普通 vgg16 完全相反的流程,解码器将从特征形状(7 x 7,2048 个通道/过滤器)重建原始图像形状(比如说 224 x 224,3 个通道)。跨度>
    • 这是一个您可以使用的紧密实现:github.com/YPDLsegmentation/VGG16-UNet/blob/master/model.py
    • 非常感谢,您实际上是在拯救我的生命(嗯,不是字面意思)。
    猜你喜欢
    • 2018-03-10
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 2019-05-31
    • 2016-08-18
    • 2017-07-23
    相关资源
    最近更新 更多