【问题标题】:Deep Net with keras for image segmentation带有 keras 的 Deep Net 用于图像分割
【发布时间】:2017-06-22 10:13:20
【问题描述】:

我对深度学习很陌生;我想在大小为 (256, 256, 3) 的图像块上训练一个网络,以预测像素级分割的三个标签。首先,我想提供一个卷积层:

model = Sequential()
model.add(Convolution2d(32, 16, 16, input_shape=(3, 256, 256))

到目前为止的模型输出是一个具有 32 个通道的图像。现在,我想添加一个密集层,将所有这 32 个通道合并为三个通道,每个通道预测一个像素的类别概率。

我该怎么做?

【问题讨论】:

  • 你的 y 的格式是什么?它们有什么形状?
  • (256,256);每个像素都有一个标签分配

标签: keras image-segmentation


【解决方案1】:

将 32 个通道合并回 3 个通道的最简单方法是添加另一个卷积,这次使用三个过滤器(我将过滤器大小任意设置为 1x1):

model = Sequential()
model.add(Convolution2d(32, 16, 16, input_shape=(3, 256, 256))
model.add(Convolution2d(3, 1, 1))

然后最后添加一个激活函数进行分割

model.add(Activation("tanh"))

如果你想用activation参数(任意选择为tanh),你也可以一次全部添加

model = Sequential()
model.add(Convolution2d(32, 16, 16, input_shape=(3, 256, 256))
model.add(Convolution2d(3, 1, 1,activation="tanh"))

https://keras.io/layers/convolutional/

【讨论】:

    【解决方案2】:

    你必须在卷积层和密集层之间使用 flatten:

    model = Sequential()
    model.add(Convolution2d(32, 16, 16, input_shape=(3, 256, 256))
    # Do not forget to add an activation layer after your convolution layer, so here.
    
    model.add(Flatten())
    
    model.add(Dense(3))
    model.add(Activation("sigmoid")) # whatever activation you want.
    

    【讨论】:

      猜你喜欢
      • 2019-01-09
      • 2018-05-18
      • 2020-10-12
      • 2019-08-06
      • 2021-03-08
      • 2018-10-19
      • 2018-05-12
      • 1970-01-01
      • 2022-08-04
      相关资源
      最近更新 更多