具有keras的Deep Net用于图像分割

时间:2017-02-05 11:13:42

标签: keras image-segmentation

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

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

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

我该怎么做?

2 个答案:

答案 0 :(得分:2)

将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"))

如果您想使用激活参数(任意选择为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/

答案 1 :(得分:1)

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

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.