您好,任务是在python中使用Keras,theano,使用完全卷积神经网络搜索对象。当前使用以下网络配置:
def create_encoding_layers():
kernel = 3
filter_size = 64
pad = 1
pool_size = 2
return [
ZeroPadding2D(padding=(pad,pad)),
Convolution2D(filter_size, kernel, kernel, border_mode='valid'),
BatchNormalization(),
Activation('relu'),
MaxPooling2D(pool_size=(pool_size, pool_size)),
ZeroPadding2D(padding=(pad,pad)),
Convolution2D(32, kernel, kernel, border_mode='valid'),
BatchNormalization(),
Activation('relu'),
MaxPooling2D(pool_size=(pool_size, pool_size)),
ZeroPadding2D(padding=(pad,pad)),
Convolution2D(32, kernel, kernel, border_mode='valid'),
BatchNormalization(),
Activation('relu'),
MaxPooling2D(pool_size=(pool_size, pool_size)),
ZeroPadding2D(padding=(pad,pad)),
Convolution2D(64, kernel, kernel, border_mode='valid'),
BatchNormalization(),
Activation('relu'),
]
def create_decoding_layers():
kernel = 3
filter_size = 64
pad = 1
pool_size = 2
return[
ZeroPadding2D(padding=(pad,pad)),
Convolution2D(64, kernel, kernel, border_mode='valid'),
BatchNormalization(),
UpSampling2D(size=(pool_size,pool_size)),
ZeroPadding2D(padding=(pad,pad)),
Convolution2D(32, kernel, kernel, border_mode='valid'),
BatchNormalization(),
UpSampling2D(size=(pool_size,pool_size)),
ZeroPadding2D(padding=(pad,pad)),
Convolution2D(32, kernel, kernel, border_mode='valid'),
BatchNormalization(),
UpSampling2D(size=(pool_size,pool_size)),
ZeroPadding2D(padding=(pad,pad)),
Convolution2D(filter_size, kernel, kernel, border_mode='valid'),
BatchNormalization(),
ZeroPadding2D(padding=(0,pad+1)),
]
segnet_basic = models.Sequential()
segnet_basic.add(Layer(input_shape=(120, 420, 1)))
segnet_basic.encoding_layers = create_encoding_layers()
for l in segnet_basic.encoding_layers:
segnet_basic.add(l)
segnet_basic.decoding_layers = create_decoding_layers()
for l in segnet_basic.decoding_layers:
segnet_basic.add(l)
segnet_basic.add(Convolution2D(1, 1, 1, border_mode='valid',))
segnet_basic.summary()
segnet_basic.add(Reshape((120,420,1)))
输入是一张照片和一个蒙版(对象所在的区域用 1 填充,其余区域用 0 填充)。据我了解,在输出中我们应该得到相同的掩码。尝试了不同的损失函数。输出是废话。实际上问题是:为了在输出中获得类似的掩码,需要纠正什么?使用哪个损失函数和优化器?图片显示了一个已经训练好的网络的工作示例。image - 输入网络的图像,label - 预期结果,我乘以 255 作为输出,result - 网络产生的结果。我还乘以 255 作为输出
