您好,任务是在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 作为输出

根据问题中的陈述,我们可以得出结论:
dropOut. 该技术通过随机消除神经网络中的链接来帮助减少过度拟合。很难给出进一步的建议,因为整个集合是不可见的,任务的最终目标也不清楚。
在您的网络配置中,将一张格式为 (120, 420, 1) 的图像输入到输入中。网络的输出是一张相同格式的图像 (120, 420, 1)。因此,为了教这个(或另一个)网络从图像构建掩码,有必要训练网络,即驱动大量对(图片,掩码)通过它。然后,在成功训练的情况下,网络将能够从图片中获取掩码。如果只是将图片驱动到未经训练的网络中,那么输出当然是无稽之谈。掩模情况下的损失函数可以完全像mse一样作为标准的损失函数。在目标检测的情况下,以边界框而不是掩码为目标更有效,因此,使用框回归损失。