Keras图像分割:单个像素的损失函数

时间:2018-04-13 08:33:49

标签: python tensorflow deep-learning keras image-segmentation

我的问题可能很容易解决,但我没有找到任何答案,也不知道如何实现,因为我对Keras和Tensorflow也很新。

问题:我使用了一个预训练的图像分割网(PSPNet,由Hengshuang Zhao等人2017),有人将权重从Caffe转换为Keras并使用Tensorflow后端(PSPNet-Keras-tensorflow)。

我想计算相对于权重的分类交叉熵损失函数的梯度,到目前为止并不是那么复杂,我可以解决。但问题是损失函数,因为我只想在预测的单个像素处丢失。

到目前为止,我失去整个图像的原因是:

weights = model.trainable_weights

gradients = model.optimizer.get_gradients(model.total_loss, weights) 
# model is compiled with categorical crossentropy

input_tensor = [model.inputs[0],  # input data
                model.sample_weights[0],  # how much to weight each sample by
                model.targets[0],  # labels
                keras.backend.learning_phase()  # train or test mode]

get_gradients = keras.backend.function(inputs=input_tensors, outputs=gradients)

如何调整此值以仅计算单个像素的损耗?

PS:之后我想迭代整个图像(~2百万像素),并为每个像素计算相对于权重的分类交叉熵损失的梯度。

感谢您提供任何帮助和建议。

1 个答案:

答案 0 :(得分:0)

我建议您创建一个具有不同损失函数的模型,该模型仅在您感兴趣的特定像素上进行评估。

编辑: 您使用的model.total_loss是整体损失。请查看\ keras \ engine \ training.py。你会在那里找到总损失的实际计算。尝试重现这些步骤,但您仍然需要一个不会减少空间维度的自定义丢失函数。我希望这对你来说已经足够了。