我正在keras中建立CNN,用于电子显微镜图像中的对象标记作为轮廓。标记的轮廓占图像的一小部分。输出是一个掩码,其中有一个标记对象的轮廓。
我需要编写自己的损失函数。我的想法是首先在y_pred和y_test上应用高斯模糊。这样,轮廓的绝对重叠不需要被认为是真正的正面。
blurring_kernel = np.array(( 1, 1, 1, 1, 3, 1, 1, 1, 1 ), dtype = "float32").reshape((3, 3))
blurring_kernel /= blurring_kernel.sum()
def loss(y_true, y_pred):
#Apply Convolution bluring on y_true here
#Apply Convolution bluring on y_true here
y_true_f = K.flatten(y_true);
y_pred_f = K.flatten(y_pred);
intersection = K.sum(y_true_f * y_pred_f);
return -intersection / K.sum(y_true_f*y_true_f + y_pred_f*y_pred_f)
我从keras后端尝试了conv2d,但遇到了
ValueError: len(dilation_rate)=2 but should be 1
我还尝试将y_pred andy_test与numpy内核相乘,但这显然是一次绝望的尝试,因为它们是不同的对象。
我仍然认为解决方案是使用来自keras后端的conv2d,但我没有使用它的经验,而且文档没有帮助。