对滥用技术术语表示道歉 . 我正在通过CNN进行语义分割项目;尝试实现Encoder-Decoder类型的体系结构,因此输出与输入的大小相同 .
你如何设计标签?应该使用什么损失函数?特别是在重度失衡的情况下(但是类别之间的比例在图像之间是可变的) .
该问题涉及两个类(感兴趣的对象和背景) . 我正在使用带有张量流后端的Keras .
到目前为止,我将设计预期输出与输入图像的尺寸相同,应用按像素标记 . 模型的最后一层具有softmax激活(用于2类)或sigmoid激活(用于表示像素属于对象类的概率) . 我无法为这样的任务设计合适的目标函数,类型:
功能(y_pred,y_true),
与Keras达成协议 .
请尝试具体说明所涉及的张量尺寸(模型的输入/输出) . 任何想法和建议都非常感谢 . 谢谢 !
3 回答
实际上,当您使用
TensorFlow
后端时,您只需按以下方式应用预定义的Keras
目标:然后输入单热编码的特征映射或形状矩阵
(image_height, image_width)
与整数编码类(记住,在这种情况下,你应该使用sparse_categorical_crossentropy
作为损失) .为了处理类失衡(我猜它是由于背景类)我强烈建议你仔细阅读这个Stack Overflow question的答案 .
我建议从实践中使用的基础架构开始,如神经分割中的这个:https://github.com/EdwardTyantov/ultrasound-nerve-segmentation . 这里使用dice_loss作为损失函数 . 这对于两类问题非常有效,如文献中所示:https://arxiv.org/pdf/1608.04117.pdf .
已广泛使用的另一种损失函数是针对这种问题的交叉熵 . 对于像您这样的问题,最常见的是长短跳过连接以稳定训练,如上文所述 .
两种方式:
在这种情况下,最后一层应该是Upsample / Unpool / Deconvolve到HEIGHT x WIDTH x CLASSES . 所以你的输出基本上是形状:( HEIGHT,WIDTH,NUM_CLASSES) .