使用Keras在高度不平衡的数据集上进行图像分割,我想按此处所述按与每个类别中的像素值成比例的比例对类别进行重新加权。如果一个具有的二进制类weights = [0.8, 0.2],如何K.sparse_categorical_crossentropy(y_true, y_pred)根据像素所属的类进行修改以重新加权损失?
输入具有形状(4, 256, 256, 1)(批处理,高度,宽度,通道),输出是0和1 (4, 65536, 1)(正和负类)的向量。模型和数据与此处的模型和数据相似,不同之处在于图像是灰度图像,而蒙版是二进制(2类)。
这是我用于语义细分项目的自定义损失函数。它是从keras / backend / tensorflow_backend.py中categorical_crossentropy找到的功能修改的。
def class_weighted_pixelwise_crossentropy(target, output):
output = tf.clip_by_value(output, 10e-8, 1.-10e-8)
weights = [0.8, 0.2]
return -tf.reduce_sum(target * weights * tf.log(output))
Run Code Online (Sandbox Code Playgroud)
请注意,我的最终版本未使用类加权-我发现它鼓励模型使用代表性不足的类来填充不确定的图像补丁,而不是进行更实际的猜测,从而损害性能。
| 归档时间: |
|
| 查看次数: |
3377 次 |
| 最近记录: |