转载:从loss处理图像分割中类别极度不均衡的状况---keras

转载:医学类图像分割的各种loss优化与对比:https://blog.csdn.net/m0_37477175/article/details/83004746 *****

医学图像分割Dice loss:https://zhuanlan.zhihu.com/p/86704421 https://www.aiuai.cn/aifarm1159.html

前言
最近在做小目标图像分割任务(医疗方向),往往一幅图像中只有一个或者两个目标,而且目标的像素比例比较小,使网络训练较为困难,一般可能有三种的解决方式:

选择合适的loss function,对网络进行合理的优化,关注较小的目标。
改变网络结构,使用attention机制(类别判断作为辅助)。
与2的根本原理一致,类属attention,即:先检测目标区域,裁剪之后进行分割训练。
通过使用设计合理的loss function,相比于另两种方式更加简单易行,能够保留图像所有信息的情况下进行网络优化,达到对小目标精确分割的目的。

场景

    1. 使用U-Net作为基准网络。
    2. 实现使用keras
    3. 小目标图像分割场景,如下图举例。
      AI Challenger眼底水肿病变区域自动分割,背景占据了很大的一部分
      在这里插入图片描述
      segthor医疗影像器官分割
      在这里插入图片描述

loss function

 此处的案例可以参考airbus-ship-detection

 

 

 代码:https://github.com/mkocabas/focal-loss-keras

from keras import backend as K
'''
Compatible with tensorflow backend
'''
def focal_loss(gamma=2., alpha=.25):
	def focal_loss_fixed(y_true, y_pred):
		pt_1 = tf.where(tf.equal(y_true, 1), y_pred, tf.ones_like(y_pred))
        pt_0 = tf.where(tf.equal(y_true, 0), y_pred, tf.zeros_like(y_pred))
        return -K.sum(alpha * K.pow(1. - pt_1, gamma) * K.log(pt_1))-K.sum((1-alpha) * K.pow( pt_0, gamma) * K.log(1. - pt_0))
	return focal_loss_fixed

 使用方法:model_prn.compile(optimizer=optimizer, loss=[focal_loss(alpha=.25, gamma=2)])

-K.mean(alpha * K.pow(1. - pt_1, gamma) * K.log(pt_1)) - K.mean((1 - alpha) * K.pow(pt_0, gamma) * K.log(1. - pt_0))

  

原文地址:https://www.cnblogs.com/hansjorn/p/13217005.html