转载:医学类图像分割的各种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,相比于另两种方式更加简单易行,能够保留图像所有信息的情况下进行网络优化,达到对小目标精确分割的目的。
场景
- 使用U-Net作为基准网络。
- 实现使用keras
- 小目标图像分割场景,如下图举例。
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))