常见的图像分割损失函数有交叉熵,dice系数,FocalLoss等。今天我将分享图像分割FocalLoss损失函数及Tensorflow版本的复现。

1、FocalLoss介绍

FocalLoss思想出自何凯明大神的论文《Focal Loss for Dense Object Detection》,主要是为了解决one-stage目标检测中正负样本比例严重失衡的问题。

FocalLoss是在交叉熵函数的基础上进行的改进,改进的地方主要在两个地方

(1)、改进第一点如下公式所示。

首先在原有交叉熵函数基础上加了一个权重因子,其中gamma>0,使得更关注于困难的、错分的样本。比如:若 gamma = 2,对于正类样本来说,如果预测结果为0.97,那么肯定是易分类的样本,权重值为0.0009,损失函数值就会很小了;对于正类样本来说,如果预测结果为0.3,那么肯定是难分类的样本,权重值为0.49,其损失函数值相对就会很大;对于负类样本来说,如果预测结果为0.8,那么肯定是难分类的样本,权重值为0.64,其损失函数值相对就会很大;对于负类样本来说,如果预测结果为0.1,那么肯定是易分类的样本,权重值为0.01,其损失函数值就会很小。而对于预测概率为0.5时,损失函数值只减少了0.25倍,所以FocalLoss减少了简单样本的影响从而更加关注于难以区分的样本。

(2)、改进第二点如下公式所示。

FocalLoss还引入了平衡因子alpha,用来平衡正负样本本身的比例不均匀。alpha取值范围0~1,当alpha>0.5时,可以相对增加y=1所占的比例,保证正负样本的平衡。

(3)、虽然在何凯明的试验中, 认为gamma为2是最优的,但是不代表这个参数适合其他样本,在实际应用中还需要根据实际情况调整这两个参数:alpha和gamma。

2、FocalLoss公式推导

在github上已经可以找到很多FocalLoss的实现,如下二分类的FocalLoss实现。实现其实不是很难,但是在实际训练时会出现NAN的现象。

下面将简单推导一下FocalLoss函数在二分类时的函数表达式。

FocalLoss函数可以表示如下公式所示:

假设网络的最后输出采用逻辑回归函数sigmod,对于二分类问题(0和1),预测输出可以表示为:

将上述公式带入FocalLoss函数中,并进行推导。

3、FocalLoss代码实现

按照上面导出的表达式FocalLoss的伪代码可以表示为:

其中,

从这里可以看到1-y_pred项可能为0或1,这会导致log函数值出现NAN现象,所以好需要对y_pred项进行固定范围值的截断操作。最后在TensorFlow1.8下实现了该函数。

import tensorflow as tfdef focal_loss(y_true, y_pred, alpha=0.25, gamma=2):    epsilon = 1e-5    y_pred = tf.clip_by_value(y_pred, epsilon, 1 - epsilon)    logits = tf.log(y_pred / (1 - y_pred))    weight_a = alpha * tf.pow((1 - y_pred), gamma) * y_true    weight_b = (1 - alpha) * tf.pow(y_pred, gamma) * (1 - y_true)    loss = tf.log1p(tf.exp(-logits)) * (weight_a + weight_b) + logits * weight_b    return tf.reduce_mean(loss)

tensorflow分类的loss函数_Tensorflow入门教程(三十三)——图像分割损失函数FocalLoss...相关推荐

  1. tensorflow分类的loss函数_Tensorflow Keras的loss函数总结

    一.二分类与多分类交叉熵损失函数的理解 交叉熵是分类任务中的常用损失函数,在不同的分类任务情况下,交叉熵形式上有很大的差别, 二分类任务交叉熵损失函数: 多分类任务交叉熵损失函数: 这两个交叉熵损失函 ...

  2. tensorflow分类的loss函数_tensorflow中loss函数

    交叉熵函数 1)sigmoid_cross_entropy_with_logits(二分类问题) 输入是logits和targets,logits就是神经网络模型中的 W * X矩阵,不需要经过sig ...

  3. tensorflow分类的loss函数_tensorflow 分类损失函数使用小记

    多分类损失函数 label.shape:[batch_size]; pred.shape: [batch_size, num_classes] 使用 tf.keras.losses.sparse_ca ...

  4. python 人体检测技术_tensorflow入门教程(四十三)人体姿态检测(一)

    # #作者:韦访 #博客:https://blog.csdn.net/rookie_wei #微信:1007895847 #添加微信的备注一下是CSDN的 #欢迎大家一起学习 # ------韦访 2 ...

  5. qpython3可视图形界面_PySide——Python图形化界面入门教程(三)

    PySide--Python图形化界面入门教程(三) --使用内建新号和槽 --Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widget ...

  6. 【OpenCV入门教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...

  7. 【MATLAB Image Processing Toolbox 入门教程三】快速入门之“在多光谱图像中寻找植被”

    [MATLAB Image Processing Toolbox 入门教程三] 本篇摘要 一.从多光谱图像文件导入彩色红外通道 二.构建近红外光谱散射图 三.计算植被系数并显示其定位 四.综合实例部分 ...

  8. R语言七天入门教程三:学习基本结构

    R语言七天入门教程三:学习基本结构 一.编程的语言的基本结构 1.三种基本结构 绝大多数编程语言,都有三种最基本的程序结构:顺序结构.分支结构.循环结构.这三种结构的流程图如下所示(从左至右依次为:顺 ...

  9. SpringCloud 入门教程(三): 配置自动刷新

    Spring Cloud 入门教程(三): 配置自动刷新 之前讲的配置管理, 只有在应用启动时会读取到GIT的内容, 之后只要应用不重启,GIT中文件的修改,应用无法感知, 即使重启Config Se ...

最新文章

  1. CVPR 2021|SensatUrban:城市规模点云数据集
  2. 跟我打卡LeetCode 61旋转链表62不同路径63不同路径 II
  3. 代码演示:获取锁时被中断
  4. 400+节点的 Elasticsearch 集群运维
  5. c语言字符串倒置,单词倒置,用C++实现,将一句话里的单词进行倒置的方法详解
  6. 股神巴菲特揭示致富的十大秘籍[转]
  7. 华院数据宣晓华:传统零售商转型电商需攻克大数据三关
  8. 运放电路的工作原理_图文讲解!教你看懂7款经典运放电路
  9. 语言速算24点的小窍门_4秒钟1道题!12岁少年三夺24点大赛冠军
  10. oracle数据库编程实验2答案,Oracle数据库-作业2-答案
  11. arcgis select by attributes一次选多个_优化体系--记一次生产数据库sql优化过程--组合索引...
  12. 如何解决sqlserver 2005 备份的时候无法选择除系统盘外的其他盘符?
  13. Android sdk 环境变量配置无效
  14. 计算机视觉教程3-1:全面详解图像边缘检测算法(附Python实战)
  15. 转发:不懂朗姆酒?那你就out了!
  16. day2-运算符和分支
  17. Java:面向Web和移动应用的Java开发的增长
  18. 2008年世界顶级杀毒软件排行榜
  19. CSharp代码示例每日一讲: 在GDI+中使用画笔和画刷
  20. Jetpack学习之Paging

热门文章

  1. 没有qpress_关于网站没反应的阿里云帮助中心问题解答
  2. python事件触发机制_Python3-事件驱动、IO模型和触发方式
  3. LDR指令和LDR伪指令区别
  4. java窗体设置最小宽度_flex web Application设置最小高度和宽度。
  5. 恒生java开发复试_2019恒生电子面试经验(JAVA开发人员,实施工程师等)
  6. java的成员方法_java编程中的成员方法是什么?
  7. android nfc peer to peer 实例,NFC Peer2Peer Mode - Android Beam - ISO 18092
  8. 1151压力变送器型号_日本进口横河EJA530E压力变送器型号解读
  9. VS Code Pettier设置换行最大宽度
  10. db2去除字段内容空格_Vue CLI3.x 配置指南生产环境去除console