水平集方法用于深度卷积网络

  • 水平集简介
  • CNN结合Level Set
  • 疑惑

水平集简介

水平集(Level Set)方法是用于图像分割非常受欢迎的方法,其通过比目标维度高一维的水平集函数(LSF)的零水平集隐式地表示曲线,能够自然地处理目标的复杂拓扑变化,如空洞或曲线分裂。一般来说,水平集方法需要在目标周围初始化水平集函数,再基于精心设计的能量函数(由外部驱动力、内部驱动力和正则项组成),通过求解偏微分方程迭代更新水平集函数实现曲线演变,达到最小化能量函数的目标,此时LSF的零水平集即为目标边界。如果对水平集原理有所困惑的话,可以参考知乎上的解答。

CNN结合Level Set

原始的水平集方法并没有可以学习的参数,因此将其用于深度卷积网络需要合理的修改,最近阅读了一些相关的文献,在这里总结一下。

  1. 2017年的Deep Convolutional Level Set Method for Image Segmentation仅仅利用CNN目标检测器作为水平集方法分割的先验知识,即通过目标分类和回归两个分支获取待分割目标物体的类别和位置信息,基于卷积网络输出的先验初始化水平集函数ϕ0\phi_0ϕ0​,接着就是通过传统的水平集方法进行曲线的演化。该论文采取了Geodesic Active Contours (GAC)模型,对于水平集方法的GAC公式来说,初始的LSF(ϕ0\phi_0ϕ0​)的选择是非常重要的,卷积网络输出的先验包含目标的位置和尺寸信息,可能潜在地提高了图像分割的有效性。
  2. 2017年的Deep Level Sets for Salient Object Detection将CNN结合水平集用于显著性目标检测,深度卷积网络能够对显著性目标的语义属性进行建模,但是很难判断处于目标边界的属于相似感受野的像素类别,论文提出的深度水平集网络可以生成紧凑且均匀的显著性概率图。其核心思想是认为曲线的演变过程,即水平集函数的迭代更新本质上是根据计算得到的能量函数梯度,基于梯度下降算法最优化能量函数,这个形式正好和深度卷积网络中损失函数的反向传播更新网络参数一致,可以很自然地将能量函数作为网络的损失函数。如下面的网络结构所示,网络的backbone为VGG16,上采样输出接一个Guided Superpixel Filtering(GSF) layer,紧接着是一个Heaviside Function(HF) layer,其中VGG16输出的saliency maps会被提出的超像素引导滤波器进行优化,GSF层主要是利用了一个超像素块邻域的几个超像素块区域的信息,HF层则是将最终结果映射为0和1两个标签值。论文指出,网络训练是分阶段完成的,在前15个epochs采取Binary Cross Entropy(BCE)损失对网络进行训练(没有加入水平集方法和GSF),接着用提出的能量函数作为损失(计算损失时需要将取值在[0,1]之间的显著性概率图线性平移到[-0.5,0.5])微调15个epochs,最后加入GSF层再微调网络参数。
  3. 2019年的CNN-based Semantic Segmentation using Level Set Loss指出语义分割网络通常输出低分辨率但包含丰富语义信息的特征图,空间细节会丢失。其常用的损失是交叉熵损失函数,逐像素独立计算损失,没有考虑像素间的语义性,而基于区域的水平集方法能更好的利用像素间的关系。因此,将水平集的能量函数作为损失函数是很自然的想法,水平集方法通常用于分割前景和背景,为了用于多分类问题,将ground truth分解为一系列二值图像(不管原来标注时label像素为多少,都重新设计为1和0),每幅二值图像由背景和属于同一类的区域组成,再基于每幅二值图像和语义分割网络输出的对应类别(如:21类)通道的概率图(线性平移到[-0.5,0.5])计算水平集损失,交叉熵损失和水平集损失的加权和作为最终的损失函数。如下图所示,输入图像包含背景、马、人三个类别,首先针对这三个类别重构三幅ground truth二值图像,再选择语义分割网络输出的对应类别的通道(特征图),将特征图采取sigmoid函数映射成[0,1]之间的概率图,将概率图线性平移到[-0.5,0.5],再基于相关公式计算损失即可。这种方式将水平集方法应用到了多类别任务中,并且训练是带权重的交叉熵损失和水平集损失,训练方式简单。
  4. 2019年的Object Instance Annotation with Deep Extreme Level Set Evolution从另一个方面将CNN和Level Set结合了起来,前面介绍的思路是将能量函数作为损失函数,水平集函数(LSF)的更新策略是基于能量函数对LSF的梯度,但是这篇论文的思路是把LSF看出与时间有关的函数,曲线的演变即为LSF随着时间的改变而发生变化,也就是说,这里的LSF更新是基于LSF对时间的梯度。如下面公式,可以很容易理解LSF函数随着时刻是如何更新的。ϕi+1(x,y)=ϕi(x,y)+Δt∂ϕi∂t\phi_{i+1}(x,y) = \phi_{i}(x,y)+\Delta t \frac{\partial \phi_{i}}{\partial t} ϕi+1​(x,y)=ϕi​(x,y)+Δt∂t∂ϕi​​这里的关键在于,初始的LSF如何产生,以及LSF对时间的梯度是如何求取的。传统的水平集方法给出的LSF对时间的梯度通常包含三项,分别是速度函数项,曲率项和正则项。为了将Level Set 融合到深度卷积网络中,这篇论文提出了三分支结构,首先人工交互给出目标的四个极点(目标的最左,最上,最右,最下),对四个极点采取高斯函数编码形成热图,然后与RGB通道concat形成四通道作为CNN输入,一个分支产生初始的掩膜预测结果(ϕ0(x,y)\phi_{0}(x,y)ϕ0​(x,y),即初始的水平集函数),另外两个分支预测水平集函数演变所需的参数。
    最后水平集函数随时间(步数)的迭代公式如下,每个分支的损失函数都是精心设计的,一个分支学习的初始水平集函数(采取截断的符号距离函数作为LSF)根据另外两个分支学习到的网络参数以及正则项,按照下面的公式进行迭代更新,获得最终的分割结果。

疑惑

最近动手去尝试复现CNN结合Level Set用于语义分割的方法,用水平集损失提升语义分割这篇论文,采取deeplab v3+作为backbone,但是不管怎么检查复现代码或者改变参数,训练策略等,都无法实现更好的mIoU分数,可能是自己什么地方弄错了或者没有真正理解到吧。

卷积神经网络结合水平集方法相关推荐

  1. 卷积神经网络训练准确率突然下降_基于联邦学习和卷积神经网络的入侵检测方法...

    王蓉1,马春光2,武朋2 1. 哈尔滨工程大学计算机科学与技术学院,哈尔滨 150001:2. 山东科技大学计算机科学与工程学院,青岛 266590 doi :10.3969/j.issn.1671- ...

  2. level set 介绍4(水平集方法)

    2.5 水平集方法 在2.4中的时候,我们已经知道曲线演化主要涉及到两个几何参数,一个是曲线的曲率,一个是曲线的方向矢量,而这两个参数的计算一并不是一件容易的事情,怎么有效的更方便处理曲线的几何参数的 ...

  3. 水平集方法的一个基本框架

    水平集方法框架 水平集方法是现代图像处理中很重要的一个方法,为了说清楚这个东西,我们先介绍几个基本的概念. 零水平集 对于一个函数 ϕ(x⃗):Rn→R\phi(\vec x):{\mathbf{R} ...

  4. 水平集方法引入主动轮廓模型算法中的两种方法

    水平集方法引入主动轮廓模型算法中的两种方法 1.传统的基于主动轮廓模型和水平集理论的方法 2.变分水平集方法 在讲解水平集理论在主动轮廓模型中的应用前,我们先用流程图说明一下常见的处理主动轮廓模型的流 ...

  5. 拓扑优化中SIMP方法与水平集方法有何优缺点,水平集法变换到高维,不是更复杂了...

    作者:周平章 链接:https://www.zhihu.com/question/52008623/answer/187927508 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  6. (论文阅读)基于融合深度卷积神经网络的人脸识别方法研究-褚玉晓

    一.基于融合深度卷积神经网络人脸识别方法设计 1.PCA算法提取人脸特征 主要成分分析法(Principal Component Analysis,PCA) 第一步,计算人脸图像的平均值并执行归一化的 ...

  7. 【人工智能 卷积神经网络】基础练习:基于torch构建卷积神经网络,测试集正确率达 百分之99

    声明:仅学习使用~ 这是一个关于卷积神经网络CNN的基础练习,也算是一个回顾.包含分解步骤,内容整合 以及最后的整体输出. 目录 一.步骤分解 1.0 系统环境.主要模块版本 1.1 相关模块的导入 ...

  8. 计算机视觉之图像分割——水平集方法_ACWE2001

    一个简单的例子引入能量函数 其实是Mumford-Shah的特例 用水平集函数表示曲线 变分法得到欧拉-拉格朗日公式 迭代法解偏微分方程 算法 问题 这篇博客介绍的是2001年的一篇文章Active ...

  9. 一种基于卷积神经网络的数据驱动故障诊断方法

    本文主要分为四个部分: 1.数据预处理 2.CNN框架 3.性能评估 4.总结 数据预处理 CNN善于处理二维的数据,而原有的时域信号是一维的,需要把原始一维的信号转换为二维的 生成一个M×M的图片, ...

最新文章

  1. C++中数字和字符串类型的转换
  2. java解压文件、复制文件、删除文件代码示例
  3. ConcurrentHashMap的源码分析-fullAddCount源码分析
  4. java连接数据库hei_如何黑MySQL5数据库?(来自:http://superhei.blogbus.com)
  5. 2020年10月13日工作日志 - 挂掉的单元测试
  6. Java并发编程:ThreadLocal
  7. Java 1.1.4 检测字符串是否相等
  8. Mysql常用内置函数
  9. SpringBoot项目添加mybatis插件
  10. 小学计算机表格课件,小学信息技术级轻松做表格Word表格制作PPT课件.ppt
  11. 后盾网php 百度盘,后盾网PHP操作exce视频教程
  12. 253短信发送(国内短信)
  13. 09.python常用数据类型—字典
  14. java判断微信号、手机、名字的正则表达
  15. 计算机以一级上级模拟试题,计算机一级模拟试题带答案
  16. 链接预测(Link Prediction)
  17. 计算机access和office,计算机二级access和office
  18. 面试官:线上服务CPU飙高怎么排查?
  19. java年利率_在java中怎么算一年的利息,假如年利率是2.25%
  20. html 体温单源码,体温单 三色单

热门文章

  1. TP-LINK安装USB共享打印机小记
  2. ubuntu-18.04 虚拟机磁盘 + 内存扩容
  3. 浅谈匈牙利算法(二分图最大匹配)
  4. 字符分类的函数(比如大写字母转小写的函数)
  5. 高性能mysql观会感_【高性能Mysql 】读书笔记(一)
  6. 软件项目角色指南 - 人民邮电出版社 - 免费电子书下载
  7. MATLAB短时傅里叶变换并绘制时频图
  8. Lock锁底层原理实现
  9. Fast rcnn and Faster rcnn 算法原理
  10. linux重装eclipse_linux下安装eclipse时如何配置.