Unet相关介绍

article/2025/8/23 15:06:13

老师的bloghttps://zhuanlan.zhihu.com/p/370931792。写的比我这个好,233

Unet是在Fcn基础上提出的一种应用于医学影响的分割网络。医学影像的特点是1、数据集小。2、单张图片大。

由于以上医疗影像的特点,我们无法直接用Fcn进行分割学习。一个德国团队提出了Unet网络设计在,做到了仅仅用30张医疗影响的数据集就取得了相当不错的效果。我认为Unet与fcn主要有以下几点差异:

  1. 使用了overlap-tile策略。它是对一张大的医疗影响先分成一小块一小块进行分割训练(388*388大小的子图)。最终将这一小块一小块的分割图拼接起来。这个与fcn相比,fcn的尺寸是直接拿原图的尺寸,而医疗原图的尺寸是很大的,训练起来featuremap尺寸就很大计算要求很高。另外这里分割成一个个小图直接解决了医疗影响数据集图片少的问题。为了结果能够无缝进行拼接,每次下采样maxpooling的时候x,y方向上的尺寸都需要是偶数被2给整除。
  2. 我们发现上图写的input image后面有个tile。网络输入的是572*572尺寸的,最后结果是388*388的尺寸的。这里572*572可以认为是388*388的padding出来的。和fcn不同的是,fcn比较简单粗暴直接padding了100的0。这里认为直接padding0对于边缘信息处理是不好的。unet是拿原图边缘的内容进行填充。(如果388*388子图正好在边缘位置没法用原图padding,则使用了镜像padding的方法,直接对应位置做了个镜像填充进去)。
  3. 特征融合程度区分。fcn最多融合到8s。而Unet对所有上采样的特征图与原图进行了融合,融合了更多的尺度。(如图U型,左右对称的)
  4. 特征融合方式不同。fcn融合的时候采用了+法,将特征图上的element进行相加。而unet用了concat的方法在channel维度上进行了堆叠。(老师的说法是,unet由于overlap的策略网络计算更高效了,而concat增加了channel也就是增加了计算量在这里是可以接受的)

关于unet训练的数据增强方式。可以使用图像的弹性变化进行增强。这个也是医疗影像数据的一个特性。

 

针对医疗图像样本少的问题,我们极大的使用了弹性变换的方式进行了数据增强。

医疗影像数据样本有一个问题就是数据不均衡的问题。我们发现医疗影像的背景像素在图中的占比是非常小的。老师在课上讲的解决方式是像这样的数据不均衡问题直接在loss上做文章。我们结合论文看一下具体的做法。我们利用了一个加权的loss,其中背景loss分配了一个大的权重。

我们看一下实际论文中是如何训练的。为了最小化开销和最大化利用gpu我们更偏向于把数据集训练的批次设定为1,把大图分割成多个小图进行训练。

如下图是实现权重的公式。这里有个疑问点是w-c的数据是如何计算的,文章中对w0和sigma做了明确的定义。w-c我后来问了老师,老师也查了下相关资料做了一些猜想(由于老师查了官网也没有提及wc的具体计算方法)https://zhuanlan.zhihu.com/p/371676082。后来也有同学数了下fig.3c,白点/黑点≈1.46,黑色最纤细的地方是1像素宽,代入公式就是1.5 + 10 * exp(-(1+1)**2 / 2/5/5)  ≈ 10.7,目测fig.3d的标尺最大值也是10.7;而且,fig4d中面积较大的浅蓝色,目测对应标尺的1.46。可能wc就是训练集所有白点/黑点?公式只是针对细胞外的像素,也就是细胞间隙的那些像素的。所以在论文的Fig.3的d图中,只有细胞外的像素对应的权重是渐变的。而细胞内的像素对应的权重取值为1。综合一下我的理解是w-c就是一个数值,只不过c会有不同取值,c的取值和训练集的语义类别相关。如果这个语义类别在总像素总占比小那么w-c这个值就大,反之则小。w-c是用来平衡类别的差异的权重,而公式的后半段是用来加强边界像素误差的权重。

关于卷积权重的初始化也是很重要的,如果这一步没做好可能导致网络的某些部分可能会产生过多的激活,而其他部分则不会。论文里面使用了高斯的初始化方式。高斯的sigma取值与等于神经网络的输入的总节点数量相关。如一个3*3的conv卷积一个64channel的特征图。计算方式是sigma=(2/N)^0.5。N=9*64=576。

以上应该把unet的各个技术细节讲清楚了。其中关于w的计算个人认为是比较难理解的,而且也不确定是否完全理解了原来作者当时的方式,只是理解了大概的一个思路。欢迎大家进行讨论一起进步吧。如果我有新的理解也会在该文章中进行更新

接下来简单介绍以下unet++相关的知识内容。unet++与unet的不同是,unet只有一个“U”,而unet++可以看成有多个u进行融合组成。我简单画以下如下的示意图

unet只有一个“U”进行了下采样后,在进行上采样,上采样的时候与对应层的特征进行concat操作,然后卷积。最后上采样到原尺寸的时候进行conv操作,channel数变为类别数。

unet++有多个“U”,从第二层就有上采样+融合操作。第3层也有,一直到最底层。最后一层上采样后会和其他浅层的u上的特征进行融合。最后和unet一样也进行一个channel为类别数的conv操作。


http://chatgpt.dhexx.cn/article/tjtqnhYG.shtml

相关文章

UNET详解和UNET++介绍(零基础)

一背景介绍 背景介绍: 自2015年以来,在生物医学图像分割领域,U-Net得到了广泛的应用,目前已达到四千多次引用。至今,U-Net已经有了很多变体。目前已有许多新的卷积神经网络设计方式,但很多仍延续了U-Net的核…

UNet - unet网络

目录 1. u-net介绍 2. u-net网络结构 3. u-net 网络搭建 3.1 DoubleConv 3.2 Down 下采样 3.3 Up 上采样 3.4 网络输出 3.5 UNet 网络 UNet 网络 forward 前向传播 3.6 网络的参数 4. 完整代码 1. u-net介绍 Unet网络是医学图像分割领域常用的分割网络&#xff0…

UNet 浅析

文章目录 1. UNet 简介2. UNet 详解3. 代码实例 - 医学图像分割 (ISBI数据集)【参考】 1. UNet 简介 UNet 属于 FCN 的一种变体,它可以说是最常用、最简单的一种分割模型,它简单、高效、易懂、容易构建,且可以从小数据集中训练。2015 年&…

unet 网络结构

unet 是15年提出的用于解决医学图像分割问题。unet有两部分组成。左边部分可以看出是特征提取网络,用于提取图像的抽象特征。右边可以看作是特征融合操作。与传统的FCN相比,unet使用是使用特征拼接实现特征的融合。unet 通过特征融合操作,实现了浅层的低分辨率(越底层的信息…

unet模型及代码解析

什么是unet 一个U型网络结构,2015年在图像分割领域大放异彩,unet被大量应用在分割领域。它是在FCN的基础上构建,它的U型结构解决了FCN无法上下文的信息和位置信息的弊端 Unet网络结构 主干结构解析 左边为特征提取网络(编码器&…

深度学习论文精读[6]:UNet++

UNet的编解码结构一经提出以来,大有统一深度学习图像分割之势,后续基于UNet的改进方案也经久不衰,一些研究者也在从网络结构本身来思考UNet的有效性。比如说编解码网络应该取几层,跳跃连接是否能够有更多的变化以及什么样的结构训…

【Unet系列】(三)Unet++网络

一、UNet整体网络结构 Unet主要是探索encoder和decoder需要多大的问题,以此为基础,提出了融合不同尺寸Unet结构的网络。创新点就是把不同尺寸的Uent结构融入到了一个网络里。 二、结构的好处 (1)不管哪个深度的特征有效&#…

深度学习零基础学习之路——第四章 UNet-Family中Unet、Unet++和Unet3+的简介

Python深度学习入门 第一章 Python深度学习入门之环境软件配置 第二章 Python深度学习入门之数据处理Dataset的使用 第三章 数据可视化TensorBoard和TochVision的使用 第四章 UNet-Family中Unet、Unet和Unet3的简介 第五章 个人数据集的制作 Unet-Family的学习 Python深度学习…

憨批的语义分割重制版6——Pytorch 搭建自己的Unet语义分割平台

憨批的语义分割重制版6——Pytorch 搭建自己的Unet语义分割平台 注意事项学习前言什么是Unet模型代码下载Unet实现思路一、预测部分1、主干网络介绍2、加强特征提取结构3、利用特征获得预测结果 二、训练部分1、训练文件详解2、LOSS解析 训练自己的Unet模型一、数据集的准备二、…

UNet详解(附图文和代码实现)

卷积神经网络被大规模的应用在分类任务中,输出的结果是整个图像的类标签。但是UNet是像素级分类,输出的则是每个像素点的类别,且不同类别的像素会显示不同颜色,UNet常常用在生物医学图像上,而该任务中图片数据往往较少…

条纹进度条

最开始学习qml的时候,想实现一个条纹进度条,当时还不熟悉动画,做不出来,只做了个静止的。qml学习和使用了快1年之际,把这个遗憾弥补下。 先上效果图,颜色取自Bootflat。 以下是源码,先上Stripe…

数据批量插入与逐条插入分析

简述 今天抽空做了一下使用Jdbc对数据操作的实际性能。在平时开发过程中我们经常会使用Hibernate来操作数据库,所以我们很少会去使用批量插入数据。一般都是通过hibernate的insert、addSave等方法来一条条地插入数据。所以很少去考虑这个问题。下面是针对Jdbc进行的…

css滚动条

此部分针对webkit内核的浏览器,使用伪类来改变滚动条的默认样式,详情如下: 滚动条组成部分 1. ::-webkit-scrollbar 滚动条整体部分2. ::-webkit-scrollbar-thumb 滚动条里面的小方块,能向上向下移动(或向左向右移动…

计算机组成原理(五)-一条指令是怎么被执行的

什么是指令: 程序代码的本质就是一条一条的指令,我们需要通过编码的方式让CPU知道我们需要它干什么,最后由译码器翻译成一条条的机器指令。机器指令主要有两部分组成:操作码、地址码。地址码直接给出操作数和操作数的地址&#x…

CSS 斜条纹进度条动画

这是第一版进度条 ,用css写的.但是后续因为数据不同,要显示不同的颜色和数据,所以又改了一版,直接用的el-progress.自定义的样式.对于新手小白来说比较友好.先上这一版代码. <div class"state"><span>开机时间</span><!-- 进度条 --><div…

Acrobat DC 更改背景颜色会有一条条白色横纹

解决方法如下&#xff1a; 编辑->首选项->页面显示->取消 使用2D图形加速

turtle模块还能这样玩?(一条条金龙鱼、雨景)

文章目录 一条条金龙鱼雨景 Python的turtle模块不仅可以用来绘制一些基本的图形&#xff0c;还有与图片结合&#xff0c;做出一些特殊的效果&#xff0c;还可以用来做二维小游戏。本篇是介绍用turtle模块做出的一幅动态的鱼儿游过的画面和动态的雨景图 一条条金龙鱼 1、先看一…

2.Python # 代码注释

2. # 代码注释 文章目录 2. # 代码注释1. 什么是代码注释2. 注释语法3. 注释位置1. 注释在代码的上一行2. 注释在代码的末端 4. 课堂练习 1. 什么是代码注释 代码注释即对代码进行批注说明。 相当于给一个英文单词批注中文释义。 【温馨提示】注释是给程序员自己看的&#xf…

python:导入第三方库greenlet,gevent方法

greenlet&#xff0c;gevent greenlet&#xff0c;gevent是python支持的第三方库&#xff0c;它们可以帮助我们完成协程的使用&#xff0c;其中greenlet是手动调换方式&#xff08;switch方法&#xff09;&#xff0c;gevent是自动调换方式&#xff08;遇到IO操作&#xff09;…

python gevent使用

对大部分语言来说&#xff0c;经常用到并发来处理一些情况。比如必须要多次查询数据库&#xff0c;多次请求API&#xff0c;python内置的gevent就很简单好用。传参&#xff0c;获取返回值&#xff0c;捕获协程的错误都很方便。 直接上例子&#xff1a; import gevent as gevent…