[SS]语义分割_U-Net

news2024/9/29 7:30:20

U-Net网络结构讲解视频 

从零开始的U-net入门 

U-Net详解 

研习U-Net改进 

目录

一、介绍

二、详解

1、网络结构

2、网络运行过程 

3、实验现状 

4、分割策略


一、介绍

        U-Net是一种用于生物医学图像分割的卷积神经网络架构。它由Olaf Ronneberger等人在2015年提出,并被广泛应用于医学图像分析领域。

        U-Net的设计灵感来自于生物医学图像分割任务中常见的数据不平衡问题,即前景(感兴趣区域)与背景之间的像素数量差异很大。为了解决这个问题,U-Net使用了一种称为"U"形结构的编码-解码架构,其中编码器部分用于捕捉图像的上下文信息,而解码器部分用于恢复分辨率和帮助生成准确的分割结果。

U-Net的结构如下:

  1. 编码器:编码器由一系列的卷积层和下采样操作(通常是最大池化层)组成。这些层逐渐减小图像的分辨率和通道数,并且通过增加感受野来捕捉更广阔的上下文信息。

  2. 解码器:解码器由一系列的卷积层和上采样操作(通常是反卷积层)组成。这些层逐渐恢复图像的分辨率和通道数,并通过跳跃连接将编码器中的特征图与解码器中的特征图连接起来。跳跃连接有助于传递更详细的位置和上下文信息,以生成更准确的分割结果。

  3. 跳跃连接:跳跃连接是U-Net的关键特性。它将编码器中的特征图与解码器中的特征图进行连接,以便将局部和全局信息相结合。这种连接不仅有助于解决数据不平衡问题,还可以避免信息在编码器和解码器之间丢失。

  4. 输出层:U-Net的最后一层是一个卷积层,其输出大小与输入图像的大小相同,并将每个像素分配给前景或背景。通常使用Sigmoid或Softmax激活函数来生成分割预测。

        U-Net在训练过程中使用像素级别的二分类交叉熵损失函数来衡量预测结果与真实标签之间的差异,并使用常见的优化算法(如Adam)对权重进行更新。在测试阶段,根据预测的概率值计算阈值,将概率大于阈值的像素标记为前景。

        U-Net的主要优点是能够准确地捕捉图像的上下文信息,对于边界清晰、大小不一的前景物体进行准确的分割。然而,它也存在一些缺点,如对于小的前景物体分割不准确,对于噪声和伪影较敏感等。因此,在实际应用中,研究者们不断改进和优化U-Net的架构,以适应不同的医学图像分割任务。

二、详解

1、网络结构

        U-Net是Encoder-Decoder结构,对应于U型结构。Encoder对应于U型左边部分,也就是特征提取下采样部分,文中称之为contracting path;Decoder对应于U型右边部分,也就是上采样得到分割结果图的部分,文中称之为expansive path。

  • 长条矩形对应一个特征图
  • 箭头对应一种操作

2、网络运行过程 

Encoder部分 

        从输入开始,输入[572x573x1]的图像,首先通过一个[3x3]卷积层和ReLu激活函数,这里的卷积层步距为1,padding为0,则通过卷积层之后高和宽都会减少。经过两个卷积层之后输出特征图为[568x568x64]。

        之后通过一个Maxpool下采样,池化核大小为[2x2],步距为2,特征图的高和宽就会减半,从[568x568x64]变成[284x284x64],通道数不改变。再通过两个[3x3]卷积层,通过卷积层之后都会将特征图通道数×2,输出为[280x280x128]。

        通过Maxpool下采样之后,特征图高和宽减半,变为[140x140x128],再经过两个卷积层缩小高和宽,将通道数翻倍,得到特征图[136x136x256]。

        通过Maxpool下采样之后,得到特征图大小[68x68x256],经两次卷积操作得到特征图[66x66x512]。

        最后一层里,通过下采样操作得到特征图[32x32x512],经两次卷积操作得到特征图[28x28x1024]。

Decoder部分

        将Encoder部分得到的[28x28x1024]的特征图进行转置卷积上采样操作,转置卷积过后将特征图高和宽放大两倍,通道数会减半,得到特征图大小为[56x56x512]。注意:灰色箭头(copy and crop),表示将Encoder部分对应的特征图经由高宽裁剪之后,与Decoder部分下一层上采样得到的特征图按照通道维度Concat拼接。将Encoder部分对应的[64x64x512]的特征图进行中心裁剪,将中间[56x56x512]的部分裁剪过来,与Decoder上采样得到的蓝色部分[56x56x512]部分进行Concat拼接。拼接之后得到特征图[56x56x1024]。之后再进行两个卷积[3x3]卷积操作,得到[52x52x512]的特征图。

        之后再通过上采样,将特征图的高和宽放大两倍,通道数减半,此时得到特征图[104x104x256],与Encoder部分对应的特征图进行中心裁剪,与上采样得到的特征图进行Concat拼接得到[104x104x512]的特征图。再通过两个[3x3]卷积层进一步融合,得到特征图大小[100x100x256]。

        再进行上采样,特征图变成[200x200x128],Encoder对应特征图进行中心裁剪之后进行拼接,得到特征图[200x200x256]。经由两次[3x3]卷积操作,得到特征图[196x196x128]。、

        最后进行上采样,特征图尺寸变为[392x392x64],与Encoder对应特征图处理过后进行拼接,得到[392x392x128]特征图,进行两次[3x3]卷积处理进一步融合,得到[388x388x64]的特征图。

        最后,特征图通过一个[1x1]卷积层,卷积核个数为num_cls个,在文中类别只分为前景和背景,所以num_cls=2。输出的分割图为[388x388x2]。需要注意的是,该[1x1]卷积层没有ReLu激活函数。

3、实验现状 

        需要注意的是输入的原图大小为[572x572]大小的,但是最终得到的分割图是[388x388]大小的,只保留了中间[388x388]区域的特征图。

         如果按照原论文的方法实现网络之后,输入的图像区域为蓝色框区域,那么最终所得到的分割图像实际只有黄色框中的部分。原论文中提到,若是需要获得边界部分的区域分割结果,可以使用镜像的策略,通过按照黄色框的边界作为对称轴将原图进行镜像操作扩大输入图像大小,以获得边界分割效果。

        现如今比较主流的实现方法并不是完全按照原论文中给出的方法去实现的,会在特征图经过[3x3]卷积中加入一个padding,这样卷积操作并不会改变特征图的大小,并且在卷积与ReLu函数之间加上BN层。这样做的好处是在Decoder部分进行上采样之后,由于[3x3]卷积操作不会改变特征图大小,在上采样的特征图与Encoder部分对应特征图Concat拼接时不需要进行中心裁剪操作。这样最终得到的特征图的高和宽与原输入图像的高和宽一致。

4、分割策略

        如果针对非常高分辨率的图片进行分割任务的话,直接将图片放入模型进行预测可能会导致显存占用太大影响效率。

        较为常见的策略是每次只分割一小块区域patch,但是相邻两个区域之间会有一个重叠区域,这样的目的是能够更好的利用到边界部分的左右邻近区域,使得分割patch的边界区域效果更好。通过这个方法就可以获得较为好的分割效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1491653.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv8改进 在更换的PoolFormer主干网络中增加注意力机制

一、PoolFormer的网络结构 PoolFormer采用自注意力机制和池化操作相结合的方式,同时考虑了局部和全局的特征关系。 具体的代码如(YOLOv8改进 更换多层池化操作主干网络PoolFormer_yolov8池化-CSDN博客)所示。 二、Global Attention Mechan…

Redis面试总结

概述 1. Redis是什么?简述它的优缺点? Redis本质上是一个Key-Value类型的内存数据库,很像Memcached,整个数据库加载在内存当中操作,定期通过异步操作把数据库中的数据flush到硬盘上进行保存。 因为是纯内存操作&…

JavaScript基础3之面向对象关于面向过程、函数式编程、对比、构造函数、原型

JavaScript基础 面向对象面向过程函数式编程命令式编程函数式编程特性副作用透明引用不可变变量函数是一等公民 常见的函数式编程模型 面向对象为什么要使用面向对象封装继承多态 对比面向过程函数式编程面向对象 构造函数原型constructor使用场景 对象原型 面向对象 面向过程…

5年爬到半山腰,我后悔了吗?

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 软件测试是一个付出就有回报的工作,可能很多人会说软…

Starknet(strk) 跨链桥教程:手把手教你用bitget钱包跨链

摘要:通过Rhino.fi ,将资产无缝桥接至Starknet(web3.bitget.com/zh/assets/starknet-wallet)变得高效且具有成本效益,Rhino.fi 是一个以其快速处理时间和低交易费用而闻名的平台。它专为与 MetaMask 等流行的 Web 3 钱…

mybatis的xml文件如何配置能被识别

为了让MyBatis能够识别和使用XML Mapper文件,你需要确保这些文件被正确放置和配置。下面是确保MyBatis XML Mapper文件被识别的步骤: 1. 正确放置XML Mapper文件 通常,XML Mapper文件应该放在src/main/resources目录下。为了更好的组织这些…

Vanna-ai -基于RAG的TextToSql实现方案

官方连接:Vanna.AI - Personalized AI SQL Agent 1.背景 基于大模型的TextToSql的关键为给大模型提供正确有效的数据库信息及问题,以提升大模型生成sql的正确率。database_info question形成prompt,但是实际中通常会遇到一个问题&#xff…

Python+更改镜像源下载库+PyCharm+汉化+第一个项目配置

文章目录 一、Python二、更改镜像源下载库三、PyCharm四、汉化五、第一个项目配置 2024年3月5日 操作环境: Win11-23H2 Python-3.12.2 PyCharm-2023.3.4 一、Python https://www.python.org/ 点击Download,查看对应的版本( prerelease…

面向万物智联的可信连接关键技术研究

文章目录 前言一、万物智联的安全性需求分析二、可信连接技术的发展三、面向万物智联的可信连接关键技术前言 随着5G网络、人工智能以及云计算与容器化等技术的快速进步,物联网的能力与边界已经大大地被拓展,“万物智联”时代正在开启。万物智联在提高生产力的同时,承受的安…

【语法基础练习】1.变量、输入输出、表达式与顺序语句

🌸博主主页:釉色清风🌸文章专栏:算法练习🌸今日语录:You don’t know until you try. 文章简介:下面的题目是AcWing网站语法基础练习篇的第一小节,内容基础,难度&#xf…

Linux笔记--make

使用上一节的 main.c、add.c、sub.c文件进行编译,编译的过程有很多步骤,如果要重新编译,还需要再重来一遍,能不能一步完成这些步骤?将这些步骤写到makefile文件中,通过make工具进行编译 一个工程中的源文件不计其数&a…

Python学习 day07(JSON、format()函数)

JSON 各种编程语言存储数据的容器不尽相同,在Python中有字典dict这样的数据类型,而其他语言可能没有对应的字典,为了让不同的语言都能够相互通用的传递数据,JSON就是一种非常良好的中转数据格式,如下: JSON…

MySQL的三大范式

文章目录 简介第一范式第二范式第三范式: 简介 在MySQL的使用中, 要根据实际灵活设计表,一般来说我们通常遵循三大范式(啥是范式:是一些约束、规范、规则, 来优化数据库表的设计和存储),三大范…

5G智能制造食品工厂数字孪生可视化平台,推进食品行业数字化转型

5G智能制造食品工厂数字孪生可视化平台,推进食品行业数字化转型。随着科技的飞速发展,食品工业正迎来一场前所未有的数字化转型。在这场转型中,5G智能制造工厂数字孪生可视化平台发挥着至关重要的作用。它不仅提高了生产效率,降低…

EasyX的学习2

消息处理——漂亮的按钮(鼠标) 用到的函数 1.消息结构体变量类型:使用ExMessage ExMessage msg{ 0 }; 定义一个变量名为msg的ExMessage结构体变量并初始化为0 2.获取消息函数:peekmessage函数 //获取消息 peekmessage(&msg, EX_MOUSE); 两个参…

Spring中@import注解终极揭秘!

技术概念 它能干啥 Import注解在Spring框架中主要用于解决模块化和配置管理方面的技术问题,它可以帮助开发者实现以下几个目标: 模块化配置:在大型项目中,通常需要将配置信息分散到多个配置类中,以便更好地组织和管…

Stable Diffusion ———LDM、SD 1.0, 1.5, 2.0、SDXL、SDXL-Turbo等版本之间关系现原理详解

前言 2021年5月,OpenAI发表了《扩散模型超越GANs》的文章,标志着扩散模型(Diffusion Models,DM)在图像生成领域开始超越传统的GAN模型,进一步推动了DM的应用。 然而,早期的DM直接作用于像素空…

羊大师讲解如何判断自己适不适合喝羊奶

羊大师讲解如何判断自己适不适合喝羊奶 判断自己是否适合喝羊奶,可以考虑以下几个方面: 身体健康状况:如果身体健康,没有特殊的疾病或过敏史,那么一般来说,喝羊奶是没有问题的。然而,如果有某…

Django框架——请求与响应

上篇文章我们学习了Django框架——配置文件和视图函数,这篇文章我们学习Django框架——请求与响应。 客户端和服务端的请求与响应过程:客户端访问某个网站并发出URL请求,服务器接受到请求后,根据请求内容来返回响应,如…

掌握X-Content-Type-Options头的防护之力

欢迎来到我的博客,代码的世界里,每一行都是一个故事 掌握X-Content-Type-Options头的防护之力 前言X-Content-Type-Options头的作用未定义X-Content-Type-Options的风险如何配置X-Content-Type-Options头常见MIME类型不匹配的问题 前言 你是否曾遇到过浏…