UNet 浅析

article/2025/8/24 8:12:54

文章目录

  • 1. UNet 简介
  • 2. UNet 详解
  • 3. 代码实例 - 医学图像分割 (ISBI数据集)
  • 【参考】

1. UNet 简介

UNet 属于 FCN 的一种变体,它可以说是最常用、最简单的一种分割模型,它简单、高效、易懂、容易构建,且可以从小数据集中训练。2015 年,UNet 在论文 U-Net: Convolutional Networks for Biomedical Image Segmentation 中被提出 。UNet 的初衷是为了解决医学图像分割的问题,在解决细胞层面的分割的任务方面,其在 2015 年的 ISBI cell tracking 比赛中获得了多个第一。之后,UNet 凭借其突出的分割效果而被广泛应用在语义分割的各个方向(如卫星图像分割,工业瑕疵检测等)。

2. UNet 详解

UNet网络结构
UNet 网络结构如上图所示,其网络结构是对称的,形似英文字母 U,故而被称为 UNet 。就整体而言,UNet 是一个Encoder-Decoder的结构(与 FCN 相同),前半部分是特征提取,后半部分是上采样。

  • Encoder:左半部分,由两个 3x3 的卷积层(ReLU)+ 一个 2x2 的 maxpooling 层组成一个下采样模块
  • Decoder:右半部分,由一个上采样的卷积层 + 特征拼接 concat + 两个 3x3 的卷积层(ReLU)构成一个上采样模块

Encoder 由卷积操作和下采样操作组成,所用卷积结构统一为 3x3 的卷积核,padding=0striding=1。没有 padding 所以每次卷积之后特征图的 H 和 W 变小了,在跳层连接(Skip connection)时需注意特征图的维度。

Decoder 用以恢复特征图的原始分辨率,除了卷积以外,该过程的关键步骤就是上采样跳层连接。上采样常用转置卷积和插值两种方式实现。在插值实现方式中,双线性插值(bilinear)的综合表现较好也较为常见 。要想网络获得好的效果,跳层连接基本必不可少。UNet 中的跳层连接通过拼接将底层的位置信息与深层的语义信息相融合。需要注意的是,在 FCN 中,特征图是以相加的方式进行融合:

  • FCN:通过特征图对应像素值的相加来融合特征;
  • UNet :通过通道数的拼接,以形成更的特征(当然这样会更佳消耗显存)。
  • 相加方式:特征图维度没有变化,但每个维度包含了更多特征。对于普通分类任务这种不需要从特征图复原到原始分辨率的任务来说,这是一个高效的选择;
  • 拼接方式:保留了更多的维度/位置信息,这使得后面的网络层可在浅层特征与深层特征间自由选择,这对语义分割任务来说更具优势。

UNet网络结构特点

  • U型网络结构;
  • 跳层连接;

跳层连接

  • 在上采样过程中融合下采样过程中的特征图;
  • 融合方式为concatenate,按特征图通道数进行叠加;
  • d在实际中,融合的两张特征图尺寸可能不同,一般可采用裁剪和padding(UNet采用方式)两种方式进行解决;

UNet 的优点主要有:

  • 深/浅层特征有着各自意义:网络越深,感受野越大,网络关注那些全局特征(更抽象、更本质);浅层网络则更加关注纹理等局部特征特征;
  • 通过特征拼接来实现边缘特征的找回。通过上采样(转置卷积)固然能够得到更大尺寸的特征图,但特征图的边缘是缺少信息的。毕竟每一次下采样提取特征的同时,必然会损失一些边缘特征,而上采样并不能找回这些失去的特征。

3. 代码实例 - 医学图像分割 (ISBI数据集)

任务:给一张细胞结构图,将每个细胞相互分离出来;
训练集和测试集各有图片30张,图片大小为5125121;

在这里插入图片描述

【github代码地址】-- 实测可运行

【参考】

  1. Pytorch 深度学习实战教程(三):UNet模型训练,深度解析!;
  2. 语义分割网络 U-Net 详解;
  3. 图像分割必备知识点 | Unet详解 理论+ 代码;

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

相关文章

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…

指定Geany使用的Python版本

本文介绍&#xff1a; 在win7下配置Geany,使其使用 Python 3 因为电脑上安装了不同版本的Python&#xff0c;需要根据实际情况来进行版本切换。 第一步&#xff1a;首先点击"生成"按钮的三角箭头&#xff0c;再点击"设置生成命令" 第二步&#xff1a;在弹出…

ModuleNotFountError:No module named ‘gensim‘(在python代码中导入gensim模块)

运行窗口&#xff1a; conda install 模块 pip install 模块 第一个命令应该由于网速太慢没有下载完全&#xff0c;第二个命令我手动输入n退出了。 网速慢&#xff0c;可以使用如下命令&#xff1a; pip install -i https://pypi.douban.com/simple gensim pip install -i…

Python学习笔记--图例 legend

Python学习笔记--图例 legend 参靠视频:《Python数据可视化分析 matplotlib教程》链接&#xff1a;https://www.bilibili.com/video/av6989413/?p6 所用的库及环境: IDE:Pycharm Python环境&#xff1a;python3.7 Matplotlib: Matplotlib 1.11 Numpy&#xff1a; Numpy1.1…