深度学习基础——U-Net图像分割

news2025/1/12 21:06:51

        图像分割,就是根据图像的某种相似性特征(如亮度、颜色、纹理、面积、形状、位置、局部统计特征或频谱特征等)将医学图像划分为若干个互不相交的“连通”区域。
        相关特征在同一区域内表现出一致性或相似性,而在不同区域间表现出明显的不同,也就是说在区域边界上的像素存在某种不连续性。

U-Net网络介绍

        U-Net是由Olaf Ronneberger等人提出的改进全卷积网络,常用于图像分割任务。U-Net得名于它的网络结构图,类似一个英文字母“U”.
        U-Net网络主要有编码器和解码器两个部分,左半边是一个从上到下编码器,从原始图像抽取特征;右半边是一个从下到上解码器,从图像特征还原目标信息。

下采样和上采样

下采样(编码)

第一部分网络与普通卷积网络相同,特征图通过2个3x3卷积(padding为0,stride为1)和1个最大池化模块完成一次下采样,共压缩了4次,获取多尺度特征图。下采样的目的是获取图像中的上下文信息。

上采样(解码)

第二部分与前面基本对称,特征图通过2个3x3卷积和1个转置卷积模块完成一次上采样,共4个上采样模块。上采样的目的是恢复图像分辨率。
 

 

Skip-Connection

在网络传播的过程中,随着网络越来越深,相应特征图的感受野会越来越大,但是保留的细节信息会越来越少,为了进一步弥补编码阶段下采样丢失的信息,U-Net算法利用skip-connection进行拼接层来融合两个过程中对应位置上的特征图,使得解码器在进行上采样时能够保留更多高层特征图蕴含的高分辨率细节信息,进而提高分割精度。

 

底层特征与高层特征

数据预处理

        例如,医学图像数据的获取和标注成本很高,难以找到充足的数据来完成任务。为了防止深度学习模型出现严重的过拟合现象,当数据量不足时,通常会做数据增强,扩大数据集样本量,提升数据样本空间的复杂度。

        可以通过移动窗口的方式将一张图像切分成多个子图以及弹性形变达到数据增强的目的。除此之外还可以使用普通的仿射变换(即翻转,旋转,裁剪)和改变亮度来实现。

        由于U-Net网络的输入是大于输出的,因此,在输入图像前,还需要对原图进行放大。如下图,左图中间白色线框为训练集中的原图,外面一圈是通过对边缘部分进行翻转,旋转变换得到的。实际预测的区域为黄色的区域,实际输入的区域为蓝色的区域。

交叉嫡损失函数

        图像分割中最常用的损失函数是逐像素交叉嫡损失。该损失函数分别检查每个像素,将类预测(深度方向的像素向量)与目标向量进行比较。
        交叉嫡损失函数单独评估每个像素矢量的类预测,然后对所有像素求平均值,可以认为图像中的像素被平等的学习了。但是,医学图像中常出现类别不均衡的问题,由此导致训练会被像素较多的类主导,对于较小的物体很难学习到其特征,从而降低网络的准确性。
 

左图为选定像素的预测结果,右图为对应像素的目标.
逐像素损失计算为对数损失,对所有可能的类求和。此评分在所有像素上重复计算并取平均值。
 

 Dice损失函数

        在图像分割的过程中,网络的损失函数一般使用Dice系数作为损失函数。Dice系数源于二分类问题,是一种相似度度量函数,通常用于计算两个样本的相似度,取值范围在[0,1].
        Dice系数的计算公式如下。其中,A表示真实值,B表示预测值。|A∩B|是A和B之间的交集,|A|和|B|分别表示A和B的元素的个数。通常用“1-Dice”作为可以最小化的损失函数,这种损失函数被称为soft dice loss。

 

TP:被正确分类的正例
FP:错分为正例的负例
FN:错分为负例的正例

目前分割主要存在问题

使用深度学习进行图像分割,采用了分类的思路,对每个像素点进行分类,判断像素点是属于目标前景还是背景

传统卷积神经网络做分类的步骤是:
·单个图像经过多层卷积得到降维之后的特征图

·特征图经过全连接层变成—个分类器

·输出一个类别的向量,这就是分类的结果

对于基于神经网络的图像分割问题来说,图像中的每一个像素都会输出一个分类结果,传统神经网络中分类的向量,就变成了一个分类的特征图,通道数等于类别数量。
分割网络中的池化操作在减少feature的空间分辨率的同时增加了模型感受野,这也是模型应对小型平移具有鲁棒性的根本原因。但是连续的下采样得到的feature map就会丢失一些low-level中关键信息(例如边沿,边界等)。这就让识别和准确定位产生了矛盾。如果网络不采取任何池化操作,这在目标边界定位上效果较好,但是识别性能差。
为了解决这个问题,U-net采用多个skip-connection将底层的feature和高层的feature concat,U-Net结构如下图。


每个蓝色框对应一个多通道特征图。通道数显示在框的顶部。x-y尺寸位于框的左下边缘。白框代表复制的特征图。箭头表示不同的操作。

卷积层数量在20个左右,包含4次上采样与4次下采样。

·U-Net建立在FCN的网络架构上,作者在网络框架上改进,使其能够使用很少的训练图像就得到很精确的分割结果。
·添加连续upsample阶段,并且channel维度增大,在decoder部分concat进入更多的原图像纹理的信息。
·U-Net没有FC层(全连接层),卷积层的数量大约在20个左右,4次下采样,4次上采样。

U-Net相关超参数

 以下为本实验的主要超参数设置,可根据实际训练情况对参数进行微调以达到较好的训练效果。

  • 'Ir':学习率
  • 'epochs:所有的数据送入网络中,完成了一次前向计算+反向传播的过程
  • 'distribute_epochs':分布式训练
  • 'batchsize':在深度学习中一般采用随机梯度下降法训练,即每次在训练集中取batchsize个样本训练
  • 'cross_valid_ind":交叉验证
  • 'num_classes':最后一个全连接层所分出的类个数.
  • 'num_channels':通道数量
  • 'keep_checkpoint_max': 改变keep_checkpoint_max的值就可以改变保存到本地的checkpoint的数量
  • 'weight_decay:权重衰减
  • 'loss_scale':损失标度,降低发生下溢的几率
  • 'resume':预训练模型
  • 'resume_ckpt':预训练的ckpt文件路径,可在此基础上对预模型进行微调训练来优化结果

 

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

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

相关文章

阿赵UE学习笔记——16、渲染性能相关

阿赵UE学习笔记目录 大家好,我是阿赵。   继续学习虚幻引擎的使用。上一篇说了灯光的移动性问题,这一篇来看看怎样去辨别灯光性能的好坏。   虚幻引擎里面有一组显示模式是专门用来看场景当前的灯光和网格渲染的,叫做优化试图模式&#x…

动态内存管理(中)

动态内存管理(上)-CSDN博客(malloc, realloc, calloc, free函数的用法以及注意事项等知识点) 目录 1.对空指针的解引用操作 2.对动态开辟空间的越界访问 3.对非动态内存开辟空间使用free空间…

SpringBoot + Nacos 实现动态化线程池

1.背景 在后台开发中,会经常用到线程池技术,对于线程池核心参数的配置很大程度上依靠经验。然而,由于系统运行过程中存在的不确定性,我们很难一劳永逸地规划一个合理的线程池参数。 在对线程池配置参数进行调整时,一…

网络:SNMP协议

1. SNMP技术原理 SNMP的结构包括网管站NMS(Network Management Station)和Agent两部分。SNMP协议是规定NMS和Agent之间如何传递管理信息的应用层协议(UDP协议,使用162端口)。 2. SNMP版本 SNMPv1:方便实现&#xff0c…

怎么在电脑上做工作笔记?电脑桌面电子笔记软件

在繁忙的职场中,随时随地记录工作笔记是许多职场人士的日常需求。这不仅包括了会议记录、项目进展,还有一些灵感、规划和工作要点,都需要随手记下,以便随时查看和回顾。那么我们如何在电脑上做工作笔记更高效、便捷呢?…

Python实现线性逻辑回归和非线性逻辑回归

线性逻辑回归 # -*- coding: utf-8 -*- """ Created on 2024.2.20author: rubyw """import matplotlib.pyplot as plt import numpy as np from sklearn.metrics import classification_report from sklearn import preprocessing from sklearn…

jmeter 命令行启动 动态参数化

[Jmeter命令行参数] 一、在linux中,使用非gui的方式执行jmeter。若需更改参数,必须先编辑jmx文件,找到对应的变量进行修改,比较麻烦。因此,可以参数化一些常用的变量,直接在Jmeter命令行进行设置 二、参数…

信息安全法律法规体系

信息安全法律法规体系 我国信息安全法规体系可以分为4层。 法律层面具体对应的法律、法规一般性法律规定宪法、国家安全法、国家秘密法、治安管理处理条例等虽然没有专门针对信息安全的条款,但约束了信息安全相关的行为规范和惩罚信息网络犯罪的法律《中华人名共和国刑法》《…

专家之路上的Flow高级秘籍

公众号「稀有猿诉」 原文链接 专家之路上的Flow高级秘籍 『君不见,黄河之水天上来,奔流到海不复回。』 学习与河流一样,一方面学无止境,又是逆水行舟,不进则退,因为其他人都在卷。前文一篇文章讲了F…

单片机02_寄存器_GPIO设置

芯片概述 C51:0口、1口、2口、3口,P00~p07、P10~P17、P20~P27、P30~P37 STM32:A口、B口、C口、D口,PA0~PA15/PA5 GPIOA.5 STM32F407ZGT6有7组GPIO端口,分别是:A B C D E F G,每组均有16个GPIO端…

com.alibaba.fastjson.JSONException: toJSON error的原因

问题: 导出接口报错,显示json格式化异常 发现问题: 第一个参数为HttpResponse,转换成json的时候报错 修改方法: 1.调换两个参数的位置 2.在aop判断里边 把ServletAPI过滤掉 Before("excudeWebController()")pub…

Leetcode1206(设计跳表)

例题: 分析: 我们先来找一找跳表与单链表的相同点和不同点。 相同点: 跳表和单链表一样,都是由一个一个的节点组成的链表。 不同点: ①:跳表中的元素已经是排好序的(图中从小到大)&…

突破性创新:OpenAI推出Sora视频模型,预示视频制作技术的未来已到来!

一、前言 此页面上的所有视频均由 Sora 直接生成,未经修改。 OpenAI - Sora is an AI model that can create realistic and imaginative scenes from text instructions. 2024 年 2 月 16 日,OpenAI 发布 AI 视频模型 Sora,60 秒的一镜到底…

STM32-启用蜂鸣器

目录 1 、电路构成及原理图 2、编写实现代码 main.c beep.c beep.h 3、代码讲解 4、 烧录到开发板调试、验证代码 5、检验效果 本人使用的是朗峰 STM32F103 系列开发板,此笔记基于这款开发板记录。 1 、电路构成及原理图 首先,通过朗峰 F1 开…

VILT算法解读

VILT是一种典型的单塔结构,不同于双塔结构由两个独立的Image Encoder以及Text Encoder组成(比如clip),单塔结构的模型一般只有一个共用的编码器,称为Multi-Modal Encoder。 1、VILT算法原理 VILT被认为是最简单的…

SpringBoot中使用PageHelper插件实现Mybatis分页

场景 SpringBoot中整合Mybatis时一般添加的依赖为 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.1</version></dependency> 如果要实现分页查…

PostgreSQL按日期列创建分区表

在PostgreSQL中&#xff0c;实现自动创建分区表主要依赖于表的分区功能&#xff0c;这一功能从PostgreSQL 10开始引入。分区表可以帮助管理大量数据&#xff0c;通过分布数据到不同的分区来提高查询效率和数据维护的便捷性。以下是在PostgreSQL中自动创建分区表的一般步骤&…

docker之安装mongo创建运行环境

目录 一、docker pull 最新资源 二、启动mongo镜像 启动命令查看日志拉取低版本镜像成功启动 三、进入mongo容器 进入容器进入mongo环境查询当前所在库切换库至admin随意切换库 并 创建用户登录用户新增文档数据等 五、总结 版本兼容可备份操作 一、docker pull 最新资源…

java面试集合篇

上面是java中集合的整体框架图。 集合使用的数据结构 算法复杂度分析 时间复杂度分析 时间复杂度分析&#xff1a;来评估代码的执行耗时的 /*** 求1~n的累加和* param n* return*/ public int sum(int n) {int sum 0;for ( int i 1; i < n; i) {sum sum i;}return …