​​​​​​​U-Net架构

​​​​​​基本了解

UNet是一种经典的卷积神经网络架构,解决了传统方法在数据量不足时面临的挑战。最初由医学图像分割任务提出,后被广泛应用于扩散模型(如DDPM、DDIM、Stable Diffusion)中作为噪声预测的核心网络。

核心结构包括一个收缩路径(downsampling path)和一个对称的扩展路径(upsampling path)。收缩路径通过多次下采样操作捕获上下文信息,而扩展路径则通过上采样操作结合底层特征和高层特征,实现精确的像素级分割。这种U形结构设计使其能够高效地利用有限的标注样本,并在现代GPU上快速执行。

以下是UNet的详细构成及其在扩散模型中的改进设计:


一、 UNet基础架构

1. 整体结构

UNet呈对称的U型结构,包含:

  • 编码器(下采样路径):逐步提取高层语义特征,降低分辨率。

  • 解码器(上采样路径):逐步恢复空间分辨率,结合编码器特征进行精确定位。

  • 跳跃连接(Skip Connections)连接编码器与解码器对应层,保留细节信息。

2. 核心组件
层级操作作用
编码器层卷积 → 激活(如ReLU) → 池化/步长卷积提取特征,压缩空间维度
解码器层反卷积/插值上采样 → 跳跃连接 → 卷积恢复分辨率,融合低级与高级特征
瓶颈层深层卷积操作捕获全局上下文信息

二、 扩散模型中UNet的改进

在扩散模型(如DDPM、DDIM)中,UNet经过以下关键改进:

1. 时间步嵌入(Timestep Embedding)
  • 作用:将扩散过程的时间步信息注入网络,指导噪声预测。

  • 实现

    • 时间步编码为向量(通过正弦位置编码或MLP)。

    • 通过相加或拼接融入各层特征图。

2. 残差块(Residual Blocks)
  • 结构:每个块包含多个卷积层 + 归一化层(如GroupNorm) + 激活函数

  • 改进

    • 引入残差连接,缓解梯度消失。

    • 集成时间步嵌入(通过相加或自适应归一化)。

3. 注意力机制(Attention Layers)
  • 位置:通常在瓶颈层或解码器中插入。

  • 类型

    • 自注意力(Self-Attention):捕捉长程依赖。

    • 交叉注意力(Cross-Attention):用于多模态模型(如Stable Diffusion中结合文本提示)。

4. 分组归一化(Group Normalization)
  • 替代方案:相比BatchNorm,更适合小批量训练,提升稳定性。

5. 多尺度特征融合
  • 跳跃连接增强:通过通道注意力(如Squeeze-and-Excitation)动态加权特征。


三、 典型扩散模型UNet结构示例

以Stable Diffusion为例,其UNet结构参数如下:

- 输入:带噪声的潜空间特征图(64×64×4)
- 编码器:4个下采样层,每层包含2个残差块
- 瓶颈层:2个残差块 + 自注意力层
- 解码器:4个上采样层,每层包含2个残差块
- 跳跃连接:逐层传递编码器特征至解码器
- 总参数量:约860M(Stable Diffusion 1.4版本)

四、 关键设计思想

  1. 分辨率保持:通过跳跃连接保留低级细节,避免上采样时的模糊问题。

  2. 动态条件注入:时间步嵌入和文本条件(如CLIP embedding)通过自适应归一化(AdaGN)融入网络:

    • # 示例:自适应归一化(AdaGN)
      def adaptive_group_norm(x, timestep_emb, scale_shift=True):scale, shift = timestep_emb.chunk(2, dim=1)x = GroupNorm(x)if scale_shift:x = x * (1 + scale) + shiftreturn x
  3. 轻量化设计

    • 使用深度可分离卷积(Depthwise Separable Conv)减少计算量。

    • 通道数动态调整(如Stable Diffusion中通道数从128到1024递增)。


五、 与传统UNet的区别

特性传统UNet(医学分割)扩散模型UNet
输入/输出原始图像 → 分割掩码噪声图像 + 时间步 → 噪声残差
归一化方式BatchNormGroupNorm
条件注入时间步嵌入 + 文本/图像条件
注意力机制自注意力/交叉注意力
参数量级较小(几M~几十M)较大(几百M~上B)

六、 代码框架示例(PyTorch风格)

class DiffusionUNet(nn.Module):def __init__(self):super().__init__()# 编码器self.encoder = nn.ModuleList([DownBlock(3, 64),          # 下采样块DownBlock(64, 128),DownBlock(128, 256)])# 瓶颈层(含注意力)self.bottleneck = nn.Sequential(ResBlock(256, 512),SelfAttention(512),ResBlock(512, 512))# 解码器self.decoder = nn.ModuleList([UpBlock(512, 256),          # 上采样块(含跳跃连接)UpBlock(256, 128),UpBlock(128, 64)])# 时间步嵌入self.time_embed = nn.Sequential(nn.Linear(128, 256),nn.SiLU(),nn.Linear(256, 256))def forward(self, x, t):t_emb = self.time_embed(t)      # 时间步嵌入skips = []for down in self.encoder:x = down(x, t_emb)          # 注入时间条件skips.append(x)x = self.bottleneck(x)for up in self.decoder:x = up(x, skips.pop(), t_emb)return x

DDPM中的应用

在扩散模型(如DDPM)中,改进的UNet结构通过以下方式整合时间嵌入(time embedding),实现对噪声的精准预测:

1. UNet的基础结构

编码器-解码器架构:UNet由对称的下采样(编码器)和上采样(解码器)路径组成,通过跳跃连接保留多尺度特征。

残差块(ResBlock):每个下采样和上采样阶段包含多个残差块,用于特征提取。

2. Time Embedding的作用

时间步编码:扩散过程中的时间步 t 被编码为高维向量(如通过正弦函数或MLP),表示当前加噪阶段。

动态调节网络:Time embedding作为条件信号,影响每一层的计算,使网络适应不同时间步的噪声分布。

3. Time Embedding的注入方式

特征图加法:Time embedding通过线性层投影后,直接添加到残差块的特征图中

自适应归一化(AdaGN):

4. 输入与输出的设计

输入:加噪图像在时间步t时由原始图像逐步添加高斯噪声得到。

输出:预测的噪声ϵθ (xt,t),目标是最小化与真实噪声的误差

5. 关键理解点

条件化每一层:每个残差块均接收相同的time embedding,确保网络在不同时间步采用不同的特征变换策略。

时间感知的噪声预测:通过时间嵌入,模型能区分早期(大尺度噪声)和晚期(细节噪声)的去噪需求,提升生成质量。

6. 扩散模型中的应用

前向过程:逐步为图像添加噪声

反向过程:UNet预测噪声,通过迭代去噪重建

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【蓝桥杯】省赛:分糖果(思维/模拟)

思路 数据很小,直接暴力模拟。 有意思的是一个列表如何当成循环队列写?可以arr[(i1)%n]让他右边超出时自动回到开头。 code import os import sysn int(input()) arr list(map(int,input().split()))ans 0 while 1:arr1 arr.copy()for i in range…

如何理解分布式光纤传感器?

关键词:OFDR、分布式光纤传感、光纤传感器 分布式光纤传感器是近年来备受关注的前沿技术,其核心在于将光纤本身作为传感介质和信号传输介质,通过解析光信号在光纤中的散射效应,实现对温度、应变、振动等物理量的连续、无盲区、高…

【java面型对象进阶】------继承实例

继承结构下的标准Javabean 代码如下: package demo10;//定义员工父类 public class Employee {private String id;private String name;private double salary;//构造方法public Employee(){}public Employee(String id,String name,double salary){this.idid;thi…

matrix-breakout-2-morpheus 靶机----练习攻略 【仅获取shell】

【此练习仅做到反弹shell】 1.靶机下载地址 https://download.vulnhub.com/matrix-breakout/matrix-breakout-2-morpheus.ova 2. 打开靶机,kali使用nmap扫描同C段的主机 找到靶机ip 确保靶机和kali网卡均为NAT模式 先查看kali的ip nmap 192.168.182.1/24 …

解锁MySQL 8.0.41源码调试:Mac 11.6+CLion 2024.3.4实战指南

文章目录 解锁MySQL 8.0.41源码调试:Mac 11.6CLion 2024.3.4实战指南前期准备环境搭建详细步骤安装 CLion安装 CMake 3.30.5准备 MySQL 8.0.41 源码配置 CMake 选项构建 MySQL 项目 调试环境配置与验证配置 LLDB 调试器启动调试验证调试环境 总结与拓展碰到的问题1.…

使用码云搭建CocoaPods远程私有库

一、创建远程私有索引库 用来存放私有框架的详细描述信息.podspec文件 1. 创建私有库 假设码云上创建的私有库为repo-spec 2. 查看本地已存在的索引库 pod repo list 3. 将远程私有索引库添加到本地 pod repo add [https://gitee.com/jingluoguo/repo-spec.git](https://gi…

Devops之AWS:如何安装AWS CLI

AWS 命令行界面(AWS CLI)是一种开源工具,让我们能够使用命令行 Shell 中的命令与 AWS 服务进行交互。 安装步骤: 下载并运行AWS CLI的MSI安装程序: 点击如下的链接,即可下载MSI安装程序: htt…

docker需要sudo才能使用

一种方法是添加当前用户到docker组里去,当时添加的时候貌似是没问题的,但是现在又不可以了 产生的报错 ❯ docker images Cannot connect to the Docker daemon at unix:///home/ying/.docker/desktop/docker.sock. Is the docker daemon running?解决…

jmeter将返回的数据写入csv文件

举例说明,我需要接口返回体中的exampleid与todoid的数据信息(使用边界提取器先将其提取),并将其写入csv文件进行保存 使用后置处理器BeanShell 脚本实例如下 import java.io.*;// 设置要写入的文件路径 String filePath "…

在线教育网站项目第四步:deepseek骗我, WSL2不能创建两个独立的Ubuntu,但我们能实现实例互访及外部访问

一、说明 上一章折腾了半天,搞出不少问题,今天我们在deepseek的帮助下,完成多个独立ubuntu24.04实例的安装,并完成固定ip,实践证明,deepseek不靠谱,浪费我2个小时时间,我们将在下面实…

Apache Paimon 在抖音集团多场景中的优化实践

资料来源:火山引擎-开发者社区 本文将基于抖音集团内部两大业务的典型实时数仓场景,介绍Paimon在抖音集团内部的生产实践。 作者:李明、苏兴、文杰 抖音集团大数据工程师 目前抖音集团内部主要使用 Lambda 架构进行实时数仓建设,其…

PDF Reader Pro for Mac v4.9.0 PDF编辑/批注/OCR/转换工具 支持M、Intel芯片

PDF Reader Pro 是一款用户必备的集管理、编辑、转换、阅读功能于一体的专业的全能PDF阅读专家。快速、易用、强大,让您出色完成 PDF 工作。 应用介绍 PDF Reader Pro,一款功能齐全且强大的PDF阅读和编辑软件。支持PDF阅读、批注、PDF编辑、PDF格式转换…

HTML5与CSS3新特性详解

一、HTML5新特性 1.概述 HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。 这些新特性都有兼容性问题,基本是 IE9 以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量使用这些新特…

shell 脚本搭建apache

#!/bin/bash # Set Apache version to install ## author: yuan# 检查外网连接 echo "检查外网连接..." ping www.baidu.com -c 3 > /dev/null 2>&1 if [ $? -eq 0 ]; thenecho "外网通讯良好!" elseecho "网络连接失败&#x…

Linux环境使用jmeter做性能测试

一、安装JDK,版本jdk1.8 1、下载压缩包到/jdk目录下解压 cd /jdk tar -zxvf jdk-8u241-linux-64.tar.gz 2、配置环境变量 在profile文件中末尾新增信息如下所示 vim /etc/profile export JAVA_HOME/usr/local/java/jdk/jdk1.8.0_221 export PATH$PATH:$JAVA_HOM…

巧用符号链接搬移C盘中的软件数据目录到其他盘

#工作记录 我们知道,在Windows11系统,有些软件是不能指定安装目录的,有些软件即使指定了安装目录可是在更新版本之后还是会安装到默认的C盘目录中(比如剪映),而且每次安装某些软件之后,这些软件…

Mysql的安装配置

目录 MySQL 简介 MySQL 的下载安装 mysql配置【默认以及下载好】 (1)配置环境变量 (2)修改配置文件 (3)以管理员身份运行cmd(一定要用管理员身份运行,不然权限不够) …

登山第二十梯:无人机实时自主探索——我是一只小小小鸟

文章目录 一 摘要 二 资源 三 内容 一 摘要 自主探索是无人机 (UAV) 各种应用的基本问题。最近,基于 LiDAR 的探索因其能够生成大规模环境的高精度点云地图而受到广泛关注。虽然点云本身就为导航提供了信息,但许多现有的勘探方…

基于FPGA轨道交通6U机箱CPCI脉冲板板卡

板卡简介: 本板为脉冲板,脉冲板主要执行CPU下达的指令,通过实现各种控制算法来调节PWM,然后输出光纤PWM信号来驱动变频器功率模块以达到控制电机的目的。 性能规格: 电源:DC5V;15V FPGA&…

一键批量txt转DWG,DWG转txt——插件实现 CAD c#二次开发

如下图,我们有大量dwg需要转为txt格式,或txt格式坐标需要转为dwg格式,此插件可一键完成一个文件夹下所有文件的转换。 插件使用方式 命令行输入: netload 加载此dll插件, 输入: dwg2txt 可将dwg转为t…