Unet系列论文总结

Unet系类算法为什么在医疗图像处理上取得这么好的效果?很大一部分原因是由于医疗图像自身的特性所决定的,首先是医疗图像结构固定且简单、其次Unet网络结构简单与难获取的医疗图像匹配度较高。导致的问题就是深度学习强大的特征表示能力并不能很好的发挥其作用,最后就是数据集获取难度很大。一般人获取不到,就算获取到大量的医疗图像数据,对其进行标注真的是一件特别无聊的工作。专业的事交给专业的人去做比较好,现实生活中可能会存在以下几个问题,搞CV的人对医疗图像进行标注有困难,正常不正常傻傻分不清。医生对CV可能也比较陌生,不是针对所有人,针对大部分人而言来说,情况就是这么个情况。

1.Unet

U-Net: Convolutional Networks for Biomedical Image Segmentation
code
paper
在这里插入图片描述

从Unet网络结构图可知,该网络结构是一个编码解码结构,编码由卷积、池化组成,也可理解为下采样操作。目的是为了获取不同尺寸的feature map。解码器由卷积、特征拼接、上采样组成,其中特征拼接是feature map维度上的拼接,其目的是为了获取更厚的feature map,因编码阶段卷积池化过程会使图像的细节信息丢失,feature map进行拼接是为了尽可能的找回编码阶段所丢失的图像细节信息。拼接这一操作虽然可以避免图像信息的缺失,但这一操作能找回丢失信息的多少?拼接的方式到底好还是不好?是一个值得考虑的问题。Unet网络已然成为当前医疗图像分割的baseline,主要是因为医疗图像本身自带的一些数据特性所决定的。大多医疗图像数据的特点有以下几点:首先是医疗图像语义相比较自然场景其语义较为简单且结构固定,导致其所有的feature都很重要,也即是说低级、高级的语义信息都尽量保存下来,以便模型能更好的对其进行学习。其次是医疗数据获取难度大,能获取的数据量过少,导致的问题是网络过深与数据量少这一矛盾。会出现过拟合现象。最后是Unet相比较于其他的分割模型,其结构简单,具有更大的操作空间。
后续的改进工作大多围绕特征提取、特征拼接展开

torch实现如下

import torch
import torch.nn as nn
import torch.nn.functional as F

class double_conv2d_bn(nn.Module):
    def__init__(self,in_channels,out_channels,kernel_size=3,strides=1,padding=1):
        super(double_conv2d_bn,self).__init__()
        self.conv1 = nn.Conv2d(in_channels,out_channels,
                               kernel_size=kernel_size,
                              stride = strides,padding=padding,bias=True)
        self.conv2 = nn.Conv2d(out_channels,out_channels,
                              kernel_size = kernel_size,
                              stride = strides,padding=padding,bias=True)
        self.bn1 = nn.BatchNorm2d(out_channels)
        self.bn2 = nn.BatchNorm2d(out_channels)
    
    def forward(self,x):
        out = F.relu(self.bn1(self.conv1(x)))
        out = F.relu(self.bn2(self.conv2(out)))
        return out
    
class deconv2d_bn(nn.Module):
    def __init__(self,in_channels,out_channels,kernel_size=2,strides=2):
        super(deconv2d_bn,self).__init__()
        self.conv1 = nn.ConvTranspose2d(in_channels,out_channels,
                                        kernel_size = kernel_size,
                                       stride = strides,bias=True)
        self.bn1 = nn.BatchNorm2d(out_channels)
        
    def forward(self,x):
        out = F.relu(self.bn1(self.conv1(x)))
        return out
    
class Unet(nn.Module):
    def __init__(self):
        super(Unet,self).__init__()
        self.layer1_conv = double_conv2d_bn(1,8)
        self.layer2_conv = double_conv2d_bn(8,16)
        self.layer3_conv = double_conv2d_bn(16,32)
        self.layer4_conv = double_conv2d_bn(32,64)
        self.layer5_conv = double_conv2d_bn(64,128)
        self.layer6_conv = double_conv2d_bn(128,64)
        self.layer7_conv = double_conv2d_bn(64,
<think>嗯,用户想要深入了解U-Net系列网络的全面解析,特别是精度、功能、优势、不足、超参数和核心方程。用户提供的站内引用其实非常有价值,提到了跳跃连接、1x1卷积、架构修改分类法以及复现难点等关键点。不过用户强调这些引用仅供参考,核心需求还是集中在技术细节的整理上。 用户可能是医学影像方向的研究者或工程师,正在做文献调研或模型选型。ta特意要求"最核心方程的解析",说明需要数学层面的理解,而不仅是文字描述。从ta能准确列出"超参数设置"这种专业需求来看,应该具备相当的深度学习基础。 需要重点覆盖几个维度: 首先是精度表现,医学图像分割领域常见数据集上的指标必须列出来,比如ISBI细胞追踪挑战赛那种89%的经典结果。但要注意说明不同变体的差异,比如3D U-Net在体积数据上的优势。 功能方面除了分割这个核心任务,也得提提其他应用场景,比如配准或分类的适应性改造,毕竟用户问的是"各任务"。 优势部分跳跃连接肯定是重中之重,要解释清楚如何解决浅层信息丢失问题。不足则要提小样本依赖和计算成本,特别是3D场景下的显存问题——这点对实际部署很重要。 超参数设置比较棘手,因为原始论文其实写得简略。只能根据后续研究和复现经验总结,比如Adam优化器的通用性,或是epoch数的典型范围。要强调这些是经验值,具体任务需要调整。 最关键的方程当然是跳跃连接公式,必须用LaTeX严格呈现。可以补充说明特征图裁剪的细节,这是很多复现出错的地方。另外1x1卷积的降维作用用$\mathbb{R}^{H \times W \times C} \to \mathbb{R}^{H \times W \times K}$这种数学表达会更清晰。 用户引用[4]提到的复现难点很有价值,要在不足里体现出来。比如错误使用反卷积导致棋盘伪影的问题,可以引用这篇文献增强说服力。不过参考文献编号要和用户给的保持一致。 </think>以下是对U-Net系列网络的系统解析,综合核心特性、性能及技术细节: --- ### **1. 核心功能** - **主要任务**:医学图像分割(如器官、肿瘤分割)、生物显微图像分析等 - **核心机制**:**编码器-解码器结构** + **跳跃连接**(Skip Connections) - **关键创新**:通过跳跃连接融合浅层细节特征与深层语义特征,解决小样本分割问题[^1][^4] --- ### **2. 精度表现(典型任务)** | **数据集/任务** | **U-Net变体** | **精度指标** | |-----------------------|---------------|-------------------| | ISBI细胞追踪挑战赛 | 原始2D U-Net | IoU=92% | | BraTS脑肿瘤分割 | 3D U-Net | Dice系数≈0.85-0.89| | LUNA肺结节分割 | U-Net++ | 召回率94.5% | | 视网膜血管分割 | Attention U-Net| F1-score=0.83 | --- ### **3. 核心方程解析** #### **(1) 跳跃连接特征融合** 设编码器第$i$层输出为$E_i$,解码器第$j$层输入为$D_j$,跳跃连接操作: ``` $$D_j = \mathcal{U}(D_{j+1}) \oplus \text{Crop}(E_i)$$ ``` 其中: - $\mathcal{U}(\cdot)$:上采样操作 - $\oplus$:通道维度拼接(Concatenation) - $\text{Crop}(\cdot)$:裁剪编码器特征图至与解码器相同尺寸[^1][^4] #### **(2) 1×1卷积映射** 分割头将特征通道压缩至类别数$K$: ``` $$\mathbf{Y} = \sigma(\mathbf{W}_{1\times1} * \mathbf{F}_{\text{final}}), \quad \mathbf{Y} \in \mathbb{R}^{H \times W \times K}$$ ``` $\sigma$为Sigmoid/Softmax激活函数[^1] --- ### **4. 优势与不足** | **优势** | **不足** | |-----------------------------------|-----------------------------------| | ▶ 小样本下高精度(医学影像) | ▶ 参数量较大(原始U-Net约31M) | | ▶ 保留空间细节(跳跃连接) | ▶ 3D版本显存消耗高 | | ▶ 易扩展(U-Net++/Attention U-Net)| ▶ 对小目标分割可能欠佳 | | ▶ 支持2D/3D数据统一框架 | ▶ 超参数敏感(需精细调节) | --- ### **5. 超参数设置规范** | **参数** | **原始论文建议** | **优化经验** | |-------------------|-----------------------|---------------------------| | **优化器** | SGD + Momentum(0.99) | Adam更常用 | | **学习率** | 0.01(指数衰减) | 初始1e-3~1e-4,余弦衰减 | | **输入尺寸** | 572×572(输出388×388)| 通常调整为256×256/512×512 | | **Batch Size** | 1~5(受限于显存) | 2D建议8~16,3D建议2~4 | | **损失函数** | 加权交叉熵 | Dice Loss + BCE联合优化 | | **训练周期** | ≈100 epochs | 早停(Early Stopping)监控 | --- ### **6. 代表性变体演进** 1. **3D U-Net** (2016): - 处理体数据(CT/MRI),卷积核扩展至3D - 核心方程:$\mathbf{F}_{out} = \mathcal{C}_{3D}(\mathbf{F}_{in})$ 2. **U-Net++** (2018): - 密集跳跃连接提升梯度流 - 嵌套解码器结构:$$D^{(i,j)} = \mathcal{U}(D^{(i,j-1)}) \oplus \bigoplus_{k=0}^{i} E^{(k,j)}$$ 3. **Attention U-Net** (2018): - 门控注意力机制:$$\alpha = \sigma(\mathbf{W}_a[\mathcal{U}(D_j), E_i]), \quad \tilde{E}_i = \alpha \odot E_i$$ --- ### **参考文献** [^1]: 跳跃连接机制解析(原始U-Net设计) [^2]: 3D U-Net架构演进与分类法 [^4]: 复现难点与架构偏差分析 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VisionX Lab

你的鼓励将是我更新的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值