U-Net论文学习

U-Net是一种用于语义分割的卷积网络,尤其适合小样本问题。模型结构包括收缩路径和扩张路径,形成对称的U型架构,通过Skip Connection融合不同尺度的特征。该模型在生物医学图像分割等领域表现出色。本文详细介绍了U-Net的网络结构、训练过程以及在PyTorch中的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考资料

Pytorch深度学习实战教程(二):UNet语义分割网络

Pytorch深度学习实战教程(三):UNet模型训练,深度解析!

深度学习图像分割之UNET

U-Net论文学习笔记

U-net论文笔记

深入理解深度学习分割网络Unet——U-Net: Convolutional Networks for Biomedical Image Segmentation

1、标题

U-Net: Convolutional Networks for Biomedical Image Segmentation

U-Net:用于生物医学图像分割的卷积网络

本论文提出的语义分割模型在FCN基础上进行改进,只需很少的样本,就得到更高的分割精度。相比与FCN,本文提出的模型在上采样部分的卷积层有更多的通道,这可以将context信息传播到更高分辨率的层。本文的提出的模型中,用于特征提取的收缩网络,和用于还原分辨率的扩张网络,呈现对称的U型架构,因此称为U-net。

2、概述

分割

图二

Mask = Function(I)
  • 什么是图像分割问题呢? 简单的来讲就是给一张图像,检测是用框出框出物体,而图像分割分出一个物体的准确轮廓。也这样考虑,给出一张图像 I,这个问题就是求一个函数,从I映射到Mask。至于怎么求这个函数有多种方法。我们可以看到这个图,左边是给出图像,可以看到人和摩托车,右边是分割结果。
  • 在语义分割领域,基于深度学习的语义分割算法开山之作是全卷积网络FCN(由于网络中只有卷积没有全连接,所以这个网络又叫全卷积网络),而UNet是遵循FCN的原理,并进行了相应的改进,使其适应小样本的简单分割问题。
  • 在此之前深度学习一般用在分类和检测问题上。由于用到CNN,所以最后提取的特征的尺度是变小的。和我们要求的函数不一样,我们要求的函数是输入多大,输出有多大。为了让CNN提取出来的尺度能到原图大小,FCN网络利用上采样和反卷积到原图像大小。然后做像素级的分类。可以看图二,输入原图,经过VGG16网络,得到特征map,然后将特征map上采样回去。再将预测结果和ground truth每个像素一一对应分类,做像素级别分类。也就是说将分割问题变成分类问题,而分类问题正好是深度学习的强项。如果只将特征map直接上采样或者反卷积,明显会丢失很多信息。

图三

图四

  • FCN采取解决方法是将pool4、pool3、和特征map融合起来,由于pool3、pool4、特征map大小尺寸是不一样的,所以融合应该前上采样到同一尺寸。这里的融合是拼接在一起,不是对应元素相加。
  • FCN是深度学习在图像分割的开山之作,FCN优点是实现端到端分割等,缺点是分割结果细节不够好,可以看到图四,FCN8s是上面讲的pool4、pool3和特征map融合,FCN16s是pool4和特征map融合,FCN32s是只有特征map,得出结果都是细节不够好,具体可以看自行车。

3、网络结构

非常直观的“U”形网络结构,分别是进行了四次下采样(图中红色向下的箭头),文中将这部分称为“contracting path”,和四次上采样(图中绿色向上的箭头),在文中这部分称为与“contracting path”近似对称的“expansive path”。U-Net是端到端的训练,同时作者在论文最初也提到该结构训练速度快。

U-net架构:每个蓝框是一个feature map,它上面的数字表示该feature map的通道数(channel),feature map的左下角是它的尺寸。白色方框是从contracting path裁剪复制到expanding path上的feature map。

箭头表示不同的操作:

第一个蓝紫的箭头表示3*3的无填充valid卷积,一次卷积操作后特征图尺寸减小2(例第一次卷积操作后尺寸由572*572输出570*570),如下图,每次卷积后再接RELU激活;

第二个灰色箭头就是复制和裁剪啦,需要裁剪的原因是卷积过程中会有边界像素的丢失;

第三个红色箭头表示大小2*2,步长为2的最大池化操作,即图像分称不重叠的2*2大小的小框,每个小框中保留最大的值,经过最大池化操作后特征图尺寸数变为一半,如下图;需要注意的是为了保证输出分割图的无缝衔接,需要确保输入图像的尺寸(x-size和y-size)必须是偶数;

<think>嗯,用户想了解U-Net在监督学习中的应用和实现方法,包括论文和代码。首先,我需要回忆一下U-Net的基本结构。U-Net是一个经典的语义分割网络,结构像U型,有编码器和解码器部分,还有跳跃连接。监督学习的话,通常需要标注好的数据,比如医学图像中的器官分割标注。 用户提到的参考文献里,引用[2]讲的是U-Net的通俗理解,应该可以解释其结构。引用[1]提到了U&sup2;-Net,是U-Net的变种,可能和实现方法相关。引用[3]的DCSAU-Net是更深的压缩结构,可能涉及改进方法。引用[4]提到剪枝对训练的影响,说明直接使用不同深度的部分可能效果不好,这可能在实现时需要注意。 接下来,监督学习的实现方法需要数据准备、模型结构、损失函数、训练策略等步骤。数据方面,医学影像常用数据增强,比如旋转、翻转,因为数据量小。模型结构方面,U-Net的编码器用卷积和下采样,解码器用上采样和跳跃连接。损失函数可能用交叉熵和Dice损失结合,处理类别不平衡。 代码实现的话,PyTorch可能比较合适。需要构建双卷积块,下采样,上采样模块。数据加载部分要处理图像和标注的配对。训练时监督学习的标签需要与输出尺寸相同,计算损失。引用[1]的GitHub链接可能有U&sup2;-Net的代码,虽然用户问的是U-Net,但可以参考。引用[4]提到不能直接剪枝,所以训练时要保持完整结构。 可能用户需要具体的代码示例,比如模型定义和训练循环。还要推荐相关论文,比如原始U-Net论文和它的改进版本,如U&sup2;-Net和DCSAU-Net。此外,监督学习在医学图像中的应用场景,如细胞分割、肿瘤检测,这些可以作为应用案例。 需要确保回答结构清晰,分点说明实现步骤,提供代码示例,并引用相关的文献和链接。同时,生成的问题要围绕U-Net的监督学习,比如优化方法、医学应用、损失函数比较等。</think>### U-Net在监督学习中的实现方法 U-Net作为经典的语义分割模型,其监督学习实现主要依赖像素级标注数据,通过编码器-解码器结构实现端到端训练。以下是关键实现要素: --- #### 1. 数据准备与标注要求 - **医学影像标注**:需提供与输入图像尺寸相同的二值掩膜(如细胞边界标注) - **数据增强策略**:旋转($±15°$)、水平翻转、弹性形变等[^2] - **标准化处理**: ```python transform = Compose([ RandomRotate(15), RandomFlip(), Normalize(mean=[0.485], std=[0.229]) ]) ``` --- #### 2. 模型结构实现 **编码器-解码器架构**: $$ \text{下采样次数} = \log_2(\frac{H_{\text{输入}}}{H_{\text{最深特征图}}}) $$ ```python class DoubleConv(nn.Module): def __init__(self, in_ch, out_ch): super().__init__() self.conv = nn.Sequential( nn.Conv2d(in_ch, out_ch, 3, padding=1), nn.BatchNorm2d(out_ch), nn.ReLU(inplace=True), nn.Conv2d(out_ch, out_ch, 3, padding=1), nn.BatchNorm2d(out_ch), nn.ReLU(inplace=True) ) ``` --- #### 3. 监督信号设计 - **损失函数组合**: $$ \mathcal{L} = \lambda_1\mathcal{L}_{BCE} + \lambda_2\mathcal{L}_{Dice} $$ - 交叉熵损失处理类别不平衡 - Dice损失优化分割区域重叠度 ```python def dice_loss(pred, target): smooth = 1. intersection = (pred * target).sum() return 1 - (2. * intersection + smooth) / (pred.sum() + target.sum() + smooth) ``` --- #### 4. 训练优化策略 - **深度监督机制**:在解码器各阶段添加辅助损失(需保持完整网络结构,直接剪枝会导致性能下降[^4]) - **参数设置建议**: - 初始学习率:$3\times10^{-4}$ - 批量大小:根据显存选择$8\sim16$ - 优化器:AdamW + Cosine退火调度 --- ### 经典实现方案推荐 1. **基础U-Net** - 论文:[U-Net: Convolutional Networks for Biomedical Image Segmentation](https://arxiv.org/abs/1505.04597) - 代码:[PyTorch实现模板](https://github.com/milesial/Pytorch-UNet) 2. **改进方案U&sup2;-Net** - 嵌套U型结构提升特征提取能力[^1] - 代码:[官方实现](https://github.com/xuebinqin/U-2-Net) 3. **医学专用DCSAU-Net** - 通过split-attention机制压缩模型参数量[^3] - 代码:[论文附带实现](https://github.com/xmindflow/DCSAU-Net) --- ### 典型应用场景 1. 显微镜图像细胞分割 2. CT/MRI影像肿瘤检测 3. 遥感图像地物分类 4. 工业缺陷检测 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值