Unet网络

本文详细介绍了U-net网络在遥感影像路网提取中的应用,包括其独特的特征融合方式:拼接,以及编码器-解码器结构。U-net通过5个pooling layer实现多尺度特征识别,上采样部分融合特征提取输出,实现多尺度特征的全面整合。

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

近期利用遥感影像进行路网提取,利用Unet网络进行图像分割

介绍如下:

U-net网络非常简单,前半部分作用是特征提取,后半部分是上采样。在一些文献中也把这样的结构叫做编码器-解码器结构。由于此网络整体结构类似于大写的英文字母U,故得名U-net。
U-net与其他常见的分割网络有一点非常不同的地方:U-net采用了完全不同的特征融合方式:拼接,U-net采用将特征在channel维度拼接在一起,形成更厚的特征。而FCN融合时使用的对应点相加,并不形成更厚的特征。

所以语义分割网络在特征融合时有两种办法:
1. FCN式的对应点相加,对应于TensorFlow中的tf.add()函数;
2. U-net式的channel维度拼接融合,对应于TensorFlow的tf.concat()函数,比较占显存。

 

除了上述新颖的特征融合方式,U-net还有以下几个优点:

 

1、5个pooling layer实现了网络对图像特征的多尺度特征识别。
2、上采样部分会融合特征提取部分的输出,这样做实际上是将多尺度特征融合在了一起,以最后一个上采样为例,它的特征既来自第一个卷积block的输出(同尺度特征),也来自上采样的输出(大尺度特征),这样的连接是贯穿整个网络的,你可以看到上图的网络中有四次融合过程,相对应的FCN网络只在最后一层进行融合。

 

转载于:https://www.cnblogs.com/abella/p/10304823.html

### UNet网络结构详解 UNet是一种经典的卷积神经网络架构,主要用于图像分割任务。其核心设计思想是U形结构,由编码器(下采样路径)和解码器(上采样路径)组成,并通过跳跃连接(skip connection)将两者连接起来,从而保留图像的细节信息。 #### 编码器部分 编码器通常由多个卷积块(DoubleConv)和最大池化层(Max Pooling)构成。每个卷积块包含两个连续的3x3卷积层,后接ReLU激活函数,用于提取局部特征。随后使用2x2的最大池化层进行下采样,逐步减少空间维度并增加通道数,以提取更高层次的语义特征[^1]。 #### 解码器部分 解码器负责将编码器提取的高层特征逐步还原到原始输入的空间分辨率。该过程主要依赖于反卷积操作(也称为转置卷积,UpConv),通常采用2x2的卷积核进行上采样。在每次上采样之后,会与编码器中对应的特征图进行拼接(Concatenate),实现跳跃连接,从而融合上下文信息和空间细节[^4]。 #### 输出层 输出层通常是一个1x1卷积层(OutConv),用于将最后一层的特征图映射到目标类别数量。这一层不包含非线性激活函数,直接输出像素级别的分类结果。 --- ### UNet网络代码实现(基于PyTorch) 以下是一个简化的UNet网络实现,涵盖了DoubleConv、Down、Up和OutConv模块: ```python import torch import torch.nn as nn import torch.nn.functional as F class DoubleConv(nn.Module): def __init__(self, in_channels, out_channels): super(DoubleConv, self).__init__() self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1) self.bn1 = nn.BatchNorm2d(out_channels) self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1) self.bn2 = nn.BatchNorm2d(out_channels) def forward(self, x): x = F.relu(self.bn1(self.conv1(x))) x = F.relu(self.bn2(self.conv2(x))) return x class Down(nn.Module): def __init__(self, in_channels, out_channels): super(Down, self).__init__() self.maxpool_conv = nn.Sequential( nn.MaxPool2d(2), DoubleConv(in_channels, out_channels) ) def forward(self, x): return self.maxpool_conv(x) class Up(nn.Module): def __init__(self, in_channels, out_channels): super(Up, self).__init__() self.up = nn.ConvTranspose2d(in_channels, out_channels, kernel_size=2, stride=2) self.conv = DoubleConv(in_channels, out_channels) def forward(self, x1, x2): x1 = self.up(x1) diffY = x2.size()[2] - x1.size()[2] diffX = x2.size()[3] - x1.size()[3] x1 = F.pad(x1, [diffX // 2, diffX - diffX // 2, diffY // 2, diffY - diffY // 2]) x = torch.cat([x2, x1], dim=1) return self.conv(x) class OutConv(nn.Module): def __init__(self, in_channels, out_channels): super(OutConv, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=1) def forward(self, x): return self.conv(x) class UNet(nn.Module): def __init__(self, n_channels, n_classes): super(UNet, self).__init__() self.inc = DoubleConv(n_channels, 64) self.down1 = Down(64, 128) self.down2 = Down(128, 256) self.down3 = Down(256, 512) self.down4 = Down(512, 1024) self.up1 = Up(1024, 512) self.up2 = Up(512, 256) self.up3 = Up(256, 128) self.up4 = Up(128, 64) self.outc = OutConv(64, n_classes) def forward(self, x): x1 = self.inc(x) x2 = self.down1(x1) x3 = self.down2(x2) x4 = self.down3(x3) x5 = self.down4(x4) x = self.up1(x5, x4) x = self.up2(x, x3) x = self.up3(x, x2) x = self.up4(x, x1) logits = self.outc(x) return logits ``` --- ### 关键技术点解析 - **跳跃连接**:通过将编码器中的特征图与解码器中对应层级的特征图拼接,可以有效保留图像的边缘和纹理等细节信息。 - **双卷积块(DoubleConv)**:连续两次使用3x3卷积可以增强局部特征提取能力,同时保持计算效率。 - **反卷积操作**:用于上采样特征图,恢复空间分辨率,同时结合跳跃连接的信息提升分割精度。 - **1x1卷积**:用于调整通道数,最终输出像素级别的分类结果。 --- ### 改进与优化方向 UNet网络具有较强的可扩展性,可以根据具体任务需求进行改进: - **引入注意力机制**:在跳跃连接处加入通道-空间注意力机制,可以动态调整不同区域的重要性,提高模型对关键特征的关注度。 - **修改卷积核大小和数量**:较小的卷积核可以捕捉更精细的局部特征,而较大的卷积核有助于获取全局信息。 - **深度可分离卷积**:使用深度可分离卷积替代标准卷积,可以显著减少参数量和计算复杂度。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值