深度学习pytorch框架--Unet医疗影像分割

基于Unet的医疗影像分割

简单复现Unet网络,用来练习pytorch,

  U-net结构(最低分辨率下32x32像素的例子)如下图所示。每个蓝框对应于一个多通道特征图。通道的数量表示在盒子的顶部。X-Y尺寸在盒子的左下角提供。白色方框代表复制的特征图。箭头表示不同的操作。

在这里插入图片描述
  其中,蓝/白框表示feature map;蓝色剪头表示3x3 卷积,用于特征提取;灰色箭头表示skip-connection,用于将下采样的浅层特征与上采样层的深层特征融合,提高分割准确性。;红色箭头表示池化,用于池化,绿色箭头表示上采样,用于恢复维度;绿色箭头表示1x1 卷积,用于输出结果。
  unet网络是基于Encoder-Decoder 即编码-解码的设计思想设计的,其中编码部分是由卷积操作和下采样操作组成,文中所用的卷积结构统一为3x3 的卷积核,padding为0, 步长stride为1,但是padding为0导致每次卷积之后造成feature map的H和W都变小了,这会导致边缘信息的丢失,所以我们将padding为1.而在上述的两次卷积之后是一个池化操作用于降低数据维度,需要注意的是在池化之前要保存两次卷积之后的输出用于与上采样层的深层特征融合。

pytorch代码如下

class DownsampleLayer(nn.Module):
    """
    定义下采样忽的网络层
    """
    def __init__(self, in_chanel, out_chanel):
        super(DownsampleLayer, self).__init__()
        self.conv_relu = nn.Sequential(
            nn.Conv2d(in_channels=in_chanel, out_channels=out_chanel, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(out_chanel),
            nn.ReLU(inplace=True),
            nn.Conv2d(in_channels=out_chanel, out_channels=out_chanel, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(out_chanel),
            nn.ReLU(inplace=True)
        )
        self.dowmsample = nn.Sequential(
            # 利用步长实现向下池化,利用步长为2卷积避免因数据长度为单数而丢失边缘信息
            # nn.MaxPool2d(2)
            nn.Conv2d(in_channels=out_chanel, out_channels=out_chanel, kernel_size=3, stride=2, padding=1),
            nn.BatchNorm2d(out_chanel),
            nn.ReLU(inplace=True)
        )

  此处的DownsampleLayer层即为下图中的红色方框圈出来的部分

在这里插入图片描述
  在红圈部分的的步骤重复四次之后就会进入解码的阶段,其基本层是上图中黄色方框圈出来的部分,他包括两层卷积层和一个反卷积层。其中反卷积层是用来恢复维度的。而下一层的输入是反卷积层输出的结果与下采样层的浅层特征的拼接。

pytorch代码如下

    def __init__(self, in_chanel, out_chanel):
        super(UpsampleLayer, self).__init__()
        self.up_conv_relu = nn.Sequential(
            nn.Conv2d(in_channels=in_chanel, out_channels=out_chanel*2, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(out_chanel * 2),
            nn.ReLU(inplace=True),
            nn.Conv2d(in_channels=out_chanel*2, out_channels=out_chanel*2, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(out_chanel * 2),
            nn.ReLU(inplace=True)
        )
        self.upsample = nn.Sequential(
            nn.ConvTranspose2d(in_channels=out_chanel*2, out_channels=out_chanel, kernel_size=3, stride=2, padding=1, output_padding=1),
            nn.BatchNorm2d(out_chanel),
            nn.ReLU(inplace=True)
        )

  在黄圈部分重复了四次之后,进行两次卷积核为3x3 的卷积和一次卷积核为1x1的卷积。用于输出结果
代码如下

# 输出
        self.o = nn.Sequential(
            nn.Conv2d(in_channels=128, out_channels=64, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(64),
            nn.ReLU(inplace=True),
            nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(64),
            nn.ReLU(inplace=True),
            nn.Conv2d(in_channels=64, out_channels=1, kernel_size=1, stride=1, padding=1),
        )

结果如下

0_test
0_predict
6_test
6_predict

代码

代码下载地址

  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
PyTorch是一个基于Python的开源机器学习框架,由Facebook的人工智能研究团队开发。它支持动态计算图,具有灵活性和易用性,是深度学习领域中最受欢迎的框架之一。 以下是深度学习PyTorch框架相关的知识点: 1. 张量(Tensor): PyTorch中的核心数据结构,类似于Numpy中的数组,用于存储和操作多维数组。张量可以在CPU和GPU上进行计算,支持自动求导和梯度下降等功能。 2. 自动求导(Autograd): PyTorch中的自动求导功能可以自动计算变量的导数,使得神经网络的训练过程更加方便和高效。 3. 神经网络模块(nn.Module): PyTorch中的神经网络模块是一个抽象的概念,可以定义一个神经网络层、激活函数、损失函数等,方便构建复杂的神经网络模型。 4. 模型训练(Training): 在PyTorch中,模型训练通常包括以下步骤:定义模型、定义损失函数、定义优化器、循环迭代数据集、计算损失、反向传播、更新模型参数。 5. 模型评估(Evaluation): 在PyTorch中,模型评估通常包括以下步骤:加载模型、设置模型为评估模式、循环迭代数据集、计算模型输出、计算评估指标。 6. PyTorch视觉库(torchvision): PyTorch视觉库提供了许多常用的计算机视觉任务的数据集、模型和预处理函数,方便用户快速构建视觉模型。 7. PyTorch分布式训练(Distributed Training): PyTorch支持分布式训练,可以将模型和数据分配到多个计算节点上进行训练,提高训练效率和扩展性。 8. PyTorch部署(Deployment): PyTorch支持将训练好的模型导出为ONNX格式,可以在不同的平台上进行部署,如移动设备、嵌入式设备、Web应用等。 以上是深度学习PyTorch框架相关的知识点,掌握这些知识可以帮助用户更好地使用PyTorch构建和训练深度学习模型。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值