论文演练:U-Net

最流行的语义分割模型之一的 PyTorch 实现。继续阅读 Towards Data Science »

来源:None

U-Net简介

当我们谈论图像分割时,我们不应该忘记U-Net,这是一种由Ronneberger等人首先提出的神经网络架构。 [1] 早在 2015 年。该模型最初旨在对医学图像执行分割任务。后来,其他研究人员发现这种架构实际上也可以用于一般的语义分割任务。此外,还可以将该模型用于其他用途,例如超分辨率(即将低分辨率图像升级为高分辨率图像)和扩散(即从噪声生成图像)。在本文中,我想向您展示如何使用 PyTorch 从头开始​​实现 U-Net。您可以在图 1 中看到整个 U-Net 架构。通过查看这个结构,我认为这个网络的名称是如何得名的非常简单。

图 1.U-Net 架构 [1]。

该架构中有几个关键组件。首先,有一个契约路径,也称为编码器。该组件负责将输入图像的空间维度从 572×572 逐渐缩小到 64×64。然而,请注意,每个下采样阶段中的通道数量加倍,而不是补偿空间维度减少造成的信息损失。相比之下,扩展路径(解码器)将特征图扩展到更大的空间维度,同时减少通道数。尽管采用对称架构,但值得注意的是,最终上采样阶段产生的输出在图像分辨率方面与输入不同。

使用 PyTorch 实现 U-Net

我为这个项目做了三个导入:用于标准数学功能的基本 PyTorch 模块 (torch)、用于加载神经网络层的 nn 子模块以及从 torchinfo 获取的用于打印模型详细信息的summary() 函数。

火炬 nn 摘要() 火炬信息

编码器

DoubleConv() conv_0 conv_1 bn_0 bn_1 偏差 正确 #(1) #(2) 前进() x