U-Net模型架构
论文地址:https://arxiv.org/abs/1505.04597https://arxiv.org/abs/1505.04597
论文地址:https://arxiv.org/abs/1505.04597https://arxiv.org/abs/1505.04597
pytorch版本github代码:https://github.com/milesial/Pytorch-UNet?tab=readme-ov-file
Unet是一个优秀的语义分割模型,其主要执行过程与其它语义分割模型类似。与CNN不同的之处在于CNN是图像级的分类,而unet是像素级的分类,其输出的是每个像素点的类别。
损失函数使用的是带边界权重的交叉熵损失函数: 它通过为每个类别引入权重来修改标准的交叉熵损失。这些权重可以根据数据集的需求进行调整。一般来说,如果某个类别的权重较高,模型在训练过程中更注重正确分类这个类别。带边界权重的交叉熵损失函数: 它通过为每个类别引入权重来修改标准的交叉熵损失。这些权重可以根据数据集的需求进行调整。一般来说,如果某个类别的权重较高,模型在训练过程中更注重正确分类这个类别。
主干特征提取部分通常由卷积和最大池化的堆叠组成,类似于VGG等经典卷积神经网络的结构。这一部分的目标是通过多个卷积层和池化层来提取输入图像的高级特征。在这个过程中,图像的空间分辨率逐渐减小,但特征的抽象级别逐渐增加。最终,主干部分生成了多个不同层次的特征图,这些特征图对输入图像的不同细节和抽象特征进行了编码。
在这一部分,利用主干部分获得的五个初步有效特征层进行上采样,通常使用转置卷积(反卷积)操作来将这些特征图的尺寸还原。同时,进行特征融合的操作,将来自不同层次的特征图进行合并,以获得更全面的特征表示。这个阶段的目标是将低分辨率但高级别的特征与高分辨率但低级别的特征结合,以便网络能够在还原的特征图中同时包含详细信息和语义信息。
最后一个有效特征层经过一系列卷积和上采样操作后,用于对每个特征点进行分类。这相当于对图像中的每个像素点进行分类,生成一个与输入图像大小相匹配的预测图。通常,在预测部分使用适当的激活函数(softmax)来获得每个类别的概率分布。这一部分的目标是生成最终的语义分割图,其中每个像素都被分配到相应的类别。
整个UNet结构的设计使得网络能够通过特征融合的方式同时保留高级别语义信息和低级别细节信息,使得在图像分割等任务中取得优越的性能。
论文地址:https://arxiv.org/pdf/1612.01105.pdf
pytorch版源代码地址: https://github.com/bubbliiiing/pspnet-pytorch
红色:这是在每个特征map上执行全局平均池的最粗略层次,用于生成单个bin输出。
橙色:这是第二层,将特征map划分为2×2个子区域,然后对每个子区域进行平均池化。
蓝色:这是第三层,将特征 map划分为3×3个子区域,然后对每个子区域进行平均池化。
绿色:这是将特征map划分为6×6个子区域的最细层次,然后对每个子区域执行池化。
PSPNet(Pyramid Scene Parsing Network)之所以被称为PSPNet模型,是因为它采用了PSP模块(Pyramid Pooling Module)作为其核心组件。PSP模块的设计是为了捕捉不同尺度的上下文信息,以提高场景解析(Scene Parsing)的性能。
PSP模块的主要特点在于使用了不同步长和池化尺寸的平均池化层进行池化,然后将这些不同尺度的池化结果合并,形成一个具有全局上下文信息的特征。以下是PSP模块的主要步骤:
多尺度平均池化:PSP模块采用了不同步长和池化尺寸的平均池化层,这意味着它能够从输入特征图中捕捉多个不同尺度的上下文信息。这有助于处理不同大小的物体以及场景中的不同尺度信息。
池化结果的调整:池化层的结果被调整为相同的尺寸(通常是通过重新调整大小),以便它们可以被连接在一起。这样,每个池化层捕获的全局上下文信息都以相同的维度存在。
Concatenate(连接): 调整大小后的池化结果被连接在一起,形成一个具有多个通道的特征图。这个特征图包含了来自不同尺度的全局上下文信息。
全局上下文信息:通过采用不同尺度的平均池化,PSP模块能够捕获图像中不同尺度范围的上下文信息,使网络更具有感知场景整体结构的能力。
适应不同尺度物体:场景中可能存在不同尺度的物体,PSP模块的设计有助于网络更好地适应和理解这些不同尺度的物体。
提高场景解析性能:PSP模块的引入有助于提高模型在场景解析任务中的性能,尤其是对于需要全局上下文信息的任务。
PSPNet之所以得名为PSPNet,是因为它的核心组件采用了PSP模块,而这个模块的设计使得网络能够更有效地捕捉不同尺度的上下文信息,从而提高了场景解析的性能。
注意: hw的扩张不再使用传统的上采样方法,而是利用了resize_image中的线性插值。线性插值是一种插值方法,它通过已知点之间的线性关系来估算未知点的值,所以可以试试更改插值方法来试试能不能提高效果
如果任务要求对细节和边界进行更精确的分析,UNet可能更适用。
如果任务需要对整体结构和不同尺度的全局上下文进行分析,PSPNet可能更适用。
数据集地址:https://github.com/aisegmentcn/matting_human_datasets
参考博客:一文掌握语义分割PSPNet——证件照制作、抠图(算法原理、Pytorch实现)_pymatting-CSDN博客