昇思25天学习打卡营第22天|FCN图像语义分割

课程打卡凭证

语义分割

语义分割是计算机视觉的一个重要任务,其目标是对图像中的每一个像素进行分类,使得每个像素都被分配到一个特定的类别。与图像分类任务不同,图像分类只要求识别出图像中主要对象的类别,而语义分割则需要对图像中的每一个像素点都进行精确的类别划分,从而实现对图像内容的更细致理解。具体如下图所示。

FCN模型

FCN(Fully Convolutional Networks,全卷积神经网络)是一种利用深度学习进行语义分割的深度学习模型,它有如下三个主要特点:

卷积化

FCN将传统CNN中的全连接层替换为卷积层,使得网络可以处理任意尺寸的输入图像,并输出与输入图像尺寸相对应的分割结果。具体如下图所示。

上采样

为解决卷积和池化操作导致图像尺寸变小的问题,FCN使用上采样(如转置卷积)方式恢复图像尺寸,从而实现对每个像素的分类。具体如下图所示。

跳跃结构

FCN采用跳跃结构,将不同层次的特征图进行融合,以确保分割结果的鲁棒性和精确性。这种结构有助于在保留图像细节的同时,获取更强的语义信息。具体如下图所示。

数据处理

下载数据集。

这个类的初始化函数定义了数据预处理所需的参数,例如图像均值、标准差、数据文件路径、批次大小、裁剪大小、缩放比例等,并且确保最大缩放比例大于最小缩放比例。

该函数负责对图像和标签进行预处理,包括解码、缩放、归一化、填充、随机裁剪和随机水平翻转等操作。处理后的图像和标签会被转换为合适的格式以供模型使用。

get_dataset函数配置NUMA(非统一内存访问)并加载MindSpore格式的数据集。它将preprocess_dataset函数作为映射操作应用于数据集中的每一对图像和标签,随后对数据集进行打乱和分批处理。

最后实例化数据集。

训练集可视化,结果如下图所示。

网络构建

定义FCN-8s的类,继承自nn.Cell。

conv1是第一组卷积层,包含两个卷积操作,每个卷积操作后面跟随一个批量归一化层和ReLU激活函数。pool1是一个2x2的最大池化层,将特征图的大小减半。

同理,定义conv2到conv5和对应的池化层pool2到pool5。

将全连接层替换为卷积层,使得网络可以处理任意大小的输入。

定义最后的分类层和上采样层,用于将低分辨率的特征图恢复到与输入图像相同的大小。

定义前向传播过程。将输入的x经过一系列卷积层和池化层提取特征,接着通过上采样层逐步恢复分辨率,最终输出与输入图像相同大小的分割图。

训练准备

下载预训练的VGG16模型参数,并且加载这些参数到前面定义的FCN-8s网络中。

该类用于计算整体像素准确度,即正确分类的像素数与总像素数的比值。

该类用于计算每个类别的像素准确度的平均值。

该类用于计算每个类别的交并比 (IoU) 的平均值。

该类用于计算频率加权的交并比 (IoU),考虑类别不平衡的问题。

模型训练

结果如下图所示。

模型评估

四个指标的结果如下图所示。

模型推理

结果如下图所示。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值