(论文版)深度学习 | 基于 VGG16-UNet 语义分割模型的猫狗图像提取研究

Hi,大家好,我是半亩花海。本实验本项目基于 VGG16-UNet 架构,利用 Labelme 标注数据和迁移学习,构建高效准确的猫狗图像分割模型。通过编码器-解码器结构(特征提取-上采样)提升分割精度,适应不同场景,推动图像分割技术发展。(想要改写成论文的可以加一个绪论:主要介绍项目的研究背景和意义等)


目录

一、数据预处理

1.1 猫狗数据集的图像特征

1.2  图像数据标注

1.3  JSON 转换成 PNG

1.4  生成 JPG 图片和 mask 标签的名称文本

1.5  数据文件夹结构

1.6  划分数据集

1.7  读取部分图片查看像素值

1.8  图片标签处理

二、分割网络模型

2.1  编码器——VGG16 预训练模型

2.2  解码器——UNet 网络

2.3  VGG16-UNet 模型架构

三、环境配置与性能衡量

3.1  环境配置

3.2  损失函数

3.3  评价指标

四、模型训练与预测

4.1  模型训练

4.1.1  模型训练过程

4.1.2  猫狗图像分割训练结果

4.2  模型预测

4.2.1  待预测猫狗图像的模型分割过程

4.2.2  预测结果可视化

五、总结与展望

5.1  总结

5.2  展望

参考文献


一、数据预处理

数据预处理是整个深度学习流程中至关重要的一环,通过对原始数据进行整理和转换,能够为模型训练提供高质量、格式统一的数据。

1.1 猫狗数据集的图像特征

掌握猫狗的图像特征是优选针对性图像处理方法、精准识别与评价猫狗的前提。待数据标注的猫狗图像,通常表现的特征包括以下 5 点:

  • 颜色特征:猫和狗的毛发颜色各异,从白色到黑色、从单色到多色,这些颜色特征在图像处理中是重要的标注依据。
  • 形状特征:猫的身体通常较为柔软,有流线型的身体和圆形的头部特征,而狗的形状则更多样化,有些品种有较长的身体和四肢,头部形状也各异。
  • 纹理特征:不同品种的猫狗毛发纹理差异明显,有的毛发较为顺滑,有的则卷曲或粗糙,纹理特征有助于分辨不同种类的猫狗。
  • 姿态特征:猫狗在不同状态下的姿态差异显著,猫的动作通常较为灵活优雅,而狗则有多种活动姿态,从奔跑到坐卧不一。
  • 面部特征:面部特征是识别猫狗的关键,猫有大而圆的眼睛,狗的面部特征则因品种不同差异较大,包括耳朵的形状、鼻子的大小等。

图 1-1  猫狗原数据集

由上述原因以及图1-1可知,猫狗的图像处理需要精确提取上述特征,以确保在后续的识别与分类中能够取得更高的准确性和鲁棒性。因此,本文设计了 VGG16-UNet 语义分割模型提取猫狗图像轮廓。

1.2  图像数据标注

使用 Labelme 标注工具,采用点标记法(Create Polygon)对 500 个猫狗待分割图像进行轮廓标注,类别为“cat”和“dog”,数据集标注过程如图 1-2 所示。

图 1-2  数据集标注过程

标注完成后会在同一指定目录下(./datasets/Annotation/)生成 JSON 文件,文件内容主要包括version(labelme版本)、label(标签类别)、points(各个点坐标)、imagePath(图像路径)、imageHeight(图像高度)、imageWidth(图像宽度)。

1.3  JSON 转换成 PNG

在语义分割任务中,通常使用 JSON 格式存储标注信息,而模型训练需要以图像格式(如 PNG)提供标注数据。因此,需要将 JSON 转换为 PNG 格式。

  • 读取 JSON 文件:首先读取包含标注信息的 JSON 文件。
  • 解析标注数据:解析 JSON 文件,提取标注信息,包括类别和像素位置。
  • 生成 PNG 文件:根据解析的标注信息生成对应的 PNG 文件。每个类别用唯一的颜色值表示,生成的 PNG 文件用于后续模型训练中的标签。

图 1-3  JSON 转换成 PNG

1.4  生成 JPG 图片和 mask 标签的名称文本

为了方便管理和加载数据,我们将所有图像文件(JPG)和对应的 mask 标签文件(PNG)的文件名记录在一个文本文件中。

  • 读取文件名:遍历存放图像和标签的文件夹,获取所有文件的名称。
  • 匹配文件名:确保每个图像文件都有对应的标签文件。
  • 保存文件名:将图像文件名和标签文件名按行写入一个文本文件,每行记录一对图像和标签文件名,用分号分隔。

图 2-4  生成 JPG 图片和 mask 标签的名称文本

1.5  数据文件夹结构

构建迁移学习数据集,TL_CatDog 文件夹的结构及相应的解释如下:

TL_CatDog/
├── datasets/
│   ├── Annotations/
│   ├── JPEGImages/
│       ├── test/
│       └── train
│   ├── Segmentation/
│       ├──train_and_val.txt/
│   ├── SegmentationClass
├── ckpt_UNet/
│   ├──ep_{}-loss_{}-val_loss_{}.h5
├── CatDog_VGG16-UNet.ipynb
注:
ckpt_UNet 是训练权重
Annotations 是标注后的 JSON 文件
JPEGImages 是猫狗原图
train_and_val.txt 是数据集名称和 png 图像名称
SegmentationClass 是语义分割的 mask 标签的 png 图像

1.6  划分数据集

数据集的划分对模型的训练和评估至关重要。我们将数据集按照 90% 训练集和 10% 验证集的比例进行划分。具体方法是:

  • 读取数据列表:读取记录所有图像和标签文件名的文本文件。
  • 打乱数据顺序:为了确保数据分布的随机性,先对数据列表进行随机打乱。
  • 按比例划分:按 90% 为训练集、10% 为验证集进行数据集划分。
  • 保存划分结果:将划分结果保存到相应的文本文件中,供后续使用。
# 加载数据集并预处理
with open("./datasets/Segmentation/train_and_val.txt", "r") as f:  # 打开训练和验证数据文件lines = f.readlines()  # 读取所有行# 打乱数据
np.random.seed(10101)  # 设置随机种子
np.random.shuffle(lines)  # 打乱数据集
np.random.seed(None)  # 重置随机种子
num_val = int(len(lines) * 0.1)  # 10% 用于验证
num_train = len(lines) - num_val  # 90% 用于训练

1.7  读取部分图片查看像素值

在语义分割任务中,标签图像的像素值表示不同的类别。检查标签图像的像素值有助于确认数据的正确性和类别分布。

  • 读取图像:使用图像处理库读取标签图像。
  • 获取像素值:提取图像的所有像素值,并去重。
  • 打印像素值:打印每个唯一的像素值,以检查标签图像的类别信息。
# 读取部分图片查看像素值
def values(image_path):image = Image.open(image_path)  # 打开图像pixels = list(image.getdata())  # 获取像素值unique_pixels = set(pixels)  # 去重像素值# 打印每个唯一像素的RGB值for pixel_value in unique_pixels:print(f"去重后像素值: {pixel_value}")# 指定要检查的图像路径
image_path = "./datasets/SegmentationClass/467.png"values(image_path)  # 查看图像的唯一像素值

通过查看 SegmentationClass 文件夹里的第 467 张图片的像素值,结果如下。

表 2-1  像素值查看结果

去重后像素值

含义

0

Background(黑色)

1

cat(红色)

2

dog(绿色)

1.8  图片标签处理

为了将标签图像转换为模型可用的格式并批量处理数据,需对标签进预处理。

  • 数据生成器:定义一个生成器函数,按批次读取图像和标签数据。
  • 图像和标签预处理:调整大小、归一化、灰度转换、one-hot 编码。
  • 生成批次数据:将预处理后的图像和标签打包成批次,并生成给模型训练。
# 图片标签处理
def generate_arrays_from_file(lines, batch_size):n = len(lines)  # 获取数据行数i = 0  # 初始化索引while 1:  # 无限循环,生成数据X_train = []  # 初始化训练输入数据列表Y_train = []  # 初始化训练标签数据列表for _ in range(batch_size):  # 每批次处理的图像数if i == 0:np.random.shuffle(lines)  # 随机打乱数据# 读取输入图片并进行预处理name = lines[i].split(';')[0]  # 获取图像文件名img = Image.open("./datasets/JPEGImage/train/" + name)  # 打开图像文件img = img.resize((WIDTH, HEIGHT), Image.BICUBIC)  # 调整图像大小img = np.array(img) / 255  # 归一化处理X_train.append(img)  # 添加到训练数据列表# 读取标签图片并进行预处理name = lines[i].split(';')[1].split()[0]  # 获取标签文件名label = Image.open("./datasets/SegmentationClass/" + name)  # 打开标签文件label = label.resize((int(WIDTH / 2), int(HEIGHT / 2)), Image.NEAREST)  # 调整标签大小if len(np.shape(label)) == 3:  # 如果标签是彩色的label = np.array(label)[:, :, 0]  # 转换为灰度图label = np.reshape(np.array(label), [-1])  # 将标签展开为一维one_hot_label = np.eye(NCLASSES)[np.array(label, np.int32)]  # 转换为one-hot编码Y_train.append(one_hot_label)  # 添加到标签数据列表i = (i + 1) % n  # 更新索引,循环到开头yield np.array(X_train), np.array(Y_train)  # 生成一个批次的数据和标签

二、分割网络模型

语义分割中编码器-解码器结构是研究语义分割方面普遍使用的一种结构,由编码器、过渡层和解码器共同组成。其主要思想是将输入的图像分别经过编码器和解码器两个部分,最终得到像素级别的语义分割结果。

  1. (1)编码器负责通过下采样降低图像维度;
  2. (2)过渡存在于编码器和解码器之间,提取并传递高维征信息;
  3. (3)解码器负责通过上采样将特征图还原原始维度。

2.1  编码器——VGG16 预训练模型

VGG16 预训练模型是一种卷积神经网络,通过在 ImageNet 等大规模数据集上的预训练,学习到丰富的特征表示,广泛应用于图像分类、目标检测和图像分割等任务[1]。VGG16 包含 16 个可训练层(13 个卷积层和 3 个全连接层),作为编码器,它通过其卷积层提取图像中的高层次语义信息,并通过池化层进行降维处理,从而有效保留关键特征。这些特征图包含了输入图像的高层次语义信息,可以有效地提取图像中的物体和背景等信息,从而加速模型收敛并提高性能。

图 2-1  VGG16 模型结构图

这里只采用 VGG16 的前 4 次特征提取能力作为编码器,将 VGG16 权重加载加入编码器部分,使其可以利用已经训练好的权重进行特征提取,帮助节省训练时间,提取效果更好。

2.2  解码器——UNet 网络

UNet 网络是一种常用于图像分割的深度学习模型,其解码器部分将编码器提取的特征图进行上采样和重建,逐步恢复图像的空间分辨率,最终得到像素级别的语义分割结果[2]。

在本文中 UNet 作为解码器,主要由 3 个上采样层构成,每个采样层将输入沿着横向和纵向分别放大两倍,即每个像素变为一个 2×2 的方块,此时,特征图的高度和宽度被放大两倍。在每个上采样步骤中,将高分辨率的特征图与编码器对应层的特征图通过跳跃连接的方式进行拼接融合,充分利用上下文信息,以便保留更多的细节信息。重复进行上采样、填充、卷积和批归一化操作后,通过 3×3 卷积核生成输出层和零填充,实现 3 个表型类别的输出。

通过这种方式,UNet 不仅能恢复图像尺寸,还能提高分割精度。为了更容易计算训练过程中的损失值,解码器在上采样过程中生成与标签类似的输出。UNet 网络广泛应用于医学影像分割、遥感图像处理等领域,因其高效的特征融合和精确的分割能力而备受青睐。

图 2-2  UNet 模型结构图

其中,本实验中使用到的 UpSampling2D 为上采样操作,BatchNormalization 为批归一化操作。ZeroPadding2D 操作的目的是在图像边界进行零填充,为了在后续的卷积操作中避免尺寸缩小。

2.3  VGG16-UNet 模型架构

将编码器与解码器通过过渡连接在一起,编码器通过多个卷积层和池化层逐渐减小特征图的空间分辨率,同时提取抽象的语义特征[3]。解码器通常包括上采样层等,通过逐步上采样将特征图的分辨率增加,同时进行一些操作以恢复细节和位置信息。最终的输出是一个与输入图像具有相同尺寸的分割图[4]。

本模型 VGG16-UNet 结合了 VGG16 编码器和 UNet 解码器,由编码器提取特征,再通过解码器进行上采样,最终输出分割结果。VGG16-UNet 模型的大致结构如图 2-3 所示。

图 2-3  VGG16-UNet 模型结构

经过模型汇总可知,VGG16-UNet 模型概要如表 2-1 所示。

表 2-1  VGG16-UNet 模型概要

Layer (type)

Output Shape

Param #

input_4 (InputLayer)

[(None, 416, 416, 3)]

0

block1_conv1 (Conv2D)

(None, 416, 416, 64)

1792

block1_conv2 (Conv2D)

(None, 416, 416, 64)

36928

block1_pool (MaxPooling2D)

(None, 208, 208, 64)

0

block2_conv1 (Conv2D)

(None, 208, 208, 128)

73856

block2_conv2 (Conv2D)

(None, 208, 208, 128)

147584

block2_pool (MaxPooling2D)

(None, 104, 104, 128)

0

block3_conv1 (Conv2D)

(None, 104, 104, 256)

295168

block3_conv2 (Conv2D)

(None, 104, 104, 256)

590080

block3_conv3 (Conv2D)

(None, 104, 104, 256)

590080

block3_pool (MaxPooling2D)

(None, 52, 52, 256)

0

block4_conv1 (Conv2D)

(None, 52, 52, 512)

1180160

block4_conv2 (Conv2D)

(None, 52, 52, 512)

2359808

block4_conv3 (Conv2D)

(None, 52, 52, 512)

2359808

block4_pool (MaxPooling2D)

(None, 26, 26, 512)

0

zero_padding2d_12 (ZeroPadding2D)

(None, 28, 28, 512)

0

conv2d_15 (Conv2D)

(None, 26, 26, 512)

2359808

batch_normalization_12 (BatchNormalization)

(None, 26, 26, 512)

2048

up_sampling2d_9 (UpSampling2D)

(None, 52, 52, 512)

0

zero_padding2d_13 (ZeroPadding2D)

(None, 54, 54, 512)

0

conv2d_16 (Conv2D)

(None, 52, 52, 256)

1179904

batch_normalization_13 (BatchNormalization)

(None, 52, 52, 256)

1024

up_sampling2d_10 (UpSampling

(None, 104, 104, 256)

0

zero_padding2d_14 (ZeroPadding2D)

(None, 106, 106, 256)

0

conv2d_17 (Conv2D)

(None, 104, 104, 128)

295040

batch_normalization_14 (BatchNormalization)

(None, 104, 104, 128)

512

up_sampling2d_11 (UpSampling2D)

(None, 208, 208, 128)

0

zero_padding2d_15 (ZeroPadding2D)

(None, 210, 210, 128)

0

conv2d_18 (Conv2D)

(None, 208, 208, 64)

73792

batch_normalization_15 (BatchNormalization)

(None, 208, 208, 64)

256

conv2d_19 (Conv2D)

(None, 208, 208, 3)

1731

reshape_3 (Reshape)

(None, 43264, 3)

0

softmax_3 (Softmax)

(None, 43264, 3)

0

Total params: 11,549,379
Trainable params: 11,547,459
Non-trainable params: 1,920

三、环境配置与性能衡量

3.1  环境配置

由于深度学习对 GPU 要求较高,本文采用高配置的“AutoDL算力云”云服务器,使用 TensorFlow-GPU 2.5.0 作为深度学习框架进行猫狗图像分割模型的训练。在训练的过程中,使用交叉熵损失函数作为模型的目标函数,应用 Adam 优化器对参数进行了优化。初始学习率设置为 1e-3 即 0.001。随着训练的进行,根据训练轮数的增加,学习率会自动进行调整。训练 batch size 设置为  4,轮数为 50 轮,实验所用硬件配置如表 3-1 所示。

表 3-1  实验环境配置

项目

参数

GPU

L20(48GB) * 1

CPU

20 vCPU Intel(R) Xeon(R) Platinum 8457C

显存

100GB

硬盘

系统盘:30 GB;数据盘:50GB(免费)

操作系统

Ubuntu 18.04

开发语言

Python 3.8

深度学习框架

TensorFlow 2.5.0

CUDA

11.2

3.2  损失函数

损失函数用于描述预测值与真实值之间的差值,通过不断优化模型,使模型收敛,从而最小化模型损失,进而得到理想的模型预测结果。对于猫狗图像语义分割模型而言,猫和狗的类别存在明显不同,因此本文采用交叉熵损失函数(categorical_crossentropy)和 Adam 优化器进行模型训练。为最小化损失函数,设置学习率(learning_rate)调节模型的参数,从而有效衡量模型预测与真实标签的差异,有助于学习和区分猫狗的特征。损失函数以 表示,即

式中,是类别数量,是真实标签的独热编码(one-hot encoding),是模型预测的概率分布,是类别的索引。

3.3  评价指标

在训练过程中,除了计算模型损失外,还需选取合适的参数评价模型的性能。以标签作为评价标准,除了深度神经网络常用的精确率、召回率及调和均值 F1-Score 指标外,图像语义分割还采用平均交并比(Mean IoU)来完成模型分割性能的评价,以M表示,即

式中,k+1 表示需要预测的类别数量(含图片背景);Pij 表示类别 的像素被预测为类别j的数量,故 Pii 为正样本,Pij 为假负样本,Pji 为假正样本。

当 F1-Score 的值接近于 1 且 Mean IoU 大于 0.5 时,即认为分割模型具有较好的识别能力。在猫狗图像的分割中,猫狗仅占整个图像的一部分,因此,认为 Mean IoU 大于 0.5 时即可满足实际分割需要。


四、模型训练与预测

4.1  模型训练

4.1.1  模型训练过程

本文采用 UNet 模型进行猫狗图像分割,模型共训练 50 个世代,其中前 10 层采用冻结训练(总共有 33 层),利用在 ImageNet 大型数据集上预训练的 VGG16 模型权重进行迁移学习,可以加快模型收敛,加快猫狗特征学习,同时可以在新数据上更好地适应[5]。

冻结训练需要冻结相应模型编码结构的卷积层,在冻结训练的过程中,编码结构的卷积层不进行训练,直接利用大型数据集的预训练权重即可。训练过程中模型具体参数如表 4-1 所示。

表 4-1  分割模型训练参数

模型

主干提取网络

训练阶段

学习率

批训练规模

优化器

训练世代

VGG16-UNet

VGG16

冻结训练

10-4

4

Adam

50

模型训练中的4个参数指标:精确率、召回率、F1-Score 以及平均交并比 Mean IoU 均随着训练世代的变化而变化,具体变化情况如下图所示。

4.1.2  猫狗图像分割训练结果

1. 训练集和验证集的准确率和损失率

经过 50 轮的训练后,基于训练结果可以看出训练集准确率能达到 92.19%,验证集准确率能达到 82.29%,而训练集损失率最低达到 21.38%,验证集损失率最低达到 49.02%,如图 4-1 和 4-2 所示,说明该语义分割网络模型的总体性能较为良好。

图 4-1  训练集结果

图 4-2  验证集结果

2. 召回率 Recall 结果

图 4-3  召回率 Recall 结果

3. 调和均值 F1-Score 结果

图 4-4  调和均值 F1-Score 结果

4. 平均交并比 Mean IoU 结果

图 4-5  平均交并比 Mean IoU 结果

由上述召回率、F1-ScoreMean IoU 的可视化结果可知,在 27 轮之后召回率和 F1-Score 均突破 0.73,且在 27 轮之后 Mean IoU 均大于 0.6。因此,认为本文中 VGG16-UNet 语义分割模型具有较好的识别能力。

4.2  模型预测

4.2.1  待预测猫狗图像的模型分割过程

在上述训练中,定义三个类别分别为 background、cat、dog,在接下来检测过程当中,将分别将待检测图片转化为上述构建模型所需形式,带入已经训练好的模型进行像素值类别判断,并且赋予其类别颜色,这里背景颜色为黑色,猫的颜色为红色,狗的颜色为绿色。

在模型预测中,UNet 模型经初始化后,加载预训练权重 h5 文件,提取验证集损失率相对较低的 h5 文件,以确保模型具备最佳预测性能。遍历测试集文件夹中的所有图像时,每张图像首先使用 PIL 库读取并保存其原始尺寸。将图像调整为模型输入所需的固定尺寸,并归一化图像像素值至 0-1 之间。处理后的图像被输入到模型中,进而模型输出每个像素的类别预测结果。

基于模型输出的类别预测结果,生成彩色的分割图像。为了保持图像的视觉一致性,分割图像调整回原始大小并保存到指定目录中。为了便于直观对比,将原始图像和分割图像进行混合,生成混合图像,并保存到另一个目录中。

通过拼接展示将原始图像分割结果图像混合图像分别拼接成大图,便于对模型性能进行全面评估。在整个过程中,图像的处理与可视化展示实现了对测试图像的高效处理,为语义分割任务提供了完整的解决方案。

预测结果的可视化效果如图 4-6 至 4-8 所示。

4.2.2  预测结果可视化

1. 原始图像

图 4-6  原始图像

2. 分割结果图像

注:黑色代表 background(背景),绿色代表 cat(猫),红色代表 dog(狗)。

图 4-7  分割结果图像

由上述分割结果图像可以清晰看出,图像中包含黑色、绿色、红色三种类别颜色,分别代表背景、猫、狗。从轮廓看,猫狗的提取效果较好,但从颜色来看,部分猫狗的类别提取存在些许偏差,但基本可以分割出猫和狗的图像。从总体上来看,该 VGG16-UNet 语义分割模型的预测效果较好,基本可以适用于二分类或者更多类别的语义分割场景中,具有一定的普适性。

3. 混合图像

为了便于直观对比,将原始图像和分割图像进行混合,生成混合图像,并保存到另一个目录中。这种混合图像通过将分割结果叠加在原始图像上,使得分割区域与原始图像的细节清晰可见,进而更加直观地观察模型的分割效果,评估模型在实际场景中的表现。这些混合图像在视觉上提供了清晰的参考,有助于进一步优化和调整模型。混合图像的可视化结果如下图所示。

注:黑色代表 background(背景),绿色代表 cat(猫),红色代表 dog(狗)。

图 4-8  混合图像


五、总结与展望

5.1  总结

本实验探讨了基于 VGG16 和 UNet 架构的语义分割模型在猫狗图像提取中的应用。通过使用 VGG16 作为编码器捕获图像的低层次特征,并结合 UNet 解码器实现逐步上采样,还原图像的空间分辨率,取得了较为理想的分割效果。

在数据预处理方面,对图像和标签进行了归一化处理,并通过生成器按批次提供数据,保证了模型的稳定训练。使用预训练的模型权重进行初始化,进一步提升了模型的收敛速度和性能。通过设定 EarlyStopping 和 ReduceLROnPlateau 等回调函数,有效防止了过拟合现象的发生,同时调整了学习率,确保模型在不同训练阶段的稳定性。

模型训练过程中,自定义的 MetricsCallback 记录了每个 epoch 的召回率、F1 分数和 mIoU,提供了全面的评估指标。训练结果显示,模型在训练和验证集上的准确率和损失率均有显著改善,且自定义指标的变化趋势也表明模型性能逐步提升。冻结前 10 层进行训练的策略有效利用了预训练权重的特征提取能力,增强了模型的泛化性能。

在测试阶段,通过对测试集图像进行预测,生成了分割图像并与原图进行混合,得到清晰的分割结果。实验结果表明,基于 VGG16-UNet 的语义分割模型在猫狗图像提取任务中表现出色,能够较为准确地分割出目标区域,且分割结果与原图基本一致。

5.2  展望

未来可以通过多种方式进一步提高 VGG16-UNet 模型在语义分割任务中的性能。首先,可以尝试更复杂的编码器架构,如 ResNet 或 DenseNet,以提高模型的分割精度。增加模型的宽度和深度,并探索多尺度特征融合的方法也是关键,以便更好地捕捉图像中的细节信息。

在数据预处理方面,使用更多的数据增强技术,如随机裁剪、旋转、颜色抖动等,能够扩充训练数据的多样性,提高模型的鲁棒性。这些技术使模型能够更好地适应不同的图像场景,从而在实际应用中表现更加稳定。对标签数据进行更精细的处理,避免噪声和误标,提高标签数据的质量,也有助于提升模型性能。此外,引入半监督学习或主动学习方法,利用大量未标注数据,可以进一步提高模型的泛化能力。

优化训练策略也至关重要。采用先进的优化算法和策略,如 AdamW 优化器和学习率循环调整,可提升模型的训练效率和收敛速度。引入正则化技术如 DropBlock 和 Cutout 有助于防止过拟合,提高泛化能力。

改进评估指标,尝试多元化的评估方法和指标,如 Dice 系数、Hausdorff 距离等,可以提供更全面的模型性能评估。根据实际应用需求,优化模型结构和训练策略,满足实际场景需求。比如在医疗图像分割中,精确的边界检测和细节分割尤为重要,可以采用专门的边界增强技术。

最后,考虑移动端或嵌入式设备部署,通过模型压缩和加速技术实现高效实时图像分割。持续优化和创新,将为各类图像分割任务提供更广泛的应用前景,推动医疗图像分析、自动驾驶和遥感图像处理等领域的发展。努力探索新技术和方法,提供更精准高效的图像分割解决方案,不断推动各行业发展。

通过持续的优化和创新,基于 VGG16-UNet 的语义分割模型在各类图像分割任务中的应用前景将更加广阔。在医疗图像分析、自动驾驶和遥感图像处理等领域,通过改进可以提升模型的应用效果,推动相关领域的发展和进步。新技术和方法的引入将提高模型性能,为各行业提供更精准、高效的图像分割方案。


参考文献

[1] 赵兴旺,吴治国,刘超,等.基于CBAM VGG16-UNet语义分割模型的建筑物提取研究[J/OL].齐齐哈尔大学学报(自然科学版),2024,(03):1-7.

[2] 张伟光,钟靖涛,呼延菊,等.基于VGG16-UNet语义分割模型的路面龟裂形态提取与量化[J].交通运输工程学报,2023,23(02):166-182.

[3] 谢跃辉,李百寿,高豫川.基于LBP纹理与SegNet网络的灾损建筑物提取[J]北京测绘2023,37(03):397-401.

[4] 孙凌辉,赵丽科,李琛,等.融入CBAM的Res-UNet高分辨率遥感影像语义分割模型[J].地理空间信息,2024,22(02):68-70.

[5] 陈卫国,莫胜撼.基于迁移学习和逻辑回归模型的花卉分类研究[J].南方农机,  2024,55(01):139-143+151.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/38857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VBA数据库解决方案第十二讲:如何判断数据库中数据表是否存在

《VBA数据库解决方案》教程(版权10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…

第11章 规划过程组(11.6规划进度管理)

第11章 规划过程组(二)11.6规划进度管理,在第三版教材第385页;#软考中级##中级系统集成项目管理师# 文字图片音频方式 第一个知识点:主要输出 1、进度管理计划 准确度 定义活动持续时间估算的可接受区间&#xff0…

第二周:计算机网络概述(下)

一、计算机网络性能指标(速率、带宽、延迟) 1、速率 2、带宽 3、延迟/时延 前面讲分组交换的时候介绍了,有一种延迟叫“传输延迟”,即发送一个报文,从第一个分组的发送,到最后一个分组的发送完成的这段时…

医疗AI革命,为何多模态大模型难以突破?

在人工智能的浪潮中,多模态大模型以其强大的数据处理能力和深度学习算法,被寄予厚望于医疗影像分析、辅助诊断等领域。然而,现实情况却远非如此乐观。本文将带您深入了解多模态大模型在医疗辅助诊断领域的潜力与局限,揭示其面临的…

ue5导航网格设置

AI使用导航网格进行移动,所以,先设置导航网格边界体积 2,使导航网格边界体积覆盖AI所需要的场景(绿色区域),x,y,z在这里都扩大到原来的10倍 3,打开actor的“启用tick并开始” 4&…

MathType8.0最新官方免费版 功能强大的数学公式编辑器

MathType 是款功能强大的数学公式编辑器,可以让用户轻松地在各种文档中插入复杂的数学公式和符号。它支持手写输入公式,方便用户直接通过鼠标或触摸屏操作来创建公式。MathType 的符号丰富,几乎涵盖了所有数学、物理和化学等领域所需的符号。…

128陷阱详解

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

windows下启动redisSentinel

如果已经安装redis的就继续往下看&#xff0c;还没安装redis&#xff0c;先安装一下redis 安装完redis之后&#xff0c;打开redis的目录。 新建一个sentinel.conf文件 # 端口号 port 26379# Sentinel 监控的主节点信息&#xff0c;格式为 <master-name> <ip> &l…

球形气膜:现代娱乐场馆的最佳选择—轻空间

随着科技的发展和人们对高品质生活的追求&#xff0c;娱乐场馆的建设迎来了新的变革。球形气膜结构凭借其独特的优势&#xff0c;逐渐成为现代娱乐场馆建设的最佳选择。轻空间将介绍球形气膜的优势&#xff0c;并探讨其在不同应用场景中的广泛应用。 球形气膜的优势 1. 独特的建…

【Python实战因果推断】13_线性回归的不合理效果3

目录 Regression Theory Single Variable Linear Regression Multivariate Linear Regression Frisch-Waugh-Lovell Theorem and Orthogonalization Regression Theory 我不打算太深入地探讨线性回归是如何构建和估计的。不过&#xff0c;一点点理论知识将有助于解释线性回归…

【HarmonyOS NEXT】鸿蒙如何动态添加组件(NodeController)

NodeController用于实现自定义节点的创建、显示、更新等操作的管理&#xff0c;并负责将自定义节点挂载到NodeContainer上。 说明 本模块首批接口从API version 11开始支持 当前不支持在预览器中使用NodeController。 导入模块 import { NodeController } from "ohos…

尚硅谷k8s 2

p54-56 k8s核心实战 service服务发现 Service:将一组 Pods 公开为网络服务的抽象方法。 #暴露Deploy,暴露deploy会出现在svc kubectl expose deployment my-dep --port8000 --target-port80#使用标签检索Pod kubectl get pod -l appmy-depapiVersion: v1 kind: Service metad…

无锁编程——从CPU缓存一致性讲到内存模型(1)

一.前言 1.什么是有锁编程&#xff0c;什么是无锁编程&#xff1f; 在编程中&#xff0c;特别是在并发编程的上下文中&#xff0c;“无锁”和“有锁”是描述线程同步和资源访问控制的两种不同策略。有锁&#xff08;Locked&#xff09;: 有锁编程是指使用锁&#xff08;例如互…

Python系统教程01

Python 是一门解释性语言&#xff0c;相对更简单、易学&#xff0c;它可以用于解决数学问题、获取与分 析数据、爬虫爬取网络数据、实现复制数学算法等等。 1、print()函数&#xff1a; print()书写时注意所有的符号都是英文符号。print()输出内容时&#xff0c;若要输出字符…

大力出奇迹:大语言模型的崛起与挑战

随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;特别是在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;大语言模型&#xff08;LLM&#xff09;的出现与应用&#xff0c;彻底改变了我们与机器互动的方式。本文将探讨ChatGPT等大语言模型的定义、…

回溯 | Java | LeetCode 39, 40, 131 做题总结(未完)

Java Arrays.sort(数组) //排序 不讲究顺序的解答&#xff0c;都可以考虑一下排序是否可行。 39. 组合总和 错误解答 在写的时候需要注意&#xff0c;sum - candidates[i];很重要&#xff0c;也是回溯的一部分。 解答重复了。是因为回溯的for循环理解错了。 class Solutio…

力扣热100 哈希

哈希 1. 两数之和49.字母异位词分组128.最长连续序列 1. 两数之和 题目&#xff1a;给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。你可以假设每种输入只会对应一个答案。…

34. 在排序数组中查找元素的第一个和最后一个位置(中等)

34. 在排序数组中查找元素的第一个和最后一个位置 1. 题目描述2.详细题解&#xff08;1&#xff09;朴素二分查找算法&#xff08;2&#xff09;改进二分查找算法 3.代码实现3.1 Python  方法一:  方法二:  方法三&#xff1a;优化方法二 3.2 Java 1. 题目描述 题目中转…

Elasticsearch:Painless scripting 语言(二)

这是继上一篇文章 “Elasticsearch&#xff1a;Painless scripting 语言&#xff08;一&#xff09;” 的续篇。 使用 field API 访问文档中的字段 警告&#xff1a;Field API 仍在开发中&#xff0c;应视为测试版功能。API 可能会发生变化&#xff0c;此迭代可能不是最终状态。…

Ubuntu20.04 安装 cudatookit 12.2 + cudnn 安装

最简约的部署Ubuntu20.04深度学习环境的教程 1. 安装Ubuntu20.04 系统 B站详细的安装教程 简约安装版 2. 安装Nvidia显卡驱动 我参考了各种资料&#xff0c;重装系统&#xff0c;完美解决开机显示器黑屏无法进入桌面的情况 黑屏问题主要是由linux内核更新导致&#xff0c;…