25 图像分割之常用分割模型与评估指标
系列进度
计算机视觉网络教程 · 第 25 / 31 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
分割模型不能只看整体准确率。小目标、边界和类别不均衡都会让普通准确率显得过于乐观。
我会同时看 IoU、Dice 和可视化 mask。指标好但边界差,实际使用仍然会出问题。
在上一篇文章中,我们探讨了图像分割的两个主要类型:语义分割和实例分割。本篇文章将继续深入这一主题,介绍一些常用的分割模型及其评估指标,这些内容将为您实施图像分割提供必要的理论基础与实践指导。
常用的图像分割模型
图像分割模型的选择对于分割性能有着至关重要的影响。以下是一些在计算机视觉领域广泛使用的分割模型。
读这篇时,可以把「常用的图像分割模型 -> U-Net -> Mask R-CNN -> DeepLab」当成一条检查线:先看对象、路径和证据,再回到案例、代码或指标里复查。
1. U-Net
U-Net是一种深度学习网络,广泛应用于医学图像分割。其结构形似字母“U”,具有编码器和解码器两个部分。
- 编码器:负责提取特征,通过一系列的卷积层和池化层逐渐减少图像的空间维度。
- 解码器:通过反卷积层(上采样)逐渐恢复图像的空间维度,同时结合来自编码器的跳跃连接信息,确保细节信息不丢失。
import tensorflow as tf
from tensorflow.keras import layers, models
def unet_model(input_shape):
inputs = layers.Input(input_shape)
c1 = layers.Conv2D(64, 3, activation='relu', padding='same')(inputs)
c1 = layers.Conv2D(64, 3, activation='relu', padding='same')(c1)
p1 = layers.MaxPooling2D((2, 2))(c1)
# ... (继续构建模型)
outputs = layers.Conv2D(1, 1, activation='sigmoid')(c4)
model = models.Model(inputs=[inputs], outputs=[outputs])
return model
2. Mask R-CNN
Mask R-CNN基于Faster R-CNN,增加了一条并行的分支,用于生成对象的分割掩码。该模型适用于实例分割,能够同时进行物体检测与分割。其核心思想是在提出区域候选框后,对每个候选框进行像素级别的分割。
import torch
from torchvision.models.detection import MaskRCNN
model = MaskRCNN(backbone, num_classes=instance_count)
3. DeepLab
DeepLab是一种有效的语义分割模型,它通过引入空洞卷积(dilated convolutions)来控制特征图的分辨率,使得模型在提取上下文信息时具有更好的表现。同时,DeepLab也引入了条件随机场(CRF)来进一步提升分割的精细度。
from keras_segmentation.models.deeplab import DeeplabV3
model = DeeplabV3(nbClasses=21, input_shape=(None, None, 3))
图像分割的评估指标
评估图像分割模型的性能是实现实时应用的重要环节,以下是一些常用的评估指标。
读《图像分割之常用分割模型与评估指标》时,可以把配图当成路线卡:先看整体顺序,再看每一步为什么这样做,最后再检查边界条件。
1. 交并比(IoU)
交并比(Intersection over Union,IoU)是评估分割效果的重要指标,计算公式为:
其中,为预测分割区域,为真实分割区域。IoU越高,分割效果越好。
2. 像素准确率(Pixel Accuracy)
像素准确率计算的是分类正确的像素所占的比例,可以使用以下公式表示:
其中,TP为真正例,TN为真负例,FP为假正例,FN为假负例。
3. F1-score
F1-score是综合考虑精确率和召回率的指标,通常在不均衡数据集上特别有用,计算公式为:
其中:
- 为精确率
- 为召回率
案例分析
下面以一个实际案例来展示如何使用上述模型与评估指标。
练习《图像分割之常用分割模型与评估指标》时,建议把输入条件、处理动作和可见结果写在一起,方便下次复查。
复习《图像分割之常用分割模型与评估指标》时,建议把关键概念、操作步骤和可见结果放在同一页里回看。
案例:医学图像分割
在医学图像分割任务中,使用U-Net模型进行肿瘤区域的分割。首先,我们需要加载数据集,然后训练模型,并最后使用IoU和F1-score等指标评估模型性能。
from keras.preprocessing.image import ImageDataGenerator
# 加载数据
train_datagen = ImageDataGenerator(rescale=1.0/255)
train_generator = train_datagen.flow_from_directory(
'data/train',
target_size=(256, 256),
class_mode='binary'
)
# 模型训练
model = unet_model((256, 256, 3))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(train_generator, epochs=10)
# 评估模型
predictions = model.predict(test_images)
iou_score = calculate_iou(test_masks, predictions)
f1_score = calculate_f1(test_masks, predictions)
总结
在本篇文章中,我们深入探讨了各种图像分割模型,包括U-Net、Mask R-CNN和DeepLab,并介绍了各自的实现方式。我们还强调了评估指标如IoU、像素准确率和F1-score在性能测评中的重要性,将为您在图像分割任务中选择和评估模型提供指引。
下一篇文章将探讨计算机视觉应用之图像识别与分类应用,希望通过这些内容能进一步提升您在计算机视觉领域的能力。
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
图像分割之常用分割模型与评估指标适合谁读?
这是 计算机视觉网络教程 系列第 25 / 31 篇,适合正在学习计算机视觉网络教程,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇计算机视觉网络教程要多久?
按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读