1.什么是目标分割
1.1 定义
在计算机视觉领域,图像分割(0bject Segmentation)指的是将数字图像细分为多个图像子区域。(像素的集合)的过程。
1.2 目的
简化或改变图像的表示形式,使得图像更容易理解和分析。图像分割通常用于定位图像中的物体和边界(线,曲线等)。更精确的,图像分割是对图像中的每个像素加标签的一个过程,这一过程使得具有相同标签的像素具有某种共同视觉特性。
1.3 结果
图像上子区域的集合,或是从图像中提取的轮廓线的集合(例如边缘检测)。一个子区域中的每个像素在某种特性的度量下或是由计算得出的特性都是相似的,例如颜色、亮度、纹理。邻接区域在某种特性的度量下有很大的不同。
2.目标分割任务类型
目前的分割任务主要有两种: 语义分割和实例分割
语义分割:就是把图像中每个像素赋予一个类别标签(比如汽车、建筑、地面、天空等),标注为人,羊,狗,草地。而不需要羊1,羊2,羊3,羊4,羊5等
实例分割:其实就是目标检测和语义分割的结合。相对目标检测的边界框,实例分割可精确到物体的边缘;相对语义分割,实例分割需要标注出图上同一物体的不同个体。
3.基础算法
目标分割的任务在计算机视觉中具有极高的应用价值,涉及从低级别的边缘检测到高级别的对象识别。分割技术的发展经历了从传统的手工特征设计,到基于机器学习的特征提取,再到如今的深度学习方法。 目标分割技术的发展推动了计算机视觉在多个应用领域的进步,从初步的像素级分类到复杂的实例级别分割,算法在不断迭代和优化。未来,目标分割将继续朝着更高精度、更快速度、跨模态融合(如图像和文本)、更少标注需求等方向发展带来更多突破。
4.关键评价指标
(1)像素准确率
像素准确率 (Pixel Accuracy) 是图像分割任务中最基本和直观的评价指标之一,用于衡量模型分割结果的正确性。它描述了模型预测的像素与真实标签之间的匹配程度,特别关注了所有像素中被正确分类的比例。
计算简单,易于理解,适合快速评估分割模型和整体效果评估
(2)交并比与平均交并比
交并比(IoU)用于评估预测区域和真实区域之间的重叠程度,平均交并比(mIoU)是所有类别的IoU的平均值,用于评估多类别分割任务的性能。
适用于较大的重叠区域,通常要求预测区域与真实区域的交集面积较大,较小的交集会显著降低IoU值。
(3)Dice系数与平均Dice系数
Dice系数通过计算预测分割结果和实际目标区域之间的重叠部分,给出一个衡量两者相似度的评分,平均Dice系数是所有类别的Dice系数的平均值,用来综合评估模型在所有类别上的分割表现。
加重了对正确预测区域(TP)的关注,在小目标和边界处理上表现更好。
5.算法介绍
5.1.1 FCN网络介绍
全卷积网络,模型由卷积层、池化层组成(没有全连接层),可以接受任意大小的输入,网络的示意图如下:
全卷积(convolutional):采样端对端的卷积网络,将普通分类网络的全连接层换上对应的卷积层(FCN) 上采样(upsample):即反卷积(deconvolution),恢复图片的位置信息等,反卷积层可以通过最小化误差学习得到。 跳跃连接(skip layer):通过连接不同卷积层的输出到反卷积层,来改善上采样很粗糙的问题。
FCN网络结构主要分为两个部分:全卷积部分和反卷积部分。其中全卷积部分为一些经典的CNN网络(如VGG,ResNet等),用于提取特征;反卷积部分则是通过上采样得到原尺寸的语义分割图像。FCN的输入可以为任意尺寸的彩色图像,输出与输入尺寸相同,通道数为n(目标类别数)+1(背景)。FCN网络结构如下:
5.1.2 FCN架构介绍
├── src: 模型的backbone以及FCN的搭建
├── train_utils: 训练、验证以及多GPU训练相关模块
├── my_dataset.py: 自定义dataset用于读取VOC数据集
├── train.py: 以fcn_resnet50(这里使用Dilated/Atrous Convolution)进行训练
├── train_multi_GPU.py: 针对使用多GPU的用户使用
├── predict.py: 简易的预测脚本,使用训练好的权重进行预测测试
├── validation.py: 利用训练好的权重验证/测试数据的mIoU等指标,并生成record_mAP.txt文件 └── pascal_voc_classes.json: pascal_voc标签文件
5.1.3 FCN模型算法核心
全卷积部分由骨干网络(例如ResNet)和分类器(FCNHead)组成。反卷积部分在FCN类的forward方法中体现,通过双线性插值实现上采样。
IntermediateLayerGetter类用于从预训练的骨干网络(如ResNet)中提取中间层的特征。它实际上定义了哪些层的特征将被用于后续的FCN头部结构。 FCNHead类定义了FCN的头部,包含两个卷积层,用于将特征图转换为分类结果。 fcn_resnet50和fcn_resnet101这两个函数用于创建具有ResNet-50和ResNet-101骨干网络的FCN模型。
FCN类继承自 nn.Module,类定义了整个FCN网络的结构,包括骨干网络、分类器和辅助分类器,用于图像分割任务。FCN模型由两大部分构成:全卷积部分和反卷积部分。
全卷积部分由经典的CNN骨干网络(如ResNet-50或ResNet-101)组成,负责提取图像的特征图。这些特征图随后被送入FCNHead分类器,将特征图转换为初步的分割图。反卷积部分则通过双线性插值将这些初步的分割图上采样到与原始输入图像相同的尺寸,从而得到最终的语义分割结果。
5.1.4 FCN模型运行结果
以PASCAL VOC2012数据集为例
5.1.5 FCN模型运行结果
以PASCAL VOC2012数据集为例
指标 | 结果 |
Pixel Accuracy | 0.960300440527933 |
Mean IoU (mIoU) | 0.585438551414074 |
Mean Dice (mDSC) | 0.636518569267299 |
FCN 在 PASCAL VOC 2012 数据集上的 像素准确率 为 96.03%,这表明模型在大多数背景和目标像素的分类上表现良好,能够有效区分背景与前景。 在 PASCAL VOC 2012 数据集上,FCN 模型的 mIoU 为 58.54%,表明模型在多个类别复杂的场景中,目标区域的重叠度还有提升空间。 FCN 模型在 PASCAL VOC 2012 数据集上的 mDSC 为 63.65%,这个结果表明模型在目标区域的预测精度偏低,尤其是细节和边界处理上,可能存在一定的漏分割或误分割。
【模型解析持续更新,预期更新:unet、unet++、deeplabV3】
代码基于此: