语义分割
你需要知道三件事
语义分割与目标检测有何不同?
语义分割可以是一个有用的替代目标检测,因为它允许感兴趣的目标在像素级跨越图像中的多个区域。这种技术可以清晰地检测出形状不规则的物体,这与目标检测不同,目标检测必须适合于一个边界框(图2)。
如何使用语义分割?
因为语义分割标记图像中的像素,它比其他形式的目标检测更精确。这使得语义分割在各种需要精确图像地图的行业中的应用非常有用,例如:
- 自主驾驶-通过将道路与行人、人行道、电线杆和其他车辆等障碍物分开,为汽车识别可行驶的道路
- 工业检测-用于检测材料的缺陷,如晶圆检验
- 卫星图像-用于识别山脉、河流、沙漠和其他地形
- 医学成像——用于分析和检测细胞中的癌变异常
- 机器人视觉-用于识别和导航物体和地形
例如:自动驾驶应用
图4中的序列显示了用于自动驾驶的语义分割的真实示例。道路图像会自动从其他车辆中分割出来。下一节将展示如何创建这些网络。
理解体系结构
一种常见的语义分割方法是创建一个SegNet,它基于卷积神经网络(CNN)体系结构。一个典型的CNN架构如图5所示。
CNN将整个图像分类为许多预定义的类别之一。
要在像素级而不是整个图像进行分类,可以附加CNN的反向实现。上采样过程执行与下采样过程相同的次数,以确保最终图像与输入图像大小相同。最后,使用像素分类输出层,将每个像素映射到特定的类。这形成了一个编码器-解码器体系结构,它支持语义分割。
步骤1:标签数据或获取标签数据。
深度学习模型建立在大量数据的基础上,语义分割也不例外。一种选择是在互联网上找到有标签的数据。如果你有自己的数据集,你可以使用MATLAB中的Image Labeler应用程序。你可以使用这个数据集来训练一个赛格网。
了解更多
步骤2:创建原始图像和标记图像的数据存储。
当处理大量数据时,通常不可能将所有信息加载到内存中。要管理大型数据集,可以使用数据存储。数据存储包含您想要访问的文件的位置,它只允许您在需要对文件进行操作时将它们读入内存。
要创建一个SegNet,你需要两个数据存储:
- ImageDatastore,其中包含原始图像
- PixelLabelDatastore,其中包含已标记的图像
步骤3:对数据存储进行分区。
当创建一个SegNet时,你必须将数据存储分成两部分:
- 训练集,用于训练SegNet
- 一种测试集,用来评估网络的准确性
步骤4:导入CNN并将其修改为SegNet。
加载一个预先训练过的网络,如VGG16,并使用SegNetLayers命令,创建像素级标记所需的编码器-解码器体系结构。
第五步:培训和评估人际网络。
在最后一步中,为网络设置超参数并训练网络。
如何了解更多的语义分割
视频
- 语义分割概述(造成车厢)
- 解密深度学习:语义分割和部署(47:09)——网络研讨会
- 基于深度学习的脑肿瘤三维图像分割(14)
例子和如何做
- 语义分割与部署——网络研讨会
- 基于深度学习的多光谱图像语义分割——示例