首页 / 资料库 / 微软 · AI 入门

资料库14 分钟读完MIT计算机视觉图像分割语义分割医学影像

语义分割

译自《Semantic Segmentation》 · 查看英文原文

原文出处Semantic Segmentation 原作者:Microsoft · 许可证:MIT License 中文译本由诸葛AI学院整理,仅供学习参考,版权归原作者与微软所有。

前面学过目标检测:用预测出的边界框(bounding box)来定位图像里的物体。有些任务光有边界框不够,需要更精确的物体定位,这个任务叫分割(segmentation)

课前测验

分割可以看成像素分类:对图像的每个像素都要预测它的类别,"背景"也算一类。主流的分割算法有两种:

  • 语义分割(semantic segmentation):只给出像素的类别,不区分同一类里的不同物体
  • 实例分割(instance segmentation):把类别进一步拆成一个个实例

同样是羊群,实例分割会把每只羊当成不同的物体,语义分割则把所有羊归成一类。原文此处有一张图,画的是这两种分割结果放在一起的对比(图来自这篇博客)。

做分割的神经网络架构有好几种,整体结构却是一样的。它有点像前面学过的自编码器(autoencoder),区别在于:自编码器重建的是原始图像,这里要重建的是一张掩码(mask)。所以分割网络分成两部分:

  • 编码器(encoder)从输入图像里提取特征
  • 解码器(decoder)把这些特征变换成掩码图像,尺寸与原图相同,通道数等于类别数

原文此处有一张图,画的是分割网络这种"编码器进、解码器出"的结构(图来自这篇论文)。

分割用的损失函数要单独说。经典自编码器要衡量两张图像的相似度,直接上均方误差(MSE)就行。分割不一样:目标掩码图像里的每个像素表示的是类别编号(沿第三维做 one-hot 编码),所以得用分类任务专属的损失函数,即对所有像素取平均的交叉熵损失(cross-entropy loss)。掩码若是二值的,就用二值交叉熵损失(binary cross-entropy loss,BCE)

One-hot 编码是把类别标签写成一个长度等于类别数的向量(vector)的方法,细节可以看这篇文章

医学影像里的分割

这节课我们来看分割的实际应用:训练网络在医学图像中识别人类的色素痣(也就是常说的痣)。图像来源是皮肤镜影像的 PH² 数据库。这个数据集有 200 张图,分三类:典型痣、非典型痣和黑色素瘤。每张图都带一张勾出痣轮廓的掩码

这套技术特别适合这类医学影像。你还能想到哪些现实中的应用?

原文此处有一张图,展示的是数据库里痣的照片与对应掩码的样子(图来自 PH² 数据库)。

我们要训练一个模型,把任意一颗痣从背景里分割出来。

练习:语义分割

打开下面的 notebook,了解更多语义分割架构,动手操作,看它们跑起来的效果:

课后测验

小结

分割是很强的图像分类技术:越过边界框,做到像素级的分类。医学影像是它的应用场景之一。

挑战

人体分割只是人像图像里一个常见任务,另外还有骨骼检测姿态检测。可以试试 OpenPose 这个库,看看姿态检测怎么用。

复习与自学

这篇维基百科文章对分割的各种应用有个概览。实例分割和全景分割(panoptic segmentation)是这个领域的两个子方向,值得自己再找材料了解。

作业

这次实验要求你用 Kaggle 上的 Segmentation Full Body MADS 数据集尝试人体分割

这篇在讲什么,跟咱们的课怎么对?

资料库是大厂公开教材的中文译本,偏原理和工程做法。想看面向中小企业的白话版本,去入门课场景课