1. 课程导学与语义分割基础
1.1 这门课到底讲什么?
大家好,我是这门课的主讲。先说说我为什么想做这个课程。
几年前我在做自动驾驶项目时,遇到了一个头疼的问题——要在嵌入式设备上跑语义分割,精度要高,速度还得快。当时试了DeepLab、PSPNet这些大模型,效果是不错,但一上手机就卡成PPT。后来接触到MobileViT,眼前一亮——它把CNN和Transformer的优点结合了,轻量又高效。嗯,这就是我决定做这门课的初衷。
说白了,这门课就是带你从零开始,学会用MobileViT做语义分割。从原理到代码,从训练到部署,一条龙讲清楚。
课程核心目标:
- 理解语义分割的基本原理和评价标准
- 掌握MobileViT的网络结构和设计思路
- 能够独立完成数据准备、模型训练、推理部署
1.2 学习路线图:我建议你这样走
我个人习惯把复杂任务拆成几个阶段。这门课30章,我把它分成5个阶段:
你想想看,如果一上来就讲Transformer原理,大部分人直接劝退。所以我先带你打好基础,再逐步深入。每个阶段都有配套的代码和项目,边学边练。
1.3 语义分割到底是什么?
语义分割,说白了就是给图像里的每个像素打标签。比如一张街景图,把天空标成蓝色,路面标成灰色,行人标成红色——每个像素都要分类。
这和图像分类不一样。分类只是说「这张图里有辆车」,分割要精确到「这辆车占哪些像素」。我在做医疗影像项目时,医生要求必须精确到每个病灶像素,差一个像素都不行。嗯,这就是语义分割的价值。
举个例子:
一张 512x512 的街景图,语义分割的输出就是一张同样 512x512 的标签图,每个像素的值代表类别编号(比如 0=背景,1=道路,2=行人...)。
1.4 应用场景:哪里需要语义分割?
我接触过的项目里,语义分割主要用在三个方向:
自动驾驶
这是最典型的场景。车辆需要知道哪里是路、哪里是障碍物、哪里是行人。我记得有个项目,夜间场景的分割精度一直上不去,后来加了红外数据才搞定。这里要注意,自动驾驶对实时性要求极高,所以MobileViT这种轻量模型特别适合。
医疗影像
肿瘤分割、器官分割、细胞分割...医生需要精确知道病灶的位置和大小。我曾经帮一家医院做肺结节分割,数据量不大,但标注质量要求极高。一个像素的偏差,可能影响诊断结果。
遥感与工业检测
卫星图像里的建筑物提取、农田分割,工厂里的缺陷检测——这些场景也大量用到语义分割。说白了,只要需要「哪里有什么」的场景,都离不开它。
| 应用场景 | 典型任务 | 关键要求 |
|---|---|---|
| 自动驾驶 | 道路、车辆、行人分割 | 实时性 > 30FPS |
| 医疗影像 | 肿瘤、器官分割 | 高精度 > 95% |
| 遥感图像 | 建筑物、道路提取 | 大图处理能力 |
| 工业检测 | 缺陷、划痕分割 | 小目标检测 |
1.5 评价指标:怎么衡量模型好坏?
做项目不能光凭感觉。我刚开始做分割时,觉得效果「看起来不错」,结果一算指标,mIoU才60%多。所以,量化指标很重要。
mIoU(平均交并比)
这是语义分割最核心的指标。它计算的是预测区域和真实区域的交集除以并集。每个类别算一个IoU,然后取平均。
# mIoU 计算示例
# 假设有3个类别
IoU_class0 = 0.85 # 背景
IoU_class1 = 0.72 # 道路
IoU_class2 = 0.68 # 行人
mIoU = (0.85 + 0.72 + 0.68) / 3 = 0.75
避坑指南:
我曾经犯过一个错误——只关注mIoU,忽略了单个类别的表现。结果模型对「行人」这个类别的IoU只有0.3,但其他类别高,平均下来看着还行。后来在自动驾驶测试中差点出事。所以,一定要看每个类别的IoU,尤其是关键类别。
PA(像素准确率)
这个指标更直观:预测正确的像素数除以总像素数。但有个问题——如果背景占了90%的像素,模型什么都不做,PA也有90%。所以PA只能作为参考,不能完全依赖。
| 指标 | 计算公式 | 特点 |
|---|---|---|
| mIoU | 平均(交集/并集) | 最常用,对类别均衡敏感 |
| PA | 正确像素/总像素 | 简单直观,易受背景影响 |
| FWIoU | 频率加权IoU | 考虑类别频率,更公平 |
我的建议:
做项目时,主看mIoU,辅看每个类别的IoU。PA可以快速评估,但别用它做最终决策。如果你发现mIoU和PA差距很大,八成是类别不平衡的问题。
1.6 本章小结
这一章我们聊了:
- 课程的整体路线——从基础到部署,5个阶段30章
- 语义分割的定义——给每个像素打标签
- 应用场景——自动驾驶、医疗、遥感、工业
- 评价指标——mIoU是核心,PA是参考