课程导论与项目全景:自动驾驶视觉感知概述

大家好,欢迎来到《自动驾驶道路识别:语义分割实战》课程。

我是这门课的主讲。在自动驾驶行业摸爬滚打了六七年,我踩过不少坑,也积累了一些实战经验。今天,咱们就从最基础的东西聊起。

你想想看,一辆车要想自己开,它得先「看懂」周围的世界吧?这就是自动驾驶感知模块要干的事。说白了,就是给车装上眼睛和大脑。

自动驾驶视觉感知:车是怎么「看」路的?

视觉感知,是自动驾驶里最核心的传感器方案之一。摄像头便宜、信息量大,能识别车道线、交通标志、行人、车辆……

但这里有个难点:摄像头采集的是2D图像,而我们需要的是3D环境理解。怎么从2D图像里提取出有用的结构化信息?这就是我们这门课要解决的核心问题。

我记得刚入行那会儿,团队里还在争论「纯视觉方案到底行不行」。现在你看,特斯拉已经用纯视觉跑了那么多年。嗯,技术迭代真的很快。

核心任务拆解:

  • 目标检测:找出「有什么」——车、人、自行车……
  • 语义分割:判断「每个像素是什么」——路面、天空、建筑……
  • 实例分割:区分「同类物体的不同个体」——这辆车和那辆车
  • 车道线检测:找到「可行驶区域」的边界

咱们这门课,重点攻克的就是语义分割。为什么选它?因为它是理解场景最细粒度的方式。每个像素都分类,没有遗漏。

语义分割任务定义:给每个像素打标签

语义分割,听起来高大上,其实没那么玄乎。

你给模型一张图片,它输出一张同样大小的「标签图」。每个像素点,都被分配了一个类别ID。比如:0代表道路,1代表人行道,2代表建筑……

我习惯把语义分割理解成「像素级的地图绘制」。你想想看,自动驾驶决策模块拿到这张标签图,就能知道哪里能开、哪里不能开、哪里可能有行人出没。

避坑指南:

我曾经在项目里犯过一个低级错误——把「语义分割」和「实例分割」搞混了。语义分割只关心类别,不区分个体。比如两辆并排的车,语义分割会把它们标成同一个颜色。如果你需要区分每辆车,那得用实例分割。这个区别,面试经常考。

语义分割的难点在哪?

  • 边界模糊:物体边缘的像素,到底属于谁?
  • 小目标:远处的行人、交通锥,只有几个像素大,很容易漏掉。
  • 光照变化:白天黑夜、逆光顺光,同一个物体看起来完全不一样。

这些问题,咱们后面都会讲到对应的解决方案。

课程项目架构:从零搭建一个语义分割系统

这门课不是纯理论。咱们要动手做一个完整的项目。

整个项目架构,我设计成了四个模块:

模块 内容 实战产出
数据准备 数据集下载、标注格式解析、数据增强 可复用的数据加载器
模型搭建 从FCN到DeepLabV3+,再到轻量化网络 可训练的语义分割模型
训练与调优 损失函数、学习率策略、模型蒸馏 高精度模型权重
部署与可视化 模型导出、ONNX推理、结果展示 可运行的推理Demo

我个人习惯,每完成一个模块,都会跑一遍完整的流程。这样能及时发现上下游的问题。比如数据增强做过头了,模型可能学不到真实分布——我就在项目里吃过这个亏。

数据集介绍:Cityscapes

咱们用的数据集,是自动驾驶领域最经典的——Cityscapes

为什么选它?

  • 真实场景:全部是德国街道的街景,包含各种天气和光照条件。
  • 精细标注:5000张精细标注图,每个像素都有标签。还有20000张粗糙标注,适合预训练。
  • 类别丰富:30个类别,但常用的是19类(去掉了rare类别)。

Cityscapes 常用19类一览:

  • 地面:道路、人行道、停车场……
  • 建筑:建筑、围墙、栅栏……
  • 物体:车辆、行人、自行车、交通标志……
  • 天空:天空
  • 植被:树木、草地

数据集的目录结构,大概是这样的:

cityscapes/
├── leftImg8bit/          # 原始图像
│   ├── train/
│   ├── val/
│   └── test/
├── gtFine/               # 精细标注
│   ├── train/
│   ├── val/
│   └── test/
└── gtCoarse/             # 粗糙标注
    ├── train/
    ├── val/
    └── test/

每个标注文件,是一张PNG图片。像素值就是类别ID。比如像素值0代表道路,1代表人行道……

注意:

Cityscapes的标注中,有一个「ignore_index」类别(ID=255)。这些像素在训练时会被忽略掉。比如图像边缘的黑色区域、难以辨认的物体。如果不处理,模型会学到错误的信息。我刚开始做的时候,就忘了设置ignore_index,结果模型在边缘区域疯狂输出乱码……

好了,第一节课的内容就到这里。咱们把基础打牢,后面才能跑得快。

下一节,我会带你手把手下载Cityscapes数据集,并写一个数据加载器。到时候咱们直接上代码。


公众号:蓝海资料掘金营,微信deep3321