标题中的 Affordance 一词,本意是”预设用途,功能特性“,最初在知觉心理学和设计学领域出现。

后来在人机交互领域,Affordance 的含义变成了:一个产品让用户自然领悟到用法的能力。

在机器人领域(自动驾驶和机器人的感知不分家),被引申为可以执行的潜在动作,即在特定情况下哪些动作是可执行的。具象含义就是:路面-可以走;行人-需避让;绿灯-可通行;红灯-不可通行。

回到标题,就是在自动驾驶的直接感知中,学习场景的 Affordance,以 Affordance 作为直接感知的核心表示。

ADAS视觉感知范式

作者认为,基于视觉的 ADAS 有两种常见范式:

  • 中介感知:先解析整个场景,再做出驾驶决策。图像->场景解析->驾驶行为。

  • 行为反射:通过回归器,将图像直接映射为驾驶动作,无中间推理,纯黑盒。图像->驾驶行为。

论文提出了第三种范式:

即通过图像直接估计 Affordance,利用估计得到的 Affordance 做决策:图像->Affordance->驾驶行为。

Three paradigms for autonomous driving.webp

中介感知

包含多个子系统,比如车辆/行人检测,信号灯识别,车道线识别等。检测结果会被整合为ego周围环境的统一表征,不过这些表征只有很少一部分会被直接用于决策,也就是说,很多检测结果是冗余的。比如估计目标距离,要先检测它的2D BBOX,再估计距离,那直接估计深度不得了?

行为反射

早在40年前就有人利用神经网络构建从图像到方向盘转向角的直接映射(好早)。作者认为在复杂场景下这种方法存在致命缺陷:

  1. 同一个输入图像,不同的人类驾驶员会有不同决策。比如直线行驶,前方有龟速车,你是一起当龟速车,还是超车?也就是同输入的不同输出。

  2. 抽象层级过低。超车行为会被解读为“方向盘往左打->方向盘往右打”,并不知道超车这个意图。

  3. 整张图像太大,导致监督不到关键信息。

Image到Action的映射

Dataset 使用游戏 TORCS 录制,这个游戏能收集驾驶过程中的指标。

模型基于当时 SOTA 的 CNN 框架,关注多车道高速驾驶场景,从 ego 视角出发(和人类一致)。

Image到Affordance

高速驾驶场景的车辆 Action 可以分为2类:

  • 沿车道中心线(两条车道线正中间)行驶

  • 变道/减速以避免撞前车

论文使用两个坐标系:

  • 车道内坐标系

  • 压线坐标系(压在车道线上时)

使用三种指标表征驾驶状态:

  • 航向角

  • 与附近车道线的距离

  • 和前车的距离。

此外,使用13个 Affordance 指标,能覆盖车道和车辆感知的需求。除了航向角始终激活,其他指标可能不激活。比如在车道内坐标系行驶,那么压线坐标系的指标都不会被激活;而当车辆在最左/最右车道,那么左侧/右侧就没有车道了,对应指标也不会激活。

根据这些指标的激活情况,ego可以确定自己在哪条车道上。

编号

指标名称

所属系统

含义说明

1

angle

always(both)

车辆航向与道路切线之间的夹角

2

toMarking_LL

in lane system

到左车道左侧车道线的距离

3

toMarking_ML

in lane system

到当前车道左侧车道线的距离

4

toMarking_MR

in lane system

到当前车道右侧车道线的距离

5

toMarking_RR

in lane system

到右车道右侧车道线的距离

6

dist_LL

in lane system

到左车道内前车的距离

7

dist_MM

in lane system

到当前车道内前车的距离

8

dist_RR

in lane system

到右车道内前车的距离

9

toMarking_L

on marking system

到左侧车道线的距离(车辆压在车道线上时)

10

toMarking_M

on marking system

到中央车道线的距离(车辆压在车道线上时)

11

toMarking_R

on marking system

到右侧车道线的距离(车辆压在车道线上时)

12

dist_L

on marking system

到左侧车道内前车的距离(车辆压在车道线上时)

13

dist_R

on marking system

到右侧车道内前车的距离(车辆压在车道线上时)

下图和上表一一对应:

Illustration of our affordance representation.webp

解读部分指标:

  • in lane: toMarking,车道内坐标系下,到当前车道的左/右车道线距离,和到相邻左右车道的左/右车道线距离,4个指标。

  • in lane: dist,车道内坐标系下,到左/当前/右车道前车的距离,3个指标。

  • on mark: toMarking,压线坐标系下,到左边/右边车道线的距离,和车辆中心到压到的车道线的距离,3个指标。

  • on mark: dist,压线坐标系下,和左/右两边前方车辆的距离,2个指标。

  • 图片(f)主要是展示车道线坐标系和压线坐标系的激活范围重叠区域。两个坐标系存在一个重叠区,实现坐标系之间的平滑过渡,避免突变。

Affordance到Action

这部分是从 Affordance 到驾驶的 Action 的映射,也就是 Affordance 如何影响控制逻辑。

下面两者无监督,不参与训练,都是公式化计算,属于手工规则,这可以提升模型的可解释性,否则就又是黑盒了。

Steering Control

目的是为了让车辆尽可能贴近车道线中心行驶,最小化位置偏差。

steerCmd=C(angledistcenterroadwidth) steerCmd = C * \left( angle - \frac{dist_{center}}{road_{width}} \right)

其中:

  • steerCmdsteerCmd :最终输出的方向盘转向角。

  • CC :随驾驶条件变化的调节系数,用于控制转向响应的强度。

  • angleangle :车辆航向与道路切线的夹角(即之前提到的航向角指标)。

  • distcenterdist_{center}:车辆到当前车道中心线的距离。

  • distcenterdist_{center} / roadwidthroad_{width} :将车辆偏离中心线的距离归一化到道路宽度的尺度上,作为位置修正项。

最终期望的结果是,当车辆变道时,能平滑的从一个车道中心,变到目标车道中心。

Speed Control

目的是根据场景动态调整车速,通过加/减速控制让实际车速保持期望车速。

v(t)=vmax(1exp(cvmax(dist(t)d))) v(t) = v_{max} \left( 1 - \exp\left( -\frac{c}{v_{max}} \left( dist(t) - d \right) \right) \right)

其中:

  • v(t)v(t) :t时刻的期望车速。

  • vmaxv_{max} :最大允许车速。

  • dist(t)dist(t) :t时刻到前车的距离,来自Affordance指标。

  • c,dc, d :待校准的系数,用于调节跟车的响应特性。

目的是实现平滑的速度控制,类似 ACC。

网络和模型

网络基于 Caffe 框架(那时候的主流框架),使用标准的 AlexNet,也就是5个 Conv,接4个 FC,FC 输出维度分别为 4096,4096,256,13。最终FC输出的 13 对应 13 个 Affordance指标,属于回归任务,输出每个 Affordance 的预测值。

论文对 AlexNet 做了修改,输入尺寸280x210,没有做数据增强,因为论文的方法对空间位置有要求,裁剪会破坏空间关系,镜像则违背行驶逻辑(左舵变右舵)。

Loss Function 使用适合回归任务的 Euclidian Loss,也就是 L2 Loss。13个 Affordance 指标被归一化为[0.1, 0.9] 的范围。

TORCS评估

论文的 TORCS 虚拟场景 Evaluation 有两个部分,定性评估和与基线方法的定量对比。

定性评估

定性评估部分没有量化指标,主要是关注 TORCS 中的驾驶表现。结论为:

  1. 模型能在 TORCS 的多车道、有交通流场景中无碰撞平稳行驶;仅在部分变道场景中出现轻微的位置超调(即暂时偏离目标车道中心线),但控制器能快速修正位置,恢复到目标车道的期望行驶位置。证明 Affordance 到 Action 的映射逻辑能支撑决策。

  2. 对车道感知的精度极高,车辆感知 30m 内较好,30-60m 有噪声,60m 外基本不行。主要还是输入分辨率太低,提取不到远处车辆的特征。

  3. 模型对 Affordance 的误差具有鲁棒性,ego 作为一个连续运动系统,控制器可以根据指标修正位置,哪怕 Affordance 出现零星错误估计,也不会导致驾驶失控。

基线定量对比

论文设计了 3 种基线方法,这三种 Baseline 基本覆盖了 ADAS 的主流思路,以 MAE(平均绝对误差)为量化指标。直接说结论:

  1. 行为反射基线:作为纯 E2E 的范式,只能处理简单空赛道驾驶,有车流的时候完全失效。基本印证了本文开头作者对这一范式的评价。

  2. 间接感知基线:聚焦车道线感知的子任务,使用 Caltech 进行车道线检测,检测结果映射到 Affordance 指标。对任务做了大幅简化,无车流,同赛道,高分辨率图像,但是精度仍然明显低于论文中的方法。

  3. 手工特征的直接感知基线:和论文范式相同,主要验证 CNN 学习特征和手工视觉特征的差异。用自动驾驶场景经典手工特征 GIST 替代 Conv 提取的特征。结果是 CNN 特征远优于手工特征。

真实场景评估

智能手机视频

定性测试。测试数据来自手机拍摄的驾驶视频,无标注和人工干预。视频逐帧输入模型,模型输出13个 Affordance 指标,对指标结果进行可视化。结论是:

  1. 车道线:能正确识别车道线,正确定位 ego 在车道中的位置,变道时车道线过渡状态正确。

  2. 车辆感知:存在轻微噪声,距离感知精度略低于 TORCS 场景。对前车有无,远近有一定感知能力。

也就是 TORCS 中训练的模型无需微调,即可处理真实世界驾驶视频。

KITTI数据集

因为 KITTI 和 TORCS 场景差异巨大,KITTI 并非专注于高速场景,而且车辆多,车道线不清晰。

论文重新定义了坐标系,定义自车为中心的 2D 地面坐标系,ego 为中心,Y 前,X 右,类似 BEV。聚焦前车距离估计,这个是 ADAS 感知的核心任务。这部分内容是为了引出下面与 DPM 的对比。

DPM基线

属于开篇提到的中介感知范式,DPM 是当时 SOTA 的目标检测算法。

需要先输出检测框,再基于地平假设,将 BBOX 的下边缘中心点投影到平坦地面,得到车辆位置。

论文在 KITTI 数据集上训练模型,并与 DPM 做对比。

结论就是,媲美 SOTA 的 DPM。

可视化分析

神经元特征学习空间注意力两个维度,证明模型不是随机拟合,而是主动学习到了自动驾驶任务的视觉特征,而且能关注图像中和驾驶有关的区域,如车道线和车辆。

下面左图展示了第一个 FC 的 4096 个神经元的激活模式,证明模型对航向角,车道线,车辆产生强烈响应。

第一个 FC 是 Conv 提取出来的基础视觉特征,像边缘,纹理,轮廓。特征的匹配度越高,FC 中神经元的激活强度越大,比如对车道线激活强度高,对天空激活强度低。激活强度就是激活函数输出的数值。

具体如何操作,作者写的有些模糊,论文中 21000 张图像的数据集,会得到 21000 个激活强度数值,从高到低排列,取前 100 对应的图像。每个神经元最后应该都会得到自身激活强度最高的 TOP100 张图像,最后应该是 4096*100 张图像,每组的 100 张图像做像素级平均,得到 4096 个神经元分别的激活模式图像,然后作者挑了几张特征明显的放在 Figure12 中。

不过这个图,其实我并没能看出来什么东西……不如热力图明显。

上方右图展示了第四个 Conv 的热力图。上方证明了证明了 CNN 对真实场景的车辆由很强的响应,也就是能关注这些区域。响应越高,视觉上就越突出(红)。

结论

  • 相比纯 E2E 直接输出方向盘转角和油门开度,Affordance 是有物理意义的中间表示,具备可解释性。

  • 相比传统模块化感知,跳过冗余的目标建模,更贴合人类直观感知行为可行性的逻辑,效率更高。

  • 本论文方法在虚拟和真实场景均取得不错的效果,而且在虚拟场景数据训练得到的模型,在真实场景下有良好泛化性。

参考文章

[1] 机器人学科中,什么是“Affordance”? - 知乎

[2] 功能可供性_百度百科

[3] DeepDriving: Learning Affordance for Direct Perception in Autonomous Driving