2024年4月17日星期三

无图 其二

随着 Transformer 的普及,车端感知也进入了万物皆预测的时代,以前对于其他车辆的轨迹和行为大多使用传统的滤波方式,稍微激进一些也就是 RNN,现在全部都在一个模型里面搞定。车道线也是如此,以前是靠边缘特征做实时提取,车道线磨损或者光照阴影干扰的情况下识别效果就比较差了。而用了 Transformer 预测了之后,有些车道就算不能实时提取特征,也可以依靠模型本身的时间序列上的泛化能力进行短暂过渡。

不过现在的玩法又更进了一步,直接把之前的 HD Map,也就是彩色点云当作训练数据喂进去,这样模型就有了 HD Map 的“记忆”。所以国内大把号称 无图 NOA 的厂家却有“开城”的前置步骤,因为需要预先采图然后训练模型。

不得不说,这种做法多少有些鸡贼,打着无图的旗号干着有图的事情。在为数不多放开感知结果的几次 无图 NOA 演示里面,都看到了本来地上没有车道线,感知却识别出了车道线的现象。因为 HD Map 是人工标注的车道线,然后作为训练数据集成为了模型的一部分,模型就算是实际上看不到车道线,但却可以把人工标注的结果重放出来。

这样过拟合训练的好处也不是没有,比如在一定程度上规避了测绘资质的要求,上车的模型和地图本来就是一体的,没有独立的地图文件,监管部门对此无能为力,而相对于量产车来说少量的 HD Map 采集需求,也完全可以通过打游击的方式规避监管。

当然,这样做的隐患还是有的,前段时间一批甲级资质图商被取消资质(名义上是年审不通过)的原因是地图标注众包,违反了原始地图数据不上互联网的要求。小企业可以举公司之力在局部地区比如小的市县级别采图然后训练到过拟合,但是卖车是要全国跑的,在核心区域以外的地方模型泛化效果就很难说了。

而且模型和地图融合的方式,对于后续模型升级来说无疑是噩梦。独立地图可以分区升级,不影响主模型也不影响其他地区,但是对于整体端到端模型来说,只有模型升级一条路,而且要验证有没有对之前的区域和模型行为有负面影响,需要重跑所有的已知场景和测试案例。随着地图区域的扩大和测试场景的不断累积,升级的成本会迅速到达就算是大厂也无法接受的程度。在长尾端,会不断遇到按下葫芦浮起瓢的问题,就是这个区域这个场景优化了,但是 Regression 测试其他某个场景又劣化的情况。FSD 很明显也遇到了这样的问题。

本质上来说,这就是前面几篇提到过的,不管是 NN 还是 LLM 模型,初始阶段模型的泛化能力是一种捷径,但是到了一定阶段都必然会遇到泛化能力的瓶颈。诚然,暴力堆算力和参数数量是有可能可以跨越这个瓶颈的,就像现在很多人都在讨论的 AGI 或者大模型的 Eureka 时刻一样,但是车载平台毕竟对于功耗有相对硬性的要求,而每瓦算力的提升早已过了指数甚至线性提升的阶段。

我相信解决之道并不在于无脑堆数据或是算力,而在于更好的工程设计,而一个好的工程设计中解耦是必不可少的。这也算是我对于自动驾驶端到端唱的反调吧。There is no silver bullet.

2024年2月21日星期三

Vision

马一龙在解释 Tesla 的 FSD 为什么要使用纯视觉方案时,理由之一就是人眼也是如此,既然人可以做到,那摄像头理应也可以做到。

果真如此么?

人眼是有立体视觉的,立体视觉的来源有三个方面:

  1. 双目视像差。事实上传统 CV 使用双目感知是非常常见的,例如 Kinect 就是双目+红外深度传感器。已经量产的 L2 方案里面,斯巴鲁的 EyeSight 也是双目(新款又加了基于 DL 的第三个摄像头)。
  2. 运动视像差。包括目标运动产生的视像差,以及自身运动产生的视像差。这个方案需要配合高精度 IMU 一起使用。传统 CV 上主要是 SLAM 方向用得比较多,感知的话光流法也可以认为属于此类。一些 SLAM 论文认为,IMU 精度足够高的情况下,单目感知效果是不输于双目的。而现在最流行的 Transformer 在时间维度上有一定的“记忆”,也可以认为有利用到运动视像差。
  3. 先验知识。多数监督学习的单目感知都属于这个类别。

人类对阵人工智能其实有天然的劣势,例如专注能力,例如反应速度。即使是顶级的 FPS 游戏玩家,实际反应速度也在 200ms 附近,操作的迅捷更多来自于预判,以及不需要反应的连续操作精度。人工智能在相同输入的前提下,上限自然是高于人类的。

而 FSD 的视觉方案在我看来,对于第 3 类三位信息的利用和人类互有胜负,人眼对于 HDR 的处理目前来看好于现有的成像技术,对于未分类物体的识别能力也更好;而弱点则是覆盖范围和对焦速度。对于第 2 类视像差更多是隐式依赖 Transformer 自身的时序关联性。而对于第 1 类视像差则完全没有使用。即使是在纯视觉方案里面,也是天然残疾,上限不高。

一个比较理想的纯视觉方案需要具备以下特征:

  1. 结合目标跟踪和 SLAM,也就是 ego perception 和 object perception 统一。SLAM 里面的 Mapping 部分可以认为是 environment perception 的记忆。
  2. 使用全部三种立体视觉来源,而不是只依赖先验知识(训练数据集)。
  3. 时间同步、高精度 IMU。


[离题]

关于 Sora 的原理,如果这位大佬的猜测靠谱的话,确实和目前自动驾驶的视觉方案类似,通过网络的先验知识从 2D RGB 位图反推回伪 3D。在自动驾驶上是 BEV,而 Sora 反推的结果应该是类似于红外深度传感器那种相对稀疏的伪 3D 点云。

既然能拿到伪 3D 点云,那理论上来说也可以使用骨架进行物理约束。这个技术在 Kinect 时代就有了,不是什么天顶星科技。这是一个“应该比较简单”的改进方向。

如果有足够的训练数据的话,从 2D 反推到稠密 3D 顶点网格也不是不可能。在有了网格和物理约束的情况下再做光追渲染,恐怕整个影视行业都要被颠覆了。多媒体生产过剩这件事对人类社会形态的重塑会比文字生成来得更大,毕竟互联网时代,文字信息就是过剩的,但多媒体资源是相对稀缺。

2023年5月4日星期四

LiDAR or not LiDAR

自动驾驶对于 LiDAR 的使用可以追溯到 2005 年 DARPA 的那次自动驾驶竞赛,那时候深度学习还没有兴起,基于摄像头的感知大多还是基于双目视觉重建深度信息,也有一些单目配合 IMU 的尝试,配合传统的 语义分割+图像识别,对于简单低速场景来说还勉强可用,但是地形出现起伏、同时有一些无法分类的障碍物的时候,大家发现Velodyne 的 64 线旋转式激光雷达对于感知的帮助是巨大的。算法也很简单,就是先做一次地面点云擦除,剩下的点云简单聚类之后就是障碍物,再对行人和车辆这样的分类做一下轨迹追踪和预测即可。

后来深度学习的兴起对于摄像头感知的影响是巨大的,首先语义分割可以不需要借助双目或者前后帧直接得到深度信息,其次对于不同光照情况下的物体分类泛化效果也远远好于传统方法。基于 LiDAR 的感知更多的时候是起一个保底的作用的,实际上路效果主要还是靠摄像头。

所以可以通过传感器的配置反推感知算法。例如 Subaru eyesight 前视是一组双目,那大概就是传统算法,新加一个广角单目有可能是深度学习然后后融合;而 Tesla 是三个不同焦距摄像头组合,那大概一开始就是深度学习端到端。

而随着测试场景越来越丰富,大家也开始发现 LiDAR 并不能始终保底,例如雨天车轮卷起的水雾、地面反射以及车辆玻璃的反射(大巴尤其明显)都会造成假阳性,而且对于固态 LiDAR 来说还有点云粘连的问题。在算法上强行融合 LiDAR 和摄像头的信号,除了增加算力负担以外,似乎对于实际效果提升帮助并不大。

在 Transformer 出现以后,感知的理念更进一步,不再是拘泥于分割+分类+追踪预测,而是万物皆预测,而实际效果大家也可以在 Tesla FSD 上面看到。以至于现在使用 BEV Transformer 和不使用的,看起来都不是一个自动驾驶等级的产品。

那么 LiDAR 是否就真的没有用了呢?

让我们回归本源,摄像头是否能够保证足够高的检出率从而保证安全?在实践中,检出率和假阳性抑制往往都需要做取舍。Demo 的时候可以为了短时间的效果调高检出率,而到了量产阶段,假阳性特别是前方的假阳性是需要严格避免的。毕竟 AEB 需要触发的机会还是少,而且真算是没触发,用户观感上来说也比对着空气急刹要好得多。所以就算是 FSD,检出率也依然无法满足高阶自动驾驶的需求。

举一些例子。

  • 对于车道的检测比较依赖光照和车道线特征,如果是一侧车道有护栏/挡墙而无车道线,同时有车道线并入汇出/光线变化/另一侧车道线磨损/弯道等情况时,车道线检测往往会出错。
  • 对于前车是小车的情况,由于摄像头安装位置一般都较高,从后面图像预测位姿和行进路线是比较容易的,甚至相对于人眼的高度还有额外优势;但是对于前车是大车的情况,通过尾部图像预测位姿往往不够精确,有的时候大车已经偏离车道了都没有反应。这对人类来说是有些反直觉的,因为人类可以通过大车的侧面投影来比较轻松地判断前进角度,但是对于深度学习来说,一个是训练数据样本的问题,看正后方和侧后方的数据比较多,稍微露出侧面的那种很少;另外一个原因,也是比较核心的原因,则是摄像头图像本质上是从 Ego View 投影到 BEV(Bird Eye Vew),这个 BEV 是伪 BEV,所以对于这种三维的相关性信息天然是比较困难的。前面说的车道检测的场景也是一个道理。
  • 另外对于光照条件的泛化能力也受到传感器本身性能的制约。传统对于车用摄像头的 HDR 合成是通过长短帧来解决的,但是往往会有偏色的问题,这在红绿灯识别上比较致命,实际效果在光照快速变化(例如通过桥下阴影或者隧道出入口)或者过强过弱光照时也并不可控;一些比较复杂的方法,例如类似 RED 的一次曝光多次读出,然后 DSP 合成,对于 CMOS 的读出速度要求比较高,也要求相对强力的 DSP 前处理器,成本上来说可能不太划算,目前我还没有看到量产车上使用类似的技术。当然如果能做到的话,在 DSP 里面还可以加入降噪、运动补偿以及 NPU 直接做一部分感知,或许也是一种不同于当前主要在控制器上做多传感器感知融合的思路。

相比之下,LiDAR 的主要优势有两个,一个是信号天然是 BEV,可以直接拿来做可行驶区域的预测和线路规划,而不光是基于车道识别,而后者的效果是有上限的,就是 ACC+换道+Nudge,这也决定了基于后者做出来的只能是 L2+(或者学习 Intel,L2++++),而不可能是 L3L4;第二是主动光源,不受光照条件泛化能力的约束。

所以从稍微长一些的时间来看,LiDAR 的上限是要高于纯视觉方案的,而水雾假阳性问题,随着各家慢慢开始转为 1550nm 光源,应该可以通过提升功率的方式解决。而反射抑制则有两种思路,一种是使用更复杂的编码方案,例如鬼成像;另一种是算法抑制,相比于各种光照条件泛化来说,反射抑制要更容易达成一些,带有几何约束的追踪算法应该可以抑制此类飘忽不定的信号源。

2023年3月29日星期三

HD Map or Mapless

TL; DR

  • 所谓的高精度地图其实是激光点云定位地图,是投机取巧 Demo 产物
  • 对于自动驾驶来说,低精度导航地图+高精度上下文信息足矣
  • Mapless 则是另外一个噱头,本质是 ADAS 词汇再创造

若干年前,一票 L4 初创公司只需要买一颗 Velodyne 的 64 线旋转式 LiDAR、一颗 NovAtel 的 RTK+光纤陀螺仪 的高精度组合导航、买一台可以改线控的车再找改车公司(AS、5ms)改好、后备箱塞一台 PC 再找一帮小伙伴,就可以让投资人纷至沓来。

那时候的地图只需要将 LiDAR 的点云用组合导航的数据做运动补偿,然后拼接起来就可以了。起的作用也仅仅是给人工标注行驶轨迹,然后依靠组合导航的精度循线行走。LiDAR 感知也只需要把地面擦除,然后地上凸包做一个聚合和简单的追踪就可以完成一个让投资人眼界大开的 demo。

之后的所谓高精度地图,经历了一系列的演进,比如

  • 可以使用点云进行定位,例如 LOAM,这样可以部分降低对于高精度组合导航的依赖
  • 添加了摄像头信息,这样地图就看起来像三维重建一般
  • 用感知算法擦除行人车辆等
  • 可以标注车道线、停止线等信息
  • 可以标注红绿灯的三维位置,这样对于红绿灯的感知就从识别简化成了分类问题

这种形式的高精度地图的核心作用其实就是高精度定位,然而,高精度定位真的有必要么?

与此同时,我们必须要面对一系列的问题,例如

  • 这种带有高精度定位信息的地图数据量非常大,基本上可以认为和传感器原始数据一个数量级,压缩一般也只能降低一级,和导航地图完全不在一个层面上
  • 虽然有各种建图算法,但是依然无法脱离 RTK 的锚定,而 RTK 虽然在一次行程中可以极为精准,但是多次行程的偏移量往往不能对齐,这就制约了局部更新地图的能力
  • 对于高精度地图的采集,需要对应的测绘资质。虽说前几年一度放水,但是后来尤其是甲级资质又收紧了,现在全国也只有不超过 20 家具备甲级资质的机构。就现在实操的资质要求来说,已经没有众包标注的可能性,而且处理原始数据必须要强网络和物理隔离
  • 在国内使用还需要考虑卫星导航需要 GCJ02 坐标的问题,虽说实际上可以几乎无损转回 WGS84,但是要做到全流程都能合规,也是不太容易的
  • 从卫星导航坐标转换到局部欧氏坐标一般需要用墨卡托投影,这样需要分区处理,对于默认欧氏坐标是全局坐标的程序逻辑来说也有额外的适配工作

所以高精度定位地图只能在小范围内使用,全国范围的覆盖,无论是地图的生成与标注,还是下发到车,都是无法实现的。

当然,这并不是说基于 RTK 的定位无用,例如农耕自动化完全可以使用 RTK 路径的模式,只需要基础的感知甚至不需要感知只需要图传即可;又例如室内 AGV 定位,也可以采用惯导+天花板定位点+建图的模式(现在很多送餐机器人即是如此);室外的工程机械也可以使用路面和环境感知+RTK 的模式;园区穿梭或是物流亦是如此。总之,只要能限定使用范围在一个局部区域,这类投机取巧的方式往往可以适用。

而对于开放道路的行驶,高精度定位真正的效果其实是保证在车道线内的厘米级行驶精度,而这并不需要高精度定位。首先车道线识别无论是对于传统 CV 还是 DL 来说,都算是一个被研究得比较透的问题,在正确标定的前提下,有了车道线识别的结果,就足以保证在车道线内的横向稳定性;而纵向的精度,讲真,不重要,对于 ADAS 来说只要能匹配前车速度就够了。

而上述的高精度定位的种种好处,完全可以使用车道线识别+带有上下文信息的导航地图来解决

  • 提供车道线的元数据,例如有多少车道,大概在什么位置有车道线数量的变化,左转右转车道位置,路口的大致位置,甚至可以大致提供车道的曲度和坡度。这样对于感知来说,很容易就可以从自己所在的车道推导出全局的位姿。就算车道完全被其他车遮盖,可以改用跟随车流的规划
  • 对于红绿灯定位,可以只提供红绿灯区域的稠密定位上下文,这样感知只需要大概定位到路口就可以继续使用之前的方法
  • 甚至还可以提供其它的上下文,例如限速、交通流量、临时改道、车祸等
  • 大部分信息其实传统图商手上都有现成的,就算是加一些信息,工作量也远低于高精度定位地图
本质上来说,开放道路的自动驾驶并不需要全局高精度定位,只需要有限区域内的横向定位。而其他的好处,无外乎是美学层面上,或者是糙快猛轮一个 demo 的考虑。至少传统导航地图的线路规划,是好过 L4 初创公司自己标注的路径点的。

那么是否可以完全脱离地图,包括带有更丰富上下文信息的导航地图呢?如果我们的要求仅仅是 ADAS,也就是车道线保持自适应行驶,或许再带一个手动触发的半自动化变道,那么结论是够用。如果我们的要求是更高级别的自动行驶,那没有限速和车道信息,恐怕这一切都是空话。


[题外]

上述的三维重建式的“高精度地图”是否有用呢?其实是有的,但是对于自动驾驶这个细分领域来说用处不大,或者说 overkill。重建出来的地图看起来大概是个高精度版的谷歌街景,但由于精度的提升,其实是某种意义上的元宇宙的三维实景,而且如果可以多次采集的话,还有时间维度的信息。这种信息密度对于强力部门乃至军事情报用途是大有用处的,甚至可以配合固定机位的摄像头进行某种意义上的“车路协同”,不仅可以对于车辆和行人这些移动目标进行几乎无死角的全天候追踪。也可以追踪地图包括建筑、施工、地形地貌的改变。用元宇宙的说法,就是对公开道路和周边进行采样和建模乃至干预的能力。