🧠 第十章 交通与智驾:构建安全高效出行解决方案
📄 一句话概括

延迟拆成七环,液压/电机响应 100 毫秒占 40%,是最大的一块; 算法侧(预处理 16.2 + 推理 60 + 后处理 49.4)只有 126 毫秒。 把推理从 60 砍到 30,总延迟只从 249 降到 219,降 12%。换算成距离: 120 公里时速先盲走 8.3 米,加刹停 70.8 米,共 79.1 米。

📝 本节和前面几节的关系

上一节讲「准不准」,这一节讲「来不来得及」。 智驾里最容易被低估的一课:算法优化到极致,也可能只占总延迟的两成。

一、延迟要拆到每一环

「系统延迟 200 毫秒」这句话没有用, 因为它不告诉你该优化哪里。有用的做法是把端到端延迟拆成串行的环节,逐环量。 Demo 拆了七环: 曝光、图像传输、预处理、骨干推理、后处理、总线到执行器、液压/电机响应。 前六环里有两环是实测的(预处理和后处理),推理那一环用 60 毫秒的假设值。 为什么要实测预处理和后处理?因为这两环最容易被当成「忽略不计」。 结果后处理实测 49.4 毫秒,比预处理的三倍还多。

二、硬件那一块是物理的

环节 耗时 占比
曝光(60 帧/秒) 16.7 毫秒 7%
图像传输 5.0 毫秒 2%
预处理(实测) 16.2 毫秒 6%
骨干推理(假设) 60.0 毫秒 24%
后处理(实测) 49.4 毫秒 20%
总线到执行器 2.0 毫秒 1%
液压/电机响应 100.0 毫秒 40%
合计 249.3 毫秒 100%
液压/电机那 100 毫秒占了 40%。这一块是物理的:刹车卡钳夹紧、刹车片贴合、压力建立,
再怎么优化算法也压不下去。
所以实时性预算要从这一头倒推。假设硬件 100 毫秒不能动,要求端到端不超过 250 毫秒,
那留给算法的就是 150 毫秒——这就是「算力预算」的真实含义。
反过来,很多人是先选模型再算延迟,结果发现怎么优化都差 50 毫秒。
顺序反了,方案就得推翻。

三、换算成米,才有判断力

毫秒对人没有直觉。 换成「多走多少米」就有了。表二是 30 到 120 公里时速下,249.3 毫秒对应多走多远, 再加上按摩擦系数 0.8 算的刹停距离:

车速 延迟内位移 刹停距离 合计
30 公里/时 2.1 米 4.4 米 6.5 米
60 公里/时 4.2 米 17.7 米 21.9 米
90 公里/时 6.2 米 39.8 米 46.1 米
120 公里/时 8.3 米 70.8 米 79.1 米
120 公里时速下,249 毫秒就是先盲走 8.3 米——差不多两个车身,
再加上刹停的 70.8 米,一共 79.1 米,十七个车身。
这里有个反直觉的结论:速度越高,延迟所占的比例越小。120 公里时延迟只占 10%,刹停占 90%。
但延迟那 10% 恰恰是「不可挽回」的部分——刹停距离是物理决定的,延迟是你自己加上去的。
所以「实时性按米验收」不是修辞。把它换算成米,才能和「感知距离」「制动距离」放在一起比,
才知道系统性能够不够。

四、雨天会把这张表翻一倍

上面所有刹停距离都是按摩擦系数 0.8(干沥青)算的。 雨天掉到 0.4,刹停距离直接翻倍——120 公里时速要 141 米。 而延迟那 8.3 米不变。所以雨天里,延迟占总制动距离的比例从 10% 掉到 5.6%, 但绝对距离一点没少。 这就是为什么「雨雪天限速」不是保守,是物理要求。同样一套系统,干地能在 79 米内停住, 湿地要 149 米——感知距离不够,就是刹不住。

五、落地:预算倒推四步

① 定需求。 不是「延迟小于 200 毫秒」,而是「在 X 公里时速下,能在 Y 米内停住」。 这两个数决定了后面的全部。 ② 先扣硬件。 刹车/电机的响应时间是已知的,先扣掉。剩下的才是算法预算。 ③ 逐环实测。 特别是预处理和后处理——这两环经常比推理还久(Demo 里后处理 49.4 毫秒)。 ④ 留余量。 算出来占 50% 是安全线,占到 80% 就该考虑降配。 因为上车之后还有温度、负载、GC、日志这些开销,实验室里跑不出来的东西,路上全都会出来。 最后提醒:「把推理从 60 砍到 30」只降 12% 的总延迟,这一条应该记住。 优化之前先看饼图,别一头扎进最熟悉的那一环。

六、动手 Demo:实时性:总延迟 249 毫秒,120 公里时速下先盲走 8.3 米

在 640×640×3 的输入上实测预处理(归一化 + 1×1 卷积)和后处理(激活 + 降采样)的耗时, 各取五次平均; 把七环延迟加起来算占比,再把总延迟按车速换算成位移,和按摩擦系数 0.8 算出的刹停距离相加。

t0 = time.perf_counter()
for _ in range(5):
    z = (img - 0.45) / 0.225          # 归一化
    y1 = z @ Wm                       # 1×1 卷积
t_pre = (time.perf_counter() - t0) / 5.0 * 1000.0

parts = [(u"曝光", 16.7), (u"传输", 5.0), (u"预处理", t_pre),
         (u"推理", 60.0), (u"后处理", t_post), (u"总线", 2.0),
         (u"液压/电机", 100.0)]
tot = sum(v for _, v in parts)

d_react = v * tot / 1000.0              # 延迟内位移
d_brake = v * v / (2.0 * 0.8 * 9.81)    # 刹停距离

实跑输出:

--------------------------------------------------------------------
实时性:总延迟 249 毫秒,120 公里时速下先盲走 8.3 米
--------------------------------------------------------------------
  分辨率                   640 × 640 × 3
  预处理实测               16.2 毫秒(归一化 + 1×1 卷积)
  后处理实测               49.4 毫秒(激活 + 降采样)

  环节                       耗时(毫秒)   占比
  -------------------------------------------
  曝光(60 帧/秒)                16.7     7%
  图像传输(GMSL)                  5.0     2%
  预处理(实测)                   16.2     6%
  骨干推理(假设 60 毫秒)         60.0    24%
  后处理(实测)                   49.4    20%
  总线到执行器                      2.0     1%
  液压/电机响应                  100.0    40%
  合计                            249.3   100%

  车速(公里/时)   速度(米/秒)   延迟内位移   刹停距离   合计
  -----------------------------------------------------------
              30            8.3          2.1        4.4    6.5
              60           16.7          4.2       17.7   21.9
              90           25.0          6.2       39.8   46.1
             120           33.3          8.3       70.8   79.1

  **液压/电机那 100 毫秒占了 40%,是最大的一块。**
  **这一块是物理的**——刹车卡钳夹紧、刹车片贴合、压力建立,
  **再怎么优化算法也压不下去。所以实时性预算要从这一头开始倒推。**
  算法这一侧能压的是「预处理 16.2 + 推理 60 + 后处理 49.4」,共 126 毫秒。
  把推理从 60 砍到 30,**总延迟只从 249 降到 219 毫秒,降 12%。**
  **这就是硬件占大头时,优化算法能拿到的真实收益。**
  表二把毫秒换成米。**120 公里时速下总延迟 249 毫秒 = 先盲走 8.3 米。**
  再加刹停距离 70.8 米,**一共 79.1 米**——十七个车身。
  **所以「系统延迟 200 毫秒」这种话必须换成米来说,否则没人能判断严重程度。**
  **注意刹停距离是按摩擦系数 0.8 算的(干沥青)。**
  雨天掉到 0.4,这一项直接翻倍——**120 公里时速要 141 米。**
  所以延迟不能单独看:**路面越滑,同样 250 毫秒越致命。**
  一句话总结:**实时性要按「米」验收,不是按「毫秒」验收。**

液压/电机 100 毫秒占 40%,后处理 49.4 毫秒占 20%。这两项加起来 60%, 都不是「模型」那一环。 后处理比预处理还久,这一点很多人想不到。因为降采样和激活要大范围遍历内存, 在 Python 里还有解释器开销(这一项在 C++ 里会小很多)。 推理 60 毫秒是我假设的,不是实测——因为沙箱里没有真实的骨干网络。但它在总延迟里只占 24%, 所以这个假设对结论影响不大。 把推理砍一半(60→30),总延迟 249→219,只降 12%。这就是「硬件占大头」时优化算法的真实收益。 要说明:预处理和后处理是真跑在 numpy 上的, 所以数字反映的是这套环境;换到车规芯片上绝对值会变,但「哪一环占大头」这个结构通常不变。

30 秒实验

  1. 把曝光时间从 16.7 毫秒(60 帧)改成 33.3 毫秒(30 帧),看总延迟。 涨到 266 毫秒——降帧率省算力,但会加延迟,这笔账要算清。
  2. 把车速改成 150 公里/时,看重算后的合计距离。 刹停距离会到 110 米以上,延迟那 10 米显得更小,但一样跑不掉。
  3. 把摩擦系数改成 0.4(雨天),看重算的刹停距离。120 公里时速从 70.8 米变成 141 米,翻一倍。

常见误区

  1. 「延迟 200 毫秒听起来还行」。120 公里时速就是 8.3 米盲走,要换算成米才能判断。
  2. 「优化推理就能解决实时性」。推理只占 24%,砍一半也只降 12% 的总延迟。
  3. 「预处理和后处理可以忽略」。后处理实测 49.4 毫秒,比预处理多三倍,占 20%。
自测三问(点开对答案) 1. 为什么实时性预算要从执行器那一头倒推? —— 液压和电机的响应是物理决定的,压缩不了。先扣掉它,剩下的才是算法能用的预算。 2. 把推理时间砍一半,为什么总延迟只降了 12%? —— 推理只占总延迟的 24%,其余是曝光、传输、前后处理和执行器。优化占比小的环节,收益必然小。 3. 为什么「实时性要按米验收」? —— 毫秒没有直觉,米才能和感知距离、制动距离直接比较。而且路面越滑,同样的毫秒数越致命。

训练要点三件事讲完了:数据合规、模型鲁棒、系统实时。 下一节进入交通场景——第一个问题是路口那几个灯该怎么配。

相关笔记