4. 推理系统基础

在智能驾驶系统中,模型训练完成只是起点,真正决定功能能否安全、稳定、实时落地的是推理系统。推理系统负责把训练好的神经网络模型部署到车端计算平台,在有限算力、功耗和散热条件下,持续处理摄像头、激光雷达、毫米波雷达等传感器输入,并输出检测、分割、跟踪、预测等结果。理解推理系统,需要同时掌握两条主线:一条是计算流程与模型表示,另一条是性能与能效指标。前者回答“模型如何被表达和执行”,后者回答“执行得好不好”。

4.1 神经网络推理流程

推理流程可以概括为“输入预处理—张量计算—后处理—输出”四个阶段。以一张前视摄像头图像为例,原始图像先经过缩放、归一化、颜色空间转换,变成网络可接受的张量;随后进入由卷积、矩阵乘、激活、归一化等算子组成的计算图;网络输出通常是多尺度特征图或候选框;最后经过非极大值抑制、阈值过滤、坐标还原等后处理,得到可被规控模块消费的目标列表。

在 Orin 这类 GPU/NPU 异构平台上,推理并不是单一设备完成。预处理可能由 GPU 或专用视觉加速器执行,主干网络在 Tensor Core 或 DLA 上运行,后处理又回到 CPU 或 GPU。因此,推理系统的核心任务之一,是把计算图切分并调度到合适硬件,同时减少主机与设备之间的数据搬运。

神经网络推理流程与硬件映射 传感器输入 图像 / 点云 / 雷达 预处理 缩放 / 归一化 / 排布 张量计算图 卷积 / 矩阵乘 / 激活 后处理 NMS / 阈值 / 还原 输出 目标列表 Orin 异构计算平台 CPU 调度 / 后处理 GPU / Tensor Core 主干网络 / 大矩阵 DLA 定点卷积 / 低功耗 内存 / 显存 张量驻留 / 搬运 核心指标观测点 延迟 Latency 吞吐 Throughput 精度 Accuracy 能效 Energy 内存占用

4.2 模型表示:从训练框架到部署格式

训练框架中的模型通常以动态图或静态图形式存在,包含大量训练专用节点,如 Dropout、Loss、梯度更新等。部署时,需要把模型转换为推理图,并做算子融合、常量折叠、精度校准和内存复用。常见中间表示包括 ONNX、TensorRT Engine、DLA Loadable 等。以 TensorRT 为例,它会把卷积、BN、激活融合为一个算子,减少内核启动次数和中间张量读写。

# 典型 TensorRT 转换流程(示意)
trtexec --onnx=detector.onnx \
        --saveEngine=detector_fp16.engine \
        --fp16 \
        --workspace=2048 \
        --minShapes=input:1x3x640x640 \
        --optShapes=input:1x3x640x640 \
        --maxShapes=input:1x3x640x640

模型表示不仅影响能否运行,还直接影响延迟和精度。例如,FP32 精度高但占用带宽大;FP16 在 Orin GPU 上通常有更高吞吐;INT8 进一步压缩计算和存储,但需要校准集来减少量化误差。选择哪种表示,取决于任务对精度、延迟和功耗的容忍度。

4.3 算子与张量:推理系统的基本计算单元

张量是推理系统中的数据载体,通常用形状、数据类型和内存排布描述。例如 NCHW 与 NHWC 会影响卷积访问效率;连续内存与跨步内存会影响是否触发额外拷贝。算子是张量上的计算操作,常见有卷积、矩阵乘、池化、归一化、激活、拼接、上采样等。推理优化的大量工作,都围绕算子展开:融合、替换、量化、切分、并行化。

在智能驾驶中,算子选择与传感器特性强相关。BEV 感知常用矩阵乘和注意力算子;点云检测常用稀疏卷积和体素化算子;后处理中的 NMS 则更依赖排序和阈值判断。理解算子,才能判断瓶颈在计算、访存还是调度。

4.4 核心指标:精度、延迟、吞吐与能效

推理系统的评价不能只看“跑得动”,而要看一组相互制约的指标。下表给出常用指标及其工程含义。

指标 定义 典型单位 工程关注点
精度 模型输出与真值的一致程度 mAP / IoU / 准确率 量化后是否满足安全阈值
延迟 单次推理从输入到输出的耗时 ms 端到端是否满足帧率与安全响应
吞吐 单位时间可处理的样本或帧数 FPS / samples/s 多路摄像头并发时的处理能力
能效 单位功耗下完成的推理量 FPS/W 或 TOPS/W 车端散热与续航约束
内存占用 模型权重与中间张量峰值内存 MB / GB 多模型共存与动态加载

关键关系:延迟关注“单帧快不快”,吞吐关注“整体多不多”,能效关注“每瓦能算多少”。三者往往互相牵制:提高批大小可提升吞吐,但可能增加延迟;降低精度可减少延迟和功耗,但可能损失精度。推理工程的核心,是在约束下寻找平衡点。

4.5 案例场景:前视感知模型的部署权衡

假设某前视感知模型在 Orin 上以 FP32 运行,单帧延迟 42 ms,功耗 28 W,mAP 为 0.78。若改为 FP16,延迟降至 26 ms,功耗 22 W,mAP 降至 0.775;若进一步 INT8 量化,延迟 18 ms,功耗 17 W,但 mAP 降至 0.74。此时需要结合功能安全要求判断:若 0.74 仍高于验收线,则 INT8 可释放更多算力给其他模型;若低于阈值,则应保留 FP16 或对敏感层做混合精度。

实操建议:部署时先建立基线,再逐项优化。基线应记录模型格式、输入形状、精度模式、批大小、功耗和温度。每次只改一个变量,观察延迟、吞吐、精度和能效的变化,避免多因素耦合导致无法归因。

4.6 常见误区与复盘

  • 只看平均延迟:智能驾驶更关注最坏情况延迟和抖动,平均值会掩盖偶发卡顿。
  • 忽略预处理和后处理:它们可能占用 20% 以上端到端时间,尤其在小模型场景。
  • 盲目追求 INT8:量化误差在长尾场景中可能被放大,必须用真实路测数据校准和验证。
  • 把吞吐当延迟:高吞吐不等于低延迟,多路并发时单路响应可能变慢。
  • 忽视内存搬运:Orin 上很多瓶颈不是算力,而是主机与设备、显存与缓存之间的数据搬运。

复盘时,建议用“指标—瓶颈—动作”三段式记录:例如“延迟 42 ms,瓶颈在卷积访存,动作是算子融合并切换 NHWC”。只有把指标与具体算子、张量排布和硬件单元对应起来,推理系统优化才可复现、可积累。