<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>自动驾驶 | </title>
    <link>https://example.com/tags/%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6/</link>
      <atom:link href="https://example.com/tags/%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6/index.xml" rel="self" type="application/rss+xml" />
    <description>自动驾驶</description>
    <generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Mon, 29 Jun 2026 00:00:00 +0000</lastBuildDate>
    <image>
      <url>https://example.com/media/icon_hu_982c5d63a71b2961.png</url>
      <title>自动驾驶</title>
      <link>https://example.com/tags/%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6/</link>
    </image>
    
    <item>
      <title>LaneGCN 部署流水线（DMLaneGCN）</title>
      <link>https://example.com/projects/lanegcn-deployment/</link>
      <pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://example.com/projects/lanegcn-deployment/</guid>
      <description>&lt;p&gt;面向自动驾驶 motion forecasting 的 LaneGCN 模型 ONNX / TensorRT 部署流水线，在 TensorRT 10.x 上实现 ≤ 10ms 端到端推理延迟，包含 ONNX 导出、动态 shape 引擎构建、weight-only INT8 量化与可视化验证。&lt;/p&gt;
&lt;h2 id=&#34;-核心特性&#34;&gt;✨ 核心特性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;⚡ &lt;strong&gt;低延迟推理&lt;/strong&gt;：在 TensorRT 10.x 上实现 ≤ 10ms 端到端推理，满足自动驾驶实时性约束&lt;/li&gt;
&lt;li&gt;🔧 &lt;strong&gt;Shape Input Tensor 消除&lt;/strong&gt;：通过 &lt;code&gt;torch.where(valid, ...)&lt;/code&gt; 零化替代动态切片，规避 TensorRT 10.x &lt;code&gt;execute_async_v3&lt;/code&gt; 段错误&lt;/li&gt;
&lt;li&gt;🧊 &lt;strong&gt;Weight-only INT8 量化&lt;/strong&gt;：将 Conv1d 转 Conv2d（Unsqueeze/Squeeze axis=2）以启用 INT8 Conv2d kernel，对 Turing GPU 上非方形的 (1, K&amp;gt;1) 卷积层跳过 INT8&lt;/li&gt;
&lt;li&gt;🛣️ &lt;strong&gt;完整部署流水线&lt;/strong&gt;：从 PyTorch checkpoint → ONNX（dynamic axes）→ ONNX-Simplifier → TensorRT engine → 推理可视化全链路打通&lt;/li&gt;
&lt;li&gt;🎬 &lt;strong&gt;可视化验证&lt;/strong&gt;：在 Argoverse 验证集上生成 6 个场景 GIF，验证 ONNX 图、TRT engine 与预处理器的数值一致性&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-技术栈&#34;&gt;🏗️ 技术栈&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;类别&lt;/th&gt;
          &lt;th&gt;技术选型&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;基础模型&lt;/td&gt;
          &lt;td&gt;LaneGCN（Uber ATG, ECCV 2020 Oral）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;深度学习框架&lt;/td&gt;
          &lt;td&gt;PyTorch + NumPy&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;模型导出&lt;/td&gt;
          &lt;td&gt;ONNX + onnx-simplifier&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;推理引擎&lt;/td&gt;
          &lt;td&gt;TensorRT 10.x（FP32 / FP16 / w8a16 / w8a32）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;量化校准&lt;/td&gt;
          &lt;td&gt;polygraphy + 自研 activation_calibration.py&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;数据集&lt;/td&gt;
          &lt;td&gt;Argoverse Motion Forecasting v1.1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;部署容器&lt;/td&gt;
          &lt;td&gt;TensorRTNewest Docker（TensorRT 10.x）&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;-部署流水线&#34;&gt;🚀 部署流水线&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;阶段&lt;/th&gt;
          &lt;th&gt;脚本&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;1. Refactor&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;lanegcn_onnx.py&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;将 dict/list 输入展平为 23 个张量，图预处理移出模型&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2. Export&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;onnx_exporter.py&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;PyTorch → ONNX，dynamic axes 支持变长 actor / lane-node&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;3. Simplify&lt;/td&gt;
          &lt;td&gt;onnx-simplifier&lt;/td&gt;
          &lt;td&gt;化简 ONNX 图以适配 TRT&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;4. Build&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;trt_exporter.py&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;ONNX → TensorRT engine（fp32 / fp16 / 动态 shape）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;5. Inference&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;demo_inference.py&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;TRT engine 推理 + 可视化&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;6. Profile&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;onnx_inference.py&lt;/code&gt; / &lt;code&gt;benchmark_all.py&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;ORT 与 TRT 延迟 / 吞吐基准&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;-关键工程贡献&#34;&gt;🛠️ 关键工程贡献&lt;/h2&gt;
&lt;h3 id=&#34;1-消除-shape-input-tensor&#34;&gt;1. 消除 Shape Input Tensor&lt;/h3&gt;
&lt;p&gt;原始 LaneGCN 使用 &lt;code&gt;pre_mask&lt;/code&gt; / &lt;code&gt;suc_mask&lt;/code&gt; 动态切片选择前驱 / 后继 lane-node 对，这些 mask 在 ONNX 图中会产生 shape input tensor，触发 TensorRT 10.x &lt;code&gt;execute_async_v3&lt;/code&gt; 段错误。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;解决方案&lt;/strong&gt;：用 valid mask 零化替代动态切片，数学等价但消除所有 shape input tensor。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Before (creates shape input tensors → TRT segfault):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;edge_u&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;edge_u&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pre_mask&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# After (mathematically equivalent, no shape inputs):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;valid&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pre_mask&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# boolean mask&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;edge_u_safe&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;torch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;valid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;edge_u&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;torch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zeros_like&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;edge_u&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-conv1d--conv2d-转换以启用-int8&#34;&gt;2. Conv1d → Conv2d 转换以启用 INT8&lt;/h3&gt;
&lt;p&gt;TensorRT 10.x 缺少 Conv1d（3D 权重张量）的 INT8 kernel。通过 &lt;code&gt;Unsqueeze/Squeeze&lt;/code&gt;（axis=2）将 Conv1d 转为 Conv2d，即可使用 INT8 Conv2d kernel。&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;注&lt;/strong&gt;：Turing 架构 GPU（compute 7.5）对非方形 (1, K&amp;gt;1) kernel 缺少 INT8 Conv2d kernel，这类层需跳过 INT8 或使用 FP16。&lt;/p&gt;
  &lt;/blockquote&gt;

&lt;h3 id=&#34;3-scatterelements-精度保护&#34;&gt;3. ScatterElements 精度保护&lt;/h3&gt;
&lt;p&gt;TensorRT 10.x 中 ScatterElements 层无法通过 &lt;code&gt;set_output_type&lt;/code&gt; 或 &lt;code&gt;layer.precision&lt;/code&gt; 进行精度约束，需通过上游层 FP32 输出保护以确保 FP32 累加。&lt;/p&gt;
&lt;h2 id=&#34;-性能基准&#34;&gt;📊 性能基准&lt;/h2&gt;
&lt;p&gt;5 后端基准（Argoverse val 序列 110，100 次迭代）：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;后端&lt;/th&gt;
          &lt;th&gt;精度&lt;/th&gt;
          &lt;th&gt;备注&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;PyTorch Eager&lt;/td&gt;
          &lt;td&gt;FP32&lt;/td&gt;
          &lt;td&gt;基线&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ONNX Runtime (CUDA)&lt;/td&gt;
          &lt;td&gt;FP32&lt;/td&gt;
          &lt;td&gt;需要 CUDA 12.x nvidia pip libs&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;TensorRT&lt;/td&gt;
          &lt;td&gt;FP32&lt;/td&gt;
          &lt;td&gt;动态 shape&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;TensorRT&lt;/td&gt;
          &lt;td&gt;w8a16&lt;/td&gt;
          &lt;td&gt;weight-only INT8&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;TensorRT&lt;/td&gt;
          &lt;td&gt;w8a32&lt;/td&gt;
          &lt;td&gt;weight-only INT8 / FP32 accum&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;详细结果见 &lt;code&gt;benchmark_results.json&lt;/code&gt; 与 &lt;code&gt;misc/benchmark_comparison.png&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;-推理可视化&#34;&gt;🎬 推理可视化&lt;/h2&gt;
&lt;p&gt;6 个 Argoverse 验证集场景的 TRT 推理结果（agent 局部坐标系下：蓝=观测 2s 历史，绿=真值 3s 未来，红/黄/…=top-K 预测候选，灰=lane-graph 上下文）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Scene 03189 / 05412 / 09481 / 11605 / 11803 / 12775&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;引擎：&lt;code&gt;trt_engines_w8a32/lanegcn.engine&lt;/code&gt;（weight-only INT8 / FP32 accum）。&lt;/p&gt;
&lt;h2 id=&#34;-相关链接&#34;&gt;🔗 相关链接&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;论文&lt;/strong&gt;：
（ECCV 2020 Oral）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;原始仓库&lt;/strong&gt;：
（作为 git submodule 集成）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;竞赛&lt;/strong&gt;：Argoverse Motion Forecasting Competition — Rank 1st&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-快速开始&#34;&gt;📥 快速开始&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 克隆（含 submodule）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone --recursive https://gitee.com/junhuisirup/lanegcn_deployment.git DMLaneGCN
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; DMLaneGCN
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 安装依赖&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create --name lanegcn &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.10
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda activate lanegcn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install -r requirements.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install tensorrt pycuda polygraphy
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 导出 ONNX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python onnx_exporter.py --weight results/lanegcn/36.000.ckpt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 构建 TensorRT engine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python trt_exporter.py --onnx lanegcn.onnx --output-dir trt_engines --precision fp32
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 推理与可视化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python demo_inference.py --engine trt_engines/lanegcn.engine --seq &lt;span class=&#34;m&#34;&gt;155&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;更多信息请参考项目仓库 
。&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
