您好,
我们在 S100 平台上评估单目深度估计方案,遇到一个核心障碍想请教:
1. 背景
当前业界 SOTA 的深度估计模型(Depth Anything 系列、Depth Pro 等)全部采用 ViT(Vision Transformer)作为 encoder 骨干,精度远超传统 CNN 方案(FastDepth、Lite-Mono)。同时目标检测领域(DETR 系)和 BEV 感知(BEVFormer 系)也在快速转向 Transformer 架构。
我们目前只能使用纯 CNN 模型,在精度上存在明显差距,难以满足产品指标。
2. 具体瓶颈
S100 BPU 目前不支持以下 Transformer 核心算子:
| 算子 | PyTorch 对应 | 用途 |
|---|---|---|
| Multi-Head Self-Attention | F.scaled_dot_product_attention |
Transformer 基础模块 |
| Layer Normalization | nn.LayerNorm |
Transformer 标配 |
| GELU 激活 | nn.GELU |
ViT 常用激活函数 |
| Patch Embedding | nn.Conv2d(stride=patch_size) |
图像转 token,纯卷积但参数大 |
| Position Embedding | nn.Parameter |
位置编码 |
导出 ONNX 后经 hb_mapper 检查,这些算子全部 fallback 到 CPU,无法利用 BPU 加速,实测推理速度无法满足实时要求(目标 ≥ 30 FPS)。
3. 需求与影响
-
需求:BPU 支持上述 Transformer 算子(至少 Self-Attention + LayerNorm + GELU)
-
影响范围:不仅限于深度估计,还覆盖目标检测、BEV 感知、端到端自动驾驶等多个方向
-
量化支持:希望 QAT 插件同步支持这些算子的 INT8 量化
4. 优先级参考
建议优先支持 Self-Attention 和 LayerNorm,这两个是所有 ViT 变体的基础算子。GELU 和 Position Embedding 可以在模型侧做替换(GELU→ReLU、可学习位置编码→固定正弦编码)来规避。
5. 想确认
-
地平线是否有 Transformer 算子支持的路线图?预计哪个 SDK 版本能支持?
-
短期内有无 workaround 方案(比如 CPU/BPU 混合调度、自定义插件等)?
-
如果有内部 Beta 版本,我们愿意配合测试验证。
期待您的回复,谢谢。