news 2026/9/18 22:42:54

在昇腾 Atlas A3(910C)上部署 SLARM 动态场景重建模型:基于 CANN 8.2.RC1 的 NPU 推理实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在昇腾 Atlas A3(910C)上部署 SLARM 动态场景重建模型:基于 CANN 8.2.RC1 的 NPU 推理实战

在昇腾 Atlas A3(910C)上部署 SLARM 动态场景重建模型:基于 CANN 8.2.RC1 的 NPU 推理实战

【免费下载链接】cann-recipes-embodied-ai本项目针对具身智能业务中的典型模型、加速算法,提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-embodied-ai

SLARM(Streaming and Language-Aligned Reconstruction Model for Dynamic Scenes,发表于 CVPR 2026)是一个前馈式动态场景重建模型,能够从稀疏多视角序列中统一完成动态场景重建、语义理解与实时流式推理,联合学习3D 高斯(3D Gaussians)场景流(Scene Flow)。本文基于开源仓库中 SLARM 的 NPU 适配版本(位于 3d_vision/SLARM),完整讲解其在昇腾 Atlas A3(910C)环境上的环境搭建、模型与渲染算子安装、Waymo 数据准备、推理与评测全流程,并结合仓库源码深入解析 NPU 性能优化开关、模型命令行参数与评测指标实现,帮助读者在昇腾生态上直接复现 SLARM 的渲染可视化结果与量化评测指标。

SLARM 模型与 NPU 适配概览

SLARM 的核心能力是将动态场景重建语义理解实时流式推理统一到同一个前馈式网络框架中:

  • 从稀疏多视角序列输入出发,前向推理直接输出 3D 高斯参数与场景流,无需逐场景优化;
  • 支持实时渲染(RGB、深度)与语义分割,可将语义信息直接对齐到重建出的三维高斯上;
  • 在运动估计、渲染质量、场景解析等多项任务上达到官方 README 所述 SOTA 水平:相比已有方法运动精度提升21%、重建 PSNR 提升1.6 dB、分割 mIoU 提升20%(数据来自 README_en.md 与 README.md)。

从源码结构看,模型主体定义在 src/models/slarm.py 的class SLARM(nn.Module, ...)(该文件第 174 行附近),内部通过forward_gs_predictorforward_motion_predictorforward_feat_predictorforward_decoder等模块分工完成高斯参数预测、运动(场景流)预测、语义特征预测与可微渲染解码;模型构建与权重加载统一由 engine_tools.py 中的build_model/load_model完成,其中--model slarm会实例化models.SLARM--model storm等会实例化models.STORM_models中的对应模型。本项目提供的 NPU 适配版本正是围绕这一模型,将渲染算子、环境变量与推理脚本全面对齐到昇腾 910C(Atlas A3)。

环境准备

本样例支持在昇腾 Atlas A3 环境(910C)上运行推理,官方适配版本依赖 CANN 8.2.RC1 与 torch / torch_npu 2.1.0。建议在独立的 conda 环境中完成安装,避免与已有深度学习环境冲突。

安装 CANN 8.2.RC1

  1. 从 CANN 官方下载页面获取Ascend-cann-toolkit_${version}_linux-${arch}.runAscend-cann-kernels-${chip_type}_${version}_linux-${arch}.run两个软件包(版本对应 8.2.RC1),并按官方安装文档完成安装。
  2. 安装完成后,可通过如下命令确认 CANN 版本:
cat /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info # 例如输出:version=8.2.RC1

创建 Python 环境

conda create -n SLARM python=3.10 -y conda activate SLARM

安装 PyTorch / torch_npu / torch-scatter

本样例的 torch 与 torch_npu 版本为2.1.0,需要从 Ascend Extension for PyTorch 插件渠道下载与 CANN 版本匹配的安装包。请根据实际 torch 与 CANN 版本选择正确的 torch_npu 版本:

# 安装 PyTorch pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 # 安装 torch-npu pip install torch-npu==2.1.0.post13 # 安装 torch-scatter(需要先固定 setuptools 版本) pip install setuptools==69.5.1 pip install torch-scatter==2.0.9 --no-build-isolation

注意:torch-scatter是 SLARM 在高斯属性聚合等场景使用的扩展库,安装时必须使用--no-build-isolation,并提前将setuptools固定为 69.5.1,否则可能因构建环境问题安装失败。

模型代码与依赖安装

克隆仓库并进入项目目录

git clone https://gitcode.com/cann/cann-recipes-embodied-ai.git cd cann-recipes-embodied-ai/3d_vision/SLARM

安装 Python 依赖

pip install -r requirements_npu.txt

requirements_npu.txt 中的核心依赖包括:timmeinopsjaxtypingopencv-python-headlessmatplotlib==3.7.3imageio/imageio-ffmpeg(视频输出)、torch_kmeans/torch_pcaopen3d(点云可视化)、plyfile(高斯 PLY 导出)、scipy==1.15.3/scikit-learn==1.2.2/scikit-image==0.20.0/numpy==1.26.4(特征蒸馏与指标计算)、torchmetricswandb/tensorboard(日志)以及nerfview/viser等查看器依赖。

安装渲染算子 meta_gauss_render

SLARM 的可微渲染链路在 NPU 上依赖自定义算子包meta_gauss_render(适配 torch 2.1.0 与昇腾 910C(A3)的特定版本)。渲染时主要调用链如下:

  • src/utils/npu_rendering.py 从meta_gauss_render导入AscendGaussRender,并从meta_gauss_render.npu导入CalcRenderget_render_scheduleget_num_vector_core等算子接口;
  • src/utils/rasterizer.py 导入spherical_harmonicsflash_gaussian_build_maskgaussian_sortcalc_render等经昇腾适配的 3DGS 算子(对应算子 C++ 实现位于 ops/ascendc/kernels)。

请参考仓库中专门为昇腾硬件适配的 3DGS 代码并从源码编译安装:gaussian_splatting README。安装完成后,如需替换为与当前运行环境匹配的算子版本,可使用仓库提供的 replace_meta_gauss_render.sh,其用法为:

bash replace_meta_gauss_render.sh <conda环境名> <渲染算子版本>

该脚本会将 src/utils 下对应版本的projection_three_dims_gaussian_fused_${版本}.py覆盖安装到meta_gauss_render包内(例如/home/ma-user/anaconda3/envs/${环境名}/lib/python3.10/site-packages/meta_gauss_render/ops/projection_three_dims_gaussian_fused.py),从而保证自定义投影算子与当前 NPU 环境严格匹配。

安装用于语义对齐的 CLIP

pip install git+https://github.com/openai/CLIP.git

CLIP 用于提取文本标签特征并与 SLARM 预测的高斯语义特征做对齐(对应 engine_tools.py 中基于FEAT_DIST环境变量启用的tools.feats_tools.get_text_label_feats/feat2class流程)。

数据集与模型权重

Waymo Open Dataset

SLARM 在 Waymo Open Dataset 上训练与评测。完整的注册、下载与预处理说明见 Waymo 数据说明,这里概述关键步骤:

  1. 注册账号并安装 gcloud SDK:访问 Waymo Open Dataset 官网注册账号,安装 gcloud SDK 并完成认证。
  2. 建立数据目录:因为场景流标注与语义标注不在同一份原始数据中,需要下载两个版本:
mkdir -p ./data/waymo/raw_scene_flow mkdir -p ./data/waymo/raw_1_4_3
  1. 下载原始数据:使用 preproc/waymo_download.py 按场景列表下载(可指定--version区分waymo_open_dataset_scene_flowwaymo_open_dataset_v_1_4_3两个版本,也可指定--scene_ids只下载个别场景):
python preproc/waymo_download.py \ --target_dir ./data/waymo/raw_scene_flow/training \ --split_file data/dataset_scene_list/waymo_train_list.txt \ --scene_ids 700 754 23
  1. 预处理:使用 preprocess.py 分别处理两个版本的原始数据,提取 images、lidar、calib、pose、dynamic_masks、ground、panoptic_segs 等键,并把标注 JSON 保存到data/SLARM_data/annotations/waymo
  2. 天空掩码提取:推荐使用 DepthAnything-v2 预测的相对深度图(低值表示远处、零值表示无限远即天空)配合 tools/extract_sky.py 生成sky_masks
  3. 最终整理:将处理后的数据软链接到data/SLARM_data/datasets/waymo,并生成data/SLARM_data/scene_list/waymo_train.txt/waymo_val.txt场景列表(格式为annotations/waymo/training/segment-xxx.json每行一个)。

SLARM 权重与 Demo 数据

仓库提供 SLARM 权重与 demo 数据集,可从 README 中给出的华为云 OBS 链接(cann-recipes-embodied-ai/SLARM/SLARM.zip)获取。使用 demo 数据可以跳过全量 Waymo 下载与预处理,直接验证推理流程与评测指标。

运行推理

仓库已将 NPU 环境变量、性能优化配置与模型参数封装在 inference.sh(推理出可视化结果)与 evaluation.sh(出评测指标)两个脚本中。使用样例数据集与脚本默认配置,直接执行:

bash inference.sh # 输出可视化结果(视频) bash evaluation.sh # 输出评测指标

使用脚本前必须配置的路径参数(脚本中目前为占位符):

  • DATA_ROOT:数据集根目录路径(对应--data_root
  • CKPT_PTH:SLARM checkpoint 权重路径(对应--load_from
  • --lseg_model_scratch_path:LSeg 模型 scratch 权重路径(位于 inference.sh 中)
  • --lseg_model_pretrained_path:LSeg 模型预训练权重路径(位于 inference.sh 中)

NPU 环境变量与性能优化开关

两个脚本头部均包含一组面向 NPU 的性能优化环境变量,含义如下(均来自脚本内注释及 src 源码逻辑):

环境变量取值作用
DEVICE_TYPENPU声明运行平台为 NPU
ASCEND_RT_VISIBLE_DEVICES0指定使用的 NPU 设备 ID
AVOID_AI_CPU1避免因 double 数据类型生成 AI_CPU 的 Sin/Cos 算子
USE_EQUAL_CROSS1torch.cross做等价替换,规避 NPU 上的算子缺失问题
TASK_QUEUE_ENABLE2加速 host 侧任务分发,降低调度开销
PYTORCH_NPU_ALLOC_CONFexpandable_segments:True开启虚拟内存段以节省设备显存
CONTEXT_FEAT1不渲染特征,特征仅在输入视角做监督(配合online_feat使用)
FEAT_DIST1开启语义特征蒸馏相关逻辑(见 engine_tools.py)

inference.sh 关键模型参数

inference.sh 通过torchrun拉起 inference.py,核心模型参数如下(默认值与可选范围参考 src/utils/parser.py 的get_args_parser):

参数脚本取值说明
--model slarmslarm模型类型(默认 slarm,另有 storm 等)
--dataset waymowaymo数据集,可选范围见DATASET_DICT
--load_depth --load_flow --load_ground加载深度、场景流、地面标签
--num_max_cameras 33上下文相机数量(默认 3)
--use_affine_token使用仿射 token
--sigmoid_rgb对 RGB 输出使用 sigmoid 激活
--num_motion_tokens 00运动 token 数量(默认 16,推理置 0)
--use_sky_token使用天空 token 表示天空区域
--embed_dim 768768token 嵌入维度(默认 1024)
--depth 1212Transformer 层数(默认 24)
--patch_embed conv --patch_size 8conv / 8patch 化方式与 patch 尺寸(默认 dinov2_vitl14_reg / 14)
--use_ms3_motion使用 MS3 运动表示(场景流/角速度相关)
--use_last_token使用序列末尾 token
--shortcut_rgbRGB 预测使用 shortcut 结构
--add_patch_plucker_embed在 patch 嵌入中加入 Plücker 坐标嵌入
--similarity_probs_threshold 0.20.2语义相似度概率阈值(默认 0.2,见 slarm.py)
--online_feat --img_norm_for_online_feat在线特征提取(调用LSegFeatureExtractor,见 inference.pybuild_feature_extractor
--scene_id / --scene_start_index / --scene_end_index0 / 0 / 15推理场景 ID 与帧区间
--save_rendered_pc保存渲染点云,路径output_rendered_pc_${SCENE_ID}_...
--save_gaussian保存高斯参数,路径output_gs_${SCENE_ID}_...
--load_from$CKPT_PTHSLARM 权重路径

推理主流程(inference.py 的main)依次为:setup_experiment初始化日志目录 →build_model/load_model构建并加载模型 →build_dataset构建SingleSequenceDatasetbuild_feature_extractor加载 LSeg 特征提取器 →load_scene_data读取指定场景帧区间 →generate_video_frames通过make_video逐帧渲染 → 最终以 mp4 视频形式保存可视化结果。

evaluation.sh 关键参数

evaluation.sh 以torchrun拉起 eval_slarm.py,与推理脚本的区别在于:

  • 增加--evaluate进入评测模式,并使用--eval_batch_size 1
  • 增加--load_semantic_label加载语义标签以评测分割指标;
  • 增加--enable_tensorboard将评测指标写入 TensorBoard;
  • 参数整体与训练时保持一致,保证--load_from的权重可以无缝复现指标。

eval_slarm.py 会构建重建/语义评测与场景流评测两套 dataloader,分别调用engine_tools.evaluateevaluate_flowevaluate_semantic得到三组指标。

评测结果与指标解读

使用仓库提供的样例数据集与默认脚本配置,评测输出如下(原文完整保留):

Average PSNR: 27.3069 Average SSIM: 0.8419 Average Depth RMSE (0.01-100m): 1.9343 Average Depth RMSE (100-200m): -1.0000 Average Depth RMSE (0.01-200m): 1.9343 Average Occupied PSNR: 27.4185 Average Occupied SSIM: 0.8366 Average Dynamic PSNR: 24.8740 Average Dynamic SSIM: 0.7683 Average Dynamic Depth RMSE (0.01-100m): 2.9485 Average Dynamic Depth RMSE (100-200m): -1.0000 Average Dynamic Depth RMSE (0.01-200m): 2.9485 Evaluated on 468 samples. Valid depth samples (0.01-100m): 468 Valid depth samples (100-200m): 0 Valid dynamic depth samples (0.01-100m): 450 Valid dynamic depth samples (100-200m): 0 flow: Average Flow EPE: 0.1406 Average Flow Acc Strict: 80.5886 Average Flow Acc Relax: 85.1571 Average Flow Angle: 0.3104 Average Flow RMSE: 0.2307 Evaluated on 182.0 samples. segment: Average Semantic mIOU: 0.6058 Average Semantic Accuracy: 0.9025 Evaluated on 21.0 samples.

指标背后的实现细节

评测指标在 engine_tools.py 中实现,可从源码确认以下口径:

  • 深度 RMSE 分区间:源码顶部定义了DEPTH_MIN_THRESHOLD = 0.01DEPTH_MAX_THRESHOLD = 200.0DEPTH_MID_THRESHOLD = 100.0三个阈值,分别对应评测输出中的0.01-100m/100-200m/0.01-200m三个深度区间;当某区间无有效样本时,_safe_divide返回-1.0000(对应输出中的100-200m区间)。
  • PSNR / SSIM:PSNR 基于 MSE 计算(-10 * log10(mse)),SSIM 使用skimage.metrics.structural_similarity,并分别对全图、占用区域(occupied_mask,即非天空区域)和动态区域(dynamic_mask)单独统计,对应输出中的 Occupied / Dynamic 系列指标。
  • 场景流指标:通过compute_scene_flow_metrics计算 EPE3D、严格/宽松 3D 精度、角度误差,并输出 Flow RMSE。
  • 语义指标:通过compute_semantic_metrics计算 Semantic mIoU 与 Accuracy(需要--load_semantic_label且数据集提供语义标签)。

与其他方法的性能对比

以下两表来自仓库 README(README_en.md),为官方在 Waymo Open Dataset(WOD)上复现或公开的结果。其中SLARM-F表示使用全注意力的离线模式,SLARM-W表示使用窗口注意力的在线模式(对应 parser.py 中--mode参数的可选值full/causal/window_N,其中window_N即滑动窗口注意力)。

表 1:WOD 数据集上光写实性与几何指标对比

MethodDynamic-onlyFull image†
PSNR↑SSIM↑D-RMSE↓PSNR↑SSIM↑D-RMSE↓
LGM17.360.21611.0918.530.4479.07
LGM*19.580.4439.4323.590.6918.02
GS-LRM*20.020.5209.9525.180.7537.94
MapAnything-----13.53
STORM*22.030.6237.5025.860.8045.47
Ours
SLARM-W23.200.6766.3827.300.8254.75
SLARM-F23.510.6916.1627.490.8284.57

注:* 表示由官方复现;† 表示非天空区域(Full image 列)。

表 2:语义分割性能定量对比

MethodmIoU↑Acc↑
EfficientViT-Seg0.43520.7637
Mask2Former-R500.44290.7082
SegMAN0.45670.7186
SegFormer0.46600.7572
OffSeg-B0.46120.7417
OffSeg-L0.48680.7635
LSeg0.48760.7976
Mask2Former-Swin0.55050.8192
SLARM0.66630.8923

按官方 README 的表述,SLARM 在语义分割的 mIoU 与准确率上均优于表中对比方法。

注意事项与常见问题

  • 权重路径占位符:直接运行脚本前务必把DATA_ROOTCKPT_PTH、两个--lseg_model_*_path占位符替换为真实路径,否则会在数据集加载或load_model阶段报错。
  • 渲染算子版本匹配meta_gauss_render必须与 torch 2.1.0、昇腾 910C(A3)严格匹配,必要时用 replace_meta_gauss_render.sh 替换对应版本的projection_three_dims_gaussian_fused实现。
  • 双版本 Waymo 数据:场景流标注与语义标注分属waymo_open_dataset_scene_flowwaymo_open_dataset_v_1_4_3两个版本,预处理与评测时需要两套数据配合(详见 Waymo 数据说明)。
  • 环境变量不可省略AVOID_AI_CPUUSE_EQUAL_CROSSTASK_QUEUE_ENABLEPYTORCH_NPU_ALLOC_CONF等环境变量直接影响 NPU 上的算子生成、显存分配与调度性能,建议保持脚本默认值。

引用

如使用 SLARM 模型,请引用论文:

@InProceedings{Qiu_2026_CVPR, author = {Qiu, Zhicheng and Meng, Jiarui and Luo, Tong-an and Huang, Yican and Feng, Xuan and Li, Xuanfu and Xu, Zhan}, title = {SLARM: Streaming and Language-Aligned Reconstruction Model for Dynamic Scenes}, booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)}, month = {June}, year = {2026}, pages = {29023-29034} }

【免费下载链接】cann-recipes-embodied-ai本项目针对具身智能业务中的典型模型、加速算法,提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-embodied-ai

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 22:39:47

免费开源视频防抖工具GyroFlow:3步用陀螺仪数据消除手持晃动

免费开源视频防抖工具GyroFlow&#xff1a;3步用陀螺仪数据消除手持晃动 【免费下载链接】gyroflow Video stabilization using gyroscope data 项目地址: https://gitcode.com/GitHub_Trending/gy/gyroflow 回放时你发现每个画面都跟着手在晃&#xff0c;地平线随脚步倾…

作者头像 李华
网站建设 2026/9/18 22:39:18

CNN-LSTM联合分类:Keras串联与并联结构搭建

简介&#xff1a;面向深度学习开发者的Keras实践文档&#xff0c;讲解如何将卷积神经网络与长短时记忆网络联合建模用于序列数据分类&#xff0c;适合已掌握神经网络基础、希望理解复合模型搭建流程的读者。内容围绕4080二维序列输入的六分类任务展开&#xff0c;逐一呈现Input…

作者头像 李华
网站建设 2026/9/18 22:37:52

VoiceStudio:文本前端到字幕对齐的语音合成流水线

语音类项目最麻烦的地方从来不是模型跑不起来&#xff0c;而是跑起来之后那一堆零零碎碎的工程问题。VoiceStudio 这个工作台就是在这种背景下攒出来的&#xff1a;它把文本预处理、音色管理、语音合成、音频后处理和字幕对齐这几段串成一条能重复跑的流水线&#xff0c;让&quo…

作者头像 李华
网站建设 2026/9/18 22:37:35

住区规划设计分析文档的结构化解析与自动化校验

简介&#xff1a;本资源是一份面向城乡规划、建筑学及相关专业本科生与设计初学者的住区规划设计分析案例文档&#xff0c;聚焦西安“白桦林居”大型居住区的实证性技术解析。全文共9页Word文档&#xff08;24KB&#xff09;&#xff0c;系统梳理了项目区位特征、规划结构、道路…

作者头像 李华