ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

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

在昇腾 Atlas A3(910C)上部署 SLARM 动态场景重建模型:基于 CANN 8.2.RC1 的 NPU 推理实战 在昇腾 Atlas A3910C上部署 SLARM 动态场景重建模型基于 CANN 8.2.RC1 的 NPU 推理实战【免费下载链接】cann-recipes-embodied-ai本项目针对具身智能业务中的典型模型、加速算法提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-embodied-aiSLARMStreaming and Language-Aligned Reconstruction Model for Dynamic Scenes发表于 CVPR 2026是一个前馈式动态场景重建模型能够从稀疏多视角序列中统一完成动态场景重建、语义理解与实时流式推理联合学习3D 高斯3D Gaussians与场景流Scene Flow。本文基于开源仓库中 SLARM 的 NPU 适配版本位于 3d_vision/SLARM完整讲解其在昇腾 Atlas A3910C环境上的环境搭建、模型与渲染算子安装、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_predictor、forward_motion_predictor、forward_feat_predictor、forward_decoder等模块分工完成高斯参数预测、运动场景流预测、语义特征预测与可微渲染解码模型构建与权重加载统一由 engine_tools.py 中的build_model/load_model完成其中--model slarm会实例化models.SLARM--model storm等会实例化models.STORM_models中的对应模型。本项目提供的 NPU 适配版本正是围绕这一模型将渲染算子、环境变量与推理脚本全面对齐到昇腾 910CAtlas A3。环境准备本样例支持在昇腾 Atlas A3 环境910C上运行推理官方适配版本依赖 CANN 8.2.RC1 与 torch / torch_npu 2.1.0。建议在独立的 conda 环境中完成安装避免与已有深度学习环境冲突。安装 CANN 8.2.RC1从 CANN 官方下载页面获取Ascend-cann-toolkit_${version}_linux-${arch}.run与Ascend-cann-kernels-${chip_type}_${version}_linux-${arch}.run两个软件包版本对应 8.2.RC1并按官方安装文档完成安装。安装完成后可通过如下命令确认 CANN 版本cat /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info # 例如输出version8.2.RC1创建 Python 环境conda create -n SLARM python3.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 torch2.1.0 torchvision0.16.0 torchaudio2.1.0 # 安装 torch-npu pip install torch-npu2.1.0.post13 # 安装 torch-scatter需要先固定 setuptools 版本 pip install setuptools69.5.1 pip install torch-scatter2.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.txtrequirements_npu.txt 中的核心依赖包括timm、einops、jaxtyping、opencv-python-headless、matplotlib3.7.3、imageio/imageio-ffmpeg视频输出、torch_kmeans/torch_pca、open3d点云可视化、plyfile高斯 PLY 导出、scipy1.15.3/scikit-learn1.2.2/scikit-image0.20.0/numpy1.26.4特征蒸馏与指标计算、torchmetrics、wandb/tensorboard日志以及nerfview/viser等查看器依赖。安装渲染算子 meta_gauss_renderSLARM 的可微渲染链路在 NPU 上依赖自定义算子包meta_gauss_render适配 torch 2.1.0 与昇腾 910CA3的特定版本。渲染时主要调用链如下src/utils/npu_rendering.py 从meta_gauss_render导入AscendGaussRender并从meta_gauss_render.npu导入CalcRender、get_render_schedule、get_num_vector_core等算子接口src/utils/rasterizer.py 导入spherical_harmonics、flash_gaussian_build_mask、gaussian_sort、calc_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 环境严格匹配。安装用于语义对齐的 CLIPpip install githttps://github.com/openai/CLIP.gitCLIP 用于提取文本标签特征并与 SLARM 预测的高斯语义特征做对齐对应 engine_tools.py 中基于FEAT_DIST环境变量启用的tools.feats_tools.get_text_label_feats/feat2class流程。数据集与模型权重Waymo Open DatasetSLARM 在 Waymo Open Dataset 上训练与评测。完整的注册、下载与预处理说明见 Waymo 数据说明这里概述关键步骤注册账号并安装 gcloud SDK访问 Waymo Open Dataset 官网注册账号安装 gcloud SDK 并完成认证。建立数据目录因为场景流标注与语义标注不在同一份原始数据中需要下载两个版本mkdir -p ./data/waymo/raw_scene_flow mkdir -p ./data/waymo/raw_1_4_3下载原始数据使用 preproc/waymo_download.py 按场景列表下载可指定--version区分waymo_open_dataset_scene_flow与waymo_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预处理使用 preprocess.py 分别处理两个版本的原始数据提取 images、lidar、calib、pose、dynamic_masks、ground、panoptic_segs 等键并把标注 JSON 保存到data/SLARM_data/annotations/waymo。天空掩码提取推荐使用 DepthAnything-v2 预测的相对深度图低值表示远处、零值表示无限远即天空配合 tools/extract_sky.py 生成sky_masks。最终整理将处理后的数据软链接到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_rootCKPT_PTHSLARM checkpoint 权重路径对应--load_from--lseg_model_scratch_pathLSeg 模型 scratch 权重路径位于 inference.sh 中--lseg_model_pretrained_pathLSeg 模型预训练权重路径位于 inference.sh 中NPU 环境变量与性能优化开关两个脚本头部均包含一组面向 NPU 的性能优化环境变量含义如下均来自脚本内注释及 src 源码逻辑环境变量取值作用DEVICE_TYPENPU声明运行平台为 NPUASCEND_RT_VISIBLE_DEVICES0指定使用的 NPU 设备 IDAVOID_AI_CPU1避免因 double 数据类型生成 AI_CPU 的 Sin/Cos 算子USE_EQUAL_CROSS1对torch.cross做等价替换规避 NPU 上的算子缺失问题TASK_QUEUE_ENABLE2加速 host 侧任务分发降低调度开销PYTORCH_NPU_ALLOC_CONFexpandable_segments:True开启虚拟内存段以节省设备显存CONTEXT_FEAT1不渲染特征特征仅在输入视角做监督配合online_feat使用FEAT_DIST1开启语义特征蒸馏相关逻辑见 engine_tools.pyinference.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_rgb开RGB 预测使用 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构建SingleSequenceDataset→build_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.evaluate、evaluate_flow、evaluate_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.01、DEPTH_MAX_THRESHOLD 200.0、DEPTH_MID_THRESHOLD 100.0三个阈值分别对应评测输出中的0.01-100m/100-200m/0.01-200m三个深度区间当某区间无有效样本时_safe_divide返回-1.0000对应输出中的100-200m区间。PSNR / SSIMPSNR 基于 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且数据集提供语义标签。与其他方法的性能对比以下两表来自仓库 READMEREADME_en.md为官方在 Waymo Open DatasetWOD上复现或公开的结果。其中SLARM-F表示使用全注意力的离线模式SLARM-W表示使用窗口注意力的在线模式对应 parser.py 中--mode参数的可选值full/causal/window_N其中window_N即滑动窗口注意力。表 1WOD 数据集上光写实性与几何指标对比MethodDynamic-onlyFull image†PSNR↑SSIM↑D-RMSE↓PSNR↑SSIM↑D-RMSE↓LGM17.360.21611.0918.530.4479.07LGM*19.580.4439.4323.590.6918.02GS-LRM*20.020.5209.9525.180.7537.94MapAnything-----13.53STORM*22.030.6237.5025.860.8045.47OursSLARM-W23.200.6766.3827.300.8254.75SLARM-F23.510.6916.1627.490.8284.57注* 表示由官方复现† 表示非天空区域Full image 列。表 2语义分割性能定量对比MethodmIoU↑Acc↑EfficientViT-Seg0.43520.7637Mask2Former-R500.44290.7082SegMAN0.45670.7186SegFormer0.46600.7572OffSeg-B0.46120.7417OffSeg-L0.48680.7635LSeg0.48760.7976Mask2Former-Swin0.55050.8192SLARM0.66630.8923按官方 README 的表述SLARM 在语义分割的 mIoU 与准确率上均优于表中对比方法。注意事项与常见问题权重路径占位符直接运行脚本前务必把DATA_ROOT、CKPT_PTH、两个--lseg_model_*_path占位符替换为真实路径否则会在数据集加载或load_model阶段报错。渲染算子版本匹配meta_gauss_render必须与 torch 2.1.0、昇腾 910CA3严格匹配必要时用 replace_meta_gauss_render.sh 替换对应版本的projection_three_dims_gaussian_fused实现。双版本 Waymo 数据场景流标注与语义标注分属waymo_open_dataset_scene_flow与waymo_open_dataset_v_1_4_3两个版本预处理与评测时需要两套数据配合详见 Waymo 数据说明。环境变量不可省略AVOID_AI_CPU、USE_EQUAL_CROSS、TASK_QUEUE_ENABLE、PYTORCH_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),仅供参考
返回列表