SPVNAS的NAS搜索空间设计:宽度+深度联合搜索如何找到更高效的3D架构

📅 2026/8/26 20:06:14
SPVNAS的NAS搜索空间设计:宽度+深度联合搜索如何找到更高效的3D架构
SPVNAS的NAS搜索空间设计宽度深度联合搜索如何找到更高效的3D架构【免费下载链接】spvnas[ECCV 2020] Searching Efficient 3D Architectures with Sparse Point-Voxel Convolution项目地址: https://gitcode.com/gh_mirrors/sp/spvnasSPVNAS是 MIT Han Lab 提出的 3D 神经架构搜索NAS框架核心是用稀疏点-体素卷积构建超网络对 3D 网络的宽度通道数和深度层数进行联合搜索自动找出精度更高、计算量更省的点云语义分割架构。本文带你读懂它的搜索空间设计搜什么、怎么搜、以及搜出来的模型有多强。上图SPVNAS 模型对街道场景点云的语义分割预测由 visualize.py 生成到 assets/ 目录 什么是 SPVNAS先理解问题人工设计 3D 网络比如 SPVCNN、MinkUNet时工程师要手动拍板每个阶段的通道数给多少每个阶段堆几个残差块残差块内部放几层卷积而 SPVNAS 的思路是把这些选择全部变成随机变量先训一个共享权重的超网络supernet再从中采样出成千上万个不同的子网络来评估最终挑出精度/效率最优的那个。ECCV 2020 论文标题就是 Searching Efficient 3D Architectures with Sparse Point-Voxel Convolution。 搜索空间三要素宽度 × 宏观深度 × 微观深度SPVNAS 的搜索空间由三个维度的联合采样构成定义在 core/models/semantic_kitti/spvnas.py 中1️⃣ 宽度搜索每个阶段的输出通道数网络有 9 个阶段每个阶段的通道数在下界上界区间内独立随机采样并做整除对齐make_divisible阶段下界 (lb)上界 (ub)13232216483329646419251283846128384764192848128948128对应源码中的output_channels_lb与output_channels两个列表。此外每个卷积块内部还会按cr_bounds[0.125, 1.0]的通道比率再随机一次所以宽度其实是两级采样的联合结果。2️⃣ 宏观深度每个阶段堆几个残差块下采样有 4 个 stage、上采样有 4 个 stage每个 stage 的 feature 部分是一个RandomDepth容器定义在 core/modules/modules.py每次前向随机保留 02 个残差块max_macro_depth 2。3️⃣ 微观深度残差块内部放几层卷积每个DynamicResidualBlock内部又是一个RandomDepthcore/modules/layers.py由 2 个动态卷积块组成、depth_min2即max_micro_depth 2。一句话总结搜索空间宽度9 个阶段 × 两级通道采样× 宏观深度8 个 stage 各 0~2 块× 微观深度每块内层数组合出一个天文数字级别的候选架构集合——但全部共享同一套权重。⚡ 关键技巧超网络如何用权重共享降低搜索成本搜索空间这么大逐个训练子网络是不可能的。SPVNAS 的答案是动态算子 权重共享超参数化卷积SparseDynamicConv3dcore/modules/dynamic_sparseop.py按最大通道数分配卷积核random_sample()时只是切片选出实际使用的通道子集不同子网络共用同一块权重。通道重要性排序re_organize_middle_weights()会按权重绝对值之和对输出通道排序保证裁掉的是不重要的通道窄子网络继承的是最有价值的特征。随机性封装所有可搜索单元都继承自RandomModule抽象基类core/modules/networks.py 中的RandomNet统一调度random_sample / manual_select / determinize。 采样→固定determinize 如何得到最终子网络搜索流程可以理解为三步random_sample()随机抽取一套 {通道数, 深度} 配置假前向determinize()先跑一遍 dummy 输入记录每层实际运行的通道数剪枝固化深度拷贝后把每个RandomModule替换成对应的静态模块ConvolutionBlock、ResidualBlock…并按记录裁掉多余权重得到独立的、可直接部署的子网络。 搜出来的架构有多强模型库结果一览项目 model_zoo.py 发布了不同计算预算下的搜索模型SemanticKITTI valmIoU模型参数量 (M)MACs (G)mIoUMinkUNet29G5.528.558.9SPVCNN30G5.530.060.7SPVNAS20G⭐3.320.061.5SPVNAS25G4.524.662.9SPVNAS35G7.034.763.5MinkUNet114G21.7113.961.1SPVCNN119G21.8118.663.8SPVNAS65G⭐10.864.564.7 亮点20 GMACs 的 SPVNAS 用一半的计算量比 MinkUNet29G 还高 2.6 个点 mIoU65 GMACs 版本则超过了 119 GMACs 的人工设计 SPVCNN。该系列模型还曾拿下 NuScenes LiDAR 语义分割挑战赛第一名全景分割第二名。 快速上手三步体验搜索成果提示仓库中的超网络与模型库已完整开放架构搜索代码官方标注coming soon你可以直接推理搜索出的最优模型。git clone https://gitcode.com/gh_mirrors/sp/spvnas cd spvnas conda create -n torch python3.7 conda activate torch单卡训练人工设计基线python train.py configs/semantic_kitti/spvcnn/cr0p5.yaml --distributed False评测搜索模型python evaluate.py configs/semantic_kitti/default.yaml --name SemanticKITTI_val_SPVNAS65GMACs可视化分割python visualize.py结果输出到 assets/ 目录 项目文件导航文件作用core/models/semantic_kitti/spvnas.pySPVNAS 超网络搜索空间、采样、determinizecore/modules/modules.pyRandomDepth/RandomChoice随机深度与选择原语core/modules/layers.py动态卷积块 / 残差块与权重固化逻辑core/modules/dynamic_op.py动态 Linear / BatchNorm 基础算子core/modules/dynamic_sparseop.py稀疏动态卷积核与通道整除工具core/modules/networks.pyRandomNet超网络基类model_zoo.py预训练模型注册表与精度对照configs/semantic_kitti/default.yamlSemanticKITTI 数据集与训练超参train.py / evaluate.py / visualize.py训练 / 评测 / 可视化工具链✅ 小结SPVNAS 的搜索空间 宽度两级通道采样 宏观深度stage 块数 微观深度块内层数的联合组合靠动态算子 超参数化权重共享让一个超网络覆盖整个搜索空间再用determinize剪枝出独立子网络实测证明搜出的架构更小的算、更高地分——这正是自动设计 3D 架构最有说服力的注脚。【免费下载链接】spvnas[ECCV 2020] Searching Efficient 3D Architectures with Sparse Point-Voxel Convolution项目地址: https://gitcode.com/gh_mirrors/sp/spvnas创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考