当前位置: 首页 > news >正文

ESAM 配置文件解读指南:decoder、merge_head 与 test_cfg 三大模块参数完整说明

ESAM 配置文件解读指南:decoder、merge_head 与 test_cfg 三大模块参数完整说明

【免费下载链接】ESAM[ICLR 2025, Oral] EmbodiedSAM: Online Segment Any 3D Thing in Real Time项目地址: https://gitcode.com/gh_mirrors/es/ESAM

ESAM(EmbodiedSAM)是一个在线、实时、细粒度的 3D 实例分割框架,被 ICLR 2025 接收为 Oral。要跑通或微调它,读懂configs/下的配置文件是第一步。这篇文章逐项拆解配置中最关键的三块:decoder(查询解码器)、merge_head(实例合并模块)和test_cfg(推理后处理阈值),帮你快速上手 3D 实例分割模型配置,避免踩坑。

如上图所示,模型依次经过Query Lift(查询提取)→ Query Refinement(查询精炼)→ Query Merging(查询合并)三个阶段,配置文件中的decodermerge_headtest_cfg正好分别对应图中的 Query Refinement、Merge 与后处理环节。

ESAM 配置文件在哪里、怎么分

所有配置集中在 configs/ 目录,按模型变体分成三个子目录:

目录说明
configs/ESAM/完整版 ESAM(基于 SAM 2D 伪标签)
configs/ESAM-E/效率版 ESAM-E(基于 FastSAM,更快)
configs/ESAM-E+FF/进一步加特征融合的 ESAM-E+FF

每个子目录里还有两类命名:

  • *_sv_scannet.py离线(supervision / 全场景)训练配置,如 ESAM_sv_scannet.py
  • *_online_*.py在线流式训练/测试配置,如 ESAM_online_scannet.py

以在线版 ESAM_online_scannet.py 为例,配置开头先声明了几个全局量:

num_instance_classes = 18 # 实例类数(20 个语义类去掉 wall/floor 两个 stuff 类) num_semantic_classes = 20 # 语义类数 num_instance_classes_eval = 18 use_bbox = True # 是否启用 3D 框

后文decodertest_cfg会直接引用这些变量,改数据集类别数时先改这里

decoder:查询解码器参数逐项说明

decoder对应图中 "Query Decoder x 3" 的 Transformer 解码器,实现见 oneformer3d/query_decoder.py。参数按功能分组如下:

参数默认值含义
typeScanNetMixQueryDecoder解码器类型,支持"超级点 + 点级"混合注意力
num_layers3Transformer 解码层数
cross_attn_mode["", "SP", "SP", "SP"]每层交叉注意力作用在超级点(SP)还是点级(P)特征上,下标 0 表示第一层前的初始输出
mask_pred_mode["SP", "SP", "P", "P"]每层掩码预测粒度;最后一项必须是"P"(点级掩码)
share_attn_mlp/share_mask_mlpFalseSP 与点级特征是否共享投影 MLP,False 表示各自独立参数
temporal_attnFalse是否启用时序注意力(预留扩展)
num_instance_queries/num_semantic_queries0固定可学习 query 数;为 0 表示 query 全部来自超级点选择
num_instance_classes/num_semantic_classes18 / 20实例/语义类别数
num_semantic_linears1语义分类头线性层数(1 或 2)
in_channels96输入特征通道数,需与 backbone 的out_channels=96对齐
d_model256Transformer 隐藏维度
num_heads8多头注意力头数
hidden_dim1024FFN 中间层维度
dropout0.0Dropout 率
activation_fngeluFFN 激活函数
iter_predTrue迭代预测:每层都输出一次结果,前 3 次作为辅助监督
attn_maskTrue用上一层掩码生成本层注意力的遮挡掩膜
fix_attentionTrue交叉注意力中固定"残差 + LayerNorm"结构
objectness_flagFalse是否额外预测 objectness 分数(默认用类别置信度)
bbox_flaguse_bbox是否输出 3D 框回归头(配合use_bbox

💡 实用提示:想轻量化,优先调num_layershidden_dim;想换数据集,重点核对num_instance_classesnum_semantic_classesin_channels

merge_head:实例合并模块参数说明

在线推理时,同一物体会在连续帧中被多次检出,merge_head负责为每个实例 query 提取归一化特征向量,供后续"实例合并"做相似度匹配。实现见 oneformer3d/merge_head.py:

merge_head=dict(type='MergeHead', in_channels=256, out_channels=256, norm='layer'), merge_criterion=dict(type='ScanNetMergeCriterion_Fast', tmp=True, p2s=False),
参数默认值含义
in_channels/out_channels256 / 256输入/输出特征维度,需与decoder.d_model一致
normlayer归一化方式,batchlayer;在线版推荐layer(避免 batch 波动)

其输出特征会做L2 归一化,再被merge_criterion(含时序一致性tmp与点-超级点对齐p2s两个辅助损失)监督。实际"合并哪些实例"的策略由test_cfg.merge_type控制,见下一节。

test_cfg:推理后处理阈值逐项说明

⚠️ 配置文件里其实有两个test_cfg,新手最容易混淆:

  • 模型级:写在model = dict(...)内部,是真正的推理后处理参数(本节约定)
  • 顶层test_cfg = dict(type='TestLoop'),是 runner 的测试循环类型,不要改

模型级test_cfg在 oneformer3d/mixformer3d.py 的predict_by_feat_instance中被逐个使用,流程是:取 TopK → 置信度过滤 → Mask NMS → 点位数过滤

参数ESAMESAM-E作用
topk_insts2020从所有 query 中按分数取前 K 个候选实例(注释提示调大可能更好)
inscat_topk_insts100100参与实例合并的最大实例数上限
inst_score_thr0.30.21实例类别置信度阈值,低于它直接丢弃(召回率敏感参数
pan_score_thr0.50.5全景分割实例的分数阈值
sp_score_thr0.40.4超级点掩码二值化阈值(sigmoid 后 > 该值判为实例点)
npoint_thr100100最小点数阈值,实例点数过少视为噪声剔除
obj_normalizationTrueTrue用掩码区域平均 sigmoid 值对分数做"对象置信度"归一化
nmsTrueTrue是否启用 Mask Matrix NMS 去重
matrix_nms_kernellinearlinearNMS 衰减核函数(linear/gaussian
stuff_classes[0, 1][0, 1]stuff 类(wall、floor),实例分割中不作为 thing 输出
merge_typelearnable_onlinelearnable_online在线实例合并策略,merge_head特征在此处生效

🔧 调参经验:漏检多就降低inst_score_thr并调大topk_insts重复框多就调高inst_score_thr或检查 NMS 配置。ESAM-E 把inst_score_thr调到 0.21,正是为了配合 FastSAM 分数分布。

相关配置与文档索引

  • 训练/测试脚本:tools/train.py、tools/test.py
  • 数据集与训练教程:docs/run.md、docs/dataset_preparation.md
  • 自定义数据推理:docs/demo.md
  • 多数据集变体配置:configs/ESAM_CA/(ScanNet200-CA)、configs/ESAM-E_CA/
  • 核心实现:oneformer3d/mixformer3d.py(模型主体)、oneformer3d/instance_merge.py(实例合并)

一句话总结

  • decoder决定模型容量与推理粒度(SP/P 模式、层数、维度)
  • merge_head决定跨帧实例合并的特征质量(维度对齐 d_model,在线用 layer norm)
  • test_cfg决定最终输出的召回与精度(阈值 + NMS + 合并策略)

三者配合,才能既保证实时性又拿到高分的 3D 实例分割结果。改任何一项前,先对照本文的默认值表,基本就能避免"改了配置跑不起来"的问题。

【免费下载链接】ESAM[ICLR 2025, Oral] EmbodiedSAM: Online Segment Any 3D Thing in Real Time项目地址: https://gitcode.com/gh_mirrors/es/ESAM

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

http://www.cnnetsun.cn/news/4248218.html

相关文章:

  • 实时上报停留时长数据:TimeMe.js内置WebSocket通道3步集成教程
  • Cushy主题与样式实战:从暗色模式切换到OKLab色彩方案编辑器手把手教程
  • quicktime_video_hack如何建立屏幕流会话:15步USB握手协议逐步图解
  • 基于相似性推理的博弈论方法:多智能体协作中的理性合作策略
  • 【AI大模型实战】手把手教你基于Dify搭建RAG知识库,全程干货,零基础小白也能轻松学会!!
  • 【AI大模型教程】一文讲清支持 MCP 的七大 AI 框架有哪些!零基础小白收藏这一篇就够了!!
  • 从内存数据库走向云原生数据底座,深入理解 SAP HANA Cloud
  • SAR成像全链路解析:从点目标仿真到实测数据处理
  • bravado响应处理完全手册:HttpFuture、超时降级fallback_result与错误捕获最佳实践
  • MPDroid进阶功能:输出设备管理、网络电台与Sticker评分完整攻略
  • extended_text_field 渲染层揭秘:ExtendedRenderEditable 光标定位与桌面端拼音输入修复
  • LRU缓存淘汰机制全揭秘:SDURLCache如何守护你的磁盘容量上限
  • 悟空Agent实战:LLaMA-Factory高危0day漏洞挖掘与修复
  • 大模型推理为什么又长又啰嗦?更多thinking≠更好结果,精准thinking可砍掉一半长度
  • 收藏!小白也能学会!LangChain.js智能体开发指南:10大编排模式详解与实战应用
  • Jeff Dean押注AI4S:从分布式系统到科学发现的基础设施革命
  • IntelliJ IDEA快捷键
  • 【AI大模型】腾讯屠榜MTEB,嵌入模型告别BERT,拥抱LLM
  • 智能体Agent:怎样用自然语言重构数据开发?看完这一篇你就懂了!!
  • 水下鱼类实例分割实战:从COCO数据集到YOLOv8训练全流程
  • 【大模型必备】位置编码终极指南:收藏学习RoPE如何改变Transformer架构
  • 7B扩散LLM,居然能跟671B的DeepSeek V3掰手腕,扩散vs自回归,谁才是未来?
  • C指针进阶:Beej‘s Guide to C指针运算与数组本质完整指南
  • WinDiskWriter:macOS上3步做出Windows启动盘
  • UUIDv1秒变v6的位运算魔法:uuid-creator TimeOrderedCodec源码剖析
  • 极简语言编年史:milliForth、sectorForth 与 sectorLISP 深度对比
  • 大模型应用开发全流程:从初始构思到实验、效果评估和产品化!
  • C语言内存管理
  • 多传感器模块设计指南:从选型到固件的可穿戴实践
  • 什么是Transformer?什么是视觉Transformer?与CNN的比较谁更胜一筹?