news 2026/8/27 15:04:26

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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),仅供参考

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

实时上报停留时长数据:TimeMe.js内置WebSocket通道3步集成教程

实时上报停留时长数据:TimeMe.js内置WebSocket通道3步集成教程 【免费下载链接】TimeMe.js A JavaScript library to accurately time how long a user views a web page, disregarding idle time and time when the tab or window is minimized. 项目地址: https…

作者头像 李华
网站建设 2026/8/27 14:57:42

基于相似性推理的博弈论方法:多智能体协作中的理性合作策略

多个大模型智能体在协作时,经常遇到一个经典困境:每个模型都只优化自己的目标,结果整体表现反而更差。最近研究里被反复提到的一个思路,是用博弈论来解释基础模型之间的交互,并通过相似性推理(Similarity I…

作者头像 李华
网站建设 2026/8/27 14:56:54

【AI大模型实战】手把手教你基于Dify搭建RAG知识库,全程干货,零基础小白也能轻松学会!!

前言 Dify 是一款开源的大模型应用开发平台,旨在帮助开发者快速构建生产级生成式 AI 应用。在Dify 本地化部署中,知识库功能是实现企业级 AI 应用的核心能力。本文介绍基于版本 1.5.1 搭建知识库全流程解析 一、Dify基本概念 Dify 是一款开源的大模型应用…

作者头像 李华