1. 项目概述:INHerit-SG的革新性设计
在机器人导航领域,语义场景图(Semantic Scene Graph)正逐渐成为连接低级感知与高级认知的关键桥梁。传统SLAM系统虽然能构建精确的几何地图,却难以理解"请去二楼会议室找放在窗边的绿色植物"这类富含语义的人类指令。这正是INHerit-SSG试图解决的核心问题——如何让机器人像人类一样,在语义层面理解和操作物理环境。
当前主流方法存在两个极端:一方面,基于特征场的扁平化表示(如VLMaps)虽然支持开放词汇识别,但缺乏层次结构,难以处理"会议室里的桌子"这类嵌套关系查询;另一方面,离线构建的层次化场景图(如HOV-SG)虽然结构丰富,却无法适应动态环境。更关键的是,这些系统普遍依赖隐式的特征嵌入,使得决策过程如同黑箱,当查询包含"非红色"这类否定逻辑时,准确率往往骤降。
INHerit-SG的创新之处在于将检索增强生成(RAG)架构引入空间认知领域。想象一下图书馆的目录系统——书籍按主题分类(层次化),同时配有摘要卡片(语义锚点),管理员既能快速定位到"三楼科技区",也能通过卡片确认内容是否符合需求。该系统通过四个关键设计实现这一理念:
- 语言锚定的知识库:每个对象节点不仅包含视觉特征,还存储自然语言描述(如"带有划痕的木质办公桌"),使语义显式化
- 异步双流程架构:几何流(2Hz)实时维护楼层-房间结构,语义流(0.5Hz)异步处理对象识别,类似人类边走路边观察环境
- 事件触发机制:只有当VLM检测到"进入新区域"等语义事件时才重组图谱,避免无意义的计算消耗
- 闭环检索验证:采用LLM分解查询→分层过滤→VLM视觉核验的三阶段流程,特别针对否定逻辑设计反向评分策略
关键突破:传统方法像用词典查单词,只能做字面匹配;INHerit-SG则像请教图书管理员,能理解"找本不是推理小说的悬疑书"这类复杂意图。
2. 核心架构解析:从动态构建到逻辑推理
2.1 层次化场景图构造
系统的骨架是一个四层树状结构,其构建过程犹如拼装乐高积木:
几何流(L0-L1层)
- 使用RGB-D相机的深度数据构建体素地图
- 通过欧几里得距离变换+分水岭算法自动分割房间
- 垂直运动检测实现跨楼层识别(如电梯场景)
- 关键帧选择策略:当连续帧的DINOv3特征相似度<0.7时触发语义处理
语义流(L3层)
def process_keyframe(keyframe): sam_masks = SAM3.predict(keyframe.image) # 实例分割 3d_centroids = back_project(sam_masks, keyframe.depth) for mask, centroid in zip(sam_masks, 3d_centroids): desc = VLM.generate_description(mask.crop) # 生成语言描述 node = Node( visual_feat=clip.encode(mask.crop), text_desc=desc, centroid=centroid, best_view=select_best_pose(centroid) ) associate_to_room(node) # 关联到最新房间分割结果中间层生成(L2层)
当事件触发时,系统会:- 对同一房间内的对象进行DBSCAN空间聚类(eps=1.5m)
- 用LLM分析聚类内对象的语义共性,生成区域标签
(例如:聚集了"咖啡机","杯子","零食柜"→"休息区")
2.2 增量式关联策略
为避免同一物体被重复记录,设计了两阶段去重算法:
| 阶段 | 已知类别 | 开放词汇对象 |
|---|---|---|
| 几何检验 | 3D距离<0.3m | 3D距离<0.5m |
| 视觉检验 | CLIP相似度>0.85 | CLIP相似度>0.92 |
| 语义检验 | 类别完全匹配 | 描述文本TF-IDF相似度>0.7 |
特别地,对办公场景中的常见干扰项(如多显示器设置),额外添加了:
- 方向一致性检查(通过表面法向量)
- 电源线拓扑验证(若可见)
2.3 事件触发机制
不同于定时更新的僵化策略,系统通过三类事件驱动重构:
硬触发
- 楼层切换(通过气压计/视觉特征突变检测)
- 房间数量增加≥2(表示探索到新区域)
软触发
- VLM分析BEV地图后判断需要更新(prompt示例):
请根据轨迹线(红色)和历史更新点(蓝色)判断: 1. 机器人是否完成了某个房间的探索? 2. 是否存在未被覆盖的显著区域? 输出JSON格式的决策理由。
- VLM分析BEV地图后判断需要更新(prompt示例):
语义漂移检测
当同一对象的多次描述出现矛盾时(如"干净桌子"→"杂乱桌子"),触发局部更新
3. 闭环检索系统设计
3.1 查询解析引擎
采用角色分离的LLM协作框架:
graph TD UserQuery --> Parser[语法解析LLM] Parser --> |原子约束| NegChecker[否定检测LLM] Parser --> |关系链| SpatialLLM[空间推理LLM] NegChecker --> WeightAssigner[权重分配LLM] WeightAssigner --> Executor[检索引擎]典型工作流程示例:
查询:"找一楼不是行政区的会议室里靠窗的桌子"
→ 解析为:
{ "floor": {"value": 1, "weight": 0.1}, "room_type": {"value": "会议室", "neg": false, "weight": 0.3}, "room_attr": {"value": "行政", "neg": true, "weight": 0.2}, "object": {"value": "桌子", "weight": 0.2}, "spatial": {"relation": "靠近", "target": "窗", "weight": 0.2} }3.2 分层过滤算法
检索过程采用渐进式精度提升策略:
楼层过滤
快速排除90%无关区域(时间复杂度O(1))房间级过滤
- 属性匹配:使用BM25算法计算描述文本相关性
- 否定处理:对带有NOT的约束,设置得分系数为-1
对象级验证
对Top-3候选,执行视觉核验:def visual_verify(candidate, query): crop = get_best_view(candidate) prompt = f"请确认该物体是否满足以下条件:{query}" response = VLM.query(prompt, crop) return "是" in response # 简单但有效的启发式判断
3.3 动态记忆更新
系统支持通过交互完善语义描述:
- 当用户指出错误时,触发描述修正流程:
[当前描述] "黑色转椅" [用户反馈] 实际上是深蓝色的 [新描述] "皮革材质的深蓝色转椅,扶手有磨损" - 采用LRU策略维护描述版本,保留最近3次有效交互
4. 实战测试与优化建议
4.1 HM3DSem-SQR基准测试
在模拟环境中的表现:
| 查询类型 | 准确率 | 比较基线提升 |
|---|---|---|
| 简单对象检索 | 98.2% | +2.1% |
| 空间关系查询 | 95.7% | +12.3% |
| 否定逻辑查询 | 89.4% | +34.6% |
| 多跳推理 | 83.1% | +27.9% |
4.2 现实场景挑战
在实际办公楼部署时遇到的典型问题及解决方案:
玻璃门误识别
- 现象:将玻璃门后的物体纳入当前房间
- 改进:增加镜面反射检测模块,结合毫米波雷达数据
动态物体干扰
- 案例:移动的清洁车被误认为固定设施
- 策略:引入时序一致性检查(需连续5帧静止才建图)
语言歧义
- 示例:"找接待处" vs "找前台"
- 处理:构建同义词图谱,加权融合查询扩展
4.3 计算资源优化
内存占用对比(200㎡办公区):
| 系统 | 存储大小 | 检索延迟 |
|---|---|---|
| 点云地图 | 2.3GB | 1200ms |
| 特征场 | 1.1GB | 800ms |
| INHerit-SG | 68MB | 350ms |
关键优化技巧:
- 使用八叉树压缩空间索引
- 对CLIP特征进行PCA降维(512→128维)
- 懒加载机制:仅活跃区域的视觉数据常驻内存
5. 应用扩展与未来方向
当前系统已成功应用于:
- 博物馆导览机器人(处理如"找文艺复兴时期非肖像画")
- 仓储物流(支持"A区第二排货架的非电子产品"查询)
- 智能家居(理解"客厅里不在电视柜上的遥控器")
待突破的挑战:
- 跨模态对齐:当语言描述与视觉特征冲突时(如"红色杯子"实际是粉红色)
- 长尾场景:对"像艺术品的消防设备"这类隐喻查询的支持
- 分布式协作:多机器人间的场景图融合机制
一个有趣的发现是:通过分析用户修正过的描述,系统能自动学习特定场景的术语习惯(如医院场景中"处置台"vs"操作台"的偏好)。这种自适应能力为领域自适应提供了新思路。