【机器人】复现 HOV-SG 机器人导航 | 分层 开放词汇 | 3D 场景图

HOV-SG 是通过语言指令实现机器人导航的,核心特点是分层结构、开放词汇、3D场景图。

来自RSS 2024,大规模、多层次的环境构建精确的、开放词汇的3 场景图,并使机器人能够通过语言指令在其中有效地导航。

论文地址:Hierarchical Open-Vocabulary 3D Scene Graphs for Language-Grounded Robot Navigation

代码地址:https://github.com/hovsg/HOV-SG

本文分享HOV-SG复现和模型推理的过程~

下面是一个3D场景图的示例:

1、创建Conda环境

首先下载HOV-SG代码,进行工程目录

复制代码
git clone https://github.com/hovsg/HOV-SG.git
cd HOV-SG

创建一个Conda环境,名字为hovsg,参考environment.yaml中的要求进行创建,如下所示:

python 复制代码
name: hovsg
channels:
  - defaults
  - pytorch
dependencies:
  - python=3.9
  - numpy
  - pytorch::faiss-gpu
  - pip
  - pip:
    - matplotlib==3.7.3
    - scipy==1.13.1
    - open3d==0.18.0
    - opencv-python
    - git+https://github.com/facebookresearch/segment-anything.git
    - torchmetrics
    - ftfy
    - tqdm
    - open-clip-torch
    - transformers
    - openai==1.3.7
    - plyfile
    - hydra-core
    - pyvista
    - scikit-fmm
    - pathos
    - opencv-python-headless==4.8.1.78

再进行SG_Nav环境,上面的两条命令对应为:

python 复制代码
conda env create -f environment.yaml
conda activate hovsg

安装成功打印信息:

2、安装habitat模拟器

我们需要安装habitat-sim 和 habitat-lab

python 复制代码
conda install habitat-sim -c conda-forge -c aihabitat

等待安装完成~

3、安装依赖库

执行下面命令进行安装:

python 复制代码
pip install -e .

安装成功打印信息:

2025/6/30 补丁1:pip install numpy==1.24.3

补丁2:先卸载 pip uninstall faiss -y,再安装 pip install faiss-cpu==1.7.4

4、配置OpenCLIP

HOV-SG 使用 Open CLIP 模型从 RGB-D 帧中提取特征

要下载 Open CLIP 模型权重,CLIP-ViT-H-14-laion2B-s32B-b79K 请参阅Open CLIP

执行下面命令,进行下载 CLIP模型权重:

python 复制代码
mkdir checkpoints
wget https://huggingface.co/laion/CLIP-ViT-H-14-laion2B-s32B-b79K/resolve/main/open_clip_pytorch_model.bin?download=true -O checkpoints/temp_open_clip_pytorch_model.bin && mv checkpoints/temp_open_clip_pytorch_model.bin checkpoints/laion2b_s32b_b79k.bin

等待下载完成:

(可选)另一个选择是使用 OVSeg 微调的 Open CLIP 模型

执行下面命令,进行下载型权重:

python 复制代码
pip install gdown
gdown --fuzzy https://drive.google.com/file/d/17C9ACGcN7Rk4UT4pYD_7hn3ytTa3pFb5/view -O checkpoints/ovseg_clip.pth

4、配置SAM

HOV-SG 使用SAM为 RGB-D 帧生成与类别无关的分割掩码。

执行下面命令,进行下载 SAM模型权重:

python 复制代码
wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth -O checkpoints/sam_vit_h_4b8939.pth

等待下载完成:

5、准备HM3D数据集

下载地址:https://github.com/matterport/habitat-matterport-3dresearch

选择"Downloading HM3D v0.2"的 val四个文件:

下载完成后,创建一个data/hm3d/val目录

python 复制代码
mkdir -p data/hm3d/val

然后将hm3d-val-glb-v0.2、hm3d-val-habitat-v0.2、hm3d-val-semantic-annots-v0.2目录,复制合并在val内

进入val内的某个子文件夹是这样的:

最终形成这样的目录结构:

├── hm3d

│ ├── hm3d_annotated_basis.scene_dataset_config.json # this file is necessary

│ ├── val

│ │ └── 00824-Dd4bFSTQ8gi

│ │ ├── Dd4bFSTQ8gi.basis.glb

│ │ ├── Dd4bFSTQ8gi.basis.navmesh

│ │ ├── Dd4bFSTQ8gi.glb

│ │ ├── Dd4bFSTQ8gi.semantic.glb

│ │ └── Dd4bFSTQ8gi.semantic.txt

...

...

...

其中后面会用到场景ID包括:

  1. 00824-Dd4bFSTQ8gi
  2. 00829-QaLdnwvtxbs
  3. 00843-DYehNKdT76V
  4. 00861-GLAQ4DNUx5U
  5. 00862-LT9Jq6dN3Ea
  6. 00873-bxsVRursffK
  7. 00877-4ok3usBNeis
  8. 00890-6s7QHgap2fW

6、姿态转为RGB-D观测值

首先复制hovsg/data/hm3dsem/metadata/poses到 data/hm3dsem_poses中

python 复制代码
# 创建data/hm3dsem_poses文件夹
mkdir data/hm3dsem_poses
# 执行复制命令
cp hovsg/data/hm3dsem/metadata/poses/*  data/hm3dsem_poses/

复制后是这样的:

运行代码:

python 复制代码
python hovsg/data/hm3dsem/gen_hm3dsem_walks_from_poses.py --dataset_dir data/hm3d/ --save_dir data/hm3dsem_walks/

运行打印信息:

python 复制代码
(hovsg) lgp@lgp-MS-7E07:~/2025_project/HOV-SG$ python hovsg/data/hm3dsem/gen_hm3dsem_walks_from_poses.py --dataset_dir data/hm3d/ --save_dir data/hm3dsem_walks/
/home/lgp/anaconda3/envs/hovsg/lib/python3.9/site-packages/scipy/__init__.py:146: UserWarning: A NumPy version >=1.17.3 and <1.25.0 is required for this version of SciPy (detected version 1.26.4
  warnings.warn(f"A NumPy version >={np_minversion} and <{np_maxversion}"
scene: data/hm3d//val/00824-Dd4bFSTQ8gi/Dd4bFSTQ8gi.glb
-------------
data/hm3d//val/00824-Dd4bFSTQ8gi/Dd4bFSTQ8gi.basis.glb
data/hm3d/hm3d_annotated_basis.scene_dataset_config.json
-------------
{}
agent_state: position [ 1.0737159  0.0688231 -2.2800648] rotation quaternion(1, 0, 0, 0)
saving frame 2252/2254: 100%|█████████████████████████████████████████████████████████████| 2253/2253 [01:18<00:00, 28.64it/s]
scene: data/hm3d//val/00829-QaLdnwvtxbs/QaLdnwvtxbs.glb
-------------
data/hm3d//val/00829-QaLdnwvtxbs/QaLdnwvtxbs.basis.glb
data/hm3d/hm3d_annotated_basis.scene_dataset_config.json
-------------
{}
agent_state: position [-3.6943688   0.13573912 -3.9164376 ] rotation quaternion(1, 0, 0, 0)
saving frame 1803/1805: 100%|█████████████████████████████████████████████████████████████| 1804/1804 [01:07<00:00, 26.88it/s]
scene: data/hm3d//val/00843-DYehNKdT76V/DYehNKdT76V.glb
-------------
data/hm3d//val/00843-DYehNKdT76V/DYehNKdT76V.basis.glb
data/hm3d/hm3d_annotated_basis.scene_dataset_config.json

7、创建场景图

修改create_graph.py代码,要不然会报错:

FileNotFoundError: [Errno 2] No such file or directory: 'data/hm3dsem_walks/val/00824-Dd4bFSTQ8gi/val/00824-Dd4bFSTQ8gi/rgb'

示例代码:

python 复制代码
import os
import hydra
from omegaconf import DictConfig
from hovsg.graph.graph import Graph

# pylint: disable=all


@hydra.main(version_base=None, config_path="../config", config_name="create_graph")
def main(params: DictConfig):
    # create logging directory
    save_dir = os.path.join(params.main.save_path, params.main.dataset, params.main.scene_id)
    params.main.save_path = save_dir
    # params.main.dataset_path = os.path.join(params.main.dataset_path, params.main.split, params.main.scene_id)
    print("params.main.split:", params.main.split)
    print("params.main.scene_id:", params.main.scene_id)
    print("params.main.dataset_path:", params.main.dataset_path)
    if not os.path.exists(save_dir):
        os.makedirs(save_dir, exist_ok=True)

    # create graph
    hovsg = Graph(params)
    hovsg.create_feature_map() # create feature map

    # save full point cloud, features, and masked point clouds (pcd for all objects)
    hovsg.save_masked_pcds(path=save_dir, state="both")
    hovsg.save_full_pcd(path=save_dir)
    hovsg.save_full_pcd_feats(path=save_dir)
    
    # for debugging: load preconstructed map as follows
    # hovsg.load_full_pcd(path=save_dir)
    # hovsg.load_full_pcd_feats(path=save_dir)
    # hovsg.load_masked_pcds(path=save_dir)
    
    # create graph, only if dataset is not Replia or ScanNet
    print(params.main.dataset)
    if params.main.dataset != "replica" and params.main.dataset != "scannet" and params.pipeline.create_graph:
        hovsg.build_graph(save_path=save_dir)
    else:
        print("Skipping hierarchical scene graph creation for Replica and ScanNet datasets.")

if __name__ == "__main__":
    main()

执行下面命令:

python 复制代码
python application/create_graph.py main.dataset=hm3dsem main.dataset_path=data/hm3dsem_walks/val/00824-Dd4bFSTQ8gi/ main.save_path=data/scene_graphs/00824-Dd4bFSTQ8gi

运行信息:

(hovsg) lgp@lgp-MS-7E07:~/2025_project/HOV-SG$ python application/create_graph.py main.dataset=hm3dsem main.dataset_path=data/hm3dsem_walks/val/00824-Dd4bFSTQ8gi/ main.save_path=data/scene_graphs/00824-Dd4bFSTQ8gi

params.main.split: val

params.main.scene_id: 00824-Dd4bFSTQ8gi

params.main.dataset_path: data/hm3dsem_walks/val/00824-Dd4bFSTQ8gi/

2025-06-29 23:52:13,474\]\[root\]\[INFO\] - Loaded ViT-H-14 model config. \[2025-06-29 23:52:17,300\]\[root\]\[INFO\] - Loading pretrained ViT-H-14 weights (checkpoints/laion2b_s32b_b79k.bin). Creating RGB-D point cloud: 100%\|███████████████████████████████████████████████████████████\| 226/226 \[00:11\<00:00, 19.32it/s

Extracting features: 46%|██████████████████████████████▎ | 104/226 [06:09<07:12, 3.55s/it]

8、可视化场景图

执行下面命令:

python 复制代码
python application/visualize_graph.py graph_path=data/scene_graphs/00824-Dd4bFSTQ8gi/hm3dsem/graph

示例效果:(构建一个 3D场景图层次结构,包括 floor、room 和 object)

不同视角:

构建完3D场景图后,用于导航查询

示例效果:

分享完成~

相关推荐
Blossom.1187 小时前
机器学习在智能建筑中的应用:能源管理与环境优化
人工智能·python·深度学习·神经网络·机器学习·机器人·sklearn
Mr.Winter`10 小时前
障碍感知 | 基于3D激光雷达的三维膨胀栅格地图构建(附ROS C++仿真)
人工智能·机器人·自动驾驶·ros·具身智能·环境感知
AiTEN_Robot11 小时前
AGV 无人叉车关键技术问题解析:精准定位算法 / 安全避障逻辑 / 系统对接协议全方案
人工智能·机器人·自动化·制造
贾全13 小时前
第十章:HIL-SERL 真实机器人训练实战
人工智能·深度学习·算法·机器学习·机器人
智能汽车人16 小时前
Robot---能打羽毛球的机器人
人工智能·机器人·强化学习
Blossom.11820 小时前
机器学习在智能供应链中的应用:需求预测与物流优化
人工智能·深度学习·神经网络·机器学习·计算机视觉·机器人·语音识别
合力亿捷-小亿1 天前
客服机器人知识库怎么搭?智能客服机器人3种方案深度对比(含零售落地案例)
机器人·零售
青牛科技-Allen1 天前
GC3910S:一款高性能双通道直流电机驱动芯片
stm32·单片机·嵌入式硬件·机器人·医疗器械·水泵、
物联网软硬件开发-轨物科技1 天前
【轨物洞见】光伏机器人与组件、支架智能化协同白皮书
机器人