复现MSG:Multiview Scene Graph (NeurIPS 2024)需要的工程知识

复现项目需要的步骤

指南涵盖了环境搭建、数据集准备、模型推理和训练的流程:


1. 克隆项目代码

首先从官方仓库克隆代码:

git clone https://github.com/ai4ce/MSG.git
cd MSG

2. 配置运行环境

项目提供了两种方式来设置运行环境,推荐使用 environment.yml 方法,以确保完整的环境依赖。

方法 1:使用 requirements.txt

如果想搭建最小依赖环境:

conda create --name msg python=3.11.8
conda activate msg
pip install -r requirements.txt

方法 2:使用 environment.yml

如果想完全复现官方环境:

conda env create -f environment.yml
conda activate msg

提示:第二种方法可以避免遗漏依赖项,推荐使用。


3. 数据集准备

官方数据集基于 Apple 的 ARKitScenes 转换而来,需要从 Huggingface 下载:

下载和解压数据

  1. 下载数据
    • 数据链接在 Huggingface Dataset Hub 中。
    • 下载以下压缩包:
      • Training_aa.zipTraining_aj.zip
      • Validation.zip
      • Test.zip
      • mini-val.zip

这个脚本是一个非常好的选择,直接利用 huggingface_hub 库自动批量下载 Huggingface 上的数据集文件。以下是确保脚本正确运行的操作步骤:


操作步骤

1. 安装 huggingface_hub

在运行脚本之前,确保安装了 huggingface_hub 库。运行以下命令:

pip install huggingface_hub

2. 准备脚本

将您提供的脚本保存为一个 Python 文件,例如 download_msg.py

from huggingface_hub import hf_hub_download

files = [
    "Test.zip",
    "Training_aa.zip",
    "Training_ab.zip",
    "Training_ac.zip",
    "Training_ad.zip",
    "Training_ae.zip",
    "Training_af.zip",
    "Training_ag.zip",
    "Training_ah.zip",
    "Training_ai.zip",
    "Training_aj.zip",
    "Validation.zip",
    "mini-val.zip"
]

for file in files:
    hf_hub_download(repo_id="ai4ce/MSG", filename=f"data/{file}", repo_type="dataset", local_dir="./data/msg")

3. 运行脚本

运行以下命令启动脚本:

python download_msg.py

下载文件说明

  • hf_hub_download 参数

    • repo_id: 数据集的 ID,这里是 "ai4ce/MSG"
    • filename: 文件的路径,这里以 data/ 为前缀。
    • repo_type: 数据类型,这里是 dataset
    • local_dir: 下载到的本地目录,这里是 ./data/msg
  • 存储路径
    下载完成后,文件会存储到 ./data/msg 目录,形成如下结构:

    ./data/msg/
    ├── Test.zip
    ├── Training_aa.zip
    ├── Training_ab.zip
    ├── ...
    ├── Validation.zip
    ├── mini-val.zip
    

后台运行(可选)

如果文件较大,下载可能需要较长时间。为了避免 SSH 会话中断影响下载任务,可以用以下方式让脚本在后台运行:

使用 nohup 后台运行:

nohup python download_msg.py > download.log 2>&1 &
  • > download.log: 将下载进度记录到 download.log 文件。
  • &: 将任务放到后台。

查看日志:

tail -f download.log

验证文件完整性

下载完成后,建议检查文件大小与 Huggingface 页面显示是否一致。可以运行以下命令:

ls -lh ./data/msg/

优势

  • 自动化:无需手动操作,脚本会自动逐一下载。
  • 重用性:如有文件下载失败,可以重新运行脚本,hf_hub_download 会自动跳过已存在的文件。

检测数据是否完整

解压后的目录应如下:

./data/msg/
├── Training/
├── Validation/
├── Test/
├── mini-val/

4. 预训练模型准备

  1. 下载预训练模型

    • 预训练的 AoMSG 模型可从 Huggingface 数据库下载。
    • 将模型下载到 ./exp-results/aomsg 目录下:
      mkdir -p ./exp-results/aomsg
      # 将预训练模型文件移动到此目录
      
  2. 检查路径
    确保模型的路径如下:

    ./exp-results/aomsg/
    └── [预训练模型文件,如 29-step22470+.pth]
    

5. 推理(Inference)

使用预训练模型进行推理:

python inference.py --experiment inference

配置文件说明

默认配置文件为 ./configs/experiments/inference.yaml,以下参数可以覆盖 YAML 文件中的配置:

  • 数据集路径:--dataset_path
  • 模型权重路径:--eval_output_dir
  • 使用的 checkpoint 文件:--eval_chkpt

示例:

python inference.py --experiment inference \
--dataset_path ./data/msg \
--eval_output_dir ./exp-results/aomsg \
--eval_chkpt 29-step22470+.pth

6. 训练

训练 AoMSG 模型

运行以下命令:

python train.py --experiment aomsg
  • 配置文件:./configs/experiments/aomsg.yaml

训练 SepMSG 基线模型

运行以下命令:

python train.py --experiment sepmsg
  • 配置文件:./configs/experiments/sepmsg.yaml

从 checkpoint 恢复训练

在 YAML 文件中设置以下参数:

resume: true
resume_path: ./exp-results/aomsg/[checkpoint_file.pth]

7. 评估

评估训练好的模型性能:

  • 评估 AoMSG
    python eval.py --experiment aomsg
    
  • 评估 SepMSG
    python eval.py --experiment sepmsg
    
  • 评估直接使用冻结特征的模型
    python eval.py --experiment direct
    

8. 注意事项

  1. 目标检测依赖

    • 当前版本未包含对象检测的代码。您需要单独运行目标检测,并将检测结果存储到指定路径。
    • GroundingDINO 结果文件已在数据集中提供,可直接使用。
    • ./configs/experiments/aomsg_gdino.yaml 中,指定目标检测结果路径。
  2. 在线检测

    • 当前版本不支持在线检测,后续版本可能会支持。

9. 数据处理(可选)

如果想要自定义数据转换,可参考 data_preprocess 中的代码来复现从 3D 注释到 2D 数据的转换过程。


10. 结果可视化

推理结果和可视化会保存在指定的 eval_output_dir 下,您可以在本地查看结果文件(如 JSON 文件或图片)。

服务器上可以使用的下载方法

在服务器上可以使用以下方法,让下载任务在后台运行,同时确保任务不会因为会话断开而停止:


方法 1:使用 nohup

nohup 命令允许进程在后台运行,即使你断开 SSH 会话,任务也会继续执行。

  1. 运行后台下载任务

    nohup wget -i file_list.txt > download.log 2>&1 &
    
    • wget -i file_list.txt: 批量下载文件。
    • > download.log: 将输出记录到 download.log 文件中,便于查看进度。
    • 2>&1: 将标准错误重定向到日志文件中。
    • &: 将任务放入后台运行。
  2. 检查运行状态

    • 查看后台任务:
      jobs
      
    • 如果需要重新连接任务,使用:
      fg %1
      
  3. 查看下载日志

    • 你可以通过以下命令查看日志:
      tail -f download.log
      

方法 2:使用 screen

screen 是一个多窗口管理工具,允许你在断开连接后重新连接到任务。

  1. 启动一个新会话

    screen -S download
    
  2. 运行下载任务
    在新窗口中运行下载命令:

    wget -i file_list.txt
    
  3. 分离会话
    按下 Ctrl + A,然后按 D 键,可以将会话分离到后台。

  4. 重新连接会话
    当你重新登录服务器时,使用以下命令重新连接:

    screen -r download
    

方法 3:使用 tmux

tmux 是类似于 screen 的工具,可以管理多个终端会话。

  1. 启动 tmux 会话

    tmux new -s download
    
  2. 运行下载任务
    在会话中运行下载命令:

    wget -i file_list.txt
    
  3. 分离会话
    按下 Ctrl + B,然后按 D,将会话分离到后台。

  4. 重新连接会话
    当需要重新连接时,运行:

    tmux attach -t download
    

方法 4:使用 &disown

  1. 运行下载任务

    wget -i file_list.txt > download.log 2>&1 &
    
  2. 断开任务与当前会话的关系

    disown
    

方法对比

方法 优点 缺点
nohup 简单易用,适合短期任务 不支持任务管理,需手动查看日志
screen 可重连会话,支持多个任务管理 初次使用需要记住快捷键
tmux 功能强大,支持分屏、重连 配置稍复杂,初次使用需学习
& + disown 命令简单,适合小任务 无法重连任务,需谨慎使用

推荐方法

  • 如果任务较多且复杂,推荐使用 screentmux
  • 如果是简单的批量下载,推荐使用 nohup

对于你描述的这种批量下载多个大文件的场景(Huggingface 数据集),建议使用 nohuptmux,具体选择取决于以下因素:


推荐 1:nohup(简单高效,适合一次性下载)

如果你只需要运行一个简单的批量下载任务,不需要频繁监控或重新进入任务,那么 nohup 是最合适的选择。

优点

  • 简单易用,无需额外学习或配置。
  • 下载完成后可以查看日志文件,检查是否有错误。
  • 适合这种短时间的批量下载任务(只下载一组文件)。

操作步骤

  1. 运行命令

    nohup wget -i file_list.txt > download.log 2>&1 &
    
    • wget 会读取 file_list.txt 中的链接依次下载。
    • 下载日志会保存在 download.log 文件中。
  2. 查看进度

    tail -f download.log
    
  3. 任务完成后

    • 如果你重新登录服务器,可以通过查看 download.log 确认任务是否成功。

推荐 2:tmux(需要灵活监控的任务)

如果你希望在下载过程中能够实时监控任务进度,甚至在网络中断后重新连接到任务,tmux 是更适合的选择。

优点

  • 支持重连,适合长时间运行的任务。
  • 支持在同一会话中运行多个任务(如同时解压文件、检查文件完整性)。
  • 使用灵活,支持实时切换任务窗口。

操作步骤

  1. 启动 tmux 会话

    tmux new -s download
    
  2. 运行下载命令

    wget -i file_list.txt
    
  3. 分离会话
    按下 Ctrl + B,然后按 D,将会话分离。

  4. 重新连接
    如果你断开连接,可以重新连接到任务:

    tmux attach -t download
    
  5. 查看文件下载进度

    • wget 本身会显示每个文件的下载进度(包括百分比、下载速度等)。

选择依据

  • 任务简单、一次性完成: 使用 nohup,非常简单,运行后就不用管了。
  • 需要实时监控、可能断网: 使用 tmux,方便断网后重连并继续监控任务。

不推荐的方案

  • screen
    • 功能类似于 tmux,但快捷键不如 tmux 直观,扩展性稍差。
  • 直接运行任务(不后台运行):
    • 如果没有 nohuptmux,会话断开任务也会中断,不安全。

推荐方案:nohup 示例

对于你的场景,直接运行以下命令即可:

nohup wget -i file_list.txt > download.log 2>&1 &

后台运行下载任务,避免因为网络断开导致任务中断。


额外建议:验证文件完整性

下载完成后,使用以下方式检查文件完整性:

  1. 检查文件大小
    确认每个文件的大小是否与 Huggingface 页面显示一致:

    ls -lh
    
  2. 解压测试
    在解压前测试文件完整性(以 ZIP 为例):

    unzip -t Training_aa.zip
    

如果你的任务时间较长或者网络环境不稳定,我更推荐 tmux。如果不想复杂操作,nohup 也能很好地解决问题。根据你的偏好选择即可!

posted @ 2024-12-21 09:56  asandstar  阅读(10)  评论(0编辑  收藏  举报