AI个人学习
和实操指南
讯飞绘镜

SegAnyMo:从视频中自动分割任意运动物体的开源工具

综合介绍

SegAnyMo 是一个开源项目,由加州大学伯克利分校和北京大学的研究团队开发,包括 Nan Huang 等成员。这个工具专注于视频处理,能自动识别和分割视频中任意运动的物体,比如人、动物或车辆。它结合了 TAPNet、DINOv2 和 SAM2 等技术,计划在 CVPR 2025 会议上展示成果。项目代码完全公开,用户可以免费下载、使用或修改,适合开发者、研究人员和视频处理爱好者。SegAnyMo 的目标是简化动态视频分析,提供高效的分割方案。

SegAnyMo:从视频中自动分割任意运动物体的开源工具-1


 

功能列表

  • 自动检测视频中的运动物体,生成精确的分割掩码。
  • 支持视频格式(如 MP4、AVI)或图像序列输入。
  • 提供预训练模型,支持快速部署和测试。
  • 集成 TAPNet 生成 2D 追踪轨迹,捕捉运动信息。
  • 使用 DINOv2 提取语义特征,提升分割准确性。
  • 利用 SAM2 细化掩码,实现像素级分割。
  • 支持自定义数据集训练,适应不同场景。
  • 输出可视化结果,便于检查和调整。

 

使用帮助

SegAnyMo 需要一定的技术基础,主要面向有编程经验的用户。下面是详细的安装和使用指南。

安装流程

  1. 准备硬件和软件
    项目在 Ubuntu 22.04 上开发,推荐使用 NVIDIA RTX A6000 或类似支持 CUDA 的显卡。需要预装 Git 和 Anaconda。

    • 克隆代码仓库:
      git clone --recurse-submodules https://github.com/nnanhuang/SegAnyMo
      
    • 进入项目目录:
      cd SegAnyMo
      
  2. 创建虚拟环境
    用 Anaconda 创建独立的 Python 环境,避免依赖冲突。

    • 创建环境:
      conda create -n seg python=3.12.4
      
    • 激活环境:
      conda activate seg
      
  3. 安装核心依赖
    安装 PyTorch 和其他必要库。

    • 安装 PyTorch(支持 CUDA 12.1):
      conda install pytorch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 pytorch-cuda=12.1 -c pytorch -c nvidia
      
    • 安装其他依赖:
      pip install -r requirements.txt
      
    • 安装 xformers(加速推理):
      pip install -U xformers --index-url https://download.pytorch.org/whl/cu121
      
  4. 安装 DINOv2
    DINOv2 用于特征提取。

    • 进入预处理目录并克隆:
      cd preproc && git clone https://github.com/facebookresearch/dinov2
      
  5. 安装 SAM2
    SAM2 是掩码细化核心。

    • 进入 SAM2 目录:
      cd sam2
      
    • 安装:
      pip install -e .
      
    • 下载预训练模型:
      cd checkpoints && ./download_ckpts.sh && cd ../..
      
  6. 安装 TAPNet
    TAPNet 用于生成 2D 追踪轨迹。

    • 进入 TAPNet 目录:
      cd preproc/tapnet
      
    • 安装:
      pip install .
      
    • 下载模型:
      cd ../checkpoints && wget https://storage.googleapis.com/dm-tapnet/bootstap/bootstapir_checkpoint_v2.pt
      
  7. 验证安装
    检查环境是否正常:
python -c "import torch; print(torch.cuda.is_available())"

输出 True 表示成功。

使用方法

数据准备

SegAnyMo 支持视频或图像序列输入。数据需按以下结构组织:

data
├── images
│   ├── scene_name
│   │   ├── image_name
│   │   ├── ...
├── bootstapir
│   ├── scene_name
│   │   ├── image_name
│   │   ├── ...
├── dinos
│   ├── scene_name
│   │   ├── image_name
│   │   ├── ...
├── depth_anything_v2
│   ├── scene_name
│   │   ├── image_name
│   │   ├── ...
  • 如果输入是视频,用工具(如 FFmpeg)提取帧到 images 文件夹。
  • 如果是图像序列,直接放入对应目录。

运行预处理

  1. 生成深度图、特征和轨迹
    使用以下命令处理数据(约 10 分钟,视数据量而定):

    • 对于图像序列:
      python core/utils/run_inference.py --data_dir $DATA_DIR --gpus 0 --depths --tracks --dinos --e
      
    • 对于视频:
      python core/utils/run_inference.py --video_path $VIDEO_PATH --gpus 0 --depths --tracks --dinos --e
      

    参数说明:

    • --e 启用高效模式,降低帧率和分辨率,加速处理。
    • --step 10 表示每 10 帧取 1 帧作为查询帧,可调小以提高精度。

预测运动轨迹

  1. 下载模型权重
    从 Hugging Face 或 Google Drive 下载预训练模型。将路径写入 configs/example_train.yaml 的 resume_path 字段。

    • 运行轨迹预测:
      python core/utils/run_inference.py --data_dir $DATA_DIR --motin_seg_dir $OUTPUT_DIR --config_file configs/example_train.yaml --gpus 0 --motion_seg_infer --e
      

    输出结果保存在 $OUTPUT_DIR

生成分割掩码

  1. 使用 SAM2 细化掩码
    • 运行掩码生成:
      python core/utils/run_inference.py --data_dir $DATA_DIR --sam2dir $RESULT_DIR --motin_seg_dir $OUTPUT_DIR --gpus 0 --sam2 --e
      

    参数说明:

    • $DATA_DIR 是原始图像路径。
    • $RESULT_DIR 是掩码保存路径。
    • $OUTPUT_DIR 是轨迹预测结果路径。
      注意:SAM2 默认支持 .jpg 或 .jpeg 格式,文件名需为纯数字。若不符合,可修改代码或重命名文件。

评估结果

  1. 下载预计算结果
    可从 Google Drive 下载官方掩码进行对比。

    • 评估 DAVIS 数据集:
      CUDA_VISIBLE_DEVICES=0 python core/eval/eval_mask.py --res_dir $RES_DIR --eval_dir $GT_DIR --eval_seq_list core/utils/moving_val_sequences.txt
      
    • 细化评估:
      cd core/eval/davis2017-evaluation && CUDA_VISIBLE_DEVICES=0 python evaluation_method.py --task unsupervised --results_path $MASK_PATH
      

自定义训练

  1. 数据预处理
    以 HOI4D 数据集为例:
python core/utils/process_HOI.py
python core/utils/run_inference.py --data_dir $DATA_DIR --gpus 0 --tracks --depths --dinos

自定义数据集需提供 RGB 图像和动态掩码。

  • 检查数据完整性:
    python current-data-dir/dynamic_stereo/dynamic_replica_data/check_process.py
    
  • 清理数据节省空间:
    python core/utils/run_inference.py --data_dir $DATA_DIR --gpus 0 --clean
    
  1. 模型训练
    修改 configs/$CONFIG.yaml 配置,使用 Kubric、HOI4D 等数据集训练:
CUDA_VISIBLE_DEVICES=0 python train_seq.py ./configs/$CONFIG.yaml

 

应用场景

  1. 视频后期制作
    从视频中分离运动物体(如奔跑的人),生成掩码后用于特效合成。
  2. 行为分析研究
    追踪动物或人体运动轨迹,分析行为模式。
  3. 自动驾驶开发
    分割行车视频中的移动物体(如车辆、行人),优化感知系统。
  4. 监控系统优化
    提取监控视频中的异常运动,提升安防效率。

 

QA

  1. 需要 GPU 吗?
    是的,推荐 NVIDIA 显卡支持 CUDA,否则运行效率低。
  2. 支持实时处理吗?
    当前版本适合离线处理,实时应用需自行优化。
  3. 训练需要多大空间?
    视数据集而定,小数据集几 GB,大数据集可能上百 GB。
  4. 如何提高分割精度?
    减小 --step 值,或用更多标注数据训练模型。
未经允许不得转载:首席AI分享圈 » SegAnyMo:从视频中自动分割任意运动物体的开源工具
zh_CN简体中文