XMem2

XMem2

少量标注实现高精度视频分割的开源工具

XMem2是一个开源的交互式视频分割工具,通过永久记忆模块和创新帧选择算法,只需少量标注即可实现高质量分割。它能以30+ FPS的速度处理物体部件、流体、可变形物体等复杂场景。XMem2提供改进的GUI和Python接口,适用于电影制作等领域。项目还包含PUMaVOS数据集,涵盖23个具挑战性的视频分割场景。

XMem++视频分割人工智能计算机视觉交互式标注Github开源项目

XMem++

从少量标注帧实现生产级视频分割

Maksym Bekuzarov$^\dagger$, Ariana Michelle Bermudez Venegas$^\dagger$, Joon-Young Lee, Hao Li

元宇宙实验室 @ MBZUAI (穆罕默德·本·扎耶德人工智能大学)

[arXiv] [PDF] [项目主页]

$^\dagger$ 这些作者对本工作贡献相同。

目录

演示

受电影行业用例启发,XMem++ 是一个交互式视频分割工具,只需用户提供少量分割掩码,就能以最少的人工监督对非常具有挑战性的用例进行分割,例如:

  • 物体的部分(仅提供6个标注帧):

https://github.com/max810/XMem2/assets/29955120/3d3761e2-2e73-484a-a1ed-ec717d8fed05

  • 流体物体如头发(仅提供5个标注帧):

https://github.com/max810/XMem2/assets/29955120/ba746a2a-6333-4654-b39c-b93b9eb1ae0c

  • 可变形物体如衣服(分别使用5和11个标注帧)

https://github.com/max810/XMem2/assets/29955120/3a8750e0-44ca-4cce-9b16-8f7154dbb217

https://github.com/max810/XMem2/assets/29955120/689512a6-f60a-4258-b282-4b799f12b0c9

[局限性]

概述

演示GUI
XMem++ 更新后的GUI

XMem++ 是基于 Ho Kei ChengAlexander SchwingXMem 构建的,并通过添加以下内容进行了改进:

  1. 永久记忆模块,仅需少量手动标注即可大幅提高模型精度(参见结果)
  2. 标注候选选择算法,选择 $k$ 个最佳的下一帧供用户提供标注。
  3. 我们使用 XMem++ 收集并标注了 PUMaVOS - 23个视频数据集,包含不寻常和具有挑战性的标注场景,分辨率为480p,30FPS。参见数据集

此外还有以下特点:

  • 改进的GUI - 参考标签页可查看/编辑永久记忆中的帧,候选标签页显示算法预测的标注候选帧等。
  • 与XMem相比,速度和内存使用开销可忽略不计(如果只使用少量手动提供的标注)
  • 易于使用的Python接口 - 现在您可以轻松地将 XMem++ 作为GUI应用程序和Python库使用。
  • 在RTX 3090上处理480p视频可达30+ FPS
  • 配备GUI(修改自MiVOS)。

入门

环境设置

首先,安装所需的Python包:

  • Python 3.8+
  • PyTorch 1.11+(参见PyTorch获取安装说明)
  • 与PyTorch版本对应的torchvision
  • OpenCV(尝试 pip install opencv-python
  • 其他:pip install -r requirements.txt
  • 使用GUI:pip install -r requirements_demo.txt

下载权重

使用 ./scripts/download_models.sh 下载预训练模型,或手动下载并将它们放在 ./saves 目录中(如果目录不存在则创建)。您可以从 [XMem GitHub][XMem Google Drive] 下载。对于推理,您只需要 XMem.pth,但对于GUI,还需要下载 fbrs.pths2m.pth

使用图形界面

要在新视频上运行图形界面:

python interactive_demo.py --video example_videos/chair/chair.mp4

要在一系列图像上运行:

python interactive_demo.py --images example_videos/chair/JPEGImages

这两个命令都会在工作区文件夹(默认为.workspace)中为当前视频创建一个文件夹,并将所有遮罩和预测结果保存在那里。

要继续编辑工作区中的现有项目,运行以下命令:

python interactive_demo.py --workspace ./workspace/<video_name>

如果您有多个对象,请确保在首次创建项目时在上述命令中添加--num-objects <num_objects>。之后它会为了方便起见保存在项目文件中 =)

例如:

python interactive_demo.py --images example_videos/caps/JPEGImages --num-objects 2

欲了解更多信息,请访问DEMO.md

使用**XMem++**命令行和Python接口

我们在process_video.py中提供了一个简单的命令行接口,您可以这样使用:

python process_video.py \ --video <视频文件/提取的.jpg帧路径> \ --masks <现有.png遮罩的目录路径> \ --output <保存结果的路径>

该脚本将直接使用现有的视频和真实遮罩(将使用给定目录中的所有遮罩),并运行一次分割。

也支持简写参数-v -m -o

查看Python APImain.py以了解更复杂的用例和解释。

导入现有项目

如果您已经有来自其他工具的现有帧和/或遮罩,可以使用以下命令将它们导入到工作区:

python import_existing.py --name <要创建的项目名称> [--images <帧文件夹路径>] [--mask <遮罩文件夹路径>]

必须指定--images--masks中的一个(或两个)

您还可以指定--size <整数>来动态调整帧的大小(调整较短边,保持比例)

这将执行以下操作:

  1. 在您的工作区内创建一个项目目录,使用--name参数中的名称。
  2. 将您给定的图像/遮罩复制到其中。
  3. 将RGB遮罩转换为必要的调色板(XMem++使用DAVIS调色板,每个新对象=新颜色)。
  4. 如果使用--size参数指定,则调整帧的大小。

Docker支持

我们在DockerHub上提供了2个镜像:

  • max810/xmem2:base-inference - 更小更轻量 - 用于从命令行运行推理,如命令行部分所示。
  • max810/xmem2:gui - 用于交互式运行图形界面。

要使用它们,只需运行./run_inference_in_docker.sh./run_gui_in_docker.sh,并附带相应的cmd/gui参数(参见相应部分[推理] [GUI])。它们会为docker run命令提供适当的参数,并自动为输入/输出目录创建相应的卷

示例:

# 推理 ./run_inference_in_docker.sh -v example_videos/caps/JPEGImages -m example_videos/caps/Annotations -o directory/that/does/not/exist/yet # 交互式GUI ./run_gui_in_docker.sh --video example_videos/chair/chair.mp4 --num_objects 2

对于GUI,如有必要,您可以在run_gui_in_docker.sh中更改变量$LOCAL_WORKSPACE_DIR$DISPLAY_TO_USE

请注意,交互式导入按钮将不起作用(它们将打开容器文件系统内的路径,而不是主机的路径)

构建您自己的镜像

对于命令行推理:

docker build . -t <your-repo/your-image-name[:your-tag]> --target xmem2-base-inference

对于GUI:

docker build . -t <your-repo/your-image-name[:your-tag]> --target xmem2-gui

数据格式

  • 图像应使用.jpg格式。
  • 遮罩是使用DAVIS调色板的RGB .png文件,保存为调色板图像(在Pillow Image Module中使用Image.convert('P'))。如果您的遮罩不遵循这种调色板,只需运行python import_existing.py来自动转换它们(参见导入现有项目)。
  • 当使用run_on_video.py处理视频文件时,遮罩应命名为frame_%06d.<ext>,从0开始:frame_000000.jpg, frame_0000001.jpg, ... 这是任何用例的首选文件名

更多信息和便利命令请参见数据格式帮助

训练

关于训练,请参考原始XMem仓库。 我们使用XMem提供的原始权重,模型未经过任何重新训练或微调。

欢迎微调XMem并替换本项目中的权重。

方法论

带注释的XMem++架构概览
带注释的XMem++架构概览

XMem++是一个基于内存的交互式分割模型 - 这意味着它使用一组参考帧/特征图及其对应的掩码(预测的或可用的真实标注)来预测新帧的掩码,预测基于新帧与已处理帧的相似度。

与XMem一样,我们使用了受Atkinson-Shiffrin人类记忆模型启发的两种内存类型 - 工作记忆和长期记忆。前者存储近期的具有丰富细节的卷积特征图,后者存储经过高度压缩的特征,用于视频中相距较远帧之间的长期依赖关系。

然而,现有的使用内存机制来预测当前帧分割掩码的分割方法(如XMem、TBD、AoT、DeAOT、STCN等)通常逐帧处理,因此存在一个共同问题 - 当视频中遇到新的真实标注时,视觉质量会出现"跳跃"。

为什么永久记忆有帮助
为什么永久记忆有帮助 - 在永久记忆中保存来自视频不同部分的多个标注,使模型能够在目标对象的不同场景/外观之间平滑插值

为了解决这个问题,我们提出了一个新的永久记忆模块 - 实现方式与XMem的工作记忆相同 - 我们将用户提供的所有标注进行处理并放入永久记忆模块。这样,用户提供的每个真实标注都可以影响视频中的任何帧,无论其位置如何。这提高了整体分割准确性,并使模型能够在对象的不同外观之间平滑插值(见上图)。

更多详细信息请参考我们的arxiv页面[Arxiv] [PDF],第3.2节。

帧标注候选选择器

我们提出了一个简单的算法来选择用户下一步应该标注哪些帧,以最大化性能并节省时间。它基于多样性的概念 - 选择能捕捉目标对象最多样外观的帧 - 以最大化网络从这些标注中获得的信息。

它具有以下特点:

  • 目标特定:帧的选择取决于您试图分割的对象。
<p align="center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/e873836f-909b-437e-a066-83c646e768cd.jpg" width="70%"/> </p>
  • 模型通用:它基于卷积特征图和像素相似度度量(负$\mathcal{L}_{2}$距离)运行,因此不特定于XMem++
  • 对分割目标无限制:一些方法试图自动估计分割的视觉质量,这隐含地假设高质量分割遵循低级图像线索(边缘、角点等)。然而,在分割对象的部分时,这并不成立,请看:
<p align="center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/50beed0d-2b83-4297-831f-f5c820d7b70a.jpg" width="70%" /> </p>
  • 确定性和简单:它通过多样性度量对剩余帧进行排序,用户只需选择前$k$个最多样的候选帧。

更多详细信息请参考我们的arxiv页面[Arxiv] [PDF],第3.3节和附录D。

PUMaVOS数据集

我们使用XMem++收集和标注了一个数据集,其中包含受电影制作行业启发的具有挑战性和实用性的用例。

<table width="100%"> <tr> <td width="25%"> <div> <p align="center"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/88b4644f-b483-403d-b653-b890ee8afb7b.gif" alt="Billie Shoes"></p> <p align="center">鞋子 <br/> (<i>"billie_shoes" 视频</i>)</p> </div> </td> <td width="25%"> <div> <p align="center"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/daade137-52f5-44ee-8b79-88af4c0b640c.gif" alt="Short Chair"></p> <p align="center">反射 <br/> <i>("chair" 视频)</p> </div> </td> <td width="25%"> <div> <p align="center"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/37149b27-92a9-409e-a75f-639276d2f68e.gif" alt="Dog Tail"></p> <p align="center">身体部位 <br/> (<i>"dog_tail" 视频</i>)</p> </div> </td> <td width="25%"> <div> <p align="center"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/d288c1e8-ce27-4b15-b712-7f1d5b046003.gif" alt="Workout Pants"></p> <p align="center">可变形物体 <br/> (<i>"pants_workout" 视频</i>)</p> </div> </td> </tr> <tr> <td width="25%"> <div> <p align="center"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/d2f71f14-3ba2-48ee-847e-8116656f1e08.gif" alt="SKZ"></p> <p align="center">相似物体,遮挡 <br/> (<i>"skz" 视频</i>) </p> </div> </td> <td width="25%"> <div> <p align="center"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/233dcaf0-1f4c-4706-84a8-86d233191d04.gif" alt="Tattoo"></p> <p align="center">纹身/图案 <br/> (<i>"tattoo" 视频</i>) </p> </div> </td> <td width="25%"> <div> <p align="center"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/3214b687-e23d-498e-92ad-6f1b36f7efe0.gif" alt="Ice Cream"></p> <p align="center">快速运动 <br/> (<i>"ice_cream" 视频</i>)</p> </div> </td> <td width="25%"> <div> <p align="center"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/d542f0cf-f31d-4d9c-af8c-86af42cb7dc7.gif" alt="Vlog"> </p> <p align="center">多物体部位 <br/> (<i>"vlog" 视频</i>) </p> </div> </td> </tr> </table>

**部分和非常规遮罩视频对象分割(PUMaVOS)**数据集具有以下特点:

  • 24个视频,21187帧密集标注;
  • 涵盖复杂的实际应用场景,如物体部位、频繁遮挡、快速运动、可变形物体等;
  • 视频平均长度为883帧29秒,较长的可达1分钟
  • 以30FPS的帧率进行全密集标注;
  • 面向基准测试:没有分为训练/测试集,旨在尽可能多样化以测试您的模型;
  • 100%开放且可免费下载。

下载

单独的序列和遮罩可在此处获取:[Google Drive] [备用Google Drive]

PUMaVOS .zip 下载链接:[Google Drive] [备用Google Drive]

许可证

PUMaVOS 根据 CC BY 4.0 许可证 发布 - 您可以将其用于任何目的(包括商业用途),只需在使用时注明作者(我们),并指出您是否做了任何修改。完整的许可证文本请参见 LICENSE_PUMaVOS

引用

如果您在工作中使用了此代码或PUMaVOS数据集,请引用我们:

@misc{bekuzarov2023xmem,
      标题:{XMem++:基于少量标注帧的生产级视频分割}, 
      作者:{Maksym Bekuzarov 和 Ariana Bermudez 和 Joon-Young Lee 和 Hao Li},
      年份:{2023},
      电子预印本:{2307.15958},
      预印本存档:{arXiv},
      主要类别:{cs.CV}
}

联系方式:maksym.bekuzarov@gmail.com, bermudezarii@gmail.com, jolee@adobe.com, hao@hao-li.com

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多