OmAgent
🗓️ 更新
- 2024年7月4日:OmAgent开源项目正式发布。🎉
- 2024年6月24日:OmAgent研究论文已发表。
📖 介绍
OmAgent是一个复杂的多模态智能代理系统,致力于利用多模态大语言模型和其他多模态算法来完成有趣的任务。OmAgent项目包含了一个轻量级的智能代理框架omagent_core,专门设计用于解决多模态挑战。利用这个框架,我们构建了一个复杂的长视频理解系统——OmAgent。当然,你也可以自由地使用它来实现任何创新想法。
OmAgent包括三个核心组件:
- Video2RAG:这个组件的理念是将长视频的理解转化为多模态RAG任务。这种方法的优势在于它突破了视频长度的限制;然而,缺点是这种预处理可能会导致大量视频细节的丢失。
- DnCLoop:受经典的分治算法范式启发,我们设计了一个递归的通用任务处理逻辑。这种方法通过迭代将复杂问题细化为任务树,最终将复杂任务转化为一系列可解决的简单任务。
- Rewinder工具:为了解决Video2RAG过程中信息丢失的问题,我们设计了一个名为Rewinder的"进度条"工具,代理可以自主使用。这使得代理能够重新查看任何视频细节,从而获取必要的信息。
更多详情,请查看我们的论文**OmAgent: 一个用于复杂视频理解的多模态代理框架,采用任务分治方法**
🛠️ 如何安装
- python >= 3.10
- 安装omagent_core
cd omagent-core pip install -e .
- 其他依赖
cd .. pip install -r requirements.txt
🚀 快速开始
通用任务处理
-
创建配置文件并设置一些必要的变量
cd workflows/general && vim config.yaml
配置名称 用途 custom_openai_endpoint 调用OpenAI GPT或其他MLLM的API地址,格式: {custom_openai_endpoint}/chat/completions
custom_openai_key MLLM提供商提供的api_key bing_api_key Bing的api key,用于网络搜索 -
设置
run.py
def run_agent(task): logging.init_logger("omagent", "omagent", level="INFO") registry.import_module(project_root=Path(__file__).parent, custom=["./engine"]) bot_builder = Builder.from_file("workflows/general") # 通用任务处理工作流配置目录 input = DnCInterface(bot_id="1", task=AgentTask(id=0, task=task)) bot_builder.run_bot(input) return input.last_output if __name__ == "__main__": run_agent("你的查询") # 输入你的查询
-
通过运行
python run.py
启动OmAgent。
视频理解任务
环境准备
-
使用docker部署milvus向量数据库。该向量数据库用于存储视频特征向量,并根据查询检索相关向量以减少MLLM计算。尚未安装docker?请参考docker安装指南。
# 下载milvus启动脚本 curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh # 以单机模式启动milvus bash standalone_embed.sh start
-
可选
配置人脸识别算法。人脸识别算法可以作为工具被代理调用,但这是可选的。你可以通过修改workflows/video_understanding/tools/video_tools.json
配置文件并移除FaceRecognition部分来禁用此功能。默认的人脸识别数据库存储在data/face_db
目录中,不同的文件夹对应不同的个人。 -
可选
开放词汇检测(ovd)服务,用于增强OmAgent识别各种物体的能力。ovd工具依赖于此服务,但它是可选的。你可以通过以下步骤禁用ovd工具。从workflows/video_understanding/tools/video_tools.json
中移除以下内容:{ "name": "ObjectDetection", "ovd_endpoint": "$<ovd_endpoint::http://host_ip:8000/inf_predict>", "model_id": "$<ovd_model_id::OmDet-Turbo_tiny_SWIN_T>" }
如果使用ovd工具,我们以OmDet为例进行演示。
- 按照OmDet安装指南安装OmDet及其环境。
- 安装将OmDet推理转换为API调用的依赖项
pip install pydantic fastapi uvicorn
- 创建
wsgi.py
文件以将OmDet推理暴露为API
将OmDet推理API代码复制到wsgi.pycd OmDet && vim wsgi.py
- 启动OmDet推理API,默认端口为8000
python wsgi.py
-
下载一些有趣的视频
运行准备
-
创建配置文件并设置一些必要的环境变量
cd workflows/video_understanding && vim config.yaml
-
配置MLLM和工具的API地址和API密钥。
配置名称 用途 custom_openai_endpoint 调用OpenAI GPT或其他MLLM的API地址,格式: {custom_openai_endpoint}/chat/completions
custom_openai_key 相应API提供商提供的api_key bing_api_key Bing的api密钥,用于网络搜索 ovd_endpoint ovd工具API地址。如果使用OmDet,地址应为 http://host:8000/inf_predict
ovd_model_id ovd工具使用的模型ID。如果使用OmDet,模型ID应为 OmDet-Turbo_tiny_SWIN_T
-
设置
run.py
def run_agent(task): logging.init_logger("omagent", "omagent", level="INFO") registry.import_module(project_root=Path(__file__).parent, custom=["./engine"]) bot_builder = Builder.from_file("workflows/video_understanding") # 视频理解任务工作流配置目录 input = DnCInterface(bot_id="1", task=AgentTask(id=0, task=task)) bot_builder.run_bot(input) return input.last_output if __name__ == "__main__": run_agent("") # 你将在控制台中被提示输入查询
-
通过运行
python run.py
启动OmAgent。输入你想处理的视频路径,稍等片刻,然后输入你的查询,OmAgent将根据查询进行回答。
🔗 相关工作
如果你对多模态算法、大型语言模型和代理技术感兴趣,我们邀请你深入了解我们的研究工作:
🔆 如何评估检测的泛化性?一个用于全面开放词汇检测的基准(AAAI24)
🏠 Github仓库
🔆 OmDet:具有多模态检测网络的大规模视觉-语言多数据集预训练(IET计算机视觉)
🏠 Github仓库
⭐️ 引用
如果你觉得我们的仓库有用,请引用我们的论文:
@article{zhang2024omagent,
title={OmAgent: A Multi-modal Agent Framework for Complex Video Understanding with Task Divide-and-Conquer},
author={Zhang, Lu and Zhao, Tiancheng and Ying, Heting and Ma, Yibo and Lee, Kyusong},
journal={arXiv preprint arXiv:2406.16620},
year={2024}
}