语言:
- 英文
基础模型:
- lmsys/vicuna-7b-v1.5
- openai/clip-vit-large-patch14
- laion/CLIP-convnext_large_d.laion2B-s26B-b102K-augreg
任务标签: 图像文本到文本
标签:
- chatrex
- upn
arxiv.org/abs/2411.18363
1. 简介 📚
一句话总结:ChatRex是一款擅长感知的多模态大语言模型,能在回答问题的同时将答案关联到具体对象。
ChatRex是一款多模态大语言模型(MLLM),旨在无缝整合细粒度物体感知与强大的语言理解能力。通过采用解耦架构结合基于检索的目标检测方法,并利用高分辨率视觉输入,ChatRex解决了感知任务中的关键挑战。该模型由包含多样化图像-区域-文本标注的Rexverse-2M数据集驱动,可应用于需要细粒度感知的各种场景,如目标检测、基于实体的对话、基于实体的图像描述和区域理解等。
2. 安装指南 🛠️
conda install -n chatrex python=3.9
pip install torch==2.1.2 torchvision==0.16.2 --index-url https://download.pytorch.org/whl/cu121
git clone https://github.com/IDEA-Research/ChatRex.git
cd ChatRex
pip install -v -e .
cd chatrex/upn/ops
pip install -v -e .
2.1 下载预训练模型
我们提供通用建议网络(UPN)和ChatRex模型的检查点文件,可通过以下链接下载:
或使用以下命令下载:
mkdir checkpoints
mkdir checkpoints/upn
wget -O checkpoints/upn/upn_large.pth https://github.com/IDEA-Research/ChatRex/releases/download/upn-large/upn_large.pth
2.2 验证安装
验证***通用建议网络(UPN)***安装:
python tests/test_upn_install.py
成功安装后将在tests
文件夹生成细粒度和粗粒度建议的可视化图像。
验证ChatRex模型安装:
python tests/test_chatrex_install.py
成功安装后将输出类似结果:
预测结果: <obj0>显示一只棕色狗狗躺在床上。狗狗舒适地休息着,可能在睡觉,位于床的左侧
3. 使用指南 🚀
3.1 使用UPN生成目标建议
通用建议网络(UPN)是ChatRex的组成部分,作为鲁棒的目标建议模型,能够在不同粒度和领域实现全面准确的目标检测。基于T-Rex2构建,UPN采用具有双粒度提示调优策略的DETR架构,结合细粒度(如部件级)和粗粒度(如实例级)检测能力。
UPN示例代码
import torch
from PIL import Image
from tools.visualize import plot_boxes_to_image
from chatrex.upn import UPNWrapper
ckpt_path = "checkpoints/upn_checkpoints/upn_large.pth"
test_image_path = "tests/images/test_upn.jpeg"
model = UPNWrapper(ckpt_path)
fine_grained_proposals = model.inference(
test_image_path, prompt_type="fine_grained_prompt"
)
fine_grained_filtered_proposals = model.filter(
fine_grained_proposals, min_score=0.3, nms_value=0.8
)
coarse_grained_proposals = model.inference(
test_image_path, prompt_type="coarse_grained_prompt"
)
coarse_grained_filtered_proposals = model.filter(
coarse_grained_proposals, min_score=0.3, nms_value=0.8
)
我们还提供可视化工具展示UPN生成的目标建议:
UPN可视化示例代码
from chatrex.tools.visualize import plot_boxes_to_image
image = Image.open(test_image_path)
fine_grained_vis_image, _ = plot_boxes_to_image(
image.copy(),
fine_grained_filtered_proposals["original_xyxy_boxes"][0],
fine_grained_filtered_proposals["scores"][0],
)
fine_grained_vis_image.save("tests/test_image_fine_grained.jpeg")
coarse_grained_vis_image, _ = plot_boxes_to_image(
image.copy(),
coarse_grained_filtered_proposals["original_xyxy_boxes"][0],
coarse_grained_filtered_proposals["scores"][0],
)
coarse_grained_vis_image.save("tests/test_image_coarse_grained.jpeg")
3.2 ChatRex使用说明
ChatRex接收三个输入:图像、文本提示和边界框输入。边界框可使用UPN生成或用户自定义。我们已将ChatRex模型封装为huggingface transformers格式以便使用。以下是各任务的示例代码:
3.2.1 目标检测与实体关联
检测任务示例提示:
# 单目标检测
请检测图像中的狗。用对象索引回答问题。
请检测穿黄色衬衫的男子。用对象索引回答问题。
# 多目标检测(用分号分隔)
请检测图像中的人;鸽子。用对象索引回答问题。
请检测车里的人;桌子下的猫。用对象索引回答问题。
示例代码
LLM输出示例:
<ground>人</ground><objects><obj10><obj14>...</objects>
<ground>鸽子</ground><objects><obj0><obj1>...</objects>
可视化效果:
3.2.2 区域描述生成
区域描述任务示例提示:
# 获取类别名称
<obji>的类别名称是什么?用自由格式回答类别名称。
# 获取简短描述
能提供<obji>的简短描述吗?用短语回答。
# 获取指代式描述
能简要描述<obji>吗?用简要说明回答。
# 获取单句描述
能用一句话描述<obji>吗?用单句说明回答。
示例代码
LLM输出示例:
<ground>一只棕色的狗躺在床上,显得放松舒适</ground><objects><obj0></objects>
可视化效果:
3.2.3 基于实体的图像描述
图像描述任务示例提示:
# 简短实体图像描述
请用一句话简要描述本图像并检测所有提及对象。用实体索引回答。
# 详细实体图像描述
请详细描述图像并检测所有提及对象。用实体索引回答。
示例代码
LLM输出示例:
图像展示了一个舒适客厅,内有<ground>格子沙发</ground><objects><obj2></objects>、<ground>木质电视柜</ground><objects><obj3></objects>...
可视化效果:
3.2.4 基于实体的对话
对话任务示例提示:
用实体格式回答问题。问题内容
示例代码
LLM输出示例:
根据图像物品推断,<ground>主人</ground><objects><obj1></objects>可能喜欢健身和阅读。<ground>哑铃</ground><objects><obj2></objects>表明其注重锻炼...
可视化效果:
5. 许可证声明
ChatRex采用IDEA License 1.0授权,版权所有(c) IDEA。注意本项目使用的部分数据集和检查点受其原始许可证约束,用户须遵守包括但不限于以下条款:
引用文献 📚
@misc{jiang2024chatrextamingmultimodalllm,
title={ChatRex: 驯服多模态LLM实现联合感知与理解},
author={Qing Jiang and Gen Luo and Yuqin Yang and Yuda Xiong and Yihao Chen and Zhaoyang Zeng and Tianhe Ren and Lei Zhang},
year={2024},
eprint={2411.18363},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2411.18363},
}