InternLM / lmdeploy

LMDeploy is a toolkit for compressing, deploying, and serving LLMs.
https://lmdeploy.readthedocs.io/en/latest/
Apache License 2.0
4.3k stars 386 forks source link

[Bug] 单轮的图文交错对话的实现原理 #1862

Closed stay-leave closed 1 week ago

stay-leave commented 3 months ago

Checklist

Describe the bug

请教下大佬,在单轮的图文交错实现中。后续对话能识别出前面图片,是因为像语言模型一样把文本形式的历史记录扔给大模型,还是历史的图像特征还保存着,每次都加入到会话?

Reproduction

from lmdeploy import pipeline, TurbomindEngineConfig, GenerationConfig
from lmdeploy.vl import load_image

pipe = pipeline('/root/lhd/models/InternVL-Chat-V1-5',
                backend_config=TurbomindEngineConfig(session_len=8192))

image = load_image('https://raw.githubusercontent.com/open-mmlab/mmdeploy/main/demo/resources/human-pose.jpg')
gen_config = GenerationConfig(top_k=40, top_p=0.8, temperature=0.6)

print("第一张图片:")
sess = pipe.chat(('请你介绍下这张图片', image), gen_config=gen_config)
print(sess.response.text)
print()

sess = pipe.chat('这个女人在做什么?', session=sess, gen_config=gen_config)
print(sess.response.text)
print()

print("第二张图片:")
image_1 = load_image('https://i0.wp.com/wx4.sinaimg.cn/mw2000/006tMkIxgy1hqvuzwc4bsj30u00u0wko.jpg')
sess = pipe.chat(("描述下这个图片", image_1), session=sess, gen_config=gen_config)
print(sess.response.text)
print()

print("两个图片的对比:")
sess = pipe.chat('这两张图片有什么不同', session=sess, gen_config=gen_config)
print(sess.response.text)
print()

print("第三张图片的描述:")
image_2 = load_image('https://i0.wp.com/wx3.sinaimg.cn/orj360/008yp4y7gy1hqfhh0d5eij30uq0r6tgo.jpg')
sess = pipe.chat(("描述下这个图片", image_2), session=sess, gen_config=gen_config)
print(sess.response.text)
print()

print("第三张图片的问题:")
sess = pipe.chat("这张图片中的女生穿什么衣服", session=sess, gen_config=gen_config)
print(sess.response.text)
print()

print("三个图片的对比:")
sess = pipe.chat('这三张图片中都有人吗?', session=sess, gen_config=gen_config)
print(sess.response.text)

print("三个图片的描述:")
sess = pipe.chat('请你依次描述这三张图片的大致内容', session=sess, gen_config=gen_config)
print(sess.response.text)

Environment

none

Error traceback

USER:
('请你介绍下这张图片', <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=218x346 at 0x7F6FF83C4E20>)
ASSISTANT:
这张图片展示了一位穿着滑雪装备的人正在滑雪。此人穿着一件红色的滑雪夹克,配有黑色和白色的装饰,下身穿着黑色的滑雪裤。她戴着一副墨镜,头戴一顶黑白相间的帽子,帽子上似乎有一些图案或标志。她正使用滑雪杖来帮助平衡和控制方向。从她的姿势来看,她似乎正在进行滑雪运动,可能是在一个滑雪坡道上。背景是雪地,看起来是在一个滑雪场。
USER:
这个女人在做什么?
ASSISTANT:
这个女人正在滑雪。她穿着滑雪装备,包括滑雪夹克、滑雪裤、墨镜和帽子,并且正在使用滑雪杖来帮助平衡和控制方向。从她的姿势来看,她似乎正在进行滑雪运动,可能是在一个滑雪坡道上。
USER:
('描述下这个图片', <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1080x1080 at 0x7F6FF83C4520>)
ASSISTANT:
这张图片展示了一顿丰盛的餐点,摆放在一张黑色的桌面上。在图片的中心,有一个装满各种食物的白色盘子。盘子上有一根完整的黄色玉米棒,一些绿色的蔬菜(可能是豆角),一些白色的花椰菜,以及一些看起来像是猪肉的块状食物。

在盘子的旁边,有一个装满水果的红色碗,里面装着几个苹果和蓝莓。苹果是红黄相间的,而蓝莓则呈现出深蓝色。

在图片的右上角,有一个透明的玻璃杯,里面装着一种深色的液体,可能是茶或咖啡。

整个场景给人一种健康、多彩且均衡的感觉,食物被精心摆放,颜色搭配鲜明,看起来非常诱人。
USER:
这两张图片有什么不同
ASSISTANT:
这两张图片展示的是不同的场景和内容。第一张图片是一位穿着滑雪装备的人正在滑雪,背景是雪地,看起来是在一个滑雪场。第二张图片是一顿丰盛的餐点,摆放在一张黑色的桌面上,包括一个装满各种食物的白色盘子,一个装满水果的红色碗,以及一个装着深色液体的透明玻璃杯。这两张图片在主题、背景和内容上都有很大的不同。
USER:
('描述下这个图片', <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=305x270 at 0x7F6FE83B6110>)
ASSISTANT:
这张图片展示了一位女士站在一个石阶上,她穿着一件明亮的黄色夹克和黑色裤子,戴着墨镜和帽子。她手持一根登山杖,看起来正在进行徒步旅行或登山活动。背景中可以看到树木和山丘,表明她可能在一个山区或自然公园内。天空晴朗,阳光明媚,整个场景给人一种宁静和自然的感觉。
USER:
这张图片中的女生穿什么衣服
ASSISTANT:
这张图片中的女士穿着一件明亮的黄色夹克和黑色裤子。她还戴着墨镜和帽子,手持一根登山杖。
USER:
请你依次描述这三张图片的大致内容
ASSISTANT:
第一张图片:一位穿着滑雪装备的人正在滑雪,背景是雪地,看起来是在一个滑雪场。

第二张图片:一顿丰盛的餐点,摆放在一张黑色的桌面上。包括一个装满各种食物的白色盘子,一个装满水果的红色碗,以及一个装着深色液体的透明玻璃杯。

第三张图片:一位女士站在一个石阶上,她穿着一件明亮的黄色夹克和黑色裤子,戴着墨镜和帽子。她手持一根登山杖,看起来正在进行徒步旅行或登山活动。背景中可以看到树木和山丘,表明她可能在一个山区或自然公园内。天空晴朗,阳光明媚,整个场景给人一种宁静和自然的感觉。
USER:
这三张图片中都有人吗?
ASSISTANT:
是的,这三张图片中都有人。第一张图片是一位穿着滑雪装备的人正在滑雪;第二张图片虽然没有人直接出现在画面中,但盘子上摆放的食物和饮料通常是由人准备的;第三张图片是一位女士站在一个石阶上,手持登山杖。
irexyc commented 3 months ago

图像特征也会作为历史传给模型的。

模型的输入依次为: Q1 -> Q1A1Q2 -> Q1A1Q2A2Q3 -> ...

Q 当中既有文本,也有图片的特征。

lvhan028 commented 1 week ago

Closing it since no more activities over months. Don't hesitate to reopen it if it is still an issue