当前位置: 首页 > web >正文

Qwen2.5 VL 自定义模型的回复数量

Qwen2.5 VL 自定义模型的回复数量

flyfish

from transformers import AutoProcessor
from vllm import LLM, SamplingParams
from qwen_vl_utils import process_vision_info
import os
import jsonMODEL_PATH = "/media/models/Qwen/Qwen2.5-VL-3B-Instruct"
image_path = "1.jpg"# 初始化模型
llm = LLM(model=MODEL_PATH,limit_mm_per_prompt={"image": 10, "video": 10},
)# 配置采样参数
num_descriptions = 5  # 期望生成的描述数量
sampling_params = SamplingParams(temperature=0.7,top_p=0.9,n=1,  #repetition_penalty=1.05,max_tokens=2048  # 增加最大token数,以容纳可能的JSON结构)# 构建多模态输入
if not os.path.exists(image_path):raise FileNotFoundError(f"图像文件不存在: {image_path}")# 定义提示文本,要求模型生成JSON格式
prompt = f"""详细描述这张图片里的内容,包括场景、物体和可能的活动。
请生成{num_descriptions}种不同的描述,并组织成JSON格式:
[{', '.join('{"描述": "图片内容描述..."}' for _ in range(num_descriptions))}
]"""# 构建消息
messages = [{"role": "system", "content": "You are a helpful and accurate multimodal assistant. 请严格按照用户要求的JSON格式返回结果。"},{"role": "user","content": [{"type": "image","image": image_path,"min_pixels": 224 * 224,"max_pixels": 1280 * 1280,},{"type": "text", "text": prompt}],},
]# 处理多模态输入
prompt = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
image_inputs, video_inputs = process_vision_info(messages)# 准备模型输入
mm_data = {}
if image_inputs is not None:mm_data["image"] = image_inputs
if video_inputs is not None:mm_data["video"] = video_inputsllm_inputs = {"prompt": prompt,"multi_modal_data": mm_data,
}# 生成回复
outputs = llm.generate([llm_inputs], sampling_params=sampling_params)raw_output = outputs[0].outputs[0].text.strip()
print(f"原始输出: {raw_output}")
# 尝试从输出中提取JSON部分
try:# 简单的JSON提取逻辑,寻找第一个'['和最后一个']'start_idx = raw_output.find('[')end_idx = raw_output.rfind(']') + 1if start_idx >= 0 and end_idx > start_idx:json_str = raw_output[start_idx:end_idx]descriptions = json.loads(json_str)# 验证JSON格式是否符合预期if all("描述" in item for item in descriptions):print("成功解析JSON格式的描述:")print(json.dumps(descriptions, ensure_ascii=False, indent=2))else:print("JSON格式不符合预期,缺少'描述'字段")else:print("未能从输出中提取有效的JSON格式")except json.JSONDecodeError as e:print(f"JSON解析错误: {e}")
原始输出: ```json
[{"描述": "这幅画描绘了一个古代文人与兔子互动的场景。画面左侧有一只兔子站在树旁,眼睛直视前方,显得非常警觉。文人穿着传统的古代服饰,手持一把扫帚,似乎在观察或准备捕捉兔子。背景是淡雅的山水画风格,营造出宁静而古朴的氛围。"},{"描述": "这幅画展示了一位身穿传统服饰的文人在户外与一只兔子互动的场景。文人手持扫帚,姿态专注,似乎在进行某种观察或准备行动。画面左侧是一棵树,树下有几根树枝,整体色调柔和,给人一种宁静的感觉。"},{"描述": "这幅画中,一位古代文人正站在户外,手持一把扫帚,目光注视着画面右侧的一只兔子。兔子站在树旁,看起来很警觉。背景采用了淡雅的山水画风格,充满了古典气息。"},{"描述": "这幅画呈现了一位古代文人在户外与一只兔子互动的情景。文人穿着传统服饰,手持扫帚,似乎在准备捕捉或观察兔子。背景采用淡雅的山水画手法,营造出一种宁静而古朴的氛围。"},{"描述": "这幅画中,一位古代文人正在与一只兔子互动。文人手持扫帚,表情专注,似乎在观察兔子。背景采用了淡雅的山水画风格,营造出宁静的氛围。画面左侧有一棵树,树下有几根树枝,增添了自然的美感。"}
]
```

成功解析JSON格式的描述:

[{"描述": "这幅画描绘了一个古代文人与兔子互动的场景。画面左侧有一只兔子站在树旁,眼睛直视前方,显得非常警觉。文人穿着传统的古代服饰,手持一把扫帚,似乎在观察或准备捕捉兔子。背景是淡雅的山水画风格,营造出宁静而古朴的氛围。"},{"描述": "这幅画展示了一位身穿传统服饰的文人在户外与一只兔子互动的场景。文人手持扫帚,姿态专注,似乎在进行某种观察或准备行动。画面左侧是一棵树,树下有几根树枝,整体色调柔和,给人一种宁静的感觉。"},{"描述": "这幅画中,一位古代文人正站在户外,手持一把扫帚,目光注视着画面右侧的一只兔子。兔子站在树旁,看起来很警觉。背景采用了淡雅的山水画风格,充满了古典气息。"},{"描述": "这幅画呈现了一位古代文人在户外与一只兔子互动的情景。文人穿着传统服饰,手持扫帚,似乎在准备捕捉或观察兔子。背景采用淡雅的山水画手法,营造出一种宁静而古朴的氛围。"},{"描述": "这幅画中,一位古代文人正在与一只兔子互动。文人手持扫帚,表情专注,似乎在观察兔子。背景采用了淡雅的山水画风格,营造出宁静的氛围。画面左侧有一棵树,树下有几根树枝,增添了自然的美感。"}
]
http://www.xdnf.cn/news/8810.html

相关文章:

  • 基于文本挖掘与情感分析的B站《唐探1900》弹幕研究
  • Qt for Android 安卓低功耗蓝牙(BLE)开发环境搭建
  • 打卡day36
  • HUAWEI交换机配置镜像口验证(eNSP)
  • --legacy-peer-deps 是什么意思
  • 【不背八股】1.if __name__ == “__main__“ 有什么作用?
  • 【redis】redis和hiredis的基本使用
  • RabbitMQ 可靠性保障:消息确认与持久化机制(一)
  • day01
  • 算法打卡第六天
  • C++23 对部分特性的 constexpr 支持
  • 历年华南理工大学保研上机真题
  • 阿里千问系列:Qwen3技术报告解读(下)
  • 美团2025年校招笔试真题手撕教程(二)
  • 第一章 半导体基础知识
  • 腾讯云国际站可靠性测试
  • 13软件测试用例设计方法-场景法
  • UnLua源码分析(二)IUnLuaInterface
  • 并发编程(6)
  • Lua5.4.2常用API整理记录
  • 基于Python的分布式网络爬虫系统设计与实现
  • DAY33 简单神经网络
  • MongoDB 错误处理与调试完全指南:从入门到精通
  • 字符集和字符编码
  • 使用Arduino UNO复活电脑的风扇
  • CI/CD (持续集成/持续部署) GitHub Actions 自动构建
  • 【Linux】进程问题--僵尸进程
  • Github Actions工作流入门
  • 详解3DGS
  • MySQL---库操作