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

qwen2.5-vl:阿里开源超强多模态大模型(包含使用方法、微调方法介绍)

1.简介

在 Qwen2-VL 发布后的五个月里,众多开发者基于该视觉语言模型开发了新的模型,并向 Qwen 团队提供了极具价值的反馈。在此期间,Qwen 团队始终致力于打造更具实用性的视觉语言模型。今天,Qwen 家族的最新成员——Qwen2.5-VL正式登场。

主要增强功能

  • 直观地理解事物: Qwen2.5-VL 不仅能熟练识别花、鸟、鱼和昆虫等常见物体,还能高度分析文本、图表、图标、图形和图像中的布局。
  • 具有代理功能: Qwen2.5-VL 可直接扮演视觉代理,能够推理和动态指挥工具,既能在电脑上使用,也能在手机上使用。
  • 理解长视频并捕捉事件: Qwen2.5-VL可以理解1小时以上的视频,这次又增加了通过精确定位相关视频片段来捕捉事件的能力。
  • 不同格式的可视化定位能力: Qwen2.5-VL 可通过生成边框或点来精确定位图像中的对象,并能为坐标和属性提供稳定的 JSON 输出。
  • 生成结构化输出:用于扫描发票、表格、表格等数据。Qwen2.5-VL 支持对其内容进行结构化输出,有利于金融、商业等领域的使用。

相较上一代模型架构更新

  • 动态分辨率和帧速率训练,促进视频理解:通过采用动态 FPS 采样,qwen团队将动态分辨率扩展到了时间维度,使模型能够理解各种采样率的视频。相应地,qwen团队在时间维度上对 mRoPE 进行了更新,增加了 ID 和绝对时间对齐,使模型能够学习时间顺序和速度,最终获得精确定位特定时刻的能力。
  • 精简高效的视觉编码器:qwen团队通过在 ViT 中战略性地实施窗口关注,提高了训练和推理速度。通过 SwiGLU 和 RMSNorm 进一步优化了 ViT 架构,使其与 Qwen2.5 LLM 的结构保持一致。

Qwen2.5-vl有三个模型,参数分别为 30、70 和 720 亿。此版本包含经过指令调整的 7B Qwen2.5-VL 模型。

-

模型权重地址(魔搭社区):魔搭社区

模型权重地址(huggingface):https://huggingface.co/collections/Qwen/qwen25-vl-6795ffac22b334a837c0f9a5

官方博客:Qwen2.5 VL! Qwen2.5 VL! Qwen2.5 VL! | Qwen

github地址:https://github.com/QwenLM/Qwen2.5-VL

体验地址:Qwen Chat

    -

    -

    2.效果

    Qwen团队将Qwen2.5-vl模型与 SOTA 模型以及类似模型规模的最佳模型进行了评估。就旗舰模型 Qwen2.5-VL-72B-Instruct 而言,它在一系列涵盖领域和任务的基准测试中取得了极具竞争力的性能,其中包括大学难题、数学、文档理解、一般问题解答、数学、视频理解和视觉代理。值得注意的是,Qwen2.5-VL 在理解文档和图表方面具有显著优势,而且无需针对特定任务进行微调,就能扮演视觉代理的角色。

    在小型模型方面,Qwen2.5-VL-7B-Instruct 在多项任务中的表现优于 GPT-4o-mini,而作为边缘人工智能解决方案的 Qwen2.5-VL-3B 甚至优于之前版本 Qwen2-VL 的 7B 模型。

    全球图像识别

    Qwen2.5-VL大幅增强了通用图像识别能力,将图像类别扩展到超多。不仅包括植物、动物、名山大川的地标,还包括电影和电视剧中的 IP 以及各种产品。

    精确的目标定位

    Qwen2.5-VL 利用边界框和基于点的表示法进行定位,从而实现分层定位和标准化 JSON 输出。这种增强的定位能力为可视化推理奠定了基础。

    -

    增强文本识别和理解能力

    Qwen2.5-VL将OCR识别能力提升到了一个新的水平,增强了多场景、多语言、多方向的文本识别和文本本地化性能。此外,Qwen2.5-VL 在信息提取方面也有大幅提升,以满足资质审查和金融业务等领域日益增长的数字化和智能化需求。

    -

    -

    强大的文档解析功能

    Qwen2.5-VL 设计了一种名为 QwenVL HTML 格式的独特文档解析格式,可提取基于 HTML 的布局信息。QwenVL HTML 可以在各种场景下执行文档解析,如杂志、研究论文、网页甚至手机截图。

    -

    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>淘宝许愿淘彩头分25亿</title><style>body {background-color: #4a0d6e;margin: 0;padding: 0;font-family: Arial, sans-serif;color: white;text-align: center;}.header {display: flex;justify-content: space-between;align-items: center;padding: 10px;}.header h1 {margin: 0;color: gold;}.content {padding: 20px;}.wish-options {display: flex;justify-content: center;gap: 10px;margin-top: 20px;}.wish-option {width: 100px;height: 200px;border-radius: 10px;padding: 10px;box-sizing: border-box;cursor: pointer;}.selected {background-color: gold;}.unselected {background-color: purple;}.footer {margin-top: 20px;}.button {background-color: gold;border: none;padding: 10px 20px;border-radius: 5px;cursor: pointer;}</style>
    </head>
    <body><div class="header"><div><img src="back_arrow.png" alt="Back"></div><h1>淘宝·许愿淘彩头分25亿</h1><div><img src="more_options.png" alt="More Options"></div></div><div class="content"><p>许下新年心愿得红包</p><img src="golden_lantern.png" alt="Golden Lantern"><div class="wish-options"><div class="wish-option selected">福寿康宁</div><div class="wish-option unselected">我想免费周游世界</div><div class="wish-option unselected">追随自己的热情</div></div><div class="footer"><button class="button">换一批 | 定制心愿</button><p>许下你的定制心愿,更灵验哦</p><button class="button">许愿拿红包 🎉</button></div></div>
    </body>
    </html>
    

    增强视频理解能力

    Qwen2.5-VL 的视频理解能力得到了全面升级。在时间处理方面,Qwen团队引入了动态帧频(FPS)训练和绝对时间编码技术。因此,该模型不仅能支持以小时为单位的超长视频理解,还能实现二级事件定位。它能够准确理解长达数小时的超长视频内容,搜索视频中的特定事件,并总结不同时间段的关键点。这样,用户就能快速高效地提取视频中的关键信息。

    -

    -

    -

    3.使用方法

    环境安装

    Qwen2.5-VL 的代码已收录在最新的transformers中,建议使用命令从源代码构建:

    pip install git+https://github.com/huggingface/transformers accelerate

    否则可能遇到以下错误

    KeyError: 'qwen2_5_vl'

    Qwen团队提供了一个工具包,帮助我们更方便地处理各种类型的可视输入,就像使用 API 一样。其中包括 base64、URL 以及交错图片和视频。可以使用以下命令安装它:

    # It's highly recommanded to use `[decord]` feature for faster video loading.
    pip install qwen-vl-utils[decord]==0.0.8

    如果您使用的不是 Linux,您可能无法从 PyPI 安装 decord。在这种情况下,您可以使用 pip install qwen-vl-utils,这会退回到使用 torchvision 进行视频处理。不过,您仍然可以从源代码中安装 decord,以便在加载视频时使用 decord。

    -

    使用transformers进行推理

    单图推理

    from transformers import Qwen2_5_VLForConditionalGeneration, AutoTokenizer, AutoProcessor
    from qwen_vl_utils import process_vision_info
    from modelscope import snapshot_downloadmodel_dir=snapshot_download("Qwen/Qwen2.5-VL-7B-Instruct")    # 从modelscope中下载Qwen2.5-VL模型的权重文件,并将其保存到本地目录model_dir中。# 默认方法
    model = Qwen2_5_VLForConditionalGeneration.from_pretrained(    # 加载模型。model_dir, torch_dtype="auto", device_map="auto"        # torch_dtype="auto"表示自动选择合适的张量数据类型,device_map="auto"表示自动将模型分配到可用的设备(如GPU)上。
    )# 以下注释部分提供了另一种加载方式,启用了flash_attention_2,这是一种优化技术,可以提高模型在多图像和视频场景下的加速和内存节省。
    # model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
    #     "Qwen/Qwen2.5-VL-7B-Instruct",
    #     torch_dtype=torch.bfloat16,
    #     attn_implementation="flash_attention_2",
    #     device_map="auto",
    # )# 使用AutoProcessor加载处理器,它将用于处理文本和视觉输入数据。
    processor = AutoProcessor.from_pretrained(model_dir)# 模型中每幅图像的视觉token数默认范围为 4-16384。
    # 用于设置模型处理图像时的像素范围。通过调整min_pixels和max_pixels,可以在性能和成本之间进行平衡。例如,设置为256-1280的像素范围。
    # min_pixels = 256*28*28
    # max_pixels = 1280*28*28
    # processor = AutoProcessor.from_pretrained("Qwen/Qwen2.5-VL-7B-Instruct", min_pixels=min_pixels, max_pixels=max_pixels)messages = [        # 一个messages列表,包含了用户输入的内容。其中包含一个图像的URL和一段文字提示“Describe this image.”。{"role": "user","content": [{"type": "image","image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg",},{"type": "text", "text": "Describe this image."},],}
    ]# Preparation for inference
    text = processor.apply_chat_template(        # 将messages中的文本内容转换为模型可以理解的格式,并添加生成提示。messages, tokenize=False, add_generation_prompt=True
    )
    image_inputs, video_inputs = process_vision_info(messages)        # 从messages中提取图像和视频信息。
    inputs = processor(        # 将文本、图像和视频输入组合成一个输入字典,并将其转换为PyTorch张量。text=[text],images=image_inputs,videos=video_inputs,padding=True,return_tensors="pt",
    )
    inputs = inputs.to("cuda")        # 将输入数据移动到GPU上(如果可用)。generated_ids = model.generate(**inputs, max_new_tokens=128)    # 调用模型生成输出。max_new_tokens=128表示生成的输出最多包含128个新token。
    generated_ids_trimmed = [        # 从生成的generated_ids中移除输入部分,只保留生成的输出部分。out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
    ]
    output_text = processor.batch_decode(    # 将生成的token ID解码为文本。generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
    )
    print(output_text)

    多图推理

    # Messages containing multiple images and a text query
    messages = [{"role": "user","content": [{"type": "image", "image": "file:///path/to/image1.jpg"},    # file:///协议指定本地路径{"type": "image", "image": "file:///path/to/image2.jpg"},{"type": "text", "text": "Identify the similarities between these images."},],}
    ]# Preparation for inference
    text = processor.apply_chat_template(    # 将messages中的文本内容转换为模型可以理解的格式,并添加生成提示。messages, tokenize=False, add_generation_prompt=True
    )
    image_inputs, video_inputs = process_vision_info(messages)    # 从messages中提取图像和视频信息。在这个例子中,video_inputs为空,因为输入中没有视频。
    inputs = processor(    # 将文本、图像和视频输入组合成一个输入字典,并将其转换为PyTorch张量。text=[text],images=image_inputs,videos=video_inputs,padding=True,return_tensors="pt",
    )
    inputs = inputs.to("cuda")    # 将输入数据移动到GPU上(如果可用)。# Inference
    generated_ids = model.generate(**inputs, max_new_tokens=128)    # 调用模型生成输出。max_new_tokens=128表示生成的输出最多包含128个新token。
    generated_ids_trimmed = [        # 从生成的generated_ids中移除输入部分,只保留生成的输出部分。out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
    ]
    output_text = processor.batch_decode(    # 将生成的token ID解码为文本。generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
    )
    print(output_text)

    视频推理

    对于视频文件,我们可以使用3种方法引入模型

    1. 视频由图像帧列表组成
    2. 本地视频文件路径
    3. 视频URL
    # 视频由图像帧列表组成
    messages = [{"role": "user","content": [{"type": "video","video": ["file:///path/to/frame1.jpg","file:///path/to/frame2.jpg","file:///path/to/frame3.jpg","file:///path/to/frame4.jpg",],},{"type": "text", "text": "Describe this video."},],}
    ]# 本地视频文件路径
    messages = [{"role": "user","content": [{"type": "video","video": "file:///path/to/video1.mp4","max_pixels": 360 * 420,"fps": 1.0,},{"type": "text", "text": "Describe this video."},],}
    ]# 视频URL
    messages = [{"role": "user","content": [{"type": "video","video": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-VL/space_woaudio.mp4",},{"type": "text", "text": "Describe this video."},],}
    ]#在 Qwen 2.5 VL 中,帧频信息也被输入到模型中,以便与绝对时间保持一致。
    # Preparation for inference
    text = processor.apply_chat_template(    ¥ 将messages中的文本内容转换为模型可以理解的格式,并添加生成提示。messages, tokenize=False, add_generation_prompt=True
    )
    image_inputs, video_inputs, video_kwargs = process_vision_info(messages, return_video_kwargs=True)    # process_vision_info:从messages中提取图像和视频信息。return_video_kwargs=True表示返回与视频处理相关的参数(如帧率fps)
    inputs = processor(    # processor:将文本、图像和视频输入组合成一个输入字典,并将其转换为PyTorch张量。fps参数用于指定视频的帧率。text=[text],images=image_inputs,videos=video_inputs,fps=fps,padding=True,return_tensors="pt",**video_kwargs,
    )
    inputs = inputs.to("cuda")    # inputs.to("cuda"):将输入数据移动到GPU上(如果可用)# Inference
    generated_ids = model.generate(**inputs, max_new_tokens=128)    # 调用模型生成输出。max_new_tokens=128表示生成的输出最多包含128个新token。
    generated_ids_trimmed = [    # 从生成的generated_ids中移除输入部分,只保留生成的输出部分。out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
    ]
    output_text = processor.batch_decode(    # 将生成的token ID解码为文本。generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
    )
    print(output_text)

    注意:视频 URL 兼容性主要取决于第三方库的版本。如果不想使用默认后端,可通过 FORCE_QWENVL_VIDEO_READER=torchvision 或 FORCE_QWENVL_VIDEO_READER=decord 更改后端。

    批量推理

    # 代码中定义了两组不同的输入消息,用于批量处理:
    messages1 = [{"role": "user","content": [{"type": "image", "image": "file:///path/to/image1.jpg"},{"type": "image", "image": "file:///path/to/image2.jpg"},{"type": "text", "text": "What are the common elements in these pictures?"},],}
    ]
    messages2 = [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Who are you?"},
    ]# 将两组消息合并为一个列表,用于批量处理。
    messages = [messages1, messages2]# Preparation for batch inference
    texts = [processor.apply_chat_template(msg, tokenize=False, add_generation_prompt=True)for msg in messages
    ]    # 对每组消息应用模板,将文本内容转换为模型可以理解的格式,并添加生成提示。
    image_inputs, video_inputs = process_vision_info(messages)    # 从所有消息中提取图像和视频信息。
    inputs = processor(    # 将文本、图像和视频输入组合成一个输入字典,并将其转换为PyTorch张量。text=texts,images=image_inputs,videos=video_inputs,padding=True,return_tensors="pt",
    )
    inputs = inputs.to("cuda")    # 将输入数据移动到GPU上(如果可用)。# Batch Inference
    generated_ids = model.generate(**inputs, max_new_tokens=128)    # 调用模型生成输出。max_new_tokens=128表示生成的输出最多包含128个新token。
    generated_ids_trimmed = [    # 从生成的generated_ids中移除输入部分,只保留生成的输出部分。out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
    ]
    output_texts = processor.batch_decode(    # 将生成的token ID解码为文本。generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
    )
    print(output_texts)

     

    图片调用方法

    Qwen2.5-vl支持的图片调用有三种,以下是他们的详细使用方法:

    1. 本地文件路径
    2. URL网页
    3. Base64编码图像
    # 你可以在文本中想要插入的位置直接插入本地文件路径、URL 或 base64 编码的图片。
    ## 本地文件路径
    messages = [{"role": "user","content": [{"type": "image", "image": "file:///path/to/your/image.jpg"},{"type": "text", "text": "Describe this image."},],}
    ]
    ## URL
    messages = [{"role": "user","content": [{"type": "image", "image": "http://path/to/your/image.jpg"},{"type": "text", "text": "Describe this image."},],}
    ]
    ## Base64 encoded image
    messages = [{"role": "user","content": [{"type": "image", "image": "data:image;base64,/9j/..."},{"type": "text", "text": "Describe this image."},],}
    ]

    图像分辨率
    该模型支持多种分辨率输入。默认情况下,它使用本机分辨率进行输入,但更高的分辨率会以更多计算量为代价提高性能。用户可以根据自己的需要设置最小和最大像素数,以达到最佳配置,例如令牌数范围为 256-1280,从而在速度和内存使用之间取得平衡。

    min_pixels = 256 * 28 * 28
    max_pixels = 1280 * 28 * 28
    processor = AutoProcessor.from_pretrained("Qwen/Qwen2.5-VL-7B-Instruct", min_pixels=min_pixels, max_pixels=max_pixels
    )

     

    此外,Qwen团队还提供了两种方法来精细控制输入模型的图像尺寸:

    • 定义 min_pixels 和 max_pixels: 图像将在 min_pixels 和 max_pixels 的范围内调整大小以保持长宽比。(注意,这个是保持长宽比进行缩放)
    • 指定精确尺寸: 直接设置 resized_height 和 resized_width。这些值将四舍五入为最接近的 28 的倍数。(注意,这个不会保持长宽比进行缩放)
    # min_pixels and max_pixels
    messages = [{"role": "user","content": [{"type": "image","image": "file:///path/to/your/image.jpg","resized_height": 280,"resized_width": 420,},{"type": "text", "text": "Describe this image."},],}
    ]
    # 调整高度和宽度
    messages = [{"role": "user","content": [{"type": "image","image": "file:///path/to/your/image.jpg","min_pixels": 50176,"max_pixels": 50176,},{"type": "text", "text": "Describe this image."},],}
    ]

    处理长文本

    当前的 config.json 设置为上下文长度不超过 32,768 个字节。为了处理超过 32,768 个字节的大范围输入,Qwen团队使用了 YaRN,这是一种增强模型长度外推的技术,可确保在处理长文本时获得最佳性能。

    对于支持的框架,可在 config.json 中添加以下内容以启用 YaRN:

    { ..., “type”: “yarn“, ”mrope_section": [ 16, 24, 24 ], “factor”: 4,“original_max_position_embeddings”: 32768 }

    不过需要注意的是,这种方法对时间和空间定位任务的性能有很大影响,因此不建议使用。

    同时,对于长视频输入,由于 MRoPE 本身更节省 id,因此可直接将 max_position_embeddings 修改为更大的值,如 64k。

     -

    使用魔搭社区API进行推理

    可在对应界面点开API-Inference,直接复制代码

    代码如下:记得将api_key替换掉

    from openai import OpenAIclient = OpenAI(base_url='https://api-inference.modelscope.cn/v1/',api_key="<Your Key>", # ModelScope Token
    )response = client.chat.completions.create(model='Qwen/Qwen2.5-VL-7B-Instruct', # ModelScope Model-Idmessages=[{'role':'user','content': [{'type': 'text','text': '描述这幅图',}, {'type': 'image_url','image_url': {'url':'https://modelscope.oss-cn-beijing.aliyuncs.com/demo/images/audrey_hepburn.jpg',},}],}],stream=True
    )for chunk in response:print(chunk.choices[0].delta.content, end='', flush=True)

     

    API-Inference文档:https://www.modelscope.cn/docs/model-service/API-Inference/intro

    -

    微调

    接下来介绍使用ms-swift对Qwen/Qwen2.5-VL-7B-Instruct进行微调。ms-swift是魔搭社区官方提供的大模型与多模态大模型微调部署框架。

    ms-swift开源地址:https://github.com/modelscope/ms-swift

    首先安装ms-swift的环境

    git clone https://github.com/modelscope/ms-swift.git
    cd ms-swift
    pip install -e .

    图像OCR微调

    安装完成后直接在命令行使用:

    MAX_PIXELS=1003520 \CUDA_VISIBLE_DEVICES=0 \swift sft \    --model Qwen/Qwen2.5-VL-7B-Instruct \    --dataset AI-ModelScope/LaTeX_OCR:human_handwrite#20000 \    --train_type lora \    --torch_dtype bfloat16 \    --num_train_epochs 1 \    --per_device_train_batch_size 1 \    --per_device_eval_batch_size 1 \    --learning_rate 1e-4 \    --lora_rank 8 \    --lora_alpha 32 \    --target_modules all-linear \    --freeze_vit true \    --gradient_accumulation_steps 16 \    --eval_steps 50 \    --save_steps 50 \    --save_total_limit 5 \    --logging_steps 5 \    --max_length 2048 \    --output_dir output \    --warmup_ratio 0.05 \    --dataloader_num_workers 4

    自定义数据集格式如下(system字段可选),只需要指定`--dataset <dataset_path>`即可:

    {"messages": [{"role": "user", "content": "浙江的省会在哪?"}, {"role": "assistant", "content": "浙江的省会在杭州。"}]}
    {"messages": [{"role": "user", "content": "<image><image>两张图片有什么区别"}, {"role": "assistant", "content": "前一张是小猫,后一张是小狗"}], "images": ["/xxx/x.jpg", "xxx/x.png"]}
    

    视频微调

    参数含义可以查看:https://swift.readthedocs.io/zhcn/latest/Instruction/%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0.html#id18nproc_per_node=2

    命令行使用:

    CUDA_VISIBLE_DEVICES=0,1 \NPROC_PER_NODE=$nproc_per_node \VIDEO_MAX_PIXELS=100352 \FPS_MAX_FRAMES=24 \swift sft \    --model Qwen/Qwen2.5-VL-7B-Instruct \    --dataset swift/VideoChatGPT:all \    --train_type lora \    --torch_dtype bfloat16 \    --num_train_epochs 1 \    --per_device_train_batch_size 1 \    --per_device_eval_batch_size 1 \    --learning_rate 1e-4 \    --lora_rank 8 \    --lora_alpha 32 \    --target_modules all-linear \    --freeze_vit true \    --gradient_accumulation_steps $(expr 16 / $nproc_per_node) \    --eval_steps 50 \    --save_steps 50 \    --save_total_limit 5 \    --logging_steps 5 \    --max_length 2048 \    --output_dir output \    --warmup_ratio 0.05 \    --dataloader_num_workers 4 \    --deepspeed zero2

    自定义数据集格式如下(system字段可选),只需要指定`--dataset <dataset_path>`即可:

    {"messages": [{"role": "system", "content": "你是个有用无害的助手"}, {"role": "user", "content": "<video>视频中是什么"}, {"role": "assistant", "content": "视频中是一只小狗在草地上奔跑"}], "videos": ["/xxx/x.mp4"]}

     grounding任务微调

    即目标检测等定位任务,命令行使用:

    CUDA_VISIBLE_DEVICES=0 \MAX_PIXELS=1003520 \swift sft \    --model Qwen/Qwen2.5-VL-7B-Instruct \    --dataset 'AI-ModelScope/coco#20000' \    --train_type lora \    --torch_dtype bfloat16 \    --num_train_epochs 1 \    --per_device_train_batch_size 1 \    --per_device_eval_batch_size 1 \    --learning_rate 1e-4 \    --lora_rank 8 \    --lora_alpha 32 \    --target_modules all-linear \    --freeze_vit true \    --gradient_accumulation_steps 16 \    --eval_steps 100 \    --save_steps 100 \    --save_total_limit 2 \    --logging_steps 5 \    --max_length 2048 \    --output_dir output \    --warmup_ratio 0.05 \    --dataloader_num_workers 4 \    --dataset_num_proc 4

    自定义数据集格式如下(system字段可选),只需要指定`--dataset <dataset_path>`即可:

    {"messages": [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "<image>描述图像"}, {"role": "assistant", "content": "<ref-object><bbox>和<ref-object><bbox>正在沙滩上玩耍"}], "images": ["/xxx/x.jpg"], "objects": {"ref": ["一只狗", "一个女人"], "bbox": [[331.5, 761.4, 853.5, 1594.8], [676.5, 685.8, 1099.5, 1427.4]]}}
    {"messages": [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "<image>找到图像中的<ref-object>"}, {"role": "assistant", "content": "<bbox><bbox>"}], "images": ["/xxx/x.jpg"], "objects": {"ref": ["羊"], "bbox": [[90.9, 160.8, 135, 212.8], [360.9, 480.8, 495, 532.8]]}}
    {"messages": [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "<image>帮我打开谷歌浏览器"}, {"role": "assistant", "content": "Action: click(start_box='<bbox>')"}], "images": ["/xxx/x.jpg"], "objects": {"ref": [], "bbox": [[615, 226]]}}

    验证

    训练完成后,使用以下命令对训练时的验证集进行推理,

    这里`--adapters`需要替换成训练生成的last checkpoint文件夹.

    由于adapters文件夹中包含了训练的参数文件,因此不需要额外指定`--model`:

    命令行使用:

    CUDA_VISIBLE_DEVICES=0 \swift infer \    --adapters output/vx-xxx/checkpoint-xxx \    --stream false \    --max_batch_size 1 \    --load_data_args true \    --max_new_tokens 2048

    -

    4.总结

    Qwen2.5-VL是由阿里巴巴通义千问团队推出的一款开源视觉语言模型,它在视觉理解、多模态交互以及自动化任务执行等方面展现出卓越的能力。

    该模型不仅能够识别常见的物体,如花卉、鸟类、鱼类、昆虫等,还能深入分析图像中的文本、图表、图标、图形和布局,其通用图像识别能力得到了显著增强,大幅扩展了可识别的图像类别范围。此外,Qwen2.5-VL还具备强大的智能代理能力,能够直接作为视觉Agent进行操作,推理并动态使用工具,支持在计算机和手机上完成多步骤的复杂任务,例如自动查询天气、预订机票、发送消息等,这种能力无需对特定任务进行微调。

    在长视频理解方面,Qwen2.5-VL表现尤为出色,能够理解超过1小时的长视频内容,并通过精准定位相关视频片段来捕捉事件。它引入了动态帧率(FPS)训练和绝对时间编码技术,能够定位秒级事件,并在长视频中搜索具体事件。这种时间感知能力使得模型在处理视频内容时更加精准和高效。同时,Qwen2.5-VL在视觉定位方面也表现出色,采用矩形框和点的多样化方式对通用物体进行定位,能够实现层级化定位,并输出规范的JSON格式坐标和属性。这种精准的视觉定位能力使其在多个领域具有广泛的应用前景。

    Qwen2.5-VL在处理结构化数据方面同样表现出色,能够高效解析发票、表格、文档等结构化数据,并生成准确的结构化输出,广泛适用于金融、商业等领域的数字化信息处理。与Qwen2-VL相比,Qwen2.5-VL在多个技术维度上进行了优化。它的时间和空间感知能力得到了显著提升,模型能够动态地将不同尺寸的图像转换为不同长度的token,并直接使用图像的实际尺寸表示检测框和点等坐标。在时间维度上,引入了动态FPS训练和绝对时间编码,使得模型在处理视频内容时更加精准和高效。

    综上所述,Qwen2.5-VL凭借其强大的视觉理解能力、智能代理功能和技术创新,为多模态AI的发展提供了新的思路和解决方案,适用于多种复杂的应用场景,展现了其在人工智能领域的巨大潜力和价值。


    如果你觉得我的内容对你有帮助,或者让你眼前一亮,那就太好了!🎉

    🌟 点赞 是对我最大的鼓励,你的每一个赞都是我继续努力的动力!

    👀 关注 我,这样你就不会错过我接下来的精彩内容啦!我会持续分享更多有趣、有用的知识和见解。

    📌 收藏 这篇文章,以后需要的时候可以随时回顾,方便又实用!

    如果你还有任何问题或想法,欢迎随时在评论区留言,我会第一时间回复你。让我们一起交流、一起进步!

    感谢你的支持,希望我们都能在这个知识的海洋里,收获满满!💖

    相关文章:

    qwen2.5-vl:阿里开源超强多模态大模型(包含使用方法、微调方法介绍)

    1.简介 在 Qwen2-VL 发布后的五个月里&#xff0c;众多开发者基于该视觉语言模型开发了新的模型&#xff0c;并向 Qwen 团队提供了极具价值的反馈。在此期间&#xff0c;Qwen 团队始终致力于打造更具实用性的视觉语言模型。今天&#xff0c;Qwen 家族的最新成员——Qwen2.5-VL…...

    python实现dbscan

    python实现dbscan 原理 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。它将簇定义为密度相连的点的最大集合&#xff0c;能够把具有足够高密度的区域划分为簇&#xff0c;并可在噪声的空间数据库中发现任意形…...

    学习数据结构(3)顺序表

    1.动态顺序表的实现 &#xff08;1&#xff09;初始化 &#xff08;2&#xff09;扩容 &#xff08;3&#xff09;头部插入 &#xff08;4&#xff09;尾部插入 &#xff08;5&#xff09;头部删除 &#xff08;这里注意要保证有效数据个数不为0&#xff09; &#xff08;6&a…...

    正在更新丨豆瓣电影详细数据的采集与可视化分析(scrapy+mysql+matplotlib+flask)

    文章目录 豆瓣电影详细数据的采集与可视化分析(scrapy+mysql+matplotlib+flask)写在前面数据采集0.注意事项1.创建Scrapy项目`douban2025`2.用`PyCharm`打开项目3.创建爬虫脚本`douban.py`4.修改`items.py`的代码5.修改`pipelines.py`代码6.修改`settings.py`代码7.启动`doub…...

    wx043基于springboot+vue+uniapp的智慧物流小程序

    开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…...

    每日一题 430. 扁平化多级双向链表

    430. 扁平化多级双向链表 简单 /*class Solution { public:Node* flatten(Node* head) {Node* tail nullptr;return dfs(head);}Node* dfs(Node* head){Node* cur head;while(cur ! nullptr){if(cur->child ! nullptr){Node* curChild getTail(cur->child);Node* te…...

    UE学习日志#14 GAS--ASC源码简要分析10 GC相关

    注&#xff1a;1.这个分类是按照源码里的注释分类的 2.本篇是通读并给出一些注释形式的&#xff0c;并不涉及结构性的分析 3.看之前要对UE的GAS系统的定义有初步了解 4.因为都是接口函数&#xff0c;有些没细看的研究那一部分的时候会细看 1 一些接口函数&#xff0c;但是…...

    使用Python和Qt6创建GUI应用程序--关于Qt的一点介绍

    关于Qt的一点介绍 Qt是一个免费的开源部件工具包&#xff0c;用于创建跨平台GUI应用程序&#xff0c;允许应用程序从Windows瞄准多个平台&#xff0c;macOS&#xff0c; Linux和Android的单一代码库。但是Qt不仅仅是一个Widget工具箱和功能内置支持多媒体&#xff0c;数据库&am…...

    C#@符号在string.Format方法中作用

    本文详解@符号在string.Format方法中作用。...

    Next.js 14 TS 中使用jwt 和 App Router 进行管理

    jwt是一个很基础的工作。但是因为架构不一样&#xff0c;就算是相同的架构&#xff0c;版本不一样&#xff0c;加jwt都会有一定的差别。现在我们的项目是Next.js 14 TS 的 App Router项目&#xff08;就是没有pages那种&#xff09;&#xff0c;添加jwt的步骤&#xff1a; 1、…...

    【贪心算法】洛谷P1090 合并果子 / [USACO06NOV] Fence Repair G

    2025 - 01 - 21 - 第 45 篇 【洛谷】贪心算法题单 -【 贪心算法】 - 【学习笔记】 作者(Author): 郑龙浩 / 仟濹(CSND账号名) 洛谷 P1090[NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G 【贪心算法】 文章目录 洛谷 P1090[NOIP2004 提高组] 合并果子 / [USACO06…...

    Windows11无法打开Windows安全中心主界面

    ​# 问题描述 安全中心无法打卡主界面&#xff0c;并弹出“需要使用新应用以打开此windowsdefender连接”. 解决方法 以管理员权限打开PowerShell&#xff0c;推荐使用快捷键win x打开快捷界面&#xff0c;选择Windows终端&#xff08;管理员&#xff09;&#xff0c;并在终…...

    下载arm架构的deb包的方法

    在ARM板上操作 如果你是在arm板上使用apt安装和下载包&#xff0c;那么安装过的包会在以下路径里&#xff1a; /var/cache/apt/archives只需要复制出来就可以 如果只下载不安装&#xff0c;可以使用命令 sudo apt-get -d install package_name:arm64 # 如果是32位&#xff0…...

    【Day29 LeetCode】动态规划DP

    一、动态规划DP 1、不同路径 62 首先是dp数组&#xff0c;dp[i][j]表示从起点(0, 0)到达当前位置(i, j)的路径数&#xff0c;转移方程从只能向下和向右移动可知&#xff0c;初始化边界可直观推出第一行和第一列上的位置只有一条路径。 class Solution { public:int uniquePa…...

    5分钟带你获取deepseek api并搭建简易问答应用

    目录 1、获取api 2、获取base_url和chat_model 3、配置模型参数 方法一&#xff1a;终端中临时将加入 方法二&#xff1a;创建.env文件 4、 配置client 5、利用deepseek大模型实现简易问答 deepseek-v3是截止博文撰写之日&#xff0c;无论是国内还是国际上发布的大模型中…...

    LeetCode题练习与总结:最短无序连续子数组--581

    一、题目描述 给你一个整数数组 nums &#xff0c;你需要找出一个 连续子数组 &#xff0c;如果对这个子数组进行升序排序&#xff0c;那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组&#xff0c;并输出它的长度。 示例 1&#xff1a; 输入&#xff1a;num…...

    探秘 TCP TLP:从背景到实现

    回家的路上还讨论了个关于 TCP TLP 的问题&#xff0c;闲着无事缕一缕。本文内容参考自 Tail Loss Probe (TLP): An Algorithm for Fast Recovery of Tail Losses 以及 Linux 内核源码。 TLP&#xff0c;先说缘由。自 TCP 引入 Fast retrans 机制就是为了尽力避免 RTO&#xf…...

    linux学习之网络编程

    一、两个模型及其对应关系 OSI七层模型 TCP/IP 四层模型 -------------------------------------------------------------------------- 应用层 表示层 ----> …...

    scrol家族 offset家族 client家族学习

    Scroll 系列属性 scrollTop & scrollLeft scrollTop: 返回元素的内容已向上滚动的部分的高度。scrollLeft: 返回元素的内容已向左滚动的部分的宽度。 scrollHeight & scrollWidth scrollHeight: 返回元素的实际高度&#xff0c;包括由于溢出而在屏幕上不可见的内容…...

    css-background-color(transparent)

    1.前言 在 CSS 中&#xff0c;background-color 属性用于设置元素的背景颜色。除了基本的颜色值&#xff08;如 red、blue 等&#xff09;和十六进制颜色值&#xff08;如 #FF0000、#0000FF 等&#xff09;&#xff0c;还有一些特殊的属性值可以用来设置背景颜色。 2.backgrou…...

    uniapp 对接腾讯云IM群组成员管理(增删改查)

    UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

    铭豹扩展坞 USB转网口 突然无法识别解决方法

    当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

    linux之kylin系统nginx的安装

    一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

    剑指offer20_链表中环的入口节点

    链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

    基于数字孪生的水厂可视化平台建设:架构与实践

    分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

    是否存在路径(FIFOBB算法)

    题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

    以光量子为例,详解量子获取方式

    光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

    sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

    简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

    SQL Server 触发器调用存储过程实现发送 HTTP 请求

    文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

    comfyui 工作流中 图生视频 如何增加视频的长度到5秒

    comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...