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

【训练】Qwen2.5VL 多机多卡 Grounding Box定位

之前的相关文章:

【深度学习】LLaMA-Factory微调sft Qwen2-VL进行印章识别

https://www.dong-blog.fun/post/1661

使用LLaMA-Factory微调sft Qwen2-VL-7B-Instruct

https://www.dong-blog.fun/post/1762

构建最新的LLaMA-Factory镜像

https://www.dong-blog.fun/post/1799

关于Grounding 如何不偏移的问题解决

看了一些帖子:

  • https://github.com/QwenLM/Qwen2.5-VL/issues/1094
  • https://github.com/QwenLM/Qwen2.5-VL/issues/950
  • https://github.com/QwenLM/Qwen2.5-VL/issues/900
  • https://github.com/QwenLM/Qwen2.5-VL/issues/866
  • https://github.com/QwenLM/Qwen2.5-VL/issues/721
  • https://github.com/QwenLM/Qwen2.5-VL/issues/584
  • https://github.com/QwenLM/Qwen2.5-VL/issues/830
  • https://github.com/QwenLM/Qwen2.5-VL/issues/773

所以有一些关于 Qwen2.5VL Grounding 的结论:

  • 官方微调用的是这样的格式,所以在prompt中也无需特殊的格式/
[{"bbox_2d": [x1, y1, x2, y2], "label": "obj_name/description"},{"bbox_2d": [x1, y1, x2, y2], "label": "obj_name/description"},{"bbox_2d": [x1, y1, x2, y2], "label": "obj_name/description"},
]
  • 官方还是这么做了,因为底层对28的切割性质,所以要这么做,不然真会偏一点:
    在 Qwen2.5-VL 中,我们首先调整输入图像的大小,以确保其宽高为 28*n,然后使用调整后图像上的绝对坐标作为最终目标。

  • 使用 (左, 上), (右, 下) 坐标,不用归一化到0-1000.

  • 您好,根据您的描述,我怀疑问题出在 Qwen2-VL 和 Qwen2.5-VL 中 bbox 坐标的处理方式不同。具体来说,我们在 Qwen2.5-VL-7B 中现在使用的是绝对坐标,而不是 Qwen2-VL 中使用的相对坐标(后者被缩放到 [0,1000])。
    例如,在 Qwen2-VL 中,640x640 图像中 [0, 0, 320, 320] 的边界框用 (0, 0), (500, 500) 表示。但在 Qwen2.5-VL 中,我们直接使用 [0, 0, 320, 320] 或 (0,0),(320,320)。此外,如果在图像增强过程中将图像尺寸调整为 1280x1280,则坐标现在应相应地扩展为 [0, 0, 640, 640]。

    由于 Qwen2.5-VL 使用绝对坐标进行训练,我建议在微调时也使用相同的绝对坐标系。如果您出于某种原因坚持使用相对坐标,可以延长训练时间,看看偏差问题是否会随着训练时间的延长而消失。

    供大家参考,详细坐标流程如下:

    调整图像大小,使高度和宽度为 28*n
    resized_w, resized_h = smart_resize(img_w, img_h)
    相应地改变绝对坐标
    new_bbox = bbox / np.array([img_w, img_h, img_w, img_h]) * np.array([resized_w, resized_h, resized_w, resized_h]))
    如果使用绝对坐标后仍然观察到明显的 grounding 偏差,则另一个可能的问题在于图像的大小。如果图像非常大或非常小(例如,> 4k 4k 或 < 320 320),则模型很可能会输出有偏差的 bbox 结果。

  • 新版本的transformers才没有rope问题,安装: pip install git+https://github.com/huggingface/transformers

对自己图像的处理

调整图像大小,使高度和宽度为 28 * n 。坐标使用绝对坐标,无需特殊格式。使用正确的transformer版本。

llamafactory 的数据要求:

https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/data_preparation.html#id16

llamafactory 如何解析这类数据:

https://www.dong-blog.fun/post/2077

我的数据样本 xdx_b_intervl8btrain_28.json

  {"messages": [{"content": "<image>点[56,259]所处位置的信息是什么?","role": "user"},{"content": "<ref>文本-地址</ref><box>[[33, 241, 66, 264]]</box>","role": "assistant"}],"images": ["/img_datasets/img_small_size_28/didichuxing-20240914171548.jpg"]}

对应的dataset_info.json中的描述应该是:

{"grounding1": {"file_name": "xdx_b_intervl8btrain_28.json","formatting": "sharegpt","columns": {"messages": "messages","images": "images"},"tags": {"role_tag": "role","content_tag": "content","user_tag": "user","assistant_tag": "assistant"}}
}

启动训练

cd LLaMA-Factorydocker run -it --gpus  '"device=0,2,3,4,5,6,7"' \-v /data/xiedong/train_qwenvl25_for_grounding/data:/app/data \-v ./output:/app/output \-v ./examples:/app/examples \-v /data/xiedong/train_qwenvl25_for_grounding:/img_datasets \-v /data/xiedong/vlm_r1_train_tools/Qwen2.5-VL-7B-Instruct:/Qwen2.5-VL-7B-Instruct \--shm-size 32G \-p 8034:7860 \-p 8035:8000 \kevinchina/deeplearning:llamafactory20250311-3 bash

装个swanlab:

pip install swanlab -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

可以打开webui看一下:

llamafactory-cli webui

单机训练:

llamafactory-cli train \--stage sft \--do_train True \--model_name_or_path /Qwen2.5-VL-7B-Instruct \--preprocessing_num_workers 16 \--finetuning_type full \--template qwen2_vl \--flash_attn auto \--dataset_dir data \--dataset grounding1 \--cutoff_len 4096 \--learning_rate 5e-05 \--num_train_epochs 3.0 \--max_samples 100000 \--per_device_train_batch_size 1 \--gradient_accumulation_steps 4 \--lr_scheduler_type cosine \--max_grad_norm 1.0 \--logging_steps 5 \--save_steps 100 \--warmup_steps 0 \--packing False \--report_to none \--output_dir output/Qwen2.5-VL-7B-Instruct/full/train_2025-05-08-07-28-25 \--bf16 True \--plot_loss True \--trust_remote_code True \--ddp_timeout 180000000 \--include_num_input_tokens_seen True \--optim adamw_torch \--deepspeed cache/ds_z2_config.json \--use_swanlab True \--swanlab_project llamafactory \--swanlab_mode cloud 

如果要有验证集:

    --val_size 0.1 \--eval_strategy steps \--eval_steps 100 \--per_device_eval_batch_size 2 \

如果要用swanlab:

export SWANLAB_API_KEY=pM7Xvs5OS2EeXPO5gKXfJ   # 设置在线跟踪模式API,这里我随便填的
export SWANLAB_LOG_DIR=/swanlab_log    # 设置本地日志存储路径
export SWANLAB_MODE=cloud     # 包含四种模式:cloud云端跟踪模式(默认)、cloud-only仅云端跟踪本地不保存文件、local本地跟踪模式、disabled完全不记录用于debug
    --use_swanlab True \--swanlab_project llamafactory \--swanlab_mode cloud \

相关文章:

【训练】Qwen2.5VL 多机多卡 Grounding Box定位

之前的相关文章&#xff1a; 【深度学习】LLaMA-Factory微调sft Qwen2-VL进行印章识别 https://www.dong-blog.fun/post/1661 使用LLaMA-Factory微调sft Qwen2-VL-7B-Instruct https://www.dong-blog.fun/post/1762 构建最新的LLaMA-Factory镜像 https://www.dong-blog.f…...

服务器配置llama-factory问题解决

在配置运行llama-factory&#xff0c;环境问题后显示环境问题。这边给大家附上连接&#xff0c;我们的是liunx环境但是还是一样的。大家也记得先配置虚拟环境。 LLaMA-Factory部署以及微调大模型_llamafactory微调大模型-CSDN博客 之后大家看看遇到的问题是不是我这样。 AI搜索…...

Spring Boot + Vue 实现在线视频教育平台

一、项目技术选型 前端技术&#xff1a; HTML CSS JavaScript Vue.js 前端框架 后端技术&#xff1a; Spring Boot 轻量级后端框架 MyBatis 持久层框架 数据库&#xff1a; MySQL 5.x / 8.0 开发环境&#xff1a; IDE&#xff1a;Eclipse / IntelliJ IDEA JDK&…...

使用Jmeter进行核心API压力测试

最近公司有发布会&#xff0c;需要对全链路比较核心的API的进行压测&#xff0c;今天正好分享下压测软件Jmeter的使用。 一、什么是Jmeter? JMeter 是 Apache 旗下的基于 Java 的开源性能测试工具。最初被设计用于 Web 应用测试&#xff0c;现已扩展到可测试多种不同的应用程…...

JavaScript中数组和对象不同遍历方法的顺序规则

在JavaScript中&#xff0c;不同遍历方法的顺序规则和适用场景存在显著差异。以下是主要方法的遍历顺序总结&#xff1a; 一、数组遍历方法 for循环 • 严格按数组索引顺序遍历&#xff08;0 → length-1&#xff09; • 支持break和continue中断循环 • 性能最优&#xff0c;…...

【机器学习-线性回归-5】多元线性回归:概念、原理与实现详解

线性回归是机器学习中最基础且广泛应用的算法之一&#xff0c;而多元线性回归则是其重要扩展。本文将全面介绍多元线性回归的核心概念、数学原理及多种实现方式&#xff0c;帮助读者深入理解这一强大的预测工具。 1. 多元线性回归概述 1.1 什么是多元线性回归 多元线性回归(…...

【软件设计师:数据结构】1.数据结构基础(一)

一 线性表 1.线性表定义 线性表是n个元素的有限序列,通常记为(a1,a2,…,an)。 特点: 存在惟一的表头和表尾。除了表头外,表中的每一个元素均只有惟一的直接前驱。除了表尾外,表中的每一个元素均只有惟一的直接后继。2.线性表的存储结构 (1)顺序存储 是用一组地址连续…...

简单面试提问

Nosql非关系型数据库&#xff1a; Mongodb&#xff1a;开源、json形式储存、c编写 Redis&#xff1a;key-value形式储存&#xff0c;储存在内存&#xff0c;c编写 关系型数据库&#xff1a; sqlite;&#xff1a;轻量型、0配置、磁盘存储、支持多种语言 mysql&#xff1a;开源…...

探秘数据中台:五大核心平台的功能全景解析

数据中台作为企业数据资产的 “智慧中枢”&#xff0c;通过整合数据处理全流程的核心功能&#xff0c;实现数据价值的深度挖掘与高效应用。以下从五大核心平台出发&#xff0c;全面拆解数据中台的功能架构与应用价值。 一、数据可视化平台&#xff1a;让数据 “开口说话” 1.…...

leetcode 3342. 到达最后一个房间的最少时间 II 中等

有一个地窖&#xff0c;地窖中有 n x m 个房间&#xff0c;它们呈网格状排布。 给你一个大小为 n x m 的二维数组 moveTime &#xff0c;其中 moveTime[i][j] 表示在这个时刻 以后 你才可以 开始 往这个房间 移动 。你在时刻 t 0 时从房间 (0, 0) 出发&#xff0c;每次可以移…...

redis----通用命令

文章目录 前言一、运行redis二、help [command]三、通用命令 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 学习一些通用命令 以下操作在windows中演示 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、运行redis 我们先c…...

PostgreSQL 查看索引碎片的方法

PostgreSQL 查看索引碎片的方法 在 PostgreSQL 中&#xff0c;索引碎片(Index Fragmentation)是指索引由于频繁的插入、更新和删除操作导致物理存储不连续&#xff0c;从而影响查询性能的情况。以下是几种查看索引碎片的方法&#xff1a; 一 使用 pgstattuple 扩展 1.1 安装…...

pip 常用命令及配置

一、python -m pip install 和 pip install 的区别 在讲解 pip 的命令之前&#xff0c;我们有必要了解一下 python -m pip install 和 pip install 的区别&#xff0c;以便于我们在不同的场景使用不同的方式。 python -m pip install 命令使用 python 可执行文件将 pip 模块作…...

IntelliJ IDEA 保姆级使用教程

文章目录 一、创建项目二、创建模块三、创建包四、创建类五、编写代码六、运行代码注意 七、IDEA 常见设置1、主题2、字体3、背景色 八、IDEA 常用快捷键九、IDEA 常见操作9.1、类操作9.1.1、删除类文件9.1.2、修改类名称注意 9.2、模块操作9.2.1、修改模块名快速查看 9.2.2、导…...

Comfyui 与 SDwebui

ComfyUI和SD WebUI是基于Stable Diffusion模型的两种不同用户界面工具&#xff0c;它们在功能、用户体验和适用场景上各有优劣。 1. 功能与灵活性 ComfyUI&#xff1a;ComfyUI以其节点式工作流设计为核心&#xff0c;强调用户自定义和灵活性。用户可以通过连接不同的模块&…...

Ubuntu Linux系统配置账号无密码sudo

在Linux系统中&#xff0c;配置无密码sudo可以通过修改sudoers文件来实现。以下是具体的配置步骤 一、编辑sudoers文件 输入sudo visudo命令来编辑sudo的配置文件。visudo是一个专门用于编辑sudoers文件的命令&#xff0c;它会在保存前检查语法错误&#xff0c;从而防止可能的…...

WiseAD:基于视觉-语言模型的知识增强型端到端自动驾驶——论文阅读

《WiseAD: Knowledge Augmented End-to-End Autonomous Driving with Vision-Language Model》2024年12月发表&#xff0c;来自新加坡国立和浙大的论文。 在快速发展的视觉语言模型&#xff08;VLM&#xff09;中&#xff0c;一般人类知识和令人印象深刻的逻辑推理能力的出现&a…...

探索SQLMesh中的Jinja宏:提升SQL查询的灵活性与复用性

在数据工程和数据分析领域&#xff0c;SQL是不可或缺的工具。随着项目复杂度的增加&#xff0c;如何高效地管理和复用SQL代码成为了一个重要课题。SQLMesh作为一款强大的工具&#xff0c;不仅支持标准的SQL语法&#xff0c;还引入了Jinja模板引擎的宏功能&#xff0c;极大地提升…...

配置linux自启java程序

配置linux自启java程序 1、切换root用户&#xff0c;并进入自启配置目录 sudo su - cd /etc/systemd/system2、编写启动文件 例如&#xff1a;class-server.service vi class-server.service脚本内容 [Unit] DescriptionClassServer Java Application Afternetwork.target…...

对Redis组件的深入探讨

目录 1、磁盘和内存 1.1、概念 1.2、区别 1.3、联系 2、redis基本特性 2.1、数据结构 2.2、性能 2.3、事件驱动架构 2.4、原子性 3、redis模型 3.1、单线程 3.2、事件驱动模型 3.3、epoll多路复用 4、数据持久化 4.1、RDB快照 4.2、AOF&#xff08;Append Only…...

Uni-app 组件使用

在前端开发领域&#xff0c;能够高效地创建跨平台应用是开发者们一直追求的目标。Uni-app 凭借其 “一次开发&#xff0c;多端部署” 的特性&#xff0c;成为了众多开发者的首选框架。而组件作为 Uni-app 开发的基础单元&#xff0c;合理运用组件能够极大地提升开发效率和代码的…...

k8s pod request/limit 值不带单位会发生什么?

在 Kubernetes 中&#xff0c;Pod 的 resources.requests 和 limits 字段必须显式指定单位。 一、未正确设置requests和limits字段的单位会产生影响&#xff1f; 1. 资源分配严重不足 例如&#xff0c;以下配置存在严重错误&#xff1a; resources:requests:memory: 512 # …...

Ruby 字符串(String)

Ruby 字符串&#xff08;String&#xff09; 引言 在编程语言中&#xff0c;字符串是表示文本数据的一种基本数据类型。在Ruby中&#xff0c;字符串处理是日常编程中非常常见的一项任务。本文将详细介绍Ruby中的字符串&#xff08;String&#xff09;类型&#xff0c;包括其创…...

嵌入式学习笔记 - STM32 SRAM控制器FSMC

一 SRAM控制器内部结构图&#xff1a; 以下以512K SRAM芯片为例 二 SRAM地址矩阵/寻址方式&#xff1a; SRAM的地址寻址方式通过行地址与列地址交互的方式存储数据 三 STM32 地址映射 从STM32的地址映射中可以看出&#xff0c;FSMC控制器支持扩展4块外部存储器区域&#xff0…...

经典算法 求解硬币组成问题

求解硬币组成问题 题目描述 实现一个算法求解组成硬币问题。介绍如下&#xff1a; 假设有面值给定的一些硬币&#xff0c;以及给定的总合值&#xff0c;问构成总合值的方法有多少种。 输入描述 第一行包含两个数字 N, M&#xff1a; N 表示硬币面值的种类数M 表示给定的总合…...

数据封装的过程

数据的封装过程 传输层 UDP 直接将数据封装为UDP数据报​&#xff0c;添加UDP头部&#xff08;8B&#xff09;。 要点&#xff1a; UDP首部简单&#xff0c;无连接不可靠、无重传、无拥塞控制&#xff0c;适用于实时性要求较高的通讯&#xff1b;不需要源端口或不想计算检…...

Docker部署常见应用之Superset

文章目录 使用 Docker 部署使用 Docker Compose 部署参考文章 以下是使用 Docker 部署 Superset 并将存储配置为 MySQL 的详细步骤&#xff1a; 使用 Docker 部署 获取Superset镜像: 使用Docker从官方仓库拉取Superset镜像&#xff1a;docker pull apache/superset:4.0.0创建 …...

LeetCode 216.组合总和 III:回溯算法实现与剪枝优化

目录 问题描述解决思路 回溯法剪枝优化 代码实现复杂度分析示例测试总结与扩展 1. 问题描述 给定两个整数 k 和 n&#xff0c;要求找出所有满足以下条件的组合&#xff1a; 组合包含 k 个不同的数字。组合中数字的和等于 n。组合中的数字范围为 [1, 9]&#xff0c;且每个数字…...

住宅 IP 地址:数字时代的真实网络身份载体

在互联网的底层架构中&#xff0c;IP 地址是设备连接网络的 “数字身份证”。而住宅 IP 地址作为其中最贴近真实用户的类型&#xff0c;特指互联网服务提供商&#xff08;ISP&#xff09;分配给家庭或个人用户的 IP 地址&#xff0c;具有以下核心特征&#xff1a; 物理关联性 …...

前后端开发---分离 和 不分离开发

前后端分离开发和不分离开发是两种不同的软件开发架构方式&#xff0c;它们的主要区别体现在以下几个方面&#xff1a; 对比维度 前后端分离开发 前后端不分离开发 定义 前端和后端作为两个独立项目开发&#xff0c;通过API接口通信 前端和后端代码混合在一起&#xff0c;…...