【大模型】使用llamafactory 训练 qwen2.5-VL 的目标检测任务

【大模型】使用llamafactory 训练 qwen2.5-VL 的目标检测任务
前言

截止到目前,目标检测的功能还是yolo模型落地性更强。但大模型也已经全面开花,所以也尝试下使用大模型来完成目标检测的训练,看看其效果如何,看看它在目标检测上有怎样的优势。


本次选用qwen2.5-VL,一开始使用github上阅读性强的工程训练,总觉得差些意思。
于是决定自己手搓个大模型训练推理工程,emm…,预测效果也是差强人意。
兜兜转转还是使用个高star的工程,先跑通得到想要的效果。后面再阅读核心代码掌握大模型训练过程吧
一 llama factory的部署

【大模型】LLaMA-Factory的环境配置、微调模型与测试 的第二章节,已经介绍了工程安装步骤,整个过程比较流畅。(其余章节介绍了在文本上的大模型微调的过程)
二 llama factory的配置文件介绍

github上给出的训练命令:

以此为切入点,来看看训练自己模型时需要关注的内容,这里先陈列出examples/qwen2_5vl_lora_sft.yamldata/mllm_demo.jsonl2.1 配置文件 【qwen2_5vl_lora_sft.yaml】

该文件中配置了大模型训练过程中所有的参数,包括:model 模型的选择与配置、method 训练方式、dataset 数据集、output 训练时输出信息、train 训练参数。


现阶段要跑通工程需要关注的有:model、datasetmodel 模型的设置
【examples/qwen2_5vl_lora_sft.yaml】 中的 model_name_or_path设置为自己微调的大模型名称,工程会自动从huggingface中拉取模型。但这种方式不建议,网络限制和不稳定等原因,会让下载过程很不稳定。设置为已经下载到本地大模型的绝对路径。该方式需要提前将大模型下载下来对应文件【data/dataset_info.json】的 mllm_demo,内容如下:2.2 数据集配置文件 【data/mllm_demo.json】&【data/dataset_info.json】

data/mllm_demo.json 最小单元内容如下:

对应 data/dataset_info.json 内容如下:

这两个文件中,设置的变量命名是有对应性的。对应效果如下图所示:图片上半部分为dataset_info.json 的内容,下半部分为 mllm_demo.json的内容。相同颜色的框内的变量命名一定是要一致的。

dataset数据集的关联 &&【data/dataset_info.json
【examples/qwen2_5vl_lora_sft.yaml】 中的 dataset: mllm_demo

...{"mllm_demo":{"file_name":"mllm_demo.json", # 数据文件 "formatting":"sharegpt", # 数据格式 "columns":{"messages":"messages","images":"images"},"tags":{"role_tag":"role","content_tag":"content","user_tag":"user","assistant_tag":"assistant"}},}
三 使用llamafacotry训练目标检测3.1 qwen2.5-VL-3B 的下载

使用modelscope 下载qwen2.5-VL-3B模型首先确定虚拟环境中安装了modelscope

本人尝试用的下载方式为图中圈出的两种3.2 训练数据的格式转换

已有的目标检测框保存的格式为labelme的json格式。现在需要将该种标签,转换成与mllm_demo一致的数据格式。
一般的数据处理,仅在生成训练时需要的jsonl 时,使用官方提供的smart_resize 获取图片resize后应该有的尺寸,使用该尺寸处理检测框,无需resize图片。图片的resize操作,放在工程的图像预处理中。
但这里为了尽可能减少出错的可能性,同时处理了图片和标签,将训练的图片和标签一开始就对齐,保存到新的路径下。

图像与边界框的协同处理】Qwen2.5-VL使用Vision Transformer架构需要将图片分割成28×28的patch输入尺寸必须是28的倍数固定尺寸便于批处理避免内存溢出(通过max_pixels限制)避免太小影响效果(通过min_pixels保证)保持空间关系相对位置不变:如果原始框在图片中心,缩放后仍在中心相对大小不变:框与图片的比例关系保持不变注意:由于需要同时满足"能被28整除"和"保持宽高比"这两个要求,在实际操作中存在内在矛盾。当原始图片尺寸不是28的倍数时,完美保持宽高比在数学上是不可能的。因此,smart_resize函数采取了一种近似保持的策略:
1. 分别调整:将高度和宽度分别四舍五入到最接近的28的倍数
2. 轻微形变:接受由此产生的轻微纵横比变化(通常在1-3%范围内)
3. 权衡选择:相较于填充法(增加无效像素)或裁剪法(丢失图像信息),这种轻微形变是更好的权衡这种处理在保持图像主要内容不变的同时,确保了模型输入要求关键注意事项a 坐标系统:始终是绝对像素坐标,不是相对坐标(百分比)b 舍入处理:使用round()四舍五入,可能引入1像素误差c 边界保护:防止坐标超出图像边界d 保持有效性:确保转换后仍然是有效的矩形(x2≥x1, y2≥y1)


为了工程的可观整洁,在根目录创建文件夹【LL_own】。
创建数据处理脚本【LL_own/data_deal.py】,在实验阶段,尽可能的保持问题可控性,我将图片resize到固定的、模型可接受的尺寸,同时将标签同等映射处理。具体实现如下:

生成文件【LL_own/qwen_det2/train.jsonl】【LL_own/qwen_det2/resized_imgs/*】jsonl 文件可用于模型训练。


生成的数据结束后,进行可视化】代码如下3.3 配置文件的修改

如第二章节介绍,
我们需要修改两个文件内的配置。3.4 开启微调训练

【data/dataset_info.json】

...,"train_det":{"file_name":"/home/LL/workfile_2026/12-QwenVL/LLaMA-Factory/LL_own/qwen_det2/train.jsonl","formatting":"sharegpt","columns":{"messages":"messages","images":"images"},"tags":{"role_tag":"role","content_tag":"content","user_tag":"user","assistant_tag":"assistant"}}}

【examples/train_lora/qwen2_5vl_lora_sft.yaml】
复制文件:

cp examples/train_lora/qwen2_5vl_lora_sft.yaml examples/train_lora/qwen2_5vl_own.yaml 

修改文件:

### modelmodel_name_or_path: /home/LL/llm_models/Qwen2.5-VL/Qwen/Qwen2___5-VL-3B-Instruct image_max_pixels:262144video_max_pixels:16384trust_remote_code:true### methodstage: sft do_train:truefinetuning_type: lora lora_rank:8lora_target: all ### datasetdataset: train_det template: qwen2_vl cutoff_len:2048max_samples:20000# 注意:该参数会限制训练样本数量overwrite_cache:truepreprocessing_num_workers:16dataloader_num_workers:4### outputoutput_dir: ./LL_own/save/train_detect_3B # 注意:根据自己实际情况修改logging_steps:10save_steps:500plot_loss:trueoverwrite_output_dir:truesave_only_model:falsereport_to: none # choices: [none, wandb, tensorboard, swanlab, mlflow]### trainper_device_train_batch_size:8# 注意:符合自己的显存大小gradient_accumulation_steps:8learning_rate:1.0e-5# 注意:学习率根据自己实际情况修改num_train_epochs:6.0lr_scheduler_type: cosine warmup_ratio:0.1bf16:trueddp_timeout:180000000resume_from_checkpoint:null### eval# val_size: 0.1# per_device_eval_batch_size: 1# eval_strategy: steps# eval_steps: 500

纵横比不变:不会发生形变


计算效率考虑

# 约束2: 像素总数在指定范围内 min_pixels =56×56=3,136 像素 max_pixels =14×14×4×1280=1,003,520 像素 # 14×14是patch网格,4是某种设计参数,1280是模型维度 检查像素数:644×420=270,480 像素,在 3136 和 1003520之间 最终尺寸:644×420 像素 

模型输入要求

# 约束1: 能被factor整除。调整后的尺寸必须是28的倍数# 这是因为Vision Transformer使用28×28的patch# new_height % 28 == 0、new_width % 28 == 0round(640/28)×28=23×28=644(宽度) round(428/28)×28=15×28=420(高度) 

方式二:

from modelscope.hub.snapshot_download import snapshot_download # 定义模型ID和本地目标路径 model_id ='qwen/Qwen2.5-VL-3B-Instruct' local_dir ='~/llm_models/Qwen2.5-VL'# 下载模型 model_dir = snapshot_download(model_id, cache_dir=local_dir, revision='master')print(f"模型已下载至: {model_dir}")

方式一:

modelscope download --model Qwen/Qwen2.5-VL-3B-Instruct --local_dir [本地下载路径]

modelscope官网 搜索qwen2.5-VL,最终找到界面如下。

在这里插入图片描述


四 训练好的模型的推理

训练结束后,得到lora模型,为了方便后续的使用,所以实现了脱离llamafactory的推理。图片的resize送进大模型推理预测结果解析检测框的反向映射

可得到正确的检测结果。
五 其他

模型合并、合并后的推理,都比较简单,就不记录了。

Read more

人工智能:循环神经网络(RNN)与序列数据处理实战

人工智能:循环神经网络(RNN)与序列数据处理实战

循环神经网络(RNN)与序列数据处理实战 1.1 本章学习目标与重点 💡 学习目标:掌握循环神经网络的核心原理、经典变体结构,以及在文本序列任务中的实战开发流程。 💡 学习重点:理解 RNN 的循环计算机制,学会使用 TensorFlow/Keras 搭建基础 RNN 与 LSTM 模型,完成文本分类任务。 1.2 循环神经网络核心原理 1.2.1 为什么需要 RNN 💡 传统的前馈神经网络(如 CNN、全连接网络)的输入和输出是相互独立的。它们无法处理序列数据的上下文关联特性。 序列数据在现实中十分常见,比如自然语言文本、语音信号、时间序列数据等。这些数据的核心特点是,当前时刻的信息和之前时刻的信息紧密相关。 循环神经网络通过引入隐藏状态,可以存储历史信息,从而有效捕捉序列数据的上下文依赖关系。 1.2.2 RNN

Kubernetes 与 AI 集成最佳实践

Kubernetes 与 AI 集成最佳实践 一、前言 哥们,别整那些花里胡哨的。Kubernetes 与 AI 集成是现代云原生架构的重要趋势,今天直接上硬货,教你如何在 Kubernetes 中部署和管理 AI 工作负载。 二、AI 工作负载类型 类型特点资源需求训练工作负载计算密集型高 GPU 需求推理工作负载低延迟要求中等 GPU 需求数据处理存储密集型高存储 I/O模型服务高并发稳定资源需求 三、实战配置 1. GPU 资源管理 apiVersion: v1 kind: ConfigMap metadata: name: nvidia-device-plugin namespace: kube-system data: config.yaml: | version: v1 flags: migStrategy: single

用Z-Image-Turbo做AI绘画,效率提升五倍实录

用Z-Image-Turbo做AI绘画,效率提升五倍实录 在内容创作节奏日益加快的当下,图像生成的速度已成为决定项目能否按时交付的关键因素。电商海报、短视频配图、教育可视化素材——这些场景都要求“即时出图”。传统文生图模型如 Stable Diffusion 虽功能强大,但动辄数秒的生成延迟和复杂的部署流程,已难以满足高效生产的需求。 而阿里通义实验室推出的 Z-Image-Turbo,作为 Z-Image 系列的蒸馏优化版本,凭借 8 步高质量出图、亚秒级响应、原生中文支持、消费级显卡友好性 等特性,正在重新定义 AI 绘画的效率边界。本文将基于实际使用经验,全面解析其技术优势与落地实践,还原一次真实场景中效率提升近五倍的技术升级过程。 1. 技术背景与核心价值 1.1 为什么需要更快的文生图模型? 当前主流扩散模型(如 Stable Diffusion 1.5/2.1/XL)通常依赖 20–50

Plottable高级图表制作:从散点图到堆叠面积图的10种实现方法

Plottable高级图表制作:从散点图到堆叠面积图的10种实现方法 【免费下载链接】plottable:bar_chart: A library of modular chart components built on D3 项目地址: https://gitcode.com/gh_mirrors/pl/plottable Plottable是一个基于D3.js构建的模块化图表组件库,为开发者提供了创建灵活、定制化图表的强大工具。这个开源项目专注于"组合优于配置"的理念,让你能够像搭积木一样构建复杂的图表系统。通过Plottable的高级图表制作功能,你可以轻松实现从基础散点图到复杂堆叠面积图的各种数据可视化需求。😊 为什么选择Plottable进行高级图表制作? Plottable不是一个传统的图表库,而是一个图表组件库。这意味着你拥有前所未有的灵活性来创建自定义图表。与直接使用D3相比,Plottable提供了更高层次的抽象,让图表制作变得更加简单快捷;与传统图表库相比,它又提供了无与伦比的定制能力。 核心关键词:Plottable图表制作、D3图表组件、高级数据可