【大模型】使用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

2025年第27届中国机器人及人工智能大赛自主巡航实战经验分享

作为连续两届参加中国机器人及人工智能大赛并拿下国一的"老兵",我想跟大家分享一些在自主巡航项目中的实战经验。这个项目看起来简单,但真正做起来才发现里面有太多坑需要踩,希望我的一些经验能让你少走弯路。 一、项目实战理解 刚开始接触这个项目时,我和团队都以为主要难点在于算法的精巧设计。结果第一年比赛只拿了个国二,回来复盘才发现,比赛成败的关键不在于算法多高级,而在于系统的鲁棒性和稳定性。 场地中那些任务信息图像看似简单,但在不同光照、不同角度下识别难度差异很大。记得去年决赛时,有支985高校的队伍用了很牛的深度学习算法,结果在现场因为光照问题,识别率直接掉到40%以下,连基本的任务点都没完成。 核心任务拆解: * 语音识别与播报(10分) * 三次任务点识别与到达(60分) * 终点到达(10分) * 技术文档(10分) 首先要确保60分的基础分稳稳拿到,才有机会冲击更高分数。 二、软件架构实战经验 ROS框架设计 第一年我们用了单体架构,所有功能都堆在一个节点里,结果调试和找bug特别痛苦。第二年重构为多节点设计: 这种模块化设计好处太多了: 1. 团

HarmonyOS 5.0物联网开发实战:基于星闪(NearLink)技术的智能家居边缘计算网关

HarmonyOS 5.0物联网开发实战:基于星闪(NearLink)技术的智能家居边缘计算网关

文章目录 * 每日一句正能量 * 前言 * 一、物联网通信技术演进与星闪机遇 * 1.1 传统智能家居痛点 * 1.2 星闪(NearLink)技术架构 * 二、系统架构设计 * 2.1 核心模块划分 * 三、核心代码实现 * 3.1 星闪(NearLink)接入管理 * 3.2 边缘AI推理引擎 * 3.3 智能场景引擎 * 四、网关主界面实现 * 五、总结与物联网价值 每日一句正能量 自律是反人性的,所以,刚开始的几秒,势必会挣扎,打退堂鼓,但只要克服了,之后的神清气爽,会让你感谢自己最初那几秒的坚持。 前言 摘要: 本文基于HarmonyOS 5.0.0版本,

【Python实战】像人类一样思考:AI绘画模型TwiG-RL深度解析(完整代码)

【Python实战】像人类一样思考:AI绘画模型TwiG-RL深度解析(完整代码)

【Python实战】像人类一样思考:AI绘画模型TwiG-RL深度解析(完整代码) 摘要 本文深入解析港中文与美团联合推出的TwiG-RL模型,该模型通过"生成-思考-再生成"的循环机制,让AI在绘画过程中能够"停下来看一眼",像人类画家一样边画边想。我们将从原理分析到Python代码实现,带你掌握这一突破性技术。 1. 背景与问题:传统AI绘画的"黑盒"困境 1.1 传统生成模型的局限性 在传统的文本到图像(T2I)模型中,生成过程是一个连续的黑盒操作: 输入文本提示 → 模型一次性生成 → 输出图像 这种方式存在三大问题: 1. 缺乏中间控制:无法在生成过程中调整方向 2. 错误传播:早期错误会持续影响后续生成 3. 不可解释性:无法理解模型"为什么"这样生成 1.

Pix4Dmapper处理大疆无人机影像数据教程

Pix4Dmapper处理大疆无人机影像数据教程

初次接触无人机数据处理时,我完全找不到清晰的流程指引,甚至对大疆采集的数据如何使用都毫无头绪。查阅了不少资料,发现信息也相当有限。为避免日后遗忘,特此记录下摸索出的操作流程,权当备忘。 1. 想要使用Pix4D软件的朋友请注意:这款软件需要付费购买。我查阅了网上资源,发现大多数人都没有提供免费版本。我已经购买了“正版”软件,有需要的朋友可以私信我,我会分享下载链接给你。 2. 结束,到这里 下面是软件处理影像过程 (1)、首先打开Pix4DTool,点击start或者Auto start以后,立马会将软件的网进行断开,这样就可以进行使用pix4d软件了。 (2)、此时打开软件的界面如下所示 (3)、拷贝数据到电脑然后打开软件新建项目输入项目名称并选好路径点击下一步 (4)、添加无人机照片路径或选择添加照片完成并点击下一步 (5)、因为精灵RTK照片自带POS信息这里就直接默认坐标系,相机参数是写入在照片里可以自动读取,如果不确定就用记事本打开照片找到XMP把相机信息参数输入点击下一步 (6)、输出坐标系选择自己需要的坐标系,和像控点一致的