ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

如何用 self-llm 快速微调视觉大模型:5步做出草莓成熟度智能识别

如何用 self-llm 快速微调视觉大模型:5步做出草莓成熟度智能识别 如何用 self-llm 快速微调视觉大模型5步做出草莓成熟度智能识别【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调全参数/Lora、部署国内外开源大模型LLM/多模态大模型MLLM教程项目地址: https://gitcode.com/GitHub_Trending/se/self-llmself-llm《开源大模型食用指南》是一个面向中文开发者的开源教程项目提供国内外主流大模型LLM与多模态大模型MLLM的部署、微调与落地案例。本文以草莓成熟度智能识别为例带你用 Lora 微调从零训练一个能看图说话的视觉模型普通显卡即可运行全程约半天就能看到可用的识别效果。 引子摘草莓的老张想给果园装一双AI眼睛老张在城郊经营一片草莓园每到采摘季最头疼的不是产量而是分级哪些能摘、哪些还得再等两天全靠老师傅肉眼判断。请人贵、看走眼还会砸招牌他想着——要是拍张照片AI 就能告诉他这颗能摘了该多好。这个诉求正好可以用 self-llm 项目里的方法解决选一个开源视觉大模型做底座用 Lora 微调让它学会判断草莓成熟度。不需要几万张标注图不需要顶配显卡跟着本文 5 步走完你也能做出一个属于自己的识别模型。一、思路先行为什么选视觉大模型 Lora而不是传统图像分类传统做法是训练一个 CNN 图像分类模型输入图片输出类别。它的问题很现实每类要准备上千张图、硬件门槛高、换个场景就得重训而且模型只会给标签说不出为什么。视觉大模型则完全不同——它同时理解图片和文字输入是图片 问题输出是一句自然语言回答。用它做识别任务等于把分类问题变成了看图说话问题训练流程变得异常统一无论是判断草莓成熟度、识别病虫害还是做质检只要把数据整理成图片 → 答案的对话格式套同一套代码就能跑。至于 Lora低秩适配它是一种参数高效微调方法冻结模型绝大部分参数只训练少量小补丁通常不到原模型参数的 1%显存占用和训练时间都大幅下降这就是普通显卡也能跑微调的原因。方案训练数据量硬件要求输出形式传统 CNN 分类每类上千张高只能给标签视觉大模型 Lora每类几十到上百张中等约12GB显存自然语言回答可扩展 一句话理解Lora 负责省钱省时间视觉大模型负责看懂图片两者组合是现阶段性价比最高的微调方案。二、五分钟跑通环境克隆仓库并装好依赖先克隆 self-llm 项目再安装微调所需的依赖库git clone https://gitcode.com/GitHub_Trending/se/self-llm cd self-llm pip install modelscope1.18.0 transformers4.46.2 \ accelerate1.1.1 datasets2.18.0 peft0.13.2 \ qwen-vl-utils0.0.8三句命令大约半小时装完。国内网络建议先配好 pip 镜像源换源教程在项目 models/General-Setting/01-pip、conda换源.md 里照着做能省下不少下载时间。图1云 GPU 实例创建界面按需选择显卡型号与数量即可一键创建微调环境关键点小结依赖版本务必按上面锁定transformers 与 peft 版本不匹配是新手最常见的报错来源显存 12GB 以上体验最佳8GB 卡把 batch size 调小也能跑。三、如何把手机照片变成训练数据三步整理数据集微调需要图片 答案成对的数据。以成熟度识别为例建议每个等级收集 100 张以上照片按目录分好类berry/ ├── ripe/ # 成熟草莓果面鲜红 ├── semi/ # 半熟草莓粉红 └── unripe/ # 未熟草莓青绿接着做两件事先用脚本把图片路径和文字答案存成 CSV再转成视觉大模型要求的对话式 JSON。最终目标是下面这种格式[ { id: identity_1, conversations: [ {role: user, value: /data/berry/ripe_01.jpg}, {role: assistant, value: 这颗草莓已经成熟果面呈鲜红色可以采摘。} ] } ]为什么答案不直接写成熟而要写一句话因为视觉大模型的学习方式是看图说话对话式的答案能让它在识别的同时学会输出判断依据以后想扩展顺便告诉我要不要浇水这类问题也不用重新设计训练流程。关键点小结图片路径务必写绝对路径答案文字要统一风格避免同一状态两种说法否则模型会学得精神分裂。四、启动微调核心代码与参数解读我们选用 Qwen2-VL-2B-Instruct 作为底座模型——它只有 20 亿参数模型文件约 4.5GB是轻量级多模态模型里性价比很高的选择。完整微调脚本可以直接参考项目教程 models/Qwen2-VL/04-Qwen2-VL-2B Lora 微调.md下面是最小可复现的核心部分import torch from datasets import Dataset from peft import LoraConfig, TaskType, get_peft_model from transformers import ( Qwen2VLForConditionalGeneration, AutoProcessor, AutoTokenizer, TrainingArguments, Trainer, DataCollatorForSeq2Seq, ) # 1. 加载模型与处理器模型先用 modelscope 下载到本地 tokenizer AutoTokenizer.from_pretrained(./Qwen/Qwen2-VL-2B-Instruct/, use_fastFalse, trust_remote_codeTrue) processor AutoProcessor.from_pretrained(./Qwen/Qwen2-VL-2B-Instruct) model Qwen2VLForConditionalGeneration.from_pretrained( ./Qwen/Qwen2-VL-2B-Instruct/, device_mapauto, torch_dtypetorch.bfloat16, trust_remote_codeTrue) model.enable_input_require_grads() # 2. 加载整理好的对话数据集process_func 负责把图片和答案拼成模型输入格式 train_ds Dataset.from_json(berry_train.json).map(process_func) # 3. 配置 Lora只训练注意力层与 MLP 层的低秩矩阵 config LoraConfig( task_typeTaskType.CAUSAL_LM, target_modules[q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj], r64, # 低秩矩阵的秩越大表达能力越强 lora_alpha16, # 缩放系数控制微调强度 lora_dropout0.05, biasnone, ) train_peft_model get_peft_model(model, config) # 4. 训练参数与 Trainer args TrainingArguments( output_dir./output/berry-ripe, per_device_train_batch_size2, gradient_accumulation_steps2, num_train_epochs3, logging_steps10, save_steps100, learning_rate1e-4, gradient_checkpointingTrue, # 用计算换显存8GB 卡也能跑 report_tonone, ) trainer Trainer( modeltrain_peft_model, argsargs, train_datasettrain_ds, data_collatorDataCollatorForSeq2Seq(tokenizertokenizer, paddingTrue), ) trainer.train()训练启动后你会看到进度条和 loss 值一般几百条数据、3 个 epoch 十几分钟就能完成一轮。若显存不够把per_device_train_batch_size降到 1 并配合gradient_accumulation_steps即可。 注意事项enable_input_require_grads()必须调用否则开启梯度检查点时梯度无法回传Lora 的三个核心参数r、lora_alpha、lora_dropout都藏在配置里初学者先用推荐值调优阶段再动。五、验证效果用测试图检验微调是否成功训练结束后加载最新的 checkpoint 做推理验证from peft import PeftModel model Qwen2VLForConditionalGeneration.from_pretrained( ./Qwen/Qwen2-VL-2B-Instruct/, torch_dtypeauto, device_mapauto) model PeftModel.from_pretrained(model, ./output/berry-ripe/checkpoint-200) messages [{role: user, content: [ {type: image, image: test_ripe.jpg}, {type: text, text: 请判断这张草莓照片的成熟度等级。}]}] text processor.apply_chat_template(messages, tokenizeFalse, add_generation_promptTrue) image_inputs, _ process_vision_info(messages) inputs processor(text[text], imagesimage_inputs, return_tensorspt).to(cuda) out model.generate(**inputs, max_new_tokens64) print(processor.batch_decode(out, skip_special_tokensTrue))图2微调完成的模型在对话界面上回答用户提问输出格式与微调时保持一致挑几张训练集里没有的照片测试如果成熟的草莓得到可以采摘、青果得到尚未成熟的回答说明微调基本成功。你也可以把微调前后的回答放在一起对比通常会看到模型从答非所问变成有模有样。关键点小结验证一定要用没参与训练的照片否则测出来的是背答案而不是真本事。六、进阶调优显存不够、效果不佳怎么破如果你的识别效果不理想按以下优先级排查数据量不足就先做数据增强旋转、翻转、调亮度每类多出几倍的训练样本再不行就调大r如 32→64→128或增加训练轮次最后可以换更强的底座模型。选型时可以参考不同模型在同类任务上的表现对比图3不同大模型在多项任务上的准确率对比可作为底座模型选型的参考依据训练过程建议用 SwanLab 可视化记录它和 transformers 深度集成只需在 Trainer 的callbacks里加一个SwanLabCallback就能实时看到 loss、学习率曲线并自动记录超参数。效果不好时靠图表判断是欠拟合还是过拟合比盯着终端日志高效得多。常见报错排查清单报错信息常见原因解决办法CUDA out of memory显存不足调小 batch size开启 gradient_checkpointingModuleNotFoundError依赖缺失或版本冲突按第二节命令逐条安装锁定版本FileNotFoundError图片路径错误数据集 JSON 中使用绝对路径训练 loss 不下降学习率过大或数据格式错误学习率降到 1e-5检查对话格式七、落地部署导出模型并用 Gradio 做出可用小程序验证通过后把 Lora 权重合并回底座模型得到一个独立可部署的完整模型from peft import PeftModel merged PeftModel.from_pretrained(model, ./output/berry-ripe/checkpoint-200).merge_and_unload() merged.save_pretrained(./berry-final)再用 Gradio 几行代码封装成网页果农拍张照片就能用import gradio as gr def predict(image): messages [{role: user, content: [ {type: image, image: image}, {type: text, text: 请判断这张草莓照片的成熟度等级。}]}] # 与第五节推理代码相同得到答案 answer return answer gr.Interface(fnpredict, inputsimage, outputstext).launch()这套流程稍作改动就能迁移到其他场景收购站分级质检、大棚巡检机器人、甚至电商平台的果蔬自动分拣。合并后的模型体积约 4.5GB也能量化压缩后部署到边缘设备上。结语从看懂教程到跑通自己的模型本文只是起点。下一步建议你动手做三件事克隆 self-llm 仓库、跑通 models/Qwen2-VL/04-Qwen2-VL-2B Lora 微调.md 里的完整示例然后把数据换成你自己的场景比如 models/Qwen2-VL/06-Qwen2-VL-2B-Instruct Lora 微调案例 - LaTexOCR.md 展示的公式识别案例思路完全一致。self-llm 项目里还躺着几十个模型的微调与部署案例从 ChatGLM、Qwen 到 Baichuan 一应俱全。遇到卡壳的地方欢迎在项目评论区或 issue 区提问把你的踩坑记录分享出来也是给后来人铺路。现在就动手让第一个属于你的识别模型跑起来吧。【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调全参数/Lora、部署国内外开源大模型LLM/多模态大模型MLLM教程项目地址: https://gitcode.com/GitHub_Trending/se/self-llm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表