跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

基于 LLaMA 3.2 Vision 的商品文案自动生成微调实战

使用 LLaMA 3.2 Vision 模型结合 Unsloth 框架,实现商品图像到文本描述的自动生成。通过 4 位量化加载模型,配置 LoRA 微调模块,利用亚马逊商品数据集进行指令微调。实验显示,微调后模型生成的描述更精准、风格更贴近真实电商文案,有效解决了多模态大模型在垂直场景下的适配问题。

念念不忘发布于 2026/4/12更新于 2026/9/1067 浏览
基于 LLaMA 3.2 Vision 的商品文案自动生成微调实战

环境准备

首先通过终端安装必要的依赖。这里使用 PyTorch 2.4.0 配合 CUDA 12.1,并升级 Unsloth 以获得最佳性能。

pip install torch==2.4.0 torchvision==0.19.0 --index-url https://download.pytorch.org/whl/cu121
pip install triton==3.0.0
pip install "unsloth[torch]" --upgrade

加载 LLaMA 3.2 Vision 模型

LLaMA 3.2 Vision 是 Meta 推出的多模态大模型,能同时处理图像与文本。本项目选用 11B 版本,并通过 4 位量化加载以减少显存占用。

from unsloth import FastVisionModel
import torch

# 根据实际路径修改本地模型文件夹位置
local_model_path = "/model-202507/Llama-3.2-11B-Vision-Instruct"

model, tokenizer = FastVisionModel.from_pretrained(
    local_model_path,
    load_in_4bit=True,
    use_gradient_checkpointing="unsloth"
)

运行后会看到 Unsloth 的优化日志,确认模型加载成功即可继续。

配置 LoRA 微调模块

为了高效训练,我们只微调特定组件(视觉层、语言层、注意力模块等),这样既能适配任务又能保持架构轻量。

model = FastVisionModel.get_peft_model(
    model,
    finetune_vision_layers=True,
    finetune_language_layers=True,
    finetune_attention_modules=True,
    finetune_mlp_modules=True,
    r=16,
    lora_alpha=16,
    lora_dropout=0,
    bias="none",
    random_state=3443,
    use_rslora=False,
    loftq_config=None,
)

数据加载

我们使用亚马逊商品描述数据集,选取前 500 个样本构建训练集。目标是让模型学会看图说话,生成符合电商场景的描述。

from datasets import load_dataset

dataset = load_dataset("/Dataset/amazon-product-descriptions-vlm/", split="train[0:500]")
print(dataset)

查看其中一条数据,比如索引 100 的样本:

(dataset[][])
(dataset[][])
print
100
"image"
print
100
"description"

输出示例显示这是一辆 Hot Wheels 玩具车的描述,结构清晰。

数据预处理:构造对话式训练样本

多模态指令微调需要将图像和文本组织成类似 OpenAI 的对话格式。下面函数将原始样本转换为 messages 列表。

instruction = """
You are an expert Amazon worker who is good at writing product descriptions.
Write the product description accurately by looking at the image.
"""

def convert_to_conversation(sample):
    conversation = [
        {
            "role": "user",
            "content": [
                {"type": "text", "text": instruction},
                {"type": "image", "image": sample["image"]},
            ],
        },
        {
            "role": "assistant",
            "content": [{"type": "text", "text": sample["description"]}],
        },
    ]
    return {"messages": conversation}

converted_dataset = [convert_to_conversation(sample) for sample in dataset]

转换后的数据结构更利于模型理解指令意图。

微调前效果测试

在训练前,先拿第 100 个样本跑一遍推理,看看基座模型的表现。

FastVisionModel.for_inference(model)

image = dataset[100]["image"]
messages = [
    {
        "role": "user",
        "content": [
            {"type": "image"},
            {"type": "text", "text": instruction},
        ],
    }
]
input_text = tokenizer.apply_chat_template(messages, add_generation_prompt=True)
inputs = tokenizer(image, input_text, add_special_tokens=False, return_tensors="pt").to("cuda")

from transformers import TextStreamer

text_streamer = TextStreamer(tokenizer, skip_prompt=True)
_ = model.generate(
    **inputs,
    streamer=text_streamer,
    max_new_tokens=128,
    use_cache=True,
    temperature=1.5,
    min_p=0.1
)

生成的描述虽然涵盖了车辆特征,但结构松散,存在品牌冗余词和无关图案描述,需要进一步优化。

模型微调

接下来启动监督微调(SFT)。Unsloth 提供了高效的训练器,支持混合精度和梯度累积。

from unsloth import is_bf16_supported
from unsloth.trainer import UnslothVisionDataCollator
from trl import SFTTrainer, SFTConfig

FastVisionModel.for_training(model)

trainer = SFTTrainer(
    model=model,
    tokenizer=tokenizer,
    data_collator=UnslothVisionDataCollator(model, tokenizer),
    train_dataset=converted_dataset,
    args=SFTConfig(
        per_device_train_batch_size=2,
        gradient_accumulation_steps=4,
        warmup_steps=5,
        max_steps=30,
        learning_rate=2e-4,
        fp16=not is_bf16_supported(),
        bf16=is_bf16_supported(),
        logging_steps=5,
        optim="adamw_8bit",
        weight_decay=0.01,
        lr_scheduler_type="linear",
        seed=3407,
        output_dir="outputs",
        report_to="none",
        remove_unused_columns=False,
        dataset_text_field="",
        dataset_kwargs={"skip_prepare_dataset": True},
        dataset_num_proc=4,
        max_seq_length=2048,
    ),
)

trainer_stats = trainer.train()

训练过程中损失平稳下降,说明模型正在学习图像与描述之间的映射关系。

微调后效果对比

再次使用第 45 个样本进行测试,观察变化。

FastVisionModel.for_inference(model)

image = dataset[45]["image"]
messages = [
    {
        "role": "user",
        "content": [
            {"type": "image"},
            {"type": "text", "text": instruction},
        ],
    }
]
input_text = tokenizer.apply_chat_template(messages, add_generation_prompt=True)
inputs = tokenizer(image, input_text, add_special_tokens=False, return_tensors="pt").to("cuda")

text_streamer = TextStreamer(tokenizer, skip_prompt=True)
_ = model.generate(
    **inputs,
    streamer=text_streamer,
    max_new_tokens=128,
    use_cache=True,
    temperature=1.5,
    min_p=0.1
)

结果显著改善:生成文本更加精准,风格贴近真实商品描述,去除了冗余信息。如果希望效果更好,建议用完整数据集再训练几轮。

目录

  1. 环境准备
  2. 加载 LLaMA 3.2 Vision 模型
  3. 根据实际路径修改本地模型文件夹位置
  4. 配置 LoRA 微调模块
  5. 数据加载
  6. 数据预处理:构造对话式训练样本
  7. 微调前效果测试
  8. 模型微调
  9. 微调后效果对比

更多推荐文章

查看全部
  • OpenClaw 深度调优:5 步让 AI 助手从聊天变实干
  • 代码大模型浪潮下,IT 技术人员的应对与转型策略
  • Anything XL 教程:Streamlit 实时预览与生成进度可视化
  • 用 龙虾10 分钟搞定 C 语言 + 前端实训?我试了,真香!
  • GitHub Copilot 学生认证教程及免费使用指南
  • OpenClaw 飞书机器人搭建指南
  • Ace-Translate 本地离线 AI 翻译工具使用指南
  • 本地部署 OpenClaw 配置飞书机器人指南
  • AI 大模型嵌入模型性能优化:缓存机制实战
  • C、Java、Python 三大语言对比与未来选择指南
  • 网络安全学习计划与就业方向指南
  • Stable Diffusion 模型原理与本地部署实践
  • Llama 与 PyTorch:大模型开发与微调实战
  • Python 数据统计指南:从入门到实战
  • AI 元人文:自感概念与 DOS 模型深度解析
  • 主流无人机厂商 RemoteID 支持情况汇总
  • 利用 Figma 插件将 AI 生成的 HTML 原型导入 Axure
  • 法律领域自然语言处理应用与实战
  • Vibe Coding 时代后端程序员开发前端最佳实践
  • GitHub Copilot 接入 Claude Code 本地技能的自动化映射方案

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online