👁️视觉微调

了解如何使用 Unsloth 微调视觉/多模态 LLM。

对视觉模型进行微调可以使模型在某些任务上表现出色,这些任务是普通大语言模型不擅长的,例如物体/运动检测。 您也可以训练 带有强化学习的视觉-语言模型(VLMs). 我们提供许多用于视觉微调的免费笔记本:

circle-info

最好确保您的数据集中所有图像具有相同的大小/尺寸。使用300-1000像素的尺寸以确保训练不会耗时过长或占用过多资源。

禁用视觉/仅文本微调

为了微调视觉模型,我们现在允许您选择要微调的模型部分。您可以选择仅微调视觉层、或语言层、或注意力/MLP 层!我们默认将它们全部开启!

model = FastVisionModel.get_peft_model(
    model,
    finetune_vision_layers     = True, # 如果不微调视觉层则为 False
    finetune_language_layers   = True, # 如果不微调语言层则为 False
    finetune_attention_modules = True, # 如果不微调注意力层则为 False
    finetune_mlp_modules       = True, # 如果不微调 MLP 层则为 False

    r = 16,                           # 值越大,精度越高,但可能过拟合
    lora_alpha = 16,                  # 建议 alpha 至少等于 r
    lora_dropout = 0,
    bias = "none",
    random_state = 3407,
    use_rslora = False,               # 我们支持秩稳定化的 LoRA
    loftq_config = None,               # 以及 LoftQ
    target_modules = "all-linear",    # 现在可选!如有需要可指定列表
    modules_to_save=[
        "lm_head",
        "embed_tokens",
    ],
)

视觉数据整理器(Data Collator)

我们为视觉数据集准备了一个专门的数据整理器:

数据整理器的参数如下:

多图像训练

为了对具有多张图像的模型进行微调或训练,最直接的改动是替换:

为:

使用 map 会触发数据集标准化和 Arrow 处理规则,这些规则可能很严格且更难定义。

视觉微调的数据集

用于微调视觉或多模态模型的数据集类似于标准的问题与答案对 数据集 ,但这次,它们还包含图像输入。例如, Llama 3.2 视觉 笔记本arrow-up-right 使用了一个放射影像案例,展示了 AI 如何帮助医疗专业人员更高效地分析 X 光、CT 扫描和超声。

我们将使用 ROCO 放射影像数据集的抽样版本。您可以在此处访问该数据集 此处arrow-up-right。该数据集包含展示医疗状况和疾病的 X 光、CT 扫描和超声图像。每张图像都有专家撰写的说明作为标题。目标是微调一个 VLM,使其成为医疗专业人员的有用分析工具。

让我们查看数据集,并检查第一个示例显示的内容:

图像
说明

全景放射影像显示右后上颌骨有溶骨性病变,并伴随上颌窦底的吸收(箭头所示)。

为格式化数据集,所有视觉微调任务应按如下方式格式化:

我们将设计一个自定义指令,要求 VLM 成为放射影像学专家。还请注意,您可以添加多个回合而不仅仅是一条指令,使其成为动态对话。

让我们将数据集转换为微调的“正确”格式:

第一个示例现在结构如下:

在我们进行任何微调之前,也许视觉模型已经知道如何分析这些图像?让我们检查是否是这种情况!

结果如下:

欲了解更多细节,请参阅我们在 此笔记本中的数据集部分arrow-up-right.

🔎仅对视觉模型(VLMs)训练助理回复

对于语言模型,我们可以使用 from unsloth.chat_templates import train_on_responses_only 如前所述。对于视觉模型,在 UnslothVisionDataCollator 中使用额外参数, UnslothVisionDataCollator 就像之前一样!详见 视觉微调 以获取有关如何使用视觉数据整理器的更多详细信息。

例如,对于 Llama 3.2 视觉:

最后更新于

这有帮助吗?