基于千问2.5-VL-7B训练识别人的表情

一、安装LLaMA-Factory

        我们使用LLaMA-Factory来进行微调,安装LLaMA-Factory来参考文章:
大模型微调工具LLaMA-Factory的安装流程-CSDN博客
 

二、下载千问2.5-VL-7B模型

我们使用千问2.5-VL-7B多模态模型来进行微调
通义千问2.5-VL-7B-Instruct

下载命令(需要先安装modelscope的依赖,魔塔上有安装教程):

modelscope download --model Qwen/Qwen2.5-VL-7B-Instruct

三、数据集

        在微调之前准备数据集,我们使用Kaggle平台上开放的数据集FER-2013,该数据集包含了大量的人脸表情图片,并做了对应的表情标注。

        数据地址:FER-2013 | Kaggle

        数据下载后需要构建训练集和验证集的json格式文件,包括图片的路径和情感标签。
下面是处理数据的脚本:

import json
import os
from pathlib import Path# 定义消息对象
class Message:def __init__(self, role, content):self.role = roleself.content = content# 定义对话组对象
class ConversationGroup:def __init__(self, messages, images):self.messages = messagesself.images = imagesdef to_dict(self):return {"messages": [msg.__dict__ for msg in self.messages],"images": self.images}def get_file_paths(directory):"""获取指定目录下所有文件夹中的文件路径:param directory: 要扫描的根目录:return: 包含所有文件路径的列表"""file_paths = []# 检查目录是否存在if not os.path.exists(directory):print(f"错误:目录 '{directory}' 不存在")return file_paths# 遍历目录下的所有项目for item in os.listdir(directory):item_path = os.path.join(directory, item)# 只处理文件夹(忽略文件)if os.path.isdir(item_path):# 遍历文件夹中的所有文件for file in os.listdir(item_path):file_path = os.path.join(item_path, file)# 只添加文件(忽略子文件夹)if os.path.isfile(file_path):file_paths.append(file_path)return file_pathsdef get_path_dir_info(path_file):new_path = "archive" + path_file.split("archive")[1]path_n = Path(new_path)# 获取上一级目录名parent_dir_name = path_n.parent.namereturn new_path, parent_dir_nameemotion = {"angry":"生气/愤怒","disgust":"厌恶","fear":"害怕/恐惧","happy":"开心/快乐","neutral":"平静","sad":"悲伤/难过","surprise":"惊讶/惊奇"
}
if __name__ == '__main__':all_files = get_file_paths("/Users/youngwea/Downloads/archive/train")print(all_files)output_data = []for file in all_files:new_path , dir_name = get_path_dir_info(file)user_message = Message("user", "<image>是什么表情?")assistant_message = Message("assistant", emotion.get(dir_name))conversation = ConversationGroup(messages=[user_message, assistant_message],images=[new_path])output_data.append(conversation.to_dict())json_output = json.dumps(output_data, indent=2, ensure_ascii=False)with open('../data/qwen2.5-vl-train-data.json', 'w', encoding='utf-8') as file:file.write(json_output)

处理好的数据集需要复制到LLaMA-Factory的工程项目的/data目录中去,再在dataset_info.json文件中添加数据文件。

三、训练配置:

训练轮数为3的时候,对识别表情不太准确。增大后准确率高点。


训练脚本:

llamafactory-cli train \--stage sft \--do_train True \--model_name_or_path xxx/modelscope/hub/models/Qwen/Qwen2.5-VL-7B-Instruct \--preprocessing_num_workers 16 \--finetuning_type lora \--template qwen2_vl \--flash_attn auto \--dataset_dir data \--dataset qwen2.5-vl-train-data \--cutoff_len 2048 \--learning_rate 5e-05 \--num_train_epochs 5.0 \--max_samples 100000 \--per_device_train_batch_size 2 \--gradient_accumulation_steps 8 \--lr_scheduler_type cosine \--max_grad_norm 1.0 \--logging_steps 5 \--save_steps 100 \--warmup_steps 0 \--packing False \--enable_thinking True \--report_to none \--output_dir saves/Qwen2.5-VL-7B-Instruct/lora/train_qwen2.5-vl-_2025-07-31-14-02-45 \--bf16 True \--plot_loss True \--trust_remote_code True \--ddp_timeout 180000000 \--include_num_input_tokens_seen True \--optim adamw_torch \--lora_rank 8 \--lora_alpha 16 \--lora_dropout 0 \--lora_target all \--freeze_vision_tower True \--freeze_multi_modal_projector True \--freeze_language_model False \--image_max_pixels 589824 \--image_min_pixels 1024 \--video_max_pixels 65536 \--video_min_pixels 256

 推荐一个非常好用的工具集合:在线工具集合 - 您的开发助手

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93702.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android屏幕适配:从dp到px的转换与今日头条适配方案详解

前言 在Android开发中&#xff0c;屏幕适配一直是一个重要且复杂的话题。不同设备有着不同的屏幕尺寸、分辨率和像素密度&#xff0c;如何让应用在各种设备上都能良好显示&#xff0c;是每个开发者都需要面对的问题。本文将深入探讨Android系统中dp到px的转换原理&#xff0c;并…

nvim 缩进4空格

要把 Neovim 配置为缩进 4 空格&#xff0c;并适用于所有语言&#xff08;或某些语言如 C/C&#xff09;&#xff0c;你只需要设置这三个核心选项即可&#xff1a;✅ 通用方式&#xff1a;在 init.lua 或 options.lua 中添加 vim.opt.tabstop 4 -- 一个 <Tab> 等…

pdw估计edw怎么估计

问题一、pdw估计edw怎么估计PDW&#xff08;Pulse Descriptor Word&#xff09;数据是雷达接收到的每一个脉冲的瞬时特征数据&#xff0c;EDW&#xff08;Emitter Descriptor Word&#xff09;是对某一辐射源&#xff08;发射机&#xff09;整体特性的估计。PDW 是每一个脉冲的…

TS语法最佳实践

switch 的 case不能使用条件表达式JavaScript 允许在 switch 的 case 中使用条件表达式&#xff0c;但这种用法实际上是无效的&#xff0c;因为 case 的值会被隐式地转换为布尔值。TypeScript 明确禁止这种用法&#xff0c;以避免隐式类型转换导致的逻辑错误。建议使用 if-else…

行业热点丨仿真历史数据难以使用?如何利用几何深度学习破局,加速汽车工程创新

01、AI 驱动研发升级&#xff1a;几何深度学习创造行业新价值人工智能正加速推动各行业研发能力升级。麦肯锡最新报告显示&#xff0c;该技术在制药、化工和航空航天等领域的应用&#xff0c;有望为相关企业创造高达5600亿美元的经济价值。 AI 技术应用的先行者&#xff0c;全球…

JSBridge原理与实现全解析

JSBridge 是用于连接 JavaScript&#xff08;H5&#xff09; 和原生应用&#xff08;iOS/Android&#xff09;的桥梁&#xff0c;允许它们之间相互调用方法。 &#x1f309; 一、JSBridge 双向通信流程图 #mermaid-svg-AoDVdJL2VJBnTJ2Q {font-family:"trebuchet ms"…

Mockito:Java单元测试Mock框架

文章目录一、写在前面1、简介2、依赖二、使用1、基本使用2、注解&#xff08;1&#xff09;开启注解&#xff08;2&#xff09;Mock 注解&#xff08;3&#xff09;DoNotMock 注解&#xff08;4&#xff09;Spy 注解&#xff08;5&#xff09;Captor 注解&#xff08;6&#xf…

群晖Synology Drive:打造高效安全的私有云协作平台

随着企业与个人对数据协作、安全与自主性的需求不断提升&#xff0c;群晖&#xff08;Synology&#xff09;推出的 Synology Drive 成为了私人云存储与团队协作的利器。下面将从功能亮点、使用方式、安全管理、适用场景等角度&#xff0c;为你全面解读这款强大的私有云方案。Sy…

开发避坑短篇(11):Oracle DATE(7)到MySQL时间类型精度冲突解决方案

异常信息 [Err] [Dtf] 1426 - Too-big precision 7 specified for CREATE_TIME. Maximum is 6.异常背景 用Navicat的数据传输功能进行oracle的数据表迁移到到mysql时报错。 异常分析 oracle的DATE类型的长度是7位&#xff0c;而mysql的datetime类型的长度最多6位&#xff0c;所…

怎么判断一个DAPP是否真正去中心化

判断一个DAPP&#xff08;去中心化应用&#xff09;是否真正去中心化&#xff0c;需要从多个维度进行考察。以下是关键评估标准&#xff1a;1. 区块链依赖程度✅ 真正去中心化&#xff1a;核心逻辑和数据处理完全依赖智能合约&#xff0c;运行在区块链上&#xff08;如以太坊、…

F12 开发者工具 使用指北

F12 开发者工具 使用指北元素 Elements控制台 Console源代码 Sources网络 Network请求文件具体说明首先介绍Chrome开发者工具中&#xff0c;调试时使用最多的三个功能页面是&#xff1a;元素&#xff08;ELements&#xff09;、控制台&#xff08;Console&#xff09;、源代码&…

AD域设计与管理-域策略-进阶

AD域安全保密要求&#xff0c;也是最为常见的一些组策略配置需求 目录 1.禁止U盘&#xff0c;DVD&#xff0c;软盘等可移动存储使用 2.禁止员工自行安装软件 3.硬盘全部采用bitlocker上锁&#xff0c;密码保存至AD域控 4.密码复杂度要求 5.开启windows防火墙且不允许员工…

Python设计模式详解:策略模式(Strategy Pattern)实战指南

Python设计模式详解&#xff1a;策略模式实战指南什么是策略模式&#xff1f;核心组件基础实现利用Python特性的高级实现使用装饰器的策略模式策略模式的优势策略模式的适用场景实际应用案例&#xff1a;电商折扣系统注意事项总结在面向对象编程中&#xff0c;设计模式为常见问…

一次 web 请求响应中,通常那个部分最耗时?

文章目录一次Web请求的完整旅程1. DNS解析2. TCP连接建立3. 发送HTTP请求4. 服务器处理5. 服务器响应6. 浏览器渲染哪个环节通常最耗时&#xff1f;1. 数据库查询2. 外部API调用3. 复杂的业务逻辑如何优化各个环节&#xff1f;1. 数据库优化2. 缓存策略3. 异步处理总结一次Web请…

IO流-概述和体系

1.什么是I0流?存储和读取数据的解决方案|: input 0: output流:像水流一样传输数据2.10流的作用?用于读写数据(本地文件&#xff0c;网络)3. I0流按照流向可以分类哪两种流?输出流:程序-->文件输入流:文件-->程序4. I0流按照操作文件的类型可以分类哪两种流?…

提高建筑舒适度与能源效率,楼宇自控系统意义重大

随着城市化进程的加速和人们对建筑环境要求的不断提高&#xff0c;如何在保证建筑舒适度的同时提升能源效率&#xff0c;成为建筑行业面临的重要课题。楼宇自控系统&#xff08;Building Automation System&#xff0c;简称BAS&#xff09;作为现代智能建筑的核心组成部分&…

学习笔记《区块链技术与应用》第4天 比特币脚本语言

输入0.7 输出0.5 23个确认 不太可能回滚了交易id hash值 版本 locktime 交易剩下时间&#xff1a;0立即生效 confirmation:确认信息 time&#xff1a;产生时间 blocktime&#xff1a;块产生时间vout: 交易中第0个输入 scriptSig&#xff1a;输入脚本&#xff08;input script)n…

3.Linux 系统文件类型与文件权限

1.文件类型Linux 下所有的东西都可以看做文件&#xff0c;Linux 将文件分为以下几种类型&#xff1a;普通文件 ‘-’目录文件 ‘d’管道文件 ‘p’链接文件 ‘l’设备文件&#xff08;块设备 ’b’ 、字符设备 ‘c’&#xff09;套接字文件 ‘s’Linux 上不以文件的扩展名区别文…

订单识别技术原理及场景应用

订单OCR&#xff08;光学字符识别&#xff09;技术通过图像处理和深度学习算法&#xff0c;将纸质或电子版订单中的文字信息转化为结构化数据。以下是其技术原理和典型应用场景的详细解析&#xff1a;一、技术原理剖析1. 核心处理流程图像预处理去噪&#xff1a;消除阴影、折痕…

[优选算法]复写零

题目链接 LeetCode复写零 题目描述 题目解析 一、问题理解 题目要求&#xff1a;给定一个整数数组 arr&#xff0c;在不创建新数组的情况下&#xff0c;将每个出现的 0 复写一遍&#xff08;即一个 0 变成两个 0&#xff09;&#xff0c;同时保持其他元素的相对顺序不变。复…