当使用万相进行图生视频时,若通过Prompt 优化或调用官方视频特效仍无法满足对特定动作、特效或风格的定制需求,请使用模型微调。
适用范围
如何微调模型
图生视频-基于首帧
微调目标:训练一个“金钱雨特效”LoRA模型。
预期效果:输入一张首帧图像,无需提示词,模型自动生成一段带有“金钱雨特效”的视频。
|
输入首帧图像
|
输出视频(微调前) 无法通过提示词每次生成固定运动的“金钱雨”特效(运动画面不可控)。 |
输出视频(微调后) 微调后的模型无需提示词即能稳定复现训练集中的特定“金钱雨”特效。 |
图生视频-基于首尾帧
微调目标:训练一个“时尚杂志特效”LoRA模型。
预期效果:输入一张首帧和尾帧图像,无需提示词,模型自动生成一段带有“时尚杂志特效”的视频。
|
输入首帧图像
|
输入尾帧图像
|
输出视频(微调前) 无法通过提示词每次生成固定运动的“时尚杂志”特效(运动画面不可控)。 |
输出视频(微调后) 微调后的模型无需提示词即能稳定复现训练集中的特定“时尚杂志”特效。 |
运行下述代码前,请获取API Key,并配置API Key。
步骤1:上传数据集
将本地的数据集(.zip 格式)上传到阿里云百炼平台,并获取文件 ID (file_id)。
训练集样例数据:格式请参见训练集。
-
图生视频-基于首帧:wan-i2v-training-dataset.zip。
-
图生视频-基于首尾帧:wan-kf2v-training-dataset.zip。
请求示例
本示例使用图生视频-基于首帧模型,仅上传训练集,系统将自动从训练集中划分一部分作为验证集。
curl --location --request POST 'https://dashscope.aliyuncs.com/api/v1/files' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--form 'files=@"./wan-i2v-training-dataset.zip"' \
--form 'purpose="fine-tune"' \
--form 'descriptions="a fine-tune training data file for wan"'响应示例
请保存 file_id,这是上传数据集的唯一标识。
{
"data": {
"uploaded_files": [
{
"name": "wan-i2v-training-dataset.zip",
"file_id": "3bff1ef7-f72d-4285-bb75-xxxxxx"
}
],
"failed_uploads": []
},
"request_id": "1f3f1c5b-7418-4976-aaea-xxxxxx"
}
步骤2:微调模型
步骤2.1 创建微调任务
使用步骤1中的文件ID启动训练任务。
请求示例
请将<替换为训练数据集的文件id>完整替换为上一步获取的file_id。
图生视频-基于首帧
curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model":"wan2.5-i2v-preview",
"training_file_ids":[
"<替换为训练数据集的文件id>"
],
"training_type":"efficient_sft",
"hyper_parameters":{
"n_epochs":400,
"batch_size":2,
"learning_rate":2e-5,
"split":0.9,
"eval_epochs": 20,
"max_pixels": 36864
}
}'
图生视频-基于首尾帧
curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model":"wan2.2-kf2v-flash",
"training_file_ids":[
"<替换为训练数据集的文件id>"
],
"training_type":"efficient_sft",
"hyper_parameters":{
"n_epochs":400,
"batch_size":4,
"learning_rate":2e-5,
"split":0.9,
"eval_epochs": 20,
"max_pixels": 262144
}
}'
响应示例
关注 output 中的三个关键参数:
-
job_id:任务ID,用于查询进度。 -
finetuned_output:微调后的新模型名称,后续部署和调用时必须使用此名称。 -
status:模型训练状态。创建微调任务后,初始状态为PENDING,表示训练待开始。
{
...
"output": {
"job_id": "ft-202511111122-xxxx",
"status": "PENDING",
"finetuned_output": "xxxx-ft-202511111122-xxxx",
...
}
}
步骤2.2 查询微调任务状态
通过步骤2.1获得的 job_id 查询任务进度,轮询以下接口直到 status 变为 SUCCEEDED。
本文示例的微调任务训练需要数小时,具体耗时根据微调模型而定,请耐心等待。
请求示例
请将 URL 中的 <替换为微调任务job_id> 完整替换为job_id的值。
curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes/<替换为微调任务job_id>' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json'响应示例
关注output 字段的两个参数:
-
status:当它的值变为 SUCCEEDED 时,表示模型已训练完毕,可以进行模型部署。 -
usage:模型训练消耗的总Token数量,用于模型训练计费。
{
...
"output": {
"job_id": "ft-202511111122-xxxx",
"status": "SUCCEEDED",
"usage": 432000,
...
}
}
步骤3:部署微调后的模型
步骤3.1 部署模型为在线服务
当微调任务的状态为 SUCCEEDED 后,将模型部署为在线服务。
请求示例
请将<替换为模型名称model_name> 完整替换为创建微调任务的输出参数finetuned_output的值。
图生视频-基于首帧
curl --location 'https://dashscope.aliyuncs.com/api/v1/deployments' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model_name": "<替换为模型名称model_name>",
"aigc_config": {
"use_input_prompt": false,
"prompt": "根据图像内容提供视频描述,描述必须包含“然后开始展示s86b5p金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕她(他)。钞票持续落下,同时镜头缓缓拉进,她(他)双臂舒展上扬,脖颈微仰,表情惊喜,完全沉浸在这场狂野的金钱雨中”。\n输出模板:\n视频开头展示了[主体描述模板[环境描述]。然后开始展示s86b5p金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕她(他)。钞票持续落下,同时镜头缓缓拉进,她(他)双臂舒展上扬,脖颈微仰,表情惊喜,完全沉浸在这场狂野的金钱雨中。\n示例:\n视频开头展示了一位年轻女性在海滩上的场景。她的头发湿漉漉的,呈现出深棕色,卷曲且略显凌乱。她的脸上带着灿烂的笑容。背景是波涛汹涌的海浪和远处的山脉。然后开始展示s86b5p金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕她。钞票持续落下,同时镜头缓缓拉进,她双臂舒展上扬,脖颈微仰,表情惊喜,完全沉浸在这场狂野的金钱雨中。",
"lora_prompt_default": "然后开始展示s86b5p金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕主角。钞票持续落下,同时镜头缓缓拉进,主角双臂舒展上扬,脖颈微仰,表情惊喜,完全沉浸在这场狂野的金钱雨中。"
},
"capacity": 1,
"plan": "lora"
}'图生视频-基于首尾帧
curl --location 'https://dashscope.aliyuncs.com/api/v1/deployments' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model_name": "<替换为模型名称model_name>",
"aigc_config": {
"use_input_prompt": false,
"prompt": "根据图像内容提供视频描述,描述必须包含“然后她开始了s86b5p变身。”\n输出模板:\n视模板头展示了[主体描述]。[环境描述]。然后她开始了s86b5p变身。\n示例:\n视频开头展示了一位年轻女性在户外的场景。她有着短而卷曲的深棕色头发,面带微笑,显得非常亲切。她穿着一件黑色的Polo衫,上面有彩色的花卉刺绣图案,背景是绿色的植被和远处的山脉。然后她开始了s86b5p变身。",
"lora_prompt_default": "然后她开始了s86b5p变身。"
},
"capacity": 1,
"plan": "lora"
}'响应示例
关注 output 中的两个参数:
-
deployed_model:部署的模型名称,用于查询部署状态和调用模型。 -
status:模型部署状态。部署微调模型后,初始状态为PENDING,表示部署未开始。
{
...
"output": {
"deployed_model": "xxxx-ft-202511111122-xxxx",
"status": "PENDING",
...
}
}
步骤3.2 查询部署状态
查询部署状态,轮询以下接口直到 status 变为 RUNNING。
本文示例的微调模型,部署过程预计需要 5~10分钟。
请求示例
请将<替换为deployed_model>完整替换为步骤3.1输出参数deployed_model的值。
curl --location 'https://dashscope.aliyuncs.com/api/v1/deployments/<替换为deployed_model>' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' 响应示例
关注output字段的两个参数:
-
status:当状态变为 RUNNING 时,表示模型已部署成功,可以开始调用。 -
deployed_model:部署的模型名称。
{
...
"output": {
"status": "RUNNING",
"deployed_model": "xxxx-ft-202511111122-xxxx",
...
}
}
步骤4:调用模型生成视频
模型部署成功后(即部署状态status为 RUNNING ),即可发起调用。
构建自定义数据集
除了使用本文示例数据体验微调流程外,您也可以构建自己的数据集进行微调。
数据集应包含 训练集(必须)和 验证集(可选,支持从训练集自动划分)。所有文件请打包为.zip 格式,文件名建议仅使用英文、数字、下划线或短横线。
数据集格式
训练集:必须提供
图生视频-基于首帧
训练集包括首帧图像、训练视频和标注文件(data.jsonl)。
-
训练集样例:wan-i2v-training-dataset.zip。
-
zip包目录结构:
wan-i2v-training-dataset.zip ├── data.jsonl # 必须固定命名为data.jsonl,最大支持 20MB ├── image_1.jpeg # 图像最大分辨率为4096*4096,支持BMP、JPEG、PNG、WEBP格式 ├── video_1.mp4 # 视频最大分辨率为4096*4096,支持MP4、MOV格式 ├── image_2.jpeg └── video_2.mp4 -
标注文件(data.jsonl):每一行代表一条训练数据,必须为JSON 对象。一行训练数据的结构如下:
{ "prompt": "视频开头展示了一位年轻女性站在一堵爬满常春藤的砖墙前。她有着一头柔顺的红棕色长发,穿着一件白色的无袖连衣裙,佩戴着一条闪亮的银色项链,面带微笑。背景中的砖墙被绿色的藤蔓覆盖,显得古朴而自然。然后开始展示s86b5p金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕她。钞票持续落下,她双臂舒展上扬,脖颈微仰,表情惊喜,完全沉浸在这场狂野的金钱雨中。", "first_frame_path": "image_1.jpg", "video_path": "video_1.mp4" }
图生视频-基于首尾帧
训练集包括首帧图像、尾帧图像、训练视频和标注文件(data.jsonl)。
-
zip包目录结构:
wan-kf2v-training-dataset.zip ├── data.jsonl # 必须固定命名为data.jsonl,最大支持 20MB ├── image/ # 存放首帧和尾帧图像 │ ├── image_1_first.jpg # 图像最大分辨率为4096*4096,支持BMP、JPEG、PNG、WEBP格式 │ └── image_1_last.png └── video/ # 存放作为“训练目标”的视频文件 ├── video_1.mp4 # 视频最大分辨率为4096*4096,支持MP4、MOV格式 └── video_2.mov -
标注文件(data.jsonl):每一行代表一条训练数据,必须为JSON 对象。一行训练数据的结构如下:
{ "prompt": "视频开头展示了一位年轻女性在户外的场景。她有着短而卷曲的深棕色头发,面带微笑,显得非常亲切。她穿着一件黑色的Polo衫,上面有彩色的花卉刺绣图案,背景是绿色的植被和远处的山脉。然后她开始了s86b5p变身。", "first_frame_path": "image/image_1_first.jpg", "last_frame_path": "image/image_1_last.jpg", "video_path": "video/video_1.mp4" }
验证集:可选
图生视频-基于首帧
验证集包括首帧图像和标注文件(data.jsonl),无需提供视频。训练任务会在每个评估节点,自动调用模型服务,使用验证集的图像和 Prompt 生成预览视频。
-
验证集样例:wan-i2v-valid-dataset.zip。
-
zip包目录结构:
wan-i2v-valid-dataset.zip ├── data.jsonl # 必须固定命名为data.jsonl,最大支持 20MB ├── image_1.jpeg # 图像最大分辨率为4096*4096,支持BMP、JPEG、PNG、WEBP格式 └── image_2.jpeg -
标注文件(data.jsonl):每一行代表一条验证数据,必须为JSON 对象。一行验证数据的结构如下:
{ "prompt": "视频开头展示了一位年轻男性站在城市景观前的场景。他穿着黑白格子外套,内搭黑色连帽衫,面带微笑,神情自信。背景是夕阳下的城市天际线,远处可以看到著名的圆顶建筑和错落有致的屋顶,天空中云层密布,呈现出温暖的橙黄色调。然后开始展示s86b5p金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕他。钞票持续落下,同时镜头缓缓拉进,他双臂舒展上扬,脖颈微仰,表情惊喜,完全沉浸在这场狂野的金钱雨中。", "first_frame_path": "image_1.jpg" }
图生视频-基于首尾帧
验证集包括首帧图像、尾帧图像和标注文件(data.jsonl),无需提供视频。训练任务会在每个评估节点,自动调用模型服务,使用验证集的图像和 Prompt 生成预览视频。
-
验证集样例:wan-kf2v-valid-dataset.zip。
-
zip包目录结构:
wan-kf2v-valid-dataset.zip ├── data.jsonl # 必须固定命名为data.jsonl,最大支持 20MB └── image/ # 存放首帧和尾帧图像 ├── image_1_first.jpg # 图像最大分辨率为4096*4096,支持BMP、JPEG、PNG、WEBP格式 └── image_1_last.jpg -
标注文件(data.jsonl):每一行代表一条验证数据,必须为JSON 对象。一行验证数据的结构如下:
{ "prompt": "视频开头展示了一位年轻男性站在城市景观前的场景。他穿着黑白格子外套,内搭黑色连帽衫,面带微笑,神情自信。背景是夕阳下的城市天际线,远处可以看到著名的圆顶建筑和错落有致的屋顶,天空中云层密布,呈现出温暖的橙黄色调。然后开始展示s86b5p金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕他。钞票持续落下,同时镜头缓缓拉进,他双臂舒展上扬,脖颈微仰,表情惊喜,完全沉浸在这场狂野的金钱雨中。", "first_frame_path": "image/image_1_first.jpg", "last_frame_path": "image/image_1_last.jpg", }
数据规模与限制
-
数据量:建议至少提供 10条 数据。训练数据量越大越好,推荐 20-100 条以获得稳定效果。
-
Zip压缩包:通过 API 上传时,总包大小 ≤ 1GB。
-
训练图像要求:
-
图像格式支持BMP、JPEG、PNG、WEBP。
-
图像分辨率 ≤ 4096×4096。
-
单个图像文件大小无硬性限制(系统将自动预处理)
-
-
训练视频要求:
-
视频格式支持 MP4、MOV。
-
视频分辨率 ≤ 4096×4096。
-
单个视频文件大小无硬性限制(系统将自动预处理)。
-
单个视频时长:wan2.2模型 ≤ 5秒;wan2.5模型 ≤ 10秒。
-
数据收集和清洗
1. 确定微调场景
万相支持图生视频的微调场景包括:
-
固定视频特效:让模型学会某种特定的视觉变化,如旋转木马、魔法换装等。
-
固定人物动作:提升模型对特定肢体动作的复现度,如特定的舞蹈动作、武术招式。
-
固定视频运镜:复刻复杂的镜头语言,如推拉摇移、环绕拍摄等固定模板。
2. 获取原始素材
-
AI 生成筛选:利用“万相”基础模型批量生成视频,再人工挑选出最符合目标效果的优质样本。这是最常用的方法。
-
真实拍摄:如果您的目标是追求高真实感的互动场景(如拥抱、握手等),使用实拍素材是最佳选择。
-
三维软件渲染:对于需要控制细节的特效或抽象动画,建议使用 3D 软件(如 Blender、C4D)制作素材。
3. 清洗数据
|
维度 |
正面要求 |
负面案例 |
|
一致性 |
核心特征必须高度统一。 例如:训练“360度旋转”,所有视频必须都是顺时针旋转,且旋转速度基本一致。 |
方向混杂。 数据集中既有顺时针,又有逆时针。模型不知道该学哪个方向。 |
|
多样性 |
主体与场景越丰富越好。 覆盖不同主体(男女老少、猫狗建筑)和不同构图(远近景、俯仰拍)。同时,分辨率和长宽比应尽可能多样化。 |
单一场景或主体。 所有视频都是“穿红衣的人在白墙前旋转”。模型会误以为“红衣”和“白墙”是特效的一部分,换了衣服就不会转了。 |
|
均衡性 |
各类型数据比例均衡。 如果包含多种风格,数量应大致相等。 |
比例严重失调。 90%是人像视频,10%是风景视频。模型可能在生成风景视频时效果不佳。 |
|
纯净度 |
画面干净清晰。 使用无干扰的原始素材。 |
有干扰元素。 视频中带有字幕、台标、水印、明显的黑边或噪点。模型可能会把水印当成特效学进去。 |
|
时长 |
素材时长 ≤ 目标时长。 若期望生成5秒视频,素材最好裁剪为4-5秒。 |
素材过长。 期望生成5秒,却喂给模型8秒的素材,会导致动作学习不完整,产生截断感。 |
视频标注:为视频编写Prompt
在数据集的标注文件(data.jsonl)中,每个视频都有对应的一段 Prompt。Prompt 是用来描述视频的画面内容,Prompt 的质量直接决定模型“学什么”。
|
Prompt示例 视频开头展示了一位年轻女性站在一堵爬满常春藤的砖墙前。她有着一头柔顺的红棕色长发,穿着一件白色的无袖连衣裙,佩戴着一条闪亮的银色项链,面带微笑。背景是被绿色的藤蔓覆盖的砖墙,显得古朴而自然。然后开始展示s86b5p金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕她。钞票持续落下,她双臂舒展上扬,脖颈微仰,表情惊喜,完全沉浸在这场狂野的金钱雨中。 |
Prompt编写公式
Prompt = [主体描述] + [背景描述] + [触发词] + [运动描述]
|
Prompt描述项 |
说明 |
填写建议 |
示例 |
|
主体描述 |
描述画面中原本存在的人或物 |
必填 |
视频开头展示了一位年轻女性... |
|
背景描述 |
描述画面中主体所处的环境 |
必填 |
背景是被绿色的藤蔓覆盖的砖墙... |
|
触发词 |
一个无实际意义的稀有词汇 |
推荐填写 |
s86b5p 或 m01aa |
|
运动描述 |
详细描述视频中特效发生的运动变化 |
推荐填写 |
无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下... |
如何写好Prompt
遵循特效描述的一致性原则
所有包含该特效的样本,其特效的运动描述部分应尽量保持一致。训练集和验证集均遵守此规则。
-
目的:当模型发现
s86b5p出现时,后面总是跟着一段固定的描述,且画面总是出现金钱雨,它就能记住:s86b5p = 金钱雨视觉效果。 -
示例:无论是“年轻女性”还是“西装男性”,只要是金钱雨特效,Prompt 后半段都统一写为:“...然后开始展示 s86b5p 金钱雨特效,无数美元钞票如暴雨般倾泻而下...”
样本类型
Prompt 内容(注意下划线部分的描述一致性)
训练集样本1
视频开头展示了一位年轻女性站在砖墙前...(省略环境描述)...然后开始展示 s86b5p 金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕她。钞票持续落下,她双臂舒展上扬,表情惊喜,完全沉浸在这场狂野的金钱雨中。
训练集样本2
视频开头展示了一位西装男性在高档餐厅内...(省略环境描述)...然后开始展示 s86b5p 金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕他。钞票持续落下,他双臂舒展上扬,表情惊喜,完全沉浸在这场狂野的金钱雨中。
验证集样本1
视频开头展示了一位年轻小孩站在城市景观前...(省略环境描述)...然后开始展示s86b5p金钱雨特效,无数巨大尺寸的美元钞票(米黄底/深绿图案)如暴雨般倾泻而下,密集地砸向并环绕他。钞票持续落下,同时镜头缓缓拉进,他双臂舒展上扬,脖颈微仰,表情惊喜,完全沉浸在这场狂野的金钱雨中。
借助 AI 生成 Prompt
为了获得质量较高的Prompt,推荐使用Qwen-VL等多模态大模型来辅助生成视频的Prompt。
-
使用 AI 辅助生成初始描述
-
自由发散(寻找灵感):如果不知道该如何描述特效,可以先让 AI 自由发挥。
-
直接发送“
详细描述视频内容”,观察模型输出了什么。 -
重点看模型用了哪些词汇来形容特效的运动轨迹(如“暴雨般倾泻而下”、“镜头缓缓拉进”),这些词汇可以作为后续优化的素材。
-
-
固定句式(规范输出):当有了大概思路后,可基于标注公式设计一套固定句式,引导 AI 生成符合格式的 Prompt。
-
-
提炼特效模板
-
建议对多个包含相同特效的样本重复运行,找出描述特效时共同使用的高频、准确词组,从中提炼出一段通用的“特效描述”。
-
将这段标准化的特效描述复制粘贴到该特效的所有数据集中。
-
保留每个样本独特的“主体”和“背景”描述,仅将“特效描述”部分替换为统一模板。
-
-
人工检查
AI 可能会产生幻觉或识别错误,最后请进行人工检查,例如:确认主体和背景的描述是否符合画面真实情况等。
使用验证集评估模型
指定验证集
微调任务必须包含训练集,验证集则是可选项。您可以选择由系统自动划分或手动上传验证集,具体指定方式如下:
方式一:未上传验证集(系统自动划分)
在创建微调任务时,如果没有单独上传验证集,即未传入validation_file_ids参数,系统将根据以下两个超参数,自动从训练集中划分出一部分作为验证集:
-
split:训练集划分比例。例如,0.9 表示将90%的数据用于训练,剩余的10%用作验证。 -
max_split_val_dataset_sample:自动划分验证集的最大样本数。
验证集切分规则:系统会选取 数据集总数×(1 - split) 和 max_split_val_dataset_sample 中的较小值。
-
示例:假设仅上传训练集,且训练集有 100 条数据,split=0.9(即验证集切分10%),max_split_val_dataset_sample=5。
-
理论切分:100 × 10% = 10 条。
-
实际切分:min(10, 5)=5,所以系统只取 5 条作为验证集。
-
方式二:主动上传验证集(通过 validation_file_ids 指定)
如果您希望使用一套自己准备的数据来评估Checkpoint,而不是依赖系统随机划分,可以上传自定义验证集。
注意:一旦选择主动上传,系统将完全忽略上述自动划分规则,仅使用您上传的数据进行验证。
挑选最佳Checkpoint进行部署
在训练过程中,系统会定期保存模型的“快照”(即 Checkpoint)。默认情况下,系统会输出最后一个Checkpoint作为最终的微调模型。但中间过程产出的Checkpoint效果可能优于最终版本,您可以从中挑选出最满意的一个进行部署。
系统将按照超参数eval_epochs设定的间隔,在验证集上运行Checkpoint并生成预览视频。
-
如何评估:通过直接观察生成的预览视频来判断效果。
-
挑选标准:找到效果最好、且没有动作变形的那个 Checkpoint 。
操作步骤
步骤1:查看Checkpoint生成的预览效果
步骤2:导出Checkpoint,并获取待部署的模型名称
步骤3:部署并调用模型
应用于生产环境
在实际生产中,如果初次训练的模型效果不佳(如画面崩坏、特效不明显、动作不准确),可参考以下维度调优:
1. 检查数据与Prompt
-
数据一致性:数据一致性是核心。检查是否有方向相反、风格差异过大的“差样本”。
-
样本数量:建议将高质量数据增加至 20条以上。
-
Prompt:确保触发词为无意义稀有词(如 s86b5p),避免使用常用词(如 running)造成干扰。
2. 调整超参数:参数说明请参见超参数。
-
n_epochs (训练轮数)
-
默认值:400,推荐使用默认值。若需调整,请遵循 “总训练步数 (Steps) ≥ 800” 的原则。
-
总步数计算公式:
steps = n_epochs × 向上取整(训练集大小 / batch_size)。 -
因此,n_epochs最小值计算公式:
n_epochs = 800 / 向上取整(数据集大小 / batch_size)。 -
示例:假设训练集有5条数据,使用Wan2.5模型(batch_size=2)。
-
每轮训练步数:5 / 2 = 2.5,向上取整为3。总的训练轮数: n_epochs = 800 / 3 ≈ 267。此值为推荐的最小值,可根据实际业务适当调高,比如300。
-
-
-
learning_rate (学习率)、batch_size (批次大小)推荐使用默认值,通常无需修改。
计费说明
API文档
常见问题
Q:如何计算训练集和验证集的数据量?
A: 训练集必须提供,验证集可选。具体计算方式如下:
-
当未传入验证集时:上传的训练集即为“数据集总数”,系统会自动从训练集中划出一部分数据用于验证。
-
验证集数量 =
min(数据集总数 × (1 − split), max_split_val_dataset_sample)。计算示例请参见指定验证集。 -
训练集数量 =
数据集总数 − 验证集数量。
-
-
当主动上传验证集时:系统不再从训练数据中划分验证集。
-
训练集数量 = 上传的训练集数据量。
-
验证集数量 = 上传的验证集数据量。
-
Q:如何设计一个好的触发词?
A: 规则如下:
-
使用无意义的字母组合,如 sksstyle, a8z2_bbb。
-
避免使用常用英语单词(如 beautiful, fire, dance),否则会污染模型原本对这些词的理解。
Q:微调能改变视频的分辨率或时长吗?
A: 不能。微调是学习“内容”和“动态”,不是改变“规格”。输出视频的格式(分辨率、帧率、时长上限)依然由基础模型决定。


