當使用萬相進行 圖生視頻 時,若通過 Prompt 最佳化 或調用 官方視頻特效 仍無法滿足對 特定動作、特效或風格 的定製需求,請使用 模型微調 。
適用範圍
-
適用地區:本文描述的功能僅在新加坡地區可用,且必須使用該地區的API Key。
-
支援微調的方式:SFT-LoRA高效微調。
-
支援微調的模型:
- 圖生視頻-基於首幀:wan2.7-i2v、wan2.6-i2v、wan2.5-i2v-preview、wan2.2-i2v-flash。
- 圖生視頻-基於首尾幀:wan2.2-kf2v-flash。
如何微調模型
圖生視頻-基於首幀
微調目標:訓練一個“金錢雨特效”LoRA模型。
預期效果:輸入一張首幀映像,無需提示詞,模型自動產生一段帶有“金錢雨特效”的視頻。
輸入首幀映像![]() | 輸出視頻(微調前)
| 輸出視頻(微調後)
|
圖生視頻-基於首尾幀
微調目標:訓練一個“時尚雜誌特效”LoRA模型。預期效果:輸入一張首幀和尾幀映像,無需提示詞,模型自動產生一段帶有“時尚雜誌特效”的視頻。
輸入首幀映像![]() | 輸入尾幀映像![]() | 輸出視頻(微調前)
| 輸出視頻(微調後)
|
運行下述代碼前,請擷取與配置 API Key,並配置API Key。
步驟1:上傳資料集
將本地的資料集(.zip 格式)上傳到阿里雲百鍊平台,並擷取檔案 ID (id)。
訓練集範例資料:格式請參見訓練集。
- 圖生視頻-基於首幀:wan-i2v-training-dataset.zip。
- 圖生視頻-基於首尾幀:wan-kf2v-training-dataset.zip。
本樣本使用圖生視頻-基於首幀模型,僅上傳訓練集,系統將自動從訓練集中劃分一部分作為驗證集。上傳資料集耗時約數分鐘,具體時間根據檔案大小而定。
curl --location --request POST 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/files' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--form 'file=@"./wan-i2v-training-dataset.zip"' \
--form 'purpose="fine-tune"'
響應樣本
請儲存 id,這是上傳資料集的唯一標識。
{
"id": "file-ft-b2416bacc4d742xxxx",
"object": "file",
"bytes": 73310369,
"filename": "wan-i2v-training-dataset.zip",
"purpose": "fine-tune",
"status": "processed",
"created_at": 1766127125
}
步驟2:微調模型
步驟2.1 建立微調任務
使用步驟1中的檔案ID啟動訓練任務。
請求樣本請將<替換為訓練資料集的檔案id>完整替換為上一步擷取的id。
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "wan2.7-i2v",
"training_file_ids": [
"<替換為訓練資料集的檔案id>"
],
"training_type": "efficient_sft",
"hyper_parameters": {
"n_epochs": 50,
"batch_size": 1,
"learning_rate": 2e-5,
"split": 0.9,
"max_split_val_dataset_sample": 5,
"eval_epochs": 20,
"max_pixels": 102400,
"save_total_limit": 10,
"lora_rank": 32,
"lora_alpha": 32
}
}'
curl --location 'https://dashscope-intl.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": 50,
"batch_size": 4,
"learning_rate": 2e-5,
"split": 0.9,
"max_split_val_dataset_sample": 5,
"eval_epochs": 20,
"max_pixels": 262144,
"save_total_limit": 10,
"lora_rank": 32,
"lora_alpha": 32
}
}'
欄位 | 類型 | 必選 | 描述 | 推薦值 |
|---|---|---|---|---|
batch_size | int | 是 | 批次大小。一次性送入模型進行訓練的資料條數。 該參數為單一實例配置,建議使用各模型的推薦值,非必要請勿調整。
| 以模型為準 |
n_epochs | int | 是 | 訓練迴圈次數。steps = n_epochs × ⌈資料集大小 / batch_size⌉。建議總步數 ≥ 800。
| 50 |
learning_rate | float | 是 | 學習率。控制模型權重更新幅度。過高可能導致模型變差,過低則變化不明顯。 | 2e-5 |
eval_epochs | int | 是 | 驗證間隔。取值需 ≥ | 20 |
max_pixels | int | 是 | 訓練視頻的最大解析度(像素總數 = 寬×高)。系統僅對超過該值的視頻進行縮放處理。
| 以模型為準 |
split | float | 否 | 訓練集劃分比例。取值 (0,1),僅在未指定 validation_datasets 時生效。 | 0.9 |
max_split_val_dataset_sample | int | 否 | 自動劃分驗證集的最大樣本數。驗證集數量 = min(總數×(1−split), 此值)。 | 5 |
save_total_limit | int | 否 | Checkpoint 儲存數量上限。系統只儲存最後 N 個 Checkpoint。 | 10 |
lora_rank | int | 否 | LoRA 低秩矩陣維數。取值須為 2n(16/32/64)。 | 32 |
lora_alpha | int | 否 | LoRA 權重縮放係數。取值須為 2n(16/32/64)。 | 32 |
關注 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-intl.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-intl.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": "Provide a video description based on the image content. The description must include the phrase “Then the s86b5p money rain effect begins, countless huge-sized US dollar bills (beige background/dark green patterns) pour down like a torrential rain, densely hitting and surrounding her. The bills continue to fall, she/he stretches her/his arms upward, neck slightly tilted back, expression surprised, completely immersed in this wild money rain.“\nOutput Template:\nThe video begins with a shot of [subject description]. [Environment description]. Then the s86b5p money rain effect begins, countless huge-sized US dollar bills (beige background/dark green patterns) pour down like a torrential rain, densely hitting and surrounding her. The bills continue to fall, she/he stretches her/his arms upward, neck slightly tilted back, expression surprised, completely immersed in this wild money rain.\nExample:\nThe video begins showing a young woman standing in front of a brick wall covered with ivy. She has long, smooth reddish-brown hair, wearing a white sleeveless dress, a shiny silver necklace, and a smile on her face. The brick wall in the background is covered with green vines, appearing rustic and natural. Then the s86b5p money rain effect begins, countless huge-sized US dollar bills (beige background/dark green patterns) pour down like a torrential rain, densely hitting and surrounding her. The bills continue to fall, she stretches her arms upward, neck slightly tilted back, expression surprised, completely immersed in this wild money rain.",
"lora_prompt_default": "Then the s86b5p money rain effect begins, countless huge-sized US dollar bills (beige background/dark green patterns) pour down like a torrential rain, densely hitting and surrounding her. The bills continue to fall, she/he stretches her/his arms upward, neck slightly tilted back, expression surprised, completely immersed in this wild money rain."
},
"capacity": 1,
"plan": "lora"
}'
curl --location 'https://dashscope-intl.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": "Provide a video description based on the image content. The description must include the phrase “Then she/he begins the s86b5p transformation.“\nOutput Template:\nThe video begins with a shot of [subject description]. [Environment description]. Then she/he begins the s86b5p transformation.\nExample:\nThe video begins with a young woman in an outdoor setting. She has short, curly dark brown hair and a friendly smile. She is wearing a black Polo shirt with colorful floral embroidery. The background features green vegetation and distant mountains. Then she begins the s86b5p transformation.",
"lora_prompt_default": "Then she/he begins the s86b5p transformation."
},
"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-intl.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 ),即可發起調用。
步驟4.1:建立視頻產生任務,並擷取task_id
請將<替換為部署名稱deployed_model>完整替換為上一步輸出的deployed_model值。
圖生視頻-基於首幀
預期效果:輸入一張首幀映像,無需提示詞,模型自動根據映像產生一段帶有”金錢雨特效”的視頻。
響應樣本請複製並儲存task_id,用於下一步結果查詢。
{
"output": {
"task_status": "PENDING",
"task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx"
},
"request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx"
}
輸入參數說明說明調用微調後的 LoRA 模型時,wan2.7輸入參數用法基本與萬相2.7-圖生視頻一致,wan2.6/wan2.5/wan2.2請參見萬相-圖生視頻-基於首幀(2.1-2.6)。
下表僅列出 LoRA 模型特有的參數用法或特定限制。對於未在下表中提及的通用參數(例如 duration),請參照 API 文檔進行設定。
欄位 | 類型 | 必選 | 描述 | 樣本值 |
|---|---|---|---|---|
model | string | 是 | 模型名稱。 必須使用已成功部署且部署狀態為RUNNING的微調模型。 | xxxx-ft-202511111122-xxxx |
input.prompt | string | 否 | 文本提示詞。 此參數是否生效,取決於aigc_config.use_input_prompt 的配置:
| - |
parameters.resolution | string | 否 | 產生的視頻解析度檔位。 wan2.2和wan2.5模型:480P、720P。預設值為720P。 wan2.6模型:720P、1080P。預設值為720P。 wan2.7模型:720P、1080P。預設值為1080P。 | 720P |
parameters.prompt_extend | boolean | 否 | 是否開啟prompt智能改寫。 調用微調的LoRA模型時,建議關閉,即設定為false。 | false |
圖生視頻-基於首尾幀
預期效果:輸入一張首幀和尾幀映像,無需提示詞,模型自動根據映像產生一段帶有“時尚雜誌特效”的視頻。
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--header 'X-DashScope-Async: enable' \
--data '{
"model": "<替換為部署名稱deployed_model>",
"input": {
"first_frame_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260113/typemn/kf2v-first.webp",
"last_frame_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260113/ekzmff/kf2v_last.webp"
},
"parameters": {
"resolution": "720P",
"prompt_extend": false
}
}'
響應樣本請複製並儲存task_id,用於下一步結果查詢。
{
"output": {
"task_status": "PENDING",
"task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx"
},
"request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx"
}
輸入參數說明說明調用微調後的 LoRA 模型時,輸入參數用法基本與圖生視頻-基於首尾幀API一致。
下表僅列出 LoRA 模型特有的參數用法或特定限制。對於未在下表中提及的通用參數(例如 duration),請參照 API 文檔進行設定。
欄位 | 類型 | 必選 | 描述 | 樣本值 |
|---|---|---|---|---|
model | string | 是 | 模型名稱。 必須使用已成功部署且狀態為RUNNING的微調模型。 | xxxx-ft-202511111122-xxxx |
input.prompt | string | 否 | 文本提示詞。 此參數是否生效,取決於aigc_config.use_input_prompt 的配置:
| - |
input.first_frame_url | string | 是 | 首幀映像URL。 傳入方式請參見first_frame_url參數。 | |
input.last_frame_url | string | 否 | 尾幀映像URL。 傳入方式請參見last_frame_url參數。 | |
parameters.resolution | string | 否 | 產生的視頻解析度檔位。 微調模型支援 480P、720P。預設值為720P。 | 720P |
parameters.prompt_extend | boolean | 否 | 是否開啟prompt智能改寫。 調用微調的LoRA模型時,建議關閉,即設定為false。 | false |
步驟4.2:根據task_id查詢結果
使用task_id輪詢任務狀態,直到 task_status 變為 SUCCEEDED,並擷取視頻URL。
請將
86ecf553-d340-4e21-xxxxxxxxx替換為真實的task_id。
curl -X GET https://dashscope-intl.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
響應樣本視頻URL有效期間為24小時,請及時下載視頻。
{
"request_id": "c87415d2-f436-41c3-9fe8-xxxxxx",
"output": {
"task_id": "a017e64c-012b-431a-84fd-xxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2025-11-12 11:03:33.672",
"scheduled_time": "2025-11-12 11:03:33.699",
"end_time": "2025-11-12 11:04:07.088",
"orig_prompt": "",
"video_url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.mp4?Expires=xxxx"
},
"usage": {
"duration": 5,
"video_count": 1,
"SR": 480
}
}
構建自訂資料集
除了使用本文樣本資料體驗微調流程外,您也可以構建自己的資料集進行微調。
資料集應包含 訓練集(必須)和 驗證集(可選,支援從訓練集自動劃分)。所有檔案請打包為.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": "The video begins showing a young woman standing in front of a brick wall covered with ivy. She has long, smooth reddish-brown hair, wearing a white sleeveless dress, a shiny silver necklace, and a smile on her face. The brick wall in the background is covered with green vines, appearing rustic and natural. Then the s86b5p money rain effect begins, countless huge-sized US dollar bills (beige background/dark green patterns) pour down like a torrential rain, densely hitting and surrounding her. The bills continue to fall, she stretches her arms upward, neck slightly tilted back, expression surprised, completely immersed in this wild money rain.",
"first_frame_path": "image_1.jpg",
"video_path": "video_1.mp4"
}
圖生視頻-基於首尾幀
訓練集包括首幀映像、尾幀映像、訓練視頻和標註檔案(data.jsonl)。
- 訓練集範例:wan-kf2v-training-dataset.zip。
- 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": "The video begins by showing a young woman in an outdoor setting. She has short, curly dark brown hair, a smile on her face, and looks very friendly. She is wearing a black polo shirt with colorful floral embroidery, with a background of green vegetation and distant mountains. Then she begins the s86b5p transformation.",
"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": "The video begins showing a scene of a young man standing in front of a cityscape. He is wearing a black and white checkered jacket over a black hoodie, with a smile on his face and a confident expression. The background is a city skyline at sunset, with a famous domed building and layered roofs visible in the distance, the sky filled with clouds showing warm orange-yellow hues. Then the s86b5p money rain effect begins, countless huge-sized US dollar bills (beige background/dark green patterns) pour down like a torrential rain, densely hitting and surrounding him. The bills continue to fall while the camera slowly zooms in, he stretches his arms upward, neck slightly tilted back, expression surprised, completely immersed in this wild money rain.",
"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": "The video begins showing a scene of a young man standing in front of a cityscape. He is wearing a black and white checkered jacket over a black hoodie, with a smile on his face and a confident expression. The background is a city skyline at sunset, with a famous domed building and layered roofs visible in the distance, the sky filled with clouds showing warm orange-yellow hues. Then the s86b5p money rain effect begins, countless huge-sized US dollar bills (beige background/dark green patterns) pour down like a torrential rain, densely hitting and surrounding him. The bills continue to fall while the camera slowly zooms in, he stretches his arms upward, neck slightly tilted back, expression surprised, completely immersed in this wild money rain.",
"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模型建議2~5秒;wan2.5模型建議2~10秒;wan2.7模型建議2~10秒;wan2.6模型建議2~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。
範例程式碼
代碼調用詳見映像與視頻理解。
import os from openai import OpenAI client = OpenAI( # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key # 若沒有配置環境變數,請用百鍊API Key將下行替換為:api_key="sk-xxx", api_key=os.getenv("DASHSCOPE_API_KEY"), # 以下為新加坡地區base_url,若使用北京地區的模型,需將base_url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1 base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1", ) completion = client.chat.completions.create( model="qwen3-vl-plus", messages=[ {"role": "user","content": [{ # 直接傳入的視訊檔案時,請將type的值設定為video_url # 使用OpenAI SDK時,視頻檔案預設每間隔0.5秒抽取一幀,且不支援修改,如需自訂抽幀頻率,請使用DashScope SDK. "type": "video_url", "video_url": {"url": "https://cloud.video.taobao.com/vod/Tm1s_RpnvdXfarR12RekQtR66lbYXj1uziPzMmJoPmI.mp4"}}, {"type": "text", "text": "請仔細分析視頻,並按照以下固定句式產生一段詳細的視頻描述" "句式模板:視頻開頭展示了[主體描述]。背景是[背景描述]。然後開始展示s86b5p融化特效,[詳細的運動描述]。" "要求:" "1.[主體描述]:詳細描述畫面中原本存在的人或物,包含人物/物體的外貌、衣著、表情等細節。" "2.[背景描述]:詳細描述主體所處的環境,包含環境、光影、天氣等細節。" "3.[運動描述]:詳細描述特效發生時的動態變化過程(如物體如何移動、光影如何變化、鏡頭如何變化)。" "4.所有內容必須自然融入句式中,不得保留“[ ]”符號,也不得添加任何與描述無關的文字。"}] }] ) print(completion.choices[0].message.content)
-
-
提煉特效模板
- 建議對多個包含相同特效的樣本重複運行,找出描述特效時共同使用的高頻、準確片語,從中提煉出一段通用的“特效描述”。
- 將這段標準化的特效描述複製粘貼到該特效的所有資料集中。
- 保留每個樣本獨特的“主體”和“背景”描述,僅將“特效描述”部分替換為統一模板。
-
人工檢查
AI 可能會產生幻覺或識別錯誤,最後請進行人工檢查,例如:確認主體和背景的描述是否符合畫面真實情況等。
使用驗證集評估模型
指定驗證集
微調任務必須包含訓練集,驗證集則是可選項。您可以選擇由系統自動劃分或手動上傳驗證集,具體指定方式如下:
方式一:未上傳驗證集(系統自動劃分)
在建立微調任務時,如果沒有單獨上傳驗證集,即未傳入validation_datasets參數,系統將根據以下兩個超參數,自動從訓練集中劃分出一部分作為驗證集:
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_datasets 指定)
如果您希望使用一套自己準備的資料來評估Checkpoint,而不是依賴系統隨機劃分,可以上傳自訂驗證集。
注意:一旦選擇主動上傳,系統將完全忽略上述自動劃分規則,僅使用您上傳的資料進行驗證。
挑選最佳Checkpoint進行部署
在訓練過程中,系統會定期儲存模型的“快照”(即 Checkpoint)。預設情況下,系統會輸出最後一個Checkpoint作為最終的微調模型。但中間過程產出的Checkpoint效果可能優於最終版本,您可以從中挑選出最滿意的一個進行部署。
系統將按照超參數eval_epochs設定的間隔,在驗證集上運行Checkpoint並產生預覽視頻。
- 如何評估:通過直接觀察產生的預覽視頻來判斷效果。
- 挑選標準:找到效果最好、且沒有動作變形的那個 Checkpoint 。
操作步驟
步驟1:查看Checkpoint產生的預覽效果
步驟1.1 查詢已通過驗證的Checkpoint列表
該介面僅返回通過驗證集驗證、且成功產生預覽視頻的 Checkpoint,驗證失敗的不會列出。
請求樣本<替換為微調任務job_id>:完整替換為建立微調任務介面的輸出參數job_id。
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes/<替換為微調任務job_id>/validation-results' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json'
響應樣本此介面返回一個僅包含成功通過驗證的Checkpoint名稱的列表。
{
"request_id": "da1310f5-5a21-4e29-99d4-xxxxxx",
"output": [
{
"checkpoint": "checkpoint-160"
},
...
]
}
步驟1.2 查詢Checkpoint對應的驗證集結果
從上一步返回的 Checkpoint 列表中選擇一個(例如“checkpoint-160”),查看其產生的視頻效果。
請求樣本<替換為微調任務job_id>: 完整替換為建立微調任務輸出參數job_id的值。<替換為待匯出的checkpoint>:完整替換為checkpoint的值,例如“checkpoint-160”。
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes/<替換為微調任務job_id>/validation-details/<替換為選擇的checkpoint>?page_no=1&page_size=10' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
響應樣本預覽視頻URL為video_path,有效期間為24小時,請及時下載視頻並查看效果。重複此步驟,比較多個Checkpoint的效果,找出最滿意的一個。
{
"request_id": "375b3ad0-d3fa-451f-b629-xxxxxxx",
"output": {
"page_no": 1,
"page_size": 10,
"total": 1,
"list": [
{
"video_path": "https://finetune-result.oss-cn-wulanchabu.aliyuncs.com/xxx.mp4?Expires=xxxx",
"prompt": "視頻開頭展示了一位年輕男性坐在咖啡館的情境...",
"first_frame_path": "https://finetune-result.oss-cn-wulanchabu.aliyuncs.com/xxx.jpeg"
}
]
}
}
步驟2:匯出Checkpoint,並擷取待部署的模型名稱
步驟2.1 匯出模型
假設“checkpoint-160”的效果最佳,接下來是將其匯出。
請求樣本<替換為微調任務job_id>: 完整替換為建立微調任務輸出參數job_id的值。<替換為待匯出的checkpoint>:完整替換為checkpoint的值,例如“checkpoint-160”。<替換為控制台展示的匯出模型名稱>:完整替換為自訂的模型名稱,僅用於控制台展示,例如“wan2.5-checkpoint-160”。該名稱必須全域唯一,不支援重複名稱多次匯出,參數填寫請參見匯出Checkpoint。
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes/<替換為微調任務job_id>/export/<替換為待匯出的checkpoint>?model_name=<替換為控制台展示的匯出模型名稱>' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
響應樣本響應參數output=true,表示匯出請求已成功建立。
{
"request_id": "0817d1ed-b6b6-4383-9650-xxxxx",
"output": true
}
步驟2.2 查詢部署後的新模型名稱
查詢所有Checkpoint的狀態,確認匯出已完成,並擷取它專屬的、用於部署的新模型名稱(model_name)。
<替換為微調任務job_id>:完整替換為建立微調任務輸出參數job_id的值。
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/fine-tunes/<替換為微調任務job_id>/checkpoints' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
響應樣本在返回列表中定位匯出的 Checkpoint(如 checkpoint-160)。當其 status 變為 SUCCEEDED 時,表示匯出成功;此時返回的 model_name 欄位即為匯出後的新模型名稱。
{
"request_id": "b0e33c6e-404b-4524-87ac-xxxxxx",
"output": [
...,
{
"create_time": "2025-11-11T13:27:29",
"full_name": "ft-202511111122-496e-checkpoint-160",
"job_id": "ft-202511111122-496e",
"checkpoint": "checkpoint-160",
"model_name": "xxxx-ft-202511111122-xxxx-c160", // 重要欄位,將用於模型部署和調用
"model_display_name": "xxxx-ft-202511111122-xxxx",
"status": "SUCCEEDED" // 成功匯出的checkpoint
},
...
]
}
步驟3:部署並調用模型
應用於生產環境
在實際生產中,如果初次訓練的模型效果不佳(如畫面崩壞、特效不明顯、動作不準確),可參考以下維度調優:
1. 檢查資料與Prompt- 資料一致性:資料一致性是核心。檢查是否有方向相反、風格差異過大的“差樣本”。
- 樣本數量:建議將高品質資料增加至 20條以上。
- Prompt:確保觸發詞為無意義稀有詞(如 s86b5p),避免使用常用詞(如 running)造成幹擾。
-
n_epochs (訓練輪數)
-
預設值:50,推薦使用預設值。若需調整,請遵循 ”總訓練步數 (Steps) ≥ 800” 的原則。
-
總步數計算公式:
steps = n_epochs × 向上取整(訓練集大小 / batch_size)。 -
因此,n_epochs最小值計算公式:
n_epochs = 800 / 向上取整(資料集大小 / batch_size)。 -
樣本:假設訓練集有5條資料,使用Wan2.5模型(batch_size=4)。
- 每輪訓練步數:5 / 4 = 1.25,向上取整為2。總的訓練輪數:n_epochs = 800 / 2 = 400。此值為推薦的最小值,可根據實際業務適當調高。
-
-
batch_size (批次大小)
- 批次大小。一次性送入模型進行訓練的資料條數。
- 該參數為單一實例配置,建議使用各模型的推薦值,非必要請勿調整。
- wan2.7-i2v:推薦為 1。
- wan2.5-i2v-preview:推薦為 4。
- wan2.2-i2v-flash:推薦為 4。
- wan2.2-kf2v-flash:推薦為 4。
訓練任務實際啟動並執行執行個體數量由平台調度決定,訓練日誌中輸出的Global Step可能與估算結果不一致,但不會改變實際訓練資料總量,不影響模型最終效果。
-
learning_rate (學習率)推薦使用預設值(2e-5),通常無需修改。
計費說明
- 模型訓練:收費。
-
模型部署:免費。
-
模型調用:收費。
- 按微調的基本模型的標準調用價格計費,請參見模型價格。
API文檔
常見問題
Q:如何計算訓練集和驗證集的資料量?
A: 訓練集必須提供,驗證集可選。具體計算方式如下:
-
當未傳入驗證集時:上傳的訓練集即為“資料集總數”,系統會自動從訓練集中划出一部分資料用於驗證。
- 驗證集數量 =
min(資料集總數 × (1 − split), max_split_val_dataset_sample)。計算樣本請參見指定驗證集。 - 訓練集數量 =
資料集總數 − 驗證集數量。
- 驗證集數量 =
-
當主動上傳驗證集時:系統不再從訓練資料中劃分驗證集。
- 訓練集數量 = 上傳的訓練集資料量。
- 驗證集數量 = 上傳的驗證集資料量。
Q:如何設計一個好的觸發詞?
A: 規則如下:
- 使用無意義的字母組合,如 sksstyle, a8z2_bbb。
- 避免使用常用英語單詞(如 beautiful, fire, dance),否則會汙染模型原本對這些詞的理解。
Q:微調能改變視頻的解析度或時間長度嗎?
A: 不能。微調是學習“內容”和“動態”,不是改變“規格”。輸出視頻的格式(解析度、幀率、時間長度上限)依然由基本模型決定。


