视频训练适用性评分(VTSS)
更新时间:2026-07-29
简介
视频训练适宜性评分(VTSS)算子,是 SILA 论文 VTSS 的冷启动版(VTSS 权重未开源)。用 CLIP-IQA + Farneback 光流 + Laplacian 清晰度组合规则打 0-9 综合分。用于 SILA §5 步骤 ④ 训练适宜性过滤。
功能描述
• 组合公式:Q = w_iqa × CLIP_IQA + w_motion × motion_norm + w_sharp × sharpness_norm,再线性映射到 [0, 9]。
• CLIP-IQA 用 "a high quality photo" vs "a low quality photo" prompt 对求高质量概率;motion 用 Farneback 光流平均模长归一化;sharpness 用 Laplacian 方差归一化。
• 三项权重须和为 1.0;motion/sharpness 用 min/max clip 归一化到 [0,1]。
• CLIP 权重需预置于 {model_path}/{model_name},不自动下载;支持 GPU/CPU 自动选择,异常时按 fail_on_error 决定抛异常或返回 None。
算子参数
输入
| 输入 | 含义 |
|---|---|
| videos | 视频(URL/base64/binary,由 video_src_type 决定),单个输入列 |
输出
| 输出 | 含义 |
|---|---|
| result | pa.float32(),训练适宜性综合分,取值 0-9;失败为 None |
参数
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| video_src_type | str | "video_url" | 视频输入类型,可选 "video_url"/"video_base64"/"video_binary" |
| model_path | str | "/opt/aihc/models" | CLIP 权重根目录 |
| model_name | str | "openai/clip-vit-base-patch16" | CLIP 权重子目录(用于 CLIP-IQA 打分) |
| num_frames | int | 8 | 抽帧数量 |
| w_iqa | float | 0.4 | CLIP-IQA 项权重,三权重需和为 1.0 |
| w_motion | float | 0.3 | 运动项权重,三权重需和为 1.0 |
| w_sharp | float | 0.3 | 清晰度项权重,三权重需和为 1.0 |
| motion_min | float | 0.05 | Farneback 光流平均模长归一化 min clip |
| motion_max | float | 6.0 | Farneback 光流平均模长归一化 max clip |
| sharp_min | float | 30.0 | Laplacian 方差归一化 min clip |
| sharp_max | float | 800.0 | Laplacian 方差归一化 max clip |
| rank | int | 0 | 多卡 rank |
| fail_on_error | bool | False | 单行出错是否立即抛异常,默认 False 返回 None |
调用示例
Python
1from __future__ import annotations
2
3import os
4
5import daft
6from daft import col
7
8from daft.aihc.common.udf import aihc_udf
9from daft.aihc.functions.video.vtss_video_training_suitability import (
10 VTSSVideoTrainingSuitability,
11)
12
13VIDEO = "bos://your-bucket/sample.mp4" # MOCK
14MODEL_PATH = "/opt/aihc/models" # MOCK
15
16os.environ.setdefault("BOS_ENDPOINT", "http://bj.bcebos.com")
17os.environ.setdefault("BOS_REGION", "bj")
18
19if __name__ == "__main__":
20 if os.getenv("DAFT_RUNNER", "native") == "ray":
21 import ray
22
23 ray.init(ignore_reinit_error=True)
24 daft.set_runner_ray()
25 daft.set_execution_config(actor_udf_ready_timeout=6000, min_cpu_per_task=0)
26
27 samples = {"video": [VIDEO]}
28 ds = daft.from_pydict(samples)
29 ds = ds.with_column(
30 "result",
31 aihc_udf(
32 VTSSVideoTrainingSuitability,
33 construct_args={
34 "video_src_type": "video_url",
35 "model_path": MODEL_PATH,
36 "model_name": "openai/clip-vit-base-patch32",
37 "num_frames": 8,
38 "w_iqa": 0.4,
39 "w_motion": 0.3,
40 "w_sharp": 0.3,
41 },
42 num_cpus=1,
43 num_gpus=1,
44 concurrency=1,
45 batch_size=1,
46 )(col("video")),
47 )
48 ds.show()
评价此篇文章
