视频二元瑕疵标注
更新时间:2026-07-29
简介
视频二元瑕疵标注算子,基于 QwenVL 多模态大模型 + 结构化 JSON prompt 对视频做多标签二值打标(每个 artifact 标签输出 0/1),是 SILA 自训 tagger 的冷启动版。用于 SILA §5 步骤 ④ 100 binary tags 过滤。
功能描述
• 默认给出 20 个高价值 artifact 标签(split_screen / rotation / static_camera / text_overlay / motion_blur 等),可通过 tags 参数扩展到 100 个。
• 用 Qwen2.5-VL 对视频抽帧推理,要求模型输出一行 JSON(key 为标签名、value 为 0/1),再解析为标签 → 布尔映射。
• 支持 vLLM / transformers 双后端,backend="auto" 时按 GPU 算力自动选择(sm_120 及以上回退 transformers)。
• 需 CUDA GPU,权重需预置于 {model_path}/{model_name},不自动下载;解析失败或异常时返回全 False。
算子参数
输入
| 输入 | 含义 |
|---|---|
| videos | 视频(URL/base64/binary,由 video_src_type 决定),单个输入列 |
输出
| 输出 | 含义 |
|---|---|
| result | pa.map_(pa.string(), pa.bool_()),标签名 → 0/1 的映射 |
参数
| 参数名称 | 类型 | 默认值 | 描述 | |
|---|---|---|---|---|
| video_src_type | str | "video_url" | 视频输入类型,可选 "video_url"/"video_base64"/"video_binary" | |
| model_path | str | "/opt/aihc/models" | 模型权重根目录 | |
| model_name | str | "Qwen/Qwen2.5-VL-7B-Instruct" | VLM 权重子目录(相对 model_path) | |
| tags | list[str] |None | None | artifact 标签列表;None 时使用内置 20 个默认标签,须非空 | |
| dtype | str | "auto" | 推理精度,"auto" 时按 bf16 支持情况选 bfloat16/float16 | |
| max_model_len | int | 8000 | 模型最大上下文长度 | |
| max_pixels | int |None | 1280000 | 视频帧最大像素数 | |
| fps | float |None | 1.0 | 视频抽帧帧率 | |
| tensor_parallel_size | int | 1 | 张量并行数(vLLM) | |
| gpu_memory_utilization | float | 0.85 | vLLM 显存占用比例 | |
| enforce_eager | bool | False | vLLM 是否强制 eager 模式 | |
| temperature | float | 0.0 | 采样温度 | |
| top_p | float | 0.95 | 采样 top_p | |
| max_tokens | int | 512 | 生成最大 token 数 | |
| seed | int | 42 | 随机种子 | |
| backend | str | "auto" | 后端,可选 "auto"/"vllm"/"transformers" | |
| fail_on_error | bool | False | 单行出错是否立即抛异常,默认 False 返回全 False |
调用示例
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.video_binary_artifact_tagger import VideoBinaryArtifactTagger
10
11VIDEO = "bos://your-bucket/sample.mp4" # MOCK
12MODEL_PATH = "/opt/aihc/models" # MOCK
13
14os.environ.setdefault("BOS_ENDPOINT", "http://bj.bcebos.com")
15os.environ.setdefault("BOS_REGION", "bj")
16
17if __name__ == "__main__":
18 if os.getenv("DAFT_RUNNER", "native") == "ray":
19 import ray
20
21 ray.init(ignore_reinit_error=True)
22 daft.set_runner_ray()
23 daft.set_execution_config(actor_udf_ready_timeout=6000, min_cpu_per_task=0)
24
25 samples = {"video": [VIDEO]}
26 ds = daft.from_pydict(samples)
27 ds = ds.with_column(
28 "result",
29 aihc_udf(
30 VideoBinaryArtifactTagger,
31 construct_args={
32 "video_src_type": "video_url",
33 "model_path": MODEL_PATH,
34 "model_name": "Qwen/Qwen2.5-VL-7B-Instruct",
35 "fps": 1.0,
36 "backend": "auto",
37 },
38 num_cpus=1,
39 num_gpus=1,
40 concurrency=1,
41 batch_size=1,
42 )(col("video")),
43 )
44 ds.show()
评价此篇文章
