WalrusVision

2 downloads 0 likes on ModelScope updated

Model card

WalrusVision

基于 YOLOE 与 Qwen3.5 语义融合的零训练视频关键帧选择模型


模型概述

WalrusVision 是一个零训练视频关键帧选择模型,输入一段视频,输出代表性关键帧索引序列。模型融合两个冻结的预训练视觉模型——Qwen3.5 ViT(场景语义表征)与 YOLOE26x(主体空间定位),通过几何持续性追踪与因果状态建模将两者协同,无需跨模态语义对齐训练。

  • 模型规模:186M 参数(101M ViT + 85M YOLOE),全部冻结
  • 可调参数:5 个标量(3 个 EMA 参数 + 2 个融合权重),通过交叉验证确定
  • 关键帧选择方式:逐镜头(shot-aware)Top-K + 全局去重
  • 模型文件:单一 .pt 权重文件,包含 ViT + YOLOE + 追踪器 + 融合参数

模型介绍

整体架构

                          Qwen3.5 ViT                     YOLOE26x
                        (101M, 冻结)                   (85M, 冻结)
                              │                              │
                    patch tokens [T,64,1024]        bbox + class_id [T,N]
                              │                              │
                         CLS Token                   Subject Persistence
                     (均值池化, 1024d)              (IoU 跨帧匹配, 几何)
                              │                              │
                         EMA 因果追踪                   持续性变化信号
                     h_t = γ·x_t + (1-γ)·h_{t-1}       persist_delta
                              │                              │
                              └──────────┬───────────────────┘
                                         │
                               轻量融合 (2 标量)
                     fused = w_cls · ΔCLS + w_persist · Δpersist
                     score = sigmoid(α · (fused - β))
                                         │
                                   关键帧分数 [T-1]
                                         │
                                 PySceneDetect 分镜
                                    → Top-K 每镜头
                                    → 全局去重

两个模型的分工

组件 模型 输出 在系统中的角色
场景语义编码器 Qwen3.5 ViT (0.8B visual) CLS token [1024d] 捕捉帧级内容变化,作为关键帧判断主信号
主体空间定位器 YOLOE26x (cv3) bbox [4d] + class_id 追踪主体持续性,作为辅助变化信号
因果状态追踪器 无(纯数学) EMA 状态向量 维护历史记忆,检测当前帧与过去的差异
融合层 无(纯数学) 加权组合 将两路变化信号融合为单一关键帧分数

融合策略

YOLOE 与 Qwen3.5 的语义空间不可直接对齐(实例级 512d vs 场景级 1024d)。本模型不通过投影层强制对齐,而是将 YOLOE 降级为空间索引器:仅使用 bbox 坐标进行跨帧主体匹配、计算持续性变化信号,YOLOE 的语义嵌入不参与最终表征。

该设计的核心观点:检测器的定位能力比其语义嵌入更有跨模型迁移价值。


模型训练

训练策略

本模型采用零训练 + 交叉验证调参策略:

阶段 内容 参数数量
冻结模型 Qwen3.5 ViT + YOLOE26x 186M(不可训练)
数学模块 EMA 追踪器 + SubjectTracker + PatchWeighting 0(纯数学)
交叉验证调参 γ, α, β(EMA) + w_cls, w_persist(融合) 5 标量

超参数搜索

在 SumMe 数据集上执行 5 折交叉验证 + 网格搜索:

  • γ ∈ {0.1, 0.2, ..., 0.7}(EMA 衰减率)
  • α ∈ {1.0, 3.0, 5.0, 7.0, 10.0}(Sigmoid 锐度)
  • β ∈ {0.1, 0.2, ..., 0.6}(Sigmoid 偏移)

融合权重 w_cls 和 w_persist 通过消融实验确定(E1-4),置信度阈值通过单参数搜索最优区间确定。

最终超参数

参数 最优值 含义
γ 0.1 EMA 衰减率(长记忆,对历史状态保持更多)
α 10.0 Sigmoid 锐度(变化阈值陡峭)
β 0.2 Sigmoid 偏移(低阈值,对变化敏感)
w_cls 0.7 CLS 变化权重(主信号)
w_persist 0.3 持续性变化权重(辅助信号)
yolo_conf 0.05 YOLOE 置信度阈值

模型推理

环境依赖

pip install -r requirements.txt

完整依赖清单见 requirements.txt:

包 最低版本 用途
torch >=2.5.0 深度学习框架
opencv-python >=4.8.0 视频读写与帧处理
scenedetect >=0.6.0 镜头边界检测
ultralytics >=8.4.0 YOLOE 模型加载与推理
transformers >=5.9.0 Qwen3.5 ViT 加载与推理
scipy >=1.10.0 数学计算与评估指标
numpy >=1.24.0 数值计算
Pillow >=10.0.0 图像预处理

快速演示

# 下载模型权重后
python demo.py --video "your_video.mp4" --checkpoint svks_v18.pt

输出:

  • output/keyframes.json — 关键帧索引列表
  • output/keyframes.mp4 — 关键帧拼接视频

Python API

from svks.deploy import SVKSv16

# 加载模型
model = SVKSv16.from_pretrained("svks_v18.pt")

# 提取关键帧
indices = model.extract_keyframes(
    "your_video.mp4",
    kf_ratio=0.08,       # 每镜头关键帧比例
    min_interval=3,       # 关键帧最小间隔(帧)
    max_per_shot=64,      # 每镜头最大采样帧数
)
# 返回: [21, 42, 63, ...]  帧索引列表(已排序)

自包含设计

.pt 权重文件内嵌了 ViT 架构配置、图像预处理配置和 YOLOE 权重,无需下载 Qwen3.5 模型目录。

唯一额外依赖:yoloe26x.pt (85MB),用于初始化 YOLOE 的 text model 架构。首次运行时自动下载到 checkpoint 同级目录,也可手动放置。

文件 大小 来源 说明
svks_v18.pt 518 MB 本项目发布 包含 ViT+YOLOE 权重和 ViT 配置
yoloe26x.pt 85 MB Ultralytics 仅用于初始化架构,自动下载

推理流程

  1. PySceneDetect 检测镜头边界(AdaptiveDetector)
  2. 每镜头均匀采样最多 64 帧
  3. Qwen3.5 ViT 编码全部帧 → CLS token
  4. YOLOE 检测全部帧 → bbox + class_id
  5. SubjectTracker 跨帧 IoU 匹配 → 持续性分数
  6. EMA 追踪器 逐帧计算 CLS 变化 + 持续性变化 → 融合 → 关键帧分数
  7. 每镜头 Top-K + 全局去重 → 最终索引

推理性能

指标 值
单帧推理 ~30ms (RTX 3090)
典型视频 (5min, 89 shots) ~10min
显存占用 ~2.1 GB

模型效果

主评估:SumMe 数据集

SumMe 包含 25 个第一人称/业余视频,帧级重要性标注。

指标 值 说明
SRCC 0.240 预测分数与人工标注的排序相关性
正相关比例 88% SRCC > 0 的视频占比
F1 (最佳阈值) 0.39 关键帧二分类 F1

参考评估:TVSum 数据集

TVSum 包含 50 个 YouTube 编辑视频(10 类别),帧级重要性标注。

指标 值
SRCC -0.053
正相关比例 38%

TVSum 结果接近随机,表明冻结模型在跨领域视频上的语义表征泛化不足。


机制说明与局限

模型实际检测的信号

本模型判断一张帧是否为关键帧,依据的是 "VLM 表征空间中的视觉变化幅度",而非 "内容的人类重要性"。

CLS 空间的视觉变化幅度 > 阈值  → 关键帧
          +
新主体出现 / 消失              → 额外加分

Qwen3.5 ViT 的 CLS token 在对比语言-图像预训练中获得——CLS 变化大意味着 "这两帧可能需要不同的文字来描述"。这比像素差或光流更接近内容变化,但不是语义理解。

能检测到的情况

  • 场景发生了显著视觉变化(镜头切换、大幅运动、主体出现)
  • 画面构图或主体构成发生了变化
  • YOLOE 检测到新主体进入或离开画面

检测不到的情况

  • 该瞬间是否具有叙事上的 "重要性"
  • 画面变化是因为相机抖动、光照波动还是真正的内容转折
  • 同一主体执行不同动作但视觉表征相似
  • 慢速积累的语义转折(不会产生突变的 CLS delta)

诚实定位

本模型应被定义为:

基于冻结 VLM 表征空间的视觉变化检测器 (Visual Change Detector in Frozen VLM Representation Space)

SRCC=0.240 意味着预测与人工标注的排序相关性为 24%。这个数字恰好反映了 "视觉变化"和"人类认为重要的内容变化"之间的系统差距——模型能捕捉到内容发生了变化,但无法判断这种变化在叙事意义上是否重要。

YOLOE 的实际贡献

YOLOE (85M 参数) 在本系统中仅提供 bbox 坐标用于跨帧主体追踪。其 512 维语义嵌入完全未被使用——事实证明,在零训练条件下,检测器的定位能力比其语义嵌入更有跨模型迁移价值。主体持续性先验带来约 +8.6% 的边际增益(SumMe SRCC: 0.221 → 0.240)。

跨数据集泛化

SumMe (第一人称业余视频) 上 SRCC=0.240,TVSum (YouTube 编辑视频) 上 SRCC=-0.053。两个数据集的语义分布差异导致冻结模型无法泛化——当前方法在不同视频领域之间不具备零样本迁移能力。

消融关键结论

消融 SumMe SRCC 结论
纯 CLS + EMA(无 YOLO) 0.221 CLS 是主信号来源
CLS + persistence 融合 0.240 YOLOE 持续性先验带来 +8.6% 增益
CLS + YOLOE 语义注入 0.221 语义注入无增益(自注意力忽略不对齐输入)
CLS + 主体 patch 加权 0.225 Patch 权重重构有微弱正贡献
光流 baseline 0.127 语义方法显著优于运动方法 (+89%)
随机 baseline 0.005 下界

消融核心发现

  1. CLS 是主信号:纯 ViT CLS + EMA 已能达到 SRCC=0.221
  2. 持续性是最优辅助信号:YOLOE 仅用 bbox 做主体追踪,带来 +8.6% 增益
  3. YOLOE 语义嵌入无用:直接注入 512d 语义向量无增益、patch 加权仅有边际贡献
  4. 大词表未必更好:COCO80 (0.236) 略低于精选 16 类 (0.240)

模型权重

文件 版本 YOLO 配置 大小
svks_v18.pt v18 泛化版 COCO80, conf=0.05 518 MB
svks_v16.pt v16 精炼版 COCO16, conf=0.20 518 MB

两者架构完全相同,仅 YOLOE 检测类别和置信度阈值不同。


引用

@software{walrusvision2026,
  title     = {WalrusVision: YOLOE and Qwen3.5 Fusion for Zero-Shot Video Keyframe Selection},
  author    = {JucieOvo},
  year      = {2026},
  url       = {https://github.com/JucieOvo/WalrusVision}
}

致谢与引用

本模型的构建依赖于以下开源模型、数据集与工具,按许可证要求列出。

模型

模型 用途 许可证 引用
Qwen3.5-0.8B 视觉编码器 (ViT) Apache 2.0 Qwen Team, Alibaba Cloud
YOLOE26x 主体检测与定位 AGPL-3.0 Ultralytics
@article{qwen3.5,
  title   = {Qwen3.5: A Family of Large Language and Vision-Language Models},
  author  = {Qwen Team, Alibaba Cloud},
  year    = {2025},
  url     = {https://huggingface.co/Qwen/Qwen3.5-0.8B}
}

@article{yoloe,
  title   = {YOLOE: Real-Time Open-Vocabulary Object Detection and Segmentation},
  author  = {Ultralytics},
  year    = {2025},
  url     = {https://docs.ultralytics.com/models/yoloe}
}

@software{ultralytics,
  title   = {Ultralytics YOLO},
  author  = {Glenn Jocher and Jing Qiu},
  year    = {2025},
  version = {8.x},
  url     = {https://github.com/ultralytics/ultralytics}
}

数据集

数据集 用途 许可证 引用
SumMe 主评估 CC-BY Gygli et al., ECCV 2014
TVSum 跨数据集参考评估 CC-BY Song et al., CVPR 2015
@inproceedings{summe,
  title     = {Creating Summaries from User Videos},
  author    = {Michael Gygli and Helmut Grabner and Hayko Riemenschneider and Luc Van Gool},
  booktitle = {ECCV},
  year      = {2014}
}

@inproceedings{tvsum,
  title     = {TVSum: Summarizing Web Videos using Titles},
  author    = {Yale Song and Jordi Vallmitjana and Amanda Stent and Alejandro Jaimes},
  booktitle = {CVPR},
  year      = {2015}
}

工具

工具 用途 许可证 引用
PySceneDetect 镜头边界检测 BSD-3-Clause Breakthrough Applications
@software{pyscenedetect,
  title   = {PySceneDetect: Video Scene Cut Detection and Analysis Tool},
  author  = {Brandon Castellano},
  year    = {2024},
  url     = {https://github.com/Breakthrough/PySceneDetect}
}

许可证

本项目的代码与模型权重基于 Apache 2.0 许可证。

注意:本模型包含的第三方组件受其各自许可证约束:

  • YOLOE26x:AGPL-3.0 — 使用本模型即视为同意该许可证条款
  • Qwen3.5-0.8B:Apache 2.0 — 与项目许可证兼容
  • SumMe / TVSum 数据集:CC-BY — 未在本项目直接二次分发,仅用于非商业研究