---
title: WalrusVision
canonical_url: "https://www.modelscope.cn/models/Walrus8013/WalrusVision"
md_url: "https://www.modelscope.cn/models/Walrus8013/WalrusVision.md"
repository: Walrus8013/WalrusVision
last_updated: 2026-06-05
pipeline_tag: video-captioning
tasks:
  - video-captioning
library_name:
  - pytorch
frameworks:
  - Pytorch
downloads: 2
stars: 0
---

# WalrusVision

> WalrusVision - Walrus8013 在 ModelScope 开源的模型。基于 YOLOE 与 Qwen3.5 语义融合的零训练视频关键帧选择。YOLOE 提供主体空间定位，Qwen3.5 ViT 提供场景语义表征

- **Repository**: Walrus8013/WalrusVision
- **Tasks**: video-captioning
- **Downloads**: 2
- **Stars**: 0
- **Last updated**: 2026-06-05

Source: https://www.modelscope.cn/models/Walrus8013/WalrusVision

---

# 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 置信度阈值 |

---

## 模型推理

### 环境依赖

```bash
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 | 图像预处理 |

### 快速演示

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

输出：
- `output/keyframes.json` — 关键帧索引列表
- `output/keyframes.mp4` — 关键帧拼接视频

### Python API

```python
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 检测类别和置信度阈值不同。

---

## 引用

```bibtex
@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 |

```bibtex
@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 |

```bibtex
@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 |

```bibtex
@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 许可证](LICENSE)。

注意：本模型包含的第三方组件受其各自许可证约束：
- **YOLOE26x**：AGPL-3.0 — 使用本模型即视为同意该许可证条款
- **Qwen3.5-0.8B**：Apache 2.0 — 与项目许可证兼容
- **SumMe / TVSum 数据集**：CC-BY — 未在本项目直接二次分发，仅用于非商业研究
