OASIS: 在线自适应视频压缩闭环控制系统——对IMS数据管道自适应压缩的启示

论文来源:arXiv:2609.15749 · 2026年9月14日
作者团队:OASIS研究组
核心方向:在线自适应压缩 · 闭环反馈控制 · 目标跟踪保持 · 压缩率动态调整

论文信息

项目 内容
论文标题 OASIS: Online Adaptive Video Compression via Closed-loop Feedback Control
arXiv 2609.15749
年份 2026
领域 eess.IV
核心贡献 首次将闭环反馈控制引入视频压缩,根据下游任务性能动态调整压缩率

核心创新

解决的问题

传统视频压缩使用开环策略:设定固定码率/质量参数,不考虑压缩对下游任务的影响。

问题:

  • 高压缩率 → 存储省,但目标跟踪精度下降
  • 低压缩率 → 精度好,但存储/传输成本高
  • 无法动态平衡

OASIS解决方案

将压缩视为闭环控制系统

  1. 压缩视频 → 发送给下游任务(跟踪/检测)
  2. 监控下游任务性能指标(跟踪精度、检测mAP)
  3. 性能下降 → 反馈 → 降低压缩率
  4. 性能充足 → 反馈 → 提高压缩率
graph LR
    A[原始视频] --> B[压缩器<br/>可调参数]
    B --> C[压缩视频]
    C --> D[下游任务<br/>跟踪/检测]
    D --> E[性能指标]
    E --> F[反馈控制器]
    F -->|调整参数| B
    
    style F fill:#4a4,color:white
    style B fill:#4a4,color:white

与Beamr ML-Safe的互补

特性 Beamr ML-Safe OASIS
压缩方式 无损 有损+自适应
压缩率 固定47% 动态10-90%
ML影响 零损失 可控损失
反馈机制 闭环反馈
适用场景 测试数据存储 实时数据管道
互补性 高精度存储 高效率传输

方法详解

闭环反馈控制架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import numpy as np

class OASISController:
"""
OASIS闭环反馈控制器

核心思想:PID控制器调整压缩参数

- 误差 = 目标性能 - 当前性能
- 比例项:误差大小 → 压缩率调整幅度
- 积分项:累积误差 → 消除稳态误差
- 微分项:误差变化率 → 预防超调
"""

def __init__(self, target_metric: float = 0.95,
kp: float = 0.5, ki: float = 0.1, kd: float = 0.05):
self.target = target_metric # 目标性能(如mAP 95%)
self.kp = kp # 比例增益
self.ki = ki # 积分增益
self.kd = kd # 微分增益

self.integral = 0
self.prev_error = 0
self.qp = 30 # 初始量化参数(H.264/H.265 QP)

def update(self, current_metric: float) -> int:
"""
根据当前性能指标更新压缩参数

Args:
current_metric: 当前下游任务性能(0-1)

Returns:
qp: 更新后的量化参数(1-51, 越大压缩越多)
"""
error = self.target - current_metric

# PID控制
p_term = self.kp * error
self.integral += error
i_term = self.ki * self.integral
d_term = self.kd * (error - self.prev_error)

# 控制信号:正=需要更高质量=降低QP
control = p_term + i_term + d_term

# QP调整:性能低→降QP(高质量),性能高→升QP(高压缩)
self.qp = int(np.clip(self.qp - control * 10, 1, 51))

self.prev_error = error
return self.qp


class OASISCompressionPipeline:
"""
OASIS完整压缩管道

1. 压缩视频帧
2. 发送给下游任务
3. 收集性能指标
4. 闭环反馈调整压缩参数
"""

def __init__(self, target_metric: float = 0.95):
self.controller = OASISController(target_metric)
self.qp = 30
self.metrics_history = []

def compress_frame(self, frame: np.ndarray) -> bytes:
"""用当前QP压缩帧"""
# 模拟H.265编码
quality = 51 - self.qp # QP越低质量越高
compressed_size = len(frame) * (0.1 + quality / 100)
return b'\x00' * int(compressed_size)

def run_pipeline(self, frames: list, downstream_task):
"""
运行完整管道

Args:
frames: 视频帧列表
downstream_task: 下游任务函数

Returns:
压缩统计
"""
total_original = 0
total_compressed = 0

for i, frame in enumerate(frames):
# 1. 压缩
compressed = self.compress_frame(frame)
total_original += len(frame)
total_compressed += len(compressed)

# 2. 下游任务
metric = downstream_task(compressed)
self.metrics_history.append(metric)

# 3. 每10帧更新一次压缩参数
if (i + 1) % 10 == 0:
avg_metric = np.mean(self.metrics_history[-10:])
self.qp = self.controller.update(avg_metric)
print(f"Frame {i+1}: metric={avg_metric:.3f}, "
f"QP={self.qp}")

compression_ratio = 1 - total_compressed / total_original
return {
'compression_ratio': compression_ratio,
'avg_metric': np.mean(self.metrics_history),
'final_qp': self.qp,
}

实验结果

MOT20跟踪实验

方法 压缩率 跟踪MOTA 存储节省 适应时间
不压缩 0% 75.3% 0 -
固定QP=30 70% 72.1% 70% -
固定QP=40 90% 65.5% 90% -
OASIS 75% 74.8% 75% ~50帧

关键发现:OASIS在75%压缩率下保持跟踪精度接近不压缩水平(74.8% vs 75.3%)。

IMS应用启示

1. DMS数据管道自适应压缩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class IMSAdaptiveCompression:
"""
将OASIS应用于DMS数据管道

场景:
1. 日常驾驶:高压缩率(精度要求不高,省存储)
2. 危险事件:低压缩率(保留细节,供事后分析)
3. 测试验证:无损压缩(用Beamr ML-Safe)

OASIS的闭环反馈:
- PERCLOS计算精度 → 反馈 → 调整DMS视频压缩率
- 人脸检测成功率 → 反馈 → 调整压缩率
- 视线估计置信度 → 反馈 → 调整压缩率
"""

def __init__(self):
self.perclos_controller = OASISController(target_metric=0.95)
self.face_controller = OASISController(target_metric=0.98)

def process_dms_frame(self, frame, perclos_quality, face_quality):
"""
根据DMS算法性能动态调整压缩

Args:
frame: DMS摄像头帧
perclos_quality: PERCLOS计算置信度
face_quality: 人脸检测置信度

Returns:
compressed_frame + 新QP
"""
# 双闭环控制
qp_perclos = self.perclos_controller.update(perclos_quality)
qp_face = self.face_controller.update(face_quality)

# 取更保守的QP(更高质量)
qp = min(qp_perclos, qp_face)

# 压缩
compressed = self.compress_with_qp(frame, qp)

return compressed, qp

2. 三级压缩策略

场景 压缩策略 压缩率 精度 用途
测试验证 Beamr ML-Safe无损 47% 100% 数据采集
日常驾驶 OASIS自适应 70-85% 95% 车端存储
事件触发 低压缩固定 30% 99% 事故分析
紧急上传 H.265高压缩 95% 80% 实时云传

3. 技术路线

graph LR
    A[DMS Camera] --> B{场景判断}
    B -->|日常| C[OASIS自适应压缩<br/>动态QP 30-40]
    B -->|事件| D[低压缩<br/>固定QP 15]
    B -->|测试| E[Beamr无损<br/>47%固定]
    C --> F[车端存储]
    D --> G[事件存储]
    E --> H[云端存储]

测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def test_oasis_controller():
"""测试OASIS控制器"""
controller = OASISController(target_metric=0.95)

# 模拟性能下降
qp = controller.update(0.80) # 性能低于目标
assert qp < 30, "性能低时QP应降低"

# 模拟性能充足
qp = controller.update(0.99) # 性能高于目标
print(f"✓ 性能0.99时QP={qp}")

if __name__ == "__main__":
test_oasis_controller()
print("✓ OASIS测试通过")

总结

OASIS的核心价值在于将控制论引入视频压缩

  1. 闭环反馈:不是盲压缩,而是根据下游效果调整
  2. 动态平衡:在存储和精度之间找到最优工作点
  3. 任务感知:不同任务对压缩的敏感度不同

对IMS的启示

  • 日常DMS数据用OASIS自适应压缩(省存储+保精度)
  • 测试数据用Beamr ML-Safe无损压缩(保精度)
  • 事件触发时降低压缩率(保细节)
  • 三级策略最优平衡存储、精度和成本

https://dapalm.com/2026/09/20/2026-09-20-05-oasis-adaptive-video-compression-closed-loop-ims/
作者
Mars
发布于
2026年9月20日
许可协议