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

论文来源:arXiv:2609.15749 · 2026年9月14日
作者:Rentao Wan, Jinho Park, Mingoo Seok

⚠️ 2026-11-09 审计注记:原文”MOT20 跟踪实验”表(75.3/72.1/65.5/74.8 与”适应时间~50帧”)经与 arXiv 全文核对为虚构,已替换为论文真实数字(MOT17 78.8→77.8 / MOT20 74.6→74.0 / DanceTrack 88.3→87.6);控制器并非 PID,论文用的是基于数值梯度的下降式控制算法,已更正。另请注意论文场景是传感器-计算单元之间的数据链路(in-sensor 压缩,优化链路功耗/延迟),不是存储管道——下文存储管道应用系本站推演。
核心方向:在线自适应压缩 · 闭环反馈控制 · 目标跟踪保持 · 压缩率动态调整

论文信息

项目 内容
论文标题 OASIS: Online Adaptive Video Compression via Closed-loop Feedback Control
arXiv 2609.15749
年份 2026
领域 eess.IV
核心贡献 将闭环反馈控制引入车载视觉压缩:根据下游任务性能逐帧动态调整压缩率(论文摘要数字:平均 6× 数据压缩、5.8× 链路功耗降低、2.5× 链路延迟降低、性能损失 ≤1.5%)

核心创新

解决的问题

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

问题:

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

OASIS解决方案

将压缩视为闭环控制系统:

  1. 压缩视频 → 发送给下游任务(跟踪/检测)
  2. 监控下游任务性能指标(跟踪精度、检测mAP)
  3. 性能下降 → 反馈 → 降低压缩率
  4. 性能充足 → 反馈 → 提高压缩率

与Beamr ML-Safe的互补

特性 Beamr ML-Safe OASIS
压缩方式 无损 有损+自适应
压缩率 固定47%(Beamr 官方口径) 动态(论文 MOT20-04 序列 1×–21×,平均 8.6×)
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
113
114
115
116
# 示意代码,不可直接运行。论文未开源(全文无代码仓库链接),本块是"闭环
# 反馈调压缩参数"的概念示意。注意:论文实际控制算法是基于数值梯度的下降
# 式控制(对目标函数求数值梯度、自适应步长更新压缩设置),并不是下面演示
# 的 PID——PID 写法仅便于理解反馈思想。
import numpy as np

class OASISController:
"""
闭环反馈控制器(PID 概念示意,非论文原方法)

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

论文原方法:gradient-descent-based 控制,控制器更新间隔 N_f=1~4 帧。
"""

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,
}

实验结果

以下数字核对自论文原文(arXiv HTML 全文)。论文任务是多目标跟踪(ByteTrack/YOLOX)、交通目标检测、可行驶区域分割与车道检测(BDD100K),数据集为 MOT17/MOT20/DanceTrack/BDD100K。

摘要级总体结果

  • 平均 6× 数据压缩,5.8× 链路功耗降低,2.5× 链路延迟降低,下游任务性能损失 ≤1.5%
  • 压缩率逐帧动态变化:MOT20-04 序列上 1×–21×,平均 8.6×;对比 H.264 为 5.5× 压缩 / 2.75× 延迟降低

跟踪任务(ByteTrack,MOTA)

数据集 基线(不压缩) OASIS
MOT17 78.8 77.8
MOT20 74.6 74.0
DanceTrack 88.3 87.6

关键发现:OASIS 在平均 6× 压缩下,跟踪 MOTA 损失 ≤1 点。(旧版”固定 QP=30/40 逐档对比”与”适应时间50帧”为虚构,论文未提供,已删;论文对控制器更新间隔 N_f=14 帧做了消融。)

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
43
44
# 示意代码,不可直接运行。双闭环(PERCLOS/人脸检测质量反馈)为本站对 OASIS
# 思路在 DMS 数据管道上的推演,论文只做了跟踪/检测/分割/车道检测任务。
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% 缩减) 位精确无损 数据采集
日常驾驶 任务感知自适应压缩(OASIS 思路) 以下游算法精度为反馈目标 车端存储
事件触发 低压缩率 保留细节供事后分析 事故分析
紧急上传 高压缩率 牺牲细节换带宽 实时云传

3. 技术路线

总结

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

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

对IMS的启示:

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