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解决方案 将压缩视为闭环控制系统 :
压缩视频 → 发送给下游任务(跟踪/检测)
监控下游任务性能指标(跟踪精度、检测mAP)
性能下降 → 反馈 → 降低压缩率
性能充足 → 反馈 → 提高压缩率
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%(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 import numpy as npclass 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 self .kp = kp self .ki = ki self .kd = kd self .integral = 0 self .prev_error = 0 self .qp = 30 def update (self, current_metric: float ) -> int : """ 根据当前性能指标更新压缩参数 Args: current_metric: 当前下游任务性能(0-1) Returns: qp: 更新后的量化参数(1-51, 越大压缩越多) """ error = self .target - current_metric p_term = self .kp * error self .integral += error i_term = self .ki * self .integral d_term = self .kd * (error - self .prev_error) control = p_term + i_term + d_term 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压缩帧""" quality = 51 - self .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): compressed = self .compress_frame(frame) total_original += len (frame) total_compressed += len (compressed) metric = downstream_task(compressed) self .metrics_history.append(metric) 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:.3 f} , " 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 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 = min (qp_perclos, qp_face) compressed = self .compress_with_qp(frame, qp) return compressed, qp
2. 三级压缩策略 (旧版的压缩率/精度百分比列系本站臆测,原文与论文均未提供,已删,改定性。)
场景
压缩策略
精度考量
用途
测试验证
无损压缩(如 Beamr ML-Safe,官方口径 47% 缩减)
位精确无损
数据采集
日常驾驶
任务感知自适应压缩(OASIS 思路)
以下游算法精度为反馈目标
车端存储
事件触发
低压缩率
保留细节供事后分析
事故分析
紧急上传
高压缩率
牺牲细节换带宽
实时云传
3. 技术路线
graph LR
A[DMS Camera] --> B{场景判断}
B -->|日常| C[任务感知自适应压缩<br/>按下游精度动态调]
B -->|事件| D[低压缩率<br/>保留细节]
B -->|测试| E[Beamr无损<br/>官方口径47%]
C --> F[车端存储]
D --> G[事件存储]
E --> H[云端存储]
总结 OASIS的核心价值在于将控制论引入视频压缩 :
闭环反馈 :不是盲压缩,而是根据下游效果调整
动态平衡 :在存储和精度之间找到最优工作点
任务感知 :不同任务对压缩的敏感度不同
对IMS的启示 :
日常DMS数据用OASIS自适应压缩(省存储+保精度)
测试数据用Beamr ML-Safe无损压缩(保精度)
事件触发时降低压缩率(保细节)
三级策略最优平衡存储、精度和成本