简体中文 · English · 返回博客

🥽 VR 研究:把算力用在用户真正需要的地方

用户关注的区域要清楚,多人重复的处理可以少做一点。 我的毕业研究把眼动任务识别、渲染参数控制、共享缓存与端边通信接成一条可评估的链路。

研究工作 怎么解决 论文中观察到的结果
任务感知渲染 根据眼动任务调整细节区域与分辨率 片段平均帧时间:10.14 → 5.40 ms
多人缓存复用 识别共享对象块,学习缓存调度 六组系统条件中,命中率平均相对增益 22.08%
系统集成与评估 Unity 终端 + Python 边缘服务 + TCP 通信 真实头显链路验证;60 用户仿真负载运行 30 分钟

图表与数字来自终版论文;不同实验的条件在下文分别说明。代码仓库保持私有。

一张图看懂系统:端侧按需,边侧复用

终版论文图 5-1:端边协同系统总体架构
终版论文图 5-1:端边协同系统总体架构

看图路线:终端采集头动与眼动 → 识别任务并调整画面 → 向边缘服务发送状态与对象块请求 → 返回缓存决策与结果。

① 任务与画质 · ② 共享与缓存 · ③ 系统结果 · ④ 实现与原图

系统位置 用日常语言解释 在做什么
终端侧 用户此刻需要哪里更清楚? 采集头动与眼动,识别当前任务,调整高质量区域与外围画质
边缘侧 有没有其他人刚用过同一份内容? 比较不同用户的可见对象,识别共享机会,决定缓存保留、写入、预取与淘汰
通信链路 两端要知道哪些事情? 上报状态与对象块请求,返回决策与缓存结果

这三部分对应论文第三、四、五章:先分别验证方法,再接成系统。本页复述论文中的实验汇总,没有重新执行实验。

② 同一个注视点,不一定需要同一套画质

阅读文字、追踪移动目标、搜索物体,对细节和视野范围的要求不同。中心凹渲染把画面分为三层;我的方法进一步考虑用户正在做什么,再调节各层范围与分辨率。

终版论文图 3-6:凝视、追踪、阅读、搜索与浏览的渲染效果
终版论文图 3-6:凝视、追踪、阅读、搜索与浏览的渲染效果
处理步骤 输入与输出 为什么需要这一步
观察行为 一段头动、眼动序列 单个注视点无法完整说明任务
识别任务 五类任务的概率 区分凝视、追踪、阅读、搜索和浏览
分配细节 中心与过渡区范围、外围分辨率 把更多资源留给当前任务关心的区域
平滑调整 连续变化的参数 避免参数频繁跳变影响体验
终版论文图 3-5:中心、过渡、外围三层结构
终版论文图 3-5:中心、过渡、外围三层结构

怎么评价“画面还好、开销更低”?

渲染策略 片段平均帧时间 平均片段超预算比例 相对全分辨率加速比
全分辨率渲染 10.14 ± 2.99 ms 33.42% 1.00×
SCFR 对比策略 5.58 ± 2.95 ms 6.09% 1.82×
TAFR 任务感知策略 5.40 ± 2.97 ms 4.81% 1.88×

来源:终版论文表 3.7,正文第 48 页。以场景—路径片段为统计单元,先在每个片段内计算,再对片段取平均。这里的加速比只说明这组渲染实验,不能直接解释为整个 VR 系统都快了 1.88 倍。

终版论文图 3-14:Fireplace 场景的图像质量与局部细节对比
终版论文图 3-14:Fireplace 场景的图像质量与局部细节对比

图像质量用 PSNR、SSIM、LPIPS、FovVideoVDP 等指标共同评估。TAFR 的总体 SSIM 与 LPIPS 表现较好,但并非每个场景、每个指标都最优。任务识别模型的准确率为 93.85 ± 0.26%,对应的是样本级五折交叉验证,不能据此声称对完全未见用户有同等准确率。

③ 多人看到同一部分场景,可以共享什么?

不同用户的位置与朝向不同,但仍可能同时看到同一个对象。把场景内容表示成对象块后,就能识别这些重叠部分,并用共享价值辅助缓存调度。

终版论文图 4-3:不同用户视场与共享对象块
终版论文图 4-3:不同用户视场与共享对象块
缓存要回答的问题 对应动作
新内容值不值得放进来? 写入
哪些内容接下来还可能被多人使用? 保留或预取
容量不足时先让谁腾位置? 淘汰

SCOPE-DDQN 用当前状态和反馈学习这些选择。收益应与 LRU 等规则策略比较,也要检查决策开销和高负载表现;算法更复杂并不自动意味着系统更好。

终版论文图 4-9:方法实验的缓存命中率
终版论文图 4-9:方法实验的缓存命中率

这张图属于第四章方法实验。下面属于第五章集成系统实验,两者的请求流程和统计口径不同,所以数字不应拼在一起当作一条性能曲线。

④ 接成系统后,收益还能留下多少?

终版论文图 5-10:集成系统中 LRU 与 SCOPE-DDQN 的对比
终版论文图 5-10:集成系统中 LRU 与 SCOPE-DDQN 的对比
用户规模与时长 LRU 命中率 SCOPE-DDQN 命中率 LRU 共享命中率 SCOPE-DDQN 共享命中率
10 用户 · 短时 55.72% 64.22% 12.80% 18.51%
10 用户 · 长时 53.30% 63.49% 12.32% 16.92%
20 用户 · 短时 44.37% 58.47% 11.86% 18.47%
20 用户 · 长时 45.79% 57.34% 11.94% 17.37%
60 用户 · 短时 47.47% 57.55% 14.87% 21.63%
60 用户 · 长时 47.12% 56.48% 15.10% 19.34%

来源:终版论文表 5.4,正文第 84 页。六个条件分别比较两种方法,共 12 组实验;多用户请求由可控仿真生成,真实头显接入用于验证采集、渲染和通信链路。

看一个直观例子: 20 用户短时条件下,缓存命中率从 44.37% 到 58.47%,增加 14.10 个百分点,相对增加约 31.78%。“百分点”与“相对百分比”是两种不同说法。

六组成对条件的汇总 平均相对增益 Bootstrap 95% 置信区间
缓存命中率 22.08% [18.31%, 26.51%]
共享命中率 42.78% [35.46%, 49.23%]

来源:终版论文表 5.5,正文第 85 页。这是六组相对增益的均值,不是把每组百分点差值平均后得到的结果。

能不能持续运行?

终版论文图 5-12:60 用户、30 分钟条件下的窗口级表现
终版论文图 5-12:60 用户、30 分钟条件下的窗口级表现

这张图观察的是长时运行趋势:窗口级命中率均值 57.16%,边缘处理代理时延均值约 153.44 ms。代理时延衡量边缘服务接收请求到生成响应的处理过程;它不等于真实网络往返时延,更不等于头显端到端 Motion-to-Photon 时延。窗口级均值与全程命中率的聚合方式不同,数字可能略有差异。

⑤ 实现脉络与更多原图

实现部分 技术与工作
终端与场景 Unity 2022.3 LTS、C#、Pico 4 Enterprise 接入、任务驱动参数调整
边缘缓存 Python 3.10、PyTorch 2.1、动态群组与对象块共享、缓存决策
两端通信 TCP Socket、结构化 JSON、状态上报与结果反馈
实验组织 方法对比、消融、集成系统对比、30 分钟长时运行分析
展开查看通信、运行效果和更多实验原图

两端怎么交换状态

图 5-2:通信时序与时延分解
图 5-2:通信时序与时延分解

系统运行中怎样改变画面细节

图 5-6:任务驱动渲染
图 5-6:任务驱动渲染

共享机会如何随用户变化

图 5-7:动态群组与共享对象块
图 5-7:动态群组与共享对象块

缓存模型如何组织决策

图 4-4:SCOPE-DDQN 缓存决策模型
图 4-4:SCOPE-DDQN 缓存决策模型

渲染开销与图像质量怎样同时观察

图 3-17:片段平均帧时间分布
图 3-17:片段平均帧时间分布
图 3-19:质量与效率的联合评价
图 3-19:质量与效率的联合评价

六组系统条件中的相对增益

图 5-11:相对增益对比
图 5-11:相对增益对比

这份展示能说明什么,还有什么边界?

能支持的结论 需要继续验证的部分
任务识别、渲染控制、共享缓存可以接成可运行链路 换设备、换场景、换真实用户后的效果
当前方法与系统实验中观察到质量、开销及缓存收益 跨用户泛化;模型与决策开销的进一步优化
可控多用户负载下能比较缓存收益与长时趋势 大规模真实用户部署、无线网络变化与端到端体验

我在这项研究中做的是:把问题拆成可测量的模块,把模块接成系统,再用不同口径的实验解释各自的收益与代价。

原图来源与页码:素材索引。更多交流:GitHub Issues。