2D→3D · 电视端实时立体转换 · 研究进展

让电视自己把普通画面变立体:
研究进展汇报

目标是让电视实时把普通 2D 画面转换成立体 3D 效果,不需要另外拍摄立体素材。 这份报告用尽量少的专业词汇,讲清楚我们做了什么、中间踩过哪些坑、现在效果到什么程度,以及接下来打算怎么做。

✓ 最新一轮质量验收(第 4 关)已通过
50.8 分
立体转换效果打分(及格线 35 分,满分参考 100,详见第三部分)
12.65 ms/帧
标准画质档单帧处理耗时,达标线 25ms(相当于每秒 79 帧)
20.38M 参数
实际装进电视的算法体积,预算 26M±3M 内
250,000 步
最近一次完整训练的步数,4 张服务器显卡耗时约 45 小时
第一部分 · 在做什么

为什么要做这件事,又是怎么做的

现在的 3D 内容非常少,而绝大多数视频、直播都只有普通的"平面"画面。 我们希望电视能自己实时把这些普通画面变成立体效果,不用等着专门拍摄的 3D 片源, 也不需要把画面传去云端处理再传回来——这一切要在电视自己的芯片上,一边播放一边完成。

立体感/3D 效果
让左右两只眼睛看到略有差别的两张画面,大脑就会自动"脑补"出远近层次——这就是立体电影、VR 的基本原理。
老师模型 / 学生模型
先用一个又大又准、但跑不动实时的"老师"模型打样,再训练一个小得多的"学生"模型去模仿老师——学生能在电视上实时跑。
验收关卡(Gate)
项目分成几个阶段,每个阶段做完都要经过一次独立审核才能进入下一步,类似"考试过关"。
打分怎么来的
用电脑程序对比"生成的画面"和"真实拍摄的画面"有多像,自动给出一个 0~100 的相似度分数。

核心思路:把画面切成一叠"透明胶片"

技术路线上,我们没有让电脑直接"画"出另一只眼睛该看到的画面,而是让它把一张 2D 画面拆成 16 层前后叠放的透明胶片——离镜头近的东西画在靠前的胶片上,远处背景画在靠后的胶片上。 生成右眼画面时,只需要把这些胶片按远近错开一点、叠在一起就行,不需要"凭空画出"被遮住的部分—— 因为被前面物体挡住的内容,天然就已经画在后面那层胶片上了。

一张 2D 画面 看清楚细节 颜色、纹理 判断远近 哪里近,哪里远 决定分几层、怎么分 把两部分信息拼起来 画出每一层"透明胶片" 共 16 层,近的清楚、远的够用即可 纯几何计算(不用学习) 每层胶片按远近错开一点 再前后叠起来 被挡住的部分天然露出来 生成的右眼画面 只在训练时借用,实际播放不需要 参考老师(判断远近更准) 学着模仿老师判断远近 学着让合成画面更逼真 分两个阶段:先学远近,再学画质
左边浅色部分是实际装进电视的算法;右边虚线框里的"老师"和训练用的辅助模块 只在研发阶段用来"教"学生,电视实际播放时完全不需要它们。

参数量:装进电视的部分有多大

"参数量"决定了算法要占用电视芯片多少存储和算力,是电视厂最关心的硬指标之一。 下表是各模块的实测拆分——实际要装进电视的合计约 2038 万个参数(20.38M), 换算成文件大小,32 位精度下约 80MB,做量化压缩后可以降到约 20MB 级别,在旗舰电视芯片的预算内。

模块作用参数量是否装进电视
细节分支看清楚颜色、纹理11.38M
深度语义分支判断远近3.73M
融合模块 + 分层判断决定画面分几层5.26M
画面生成模块画出每一层"胶片"0.01M
合计(装进电视)20.38M
"模仿老师"辅助模块只在训练阶段用3.94M

合计训练时的完整参数图为 24.32M(2431.9 万),其中 20.38M 随算法一起交付,3.94M 的"深度头"训练完就丢弃。电视端预算目标是 26M±3M,达标。

为什么不直接"画"另一只眼睛的画面

因为被前面物体挡住的部分没法直接画出来,只能靠算法"猜"。 分层胶片的方式让这部分内容天然保留在后面的胶片里,不需要瞎猜,效果更稳定。

这套技术没有现成代码可抄

我们参考的这篇论文(LMPIN,2025年发表)没有公开代码,也没有可以直接商用的开源实现。 所有的核心计算、训练方法、打分标准,都是我们自己独立写出来并反复验证过的。

借用的"老师"模型有使用限制

现在临时借用的深度判断"老师"模型(Depth Anything V2)权重协议为 CC-BY-NC(仅限研究用途,不能直接商用)。这个风险已经记下来,下一步计划里安排了替换方案(见第五部分)。

第二部分 · 怎么训练出来的

训练流程与验收关卡

整个项目按"准备训练数据 → 搭好算法骨架 → 先学看深浅 → 再学画质 → 打分验收"的顺序推进, 每一步做完都要经过独立审核才能进入下一步,不允许自己给自己"放水"。目前前三关都已经通过, 第四关(最终质量验收)也已经通过。

训练数据(第一关)

我们造了 118,287 张训练样本(来自公开图片库 COCO)——每张样本是一张普通图片配上 "如果是立体的,另一只眼睛该看到什么样"的参考答案,用来教算法学习。这些样本特意覆盖了从 8 像素到 38 像素的立体错位强度(实测采样范围 8.0006~37.9988 像素),从"立体感很弱"到"立体感比较强"都有, 不会让算法只学到一种场景。

训练样本数量

118,287 张
规模足够训练一个 2000 万参数级别的小模型。

画面里"看不见、要靠猜"的部分

平均 6.07%
中位数 5.50%,剩下约 94% 的内容两只眼睛都能直接看到,不用猜,这个比例属于正常范围。

先学看深浅,再学画质(第二、三关)

正式训练分两步:第一步只教算法"判断画面里哪里近、哪里远"(不产出最终画面); 第二步才把"生成最终画面"这件事一起教给它。这样拆开学,比一开始就什么都学更稳妥。

零件先单独"开卷"验一遍

在正式训练前,评审方另外独立写了一套验证程序(不共用实现方的代码), 专门检查"分层胶片怎么错开叠加"这一步的几何计算对不对——结果 12 项检查全部对上,误差小到 0.000000000000001 以内(机器计算的极限精度)。 此外算法体积检查为 24,319,206 个参数,落在 2600 万±300 万的预算内。

先学深浅,和老师对比

训练 6 万轮后,把算法学到的"深浅判断误差"从初始值降低了 71.04% (达标线是降低超过 50%),四张显卡的利用率稳定在 92.1%~92.4%,没有出现"显卡空闲等数据"的浪费。

第三部分 · 现在效果如何

最终打分:50.8 分,通过了及格线

我们用一套公平的方式来打分: 如果"什么都不做"(直接拿左眼画面充当右眼)算 0 分,用真实相机拍出来的立体信息做参考算 100 分 (这是物理上限,因为两个镜头本身拍出来的画面就有细微差别,不可能真的到 100 分),及格线定在 35 分。 算法最终考了 50.8 分,通过了这一关。

0 分 什么都不做 35 分 及格线 我们:50.8 分 100 分(满分参考) 真实相机拍出来的效果
打分方式:用电脑程序对比"算法生成的画面"和"真实相机拍出来的画面"有多像(SSIM 相似度指标,0~1,越接近 1 越像), 归一化成 0~100 分,排除了"这套测试视频本身有多难"的干扰,只看算法真正学到了多少。 测试视频用的是 NAMA3DS1-COSPAD1(公开的真实双镜头拍摄立体视频集)。

四方对照:每一种做法的真实分数

下表是 90 段测试视频(共 450 帧)上的完整结果,同时给出三种电脑评分方式(数值含义类似,分数越接近下一行的"满分参考"就越像真实立体画面)。

做法相似度打分(SSIM)PSNRLPIPS说明
什么都不做0.58518.74dB0.174左眼画面直接冒充右眼
我们的算法0.71321.15dB0.154能在电视上实时跑的"学生"
直接照搬"老师"模型0.69920.68dB0.151体积更大、跑不动实时的参考模型
满分参考0.83723.90dB0.118用真实测量出的立体视差做出来的效果(物理上限)

50.8 分的算法公式:(0.713 − 0.585) ÷ (0.837 − 0.585) = 50.79%。遮挡区域(画面中要靠"脑补"的部分)单独测得的分数比全画面低 3.25dB,达标线是差距小于 6dB。

比"老师模型直接上"还要好

如果直接照搬"老师"模型的深浅判断去拼图, 换算成同一套打分标准约 45.3 分;我们训练出来的、能在电视上实时跑的"学生"反而拿到了 50.8 分,说明这套训练方法确实有效,不是单纯继承了老师的水平。

还没做到的地方

人工检查 20 组测试画面发现,人物、球网、植物这类细小、复杂的边缘还有些模糊, 是接下来重点要打磨的地方(详见第五部分的改进计划①)。

能不能实时播放

在电视芯片等级的算力预算下(单张服务器显卡实测),我们测了三档清晰度设置。 转换过程中用的"中间分辨率"越低,速度越快、画质会有一点点取舍;达标线是每帧处理时间在 25 毫秒以内(相当于每秒 40 帧以上)。

档位每帧耗时相当于每秒结论
最高画质档(1/2 中间分辨率)44.05 ms22.7 帧未达标,需继续优化
标准画质档(1/4 中间分辨率)12.65 ms79.1 帧达标 ✓
训练时用的分辨率(256×384)10.13 ms98.8 帧达标 ✓

测试条件:1920×1080 输入,单张 H20 服务器显卡,bf16 精度;耗时含画面缩放、算法推理、分层胶片渲染与最终合成,不含视频编解码。

第四部分 · 能不能实际看到效果

算法训练好之后,怎么变成能看的视频

我们在一台 Mac 上搭了一个验证播放器(Mac3DPlayer,项目独立于本次汇报的训练工作), 用来检验算法能不能真正"边播边转"。这里有两种完全不同的实现方式,第二种才是电视产品最终需要的能力, 也是这一部分的重点。

方式一:服务器先转好,播放器只管播(早期验证阶段用)

项目最初是让训练服务器把视频批量转换成立体格式,自动打包传给 Mac 播放。 这种方式计算全部发生在服务器上,播放器本身不做任何 AI 计算,只适合"看效果、挑毛病",不代表电视的真实工作方式。

服务器批量转换 提前算好整段立体视频 自动打包 + 校验完整性 确认文件没传坏才算完成 自动传到 Mac 播放器 定时检查有没有新结果 打开就能看 播放已经转好的文件

方式二:播放器自己实时计算(真正对应电视要做的事)

这才是电视产品真正要落地的形态——不提前转换、不经过服务器,播放普通 2D 视频的同时, 设备自己一边解码、一边现算立体效果、一边显示。我们已经在 Mac 上把这条链路完整打通:

解码原始 2D 视频 和普通播放共用一套解码 算法现场推理 在芯片专用单元上跑 分层画面实时叠加 用图形芯片现场合成 实时显示 不落地任何中间文件
全过程没有服务器参与,也没有生成中间视频文件——这是最接近电视芯片实际工作方式的验证。

实测速度(苹果 M4 Max 芯片验证)

播放一段 1920×960、24 帧/秒的测试视频时,现场实测约每秒 23.9 帧、单帧计算 13.9 毫秒,基本跟上原始视频的播放速度; 播放 4K(4096×2160)视频时,单帧计算耗时约 17.7~20.5 毫秒。测试用的正是本次汇报训练出来的同一个算法(第 250,000 步存档)。

计算结果和训练时完全一致

把算法转换到 Mac 上运行的格式后, 我们逐像素比对过它和服务器训练时的原始输出——差异小到 千万分之一以内,确认转换过程没有引入误差,不是"看起来差不多"。

如实说明:这是"打通"阶段,不是"验收完成"阶段

实时播放这条链路目前是工程上已经跑通、有初步实测速度数据,但还没有走完播放器项目自己的正式验收流程 (比如连续播放较长时间、确认全程不掉帧的仪器化测试)。这一点我们如实标注,不把"能跑"直接等同于"已验收通过、可以量产"。

功能清单

播放已转换好的文件时可用

立体直通播放、单独看左眼或右眼画面、 在普通屏幕上用红蓝眼镜模式查看立体效果、逐帧暂停检查——这些不需要设备现场计算,对着一份已经生成好的文件就能做。

只有"现场实时计算"模式才有

对着一份从没处理过的普通 2D 视频, 播放的同时现场转换出立体效果;还有一个调试专用视图,能把算法内部"分了几层、每层是什么样"直接显示出来,方便检查问题。

第五部分 · 下一步打算怎么做

已经过关了,但还能做得更好

50.8 分刚过及格线,不代表已经做到极致。我们盘点了几个能继续提升效果的方向, 按"值得优先做"的顺序排列:

① 把物体边缘处理得更整齐

人物、球网这类细小边缘目前还有点模糊。可以在最后一步加一个"贴边"处理,让立体画面的边界更贴合原图的实际轮廓。
预计几天内可以看到效果,不需要重新训练。

② 换一个更准的"老师"模型

现在借用的老师模型精度有提升空间,而且有商用限制。换成一个更新、且可以直接商用的版本, 能同时解决准确度和授权问题。
预计约 1 周。

③ 让算法知道"这张图该有多强的立体感"

训练时每张练习卷的"立体强弱"是随机给的,算法目前只能猜一个大概值。如果训练时明确告诉它这个信息, 不仅能让判断更准,还能顺便实现产品上"立体感强弱可调节"的功能。
预计约 1 周。

④ 用真实拍摄的立体电影素材来打磨(优先级最高)

现在的练习卷是"用普通照片伪造"出来的,和真实拍摄的立体电影还是有差别。如果能采购一批正版 3D 蓝光电影素材用来微调, 效果预计会有明显提升——这类干净的真实立体数据,同行业外部很难拿到,是电视厂在这个方向上难得的优势。
预计 2~3 周,需要先启动采购。

⑤ 让画面播放起来更稳定,不闪烁

目前是一帧一帧独立处理的,连续播放时可能会有轻微的"深浅感忽强忽弱"。我们已经测出了作为对照的基线数字 (相邻帧深度判断的差异度 0.00744、画面运动轨迹误差 0.217 像素),下一步要把这两个数字降下来。 这是已经计划中的工作,对最终观感的影响可能比任何单项打分都更直接。

建议的推进节奏

近期(约 1 周,现有资源就能做)

①+②+③ 一起推进:先做边缘优化看效果, 同时更换老师模型,再让算法学会识别立体强弱,做完重新打一次分。

中期(2~3 周,需要先采购素材)

④ 用真实电影素材微调,是这一阶段效果提升最关键的一步; ⑤ 播放稳定性的工作穿插在这期间推进。