重建三维场景时,别把「这张照片被压过」当成噪声:JSGS 直接读了 JPEG 自带的量化表

🧠 大模型影像论文精读 · 2026-08-14 · 3D Gaussian Splatting · Novel View Synthesis · JPEG · DCT · Image Compression
arXiv 2026-08 · 混合压缩质量下的三维高斯重建监督

有意思的地方不在于它又提了几个点,而在于换了个问题:以往做三维重建,「照片被压缩过」是要去猜、去修的未知损伤;这篇论文说,损伤的配方就明明白白写在文件里,不用猜。

先说清楚现在卡在哪

三维高斯泼溅(3D Gaussian Splatting,简称 3DGS)是这两年最主流的三维重建方式:给一组不同角度拍的照片,它往空间里塞几百万个半透明的小椭球,渲染时投影叠加就能合成任意新视角。训练很朴素——渲染一张,跟对应的真实照片比,差多少就往回改一点椭球。

前提是每张输入照片都忠实记录了场景本来的亮度。可现实里的照片几乎都是 JPEG:把画面切成 8×8 的小块,每块从像素变换到频率(这一步叫 DCT,粗略理解成「把这一小块拆成从平滑到细密的一系列条纹的叠加」),再按一张量化表决定每个频率保留多少精度。压得狠,高频被抹平,于是有了块状色斑和边缘振铃。

真正麻烦的是质量不一致:同一个场景,可能一部分是原图,一部分是转发压过的。而每个椭球是被多个视角共同更新的,一张糊图的伪影会顺着共享的椭球扩散出去,把清楚的视角也拖下水。丢掉糊图不行——视角本来就不够;先做一遍去伪影修复也不好,那等于在真值上又叠一层猜测。

关键的一转:把压缩写进前向模型

JSGS 的转折点是:每个 JPEG 文件头里都存着它自己用的亮度和色度量化表。这等于压缩方主动交代了它在这张图上抹掉了哪些频率、抹掉了多少。

于是作者不再试图把输入图还原成「未压缩的样子」,而是反过来——给渲染结果也套上同一张量化表,编码解码一遍,再跟输入图比。两边处在同一个压缩状态下,比较才公平,被压掉的细节不会再被当成重建误差记到椭球头上。这是把退化过程并入观测算子,只不过这里的算子不用估计,是读出来的。

监督本身也拆到了频率上:低频段用固定损失锚住大结构(这部分压缩基本没动,可信),中频段按量化表数值给连续权重——某个频率压得越狠,那里的残差就越不该被当真。逐块的分歧程度还被反投影回可见的椭球,用来约束那些「又小、又不透明、还老对不上」的赘生物,它们多半是模型为了硬拟合伪影长出来的。

它可能落到哪些活儿上

最直接的是众包与 UGC 素材的三维化:房产带看、街景与文旅扫描、商品建模——素材来自不同设备和上传通道,画质天生参差,眼下通行的做法是人工挑图或丢掉低质量的。视频抽帧建三维也一样,视频编码同样是分块变换加量化,思路可平移。

存疑与边界

第一,别被百分比带跑。论文报的 LPIPS 下降 20.7%–27.1%,参照的是原版 gsplat 这个不做任何压缩处理的基线;同一张表里,已有的 FDS-GS 在 PSNR 上仍然更高。PSNR 量的是逐像素差值,LPIPS 量的是「人看着像不像」——JSGS 赢在观感,在像素级保真上是让步的。它在七个场景、三种质量分布共二十一组设定下 LPIPS 全部最低,同时保持约 150 FPS 的渲染速度,也就是说抗压缩没有拿速度去换。

第二,更要命,作者自己写明了:方法处理不了二次压缩。文件里只留得下最后一次编码的量化表,之前被压成什么样,无从得知。而「转发过一圈的照片」恰恰就是典型的二次压缩——正好是上面那些应用最想吃下的素材。

第三,实验用的是 LLFF 和 Mip-NeRF 360 上人为压缩的数据,不是真实设备直出、真实传输链路劣化的图。想法够干净,但离真实相册还差一次验证。

论文来源:arXiv 原文 ↗

← 返回 大模型影像论文精读