实时渲染前沿研究:在浏览器上实现了Facebook提出的DLSS算法
大家好,我基于WebNN在浏览器上实现了2020年Facebook提出的Neural-Supersampling-for-Real-time-Rendering算法。它是一个用于实时渲染的神经网络超采样算法,能够把低分辨率的图片超采样为高分辨率的图片
本课程系列文章可进入合集查看:
实时渲染前沿研究系列文章合集
介绍DLSS算法整体思想
算法的整体介绍可参考:毫秒级时间使图像清晰16倍,Facebook提出的DLSS算法介绍
算法的pytorch实现请见:Github
算法的本课实现请见:Github
介绍整体实现思路
1.使用pytorch实现训练,保存weight、bias
2.使用WebNN实现推理,读取weight、bias
实现的重点记录
1.后面需要加入Motion Vector input,并实现Backward Warp
2.zero upsampling的实现参考了:https://github.com/pytorch/pytorch/issues/7911#issuecomment-392835113
3.应该可以使用Typescript dependent type来实现Tensor维度的编译检查。不过目前没有完全实现
4.等webnn issue实现后,就可以直接获得MLOperand的dimensions了。这样可方便简化代码,如在builder.slice时直接获得dimensions
在浏览器上推理的结果
使用webgl后端,场景大小为180*120,推理后为720*480
耗时为:
2015年的macbook pro:6000ms
后续优化点
现在的主要问题是推理太慢了,可以从下面几个方面来加快速度:
-
测试每个Module耗费的时间,找到性能热点
-
减少推理中的数据拷贝,如减少builder.slice、builder.concat的使用
-
减少previous frame的个数
目前我用的是5个,可以减少为4个 -
减半Reconstruction网络的参数
-
等待WebNN成熟,从而可以使用WebGPU后端、甚至是硬件推理后端
改进方向
对颜色rgb进行处理
进入神经网络前先除以albedo;神经网络输出后再乘以它
可以结合Neural Supersampling for Real-time Rendering、High-Quality Supersampling via Mask-reinforced Deep Learning for Real-time Rendering论文提出的神经网络,从而获得16*4=64倍的像素提升!
具体方法是:
1.渲染512*256的1/4的像素(也就是256*128)
2.使用该论文提出的神经网络,将其超采样为512*256的分辨率
3.使用本文实现的DLSS算法的神经网络,再将其超采样为512*256*16的分辨率
不使用Motion Vector来做Backward Warp?
参考Fast Temporal Reprojection without Motion Vectors
移动端的改进
参考MNSS: Neural Supersampling Framework for Real-Time Rendering on Mobile Devices
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?