本周拟定工作计划
- 尝试把EMLight从SG模型改成SH模型,训练网络从crop中回归出SH系数。
本周实际完成工作总结
按照以下步骤完成:
- LavalinDoor数据集预处理代码:求hdr全景贴图的SH系数
- 改写EMLight的data.py、Densenet.py、train.py,分别实现模型加载sh系数、模型预测参数调整、SHLight模型训练。
- 初次训练,设定epoch为2000次。数据集规模为800张图片。
本周实际完成工作详述
SH细究
上周的工作是学会使用pyshtools包,从全景图中求球谐系数并用较少的低阶系数复原图像。实验结果已经挂在我的这篇博客上“SH初探”部分。从结果看,复原效果符合预期。
但是pyshtools包及其类似工具在做球谐变换的时候提供了很多参数,这些我之前没有用到。例如球谐基底的不同normalization形式,以及Condon-Shortley phase是否在球谐基底中启用,这些都表明SH是一种方法,但是SH的基底可以有多种形式。
后来我联系到论文V. Gkitsas, N. Zioulis, F. Alvarez, D. Zarpalas, and P. Daras, “Deep Lighting Environment Map Estimation from Spherical Panoramas,” May 2020, doi: 10.48550/arXiv.2005.08000.的作者,在他指引下找到他们见刊论文使用的SH代码。通过阅读代码和做实验,我确认了他们在做球谐光照时使用的normalization方式和Condon-Shortley phase,与他们保持一致。
这部分的详细过程也记录在博客中,写在“SH初探”部分后面的两部分。
EMLight改写
使用上述代码处理了LAVAL数据集,得到19557张全景环境贴图的SH系数,和EMLight保存光参数的方式一样,保存为pkl文件。
EMLight是开源的SG光照模型代码。我保持使用的模型框架不动,将模型输出从原先的光分布、光强、颜色等参数改为简单的27个SH系数,命名新的模型为SHLight。然后改写了data.py,使得模型能够调用data.py加载数据集到模型中。接着改写train.py,和EMLight一样训练的过程中将预测出的SH系数重建成环境贴图,使得训练过程中结果能够预览。loss等写入tensorboard,能够观察loss的变化趋势。
SHLight初次训练效果
在800张图像上训练,训练2000轮,结束后在另外100张图像上测试模型对SH系数的预测效果。每张图的右上部分是GT效果,右下部分是根据预测出的SH系数可视化效果图。可以看到预测效果是不理想的。
但是该模型的loss又是一直收敛的:
分析原因可能是:
- 训练次数还不够,没达到收敛
- loss函数设计的过于简单,SH不同阶的loss可能需要施加不同的权重,或者在添加别的类项的loss例如render loss。这个下周参考下别的论文。
附件
无
下周工作计划
- 简单阅读下开源SH光照网络模型“shlight”的代码,比较他们的网络训练和我的SHLight的不同。