Learning to Predict Indoor Illumination from a Single Image阅读报告

xiaoxiao2021-07-27  306

Learning to Predict Indoor Illumination from a Single Image

编者前言:此课题主要研究内容是单张图像的光照估计,也就是给定单张图像,我们分析图像中的光源来自哪个方向,光源强度多大。

文章来自TOG 2017。 传送门:http://vision.gel.ulaval.ca/~jflalonde/projects/deepIndoorLight/index.html 文章训练一个端到端的深度神经网络,直接把视野较小的LDR回归成HDR光照图(含RGB全景图、光源位置、强度)。 三步走:1)训练一个光源分类器,自动标注一个LDR环境贴图数据集里面光源位置;2)用上面标注好的数据集训练一个深度神经网络,来预测小视野LDR图片中的光源位置;3)用一个小的HDR环境贴图数据集来fine-tune这个网络,从而预测光源强度。 现有问题:直接训练不可行,因为不存在 {输入为普通图片,输出为HDR光源} 的数据集。

解决思路:有个LDR全景图的数据集,但同时也有两个问题: 一是里面没有标注出光源信息,因此论文提出了一个新的算法去检测光源的位置,二是因为LDR图不能指示准确的光源强度,论文自己拍摄了一个新的数据集,里面包括2100张HDR环境贴图,用这些HDR数据去fine-tune网络。

优点:不依赖拍摄设备、用户输入,也不需要做任何场景几何信息、材质属性、光照等等假设。

贡献点:

一个端到端的网络,输入普通图片,输出HDR光照图LDR图片中的state-of-art的光源检测方法,还有个全景图的扭曲算法,有助于生成数据集。论文拍摄的那个HDR数据集单图场景光照估计的评价标准

两步训练:首先训练从LDR图中预测出光源位置,然后用HDR数据集去fine-tune预测出光源强度。

LDR全景图光源检测(为了生成数据集) 转换到灰度图后,全景图 P P P的天顶角旋转90度得到 P r o t P_{rot} Prot,使得天顶和水平线对齐。主要是考虑到原始全景图的天顶部分严重扭曲。然后计算两个全景图的特征,特征块大小有五种尺寸。论文用HOG、平均块海拔、均值和标准差和99%强度值。这些特征用来训练两个逻辑回归分类器,一个是针对小光源(点光源、台灯),另一个是针对大光源(窗户、反射)。 分类器会被应用到滑动窗口上,针对 P P P P r o t P_{rot} Prot每个像素,产生一个分值。总分为 S m e r g e d = S c o s ( θ ) + S r o t ∗ s i n ( θ ) S_{merged} = S cos(\theta) + S_{rot}^*sin(\theta) Smerged=Scos(θ)+Srotsin(θ) θ \theta θ是像素海拔。总分会被阈值化为二值mask,后续还有些优化操作。可以最大化GT和结果之间的交并除分数来优化阈值。

训练细节 手动标注SUN360数据集中的400张全景图。并且分四类,点光源、台灯、窗户、反射。80%作为训练集,20%作为测试集。 文中用precision-recall比率来展示分类器的效果。precision指的是识别出来的光源(有可能是负样本),实际上也确实为GT的比率,recall指的是正确识别出来的光源占所有GT光源的比率。

全景图Recentering Warp(改变全景图空间中心) 简单来说,不做这个处理,估计光源位置不准。

文中做了两个假设:1)场景中所有点到原始中心的距离是一样的;2)忽略遮挡问题。 设全景图在单位球上,即 x 2 + y 2 + z 2 = 1 x^2+y^2+z^2=1 x2+y2+z2=1,并且原始全景图的相机是位于球中心。 设个虚拟相机,中心位于 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0),由这个相机发出的光线(可以想象成最终成像到相机平面上的像素点)可以参数化为: x ( t ) = v x t + x 0 , y ( t ) = v y t + y 0 , z ( t ) = v z t + z 0 x(t)=v_xt+x_0, y(t)=v_yt+y_0, z(t)=v_zt+z_0 x(t)=vxt+x0,y(t)=vyt+y0,z(t)=vzt+z0 代入单位球公式,得到: ( v x t + x 0 ) 2 + ( v y t + y 0 ) 2 + ( v z t + z 0 ) 2 = 1 (v_xt+x_0)^2+(v_yt+y_0)^2+(v_zt+z_0)^2=1 (vxt+x0)2+(vyt+y0)2+(vzt+z0)2=1 虚拟相机的位置投影在单位球上的点,产生一个 β \beta β角。虚拟相机是沿着原始相机的Z轴进行移动的,因此有 { x 0 , y 0 , z 0 } = { 0 , 0 , s i n β } \{x_0,y_0,z_0\}=\{0,0,sin\beta\} {x0,y0,z0}={0,0,sinβ}。 代入公式中,有 ( v x 2 + v y 2 + v z 2 ) t 2 + 2 v z t s i n β + s i n 2 β − 1 = 0 (v^2_x+v^2_y+v^2_z)t^2+2v_ztsin\beta + sin^2\beta -1 = 0 (vx2+vy2+vz2)t2+2vztsinβ+sin2β1=0 解出式中的t就可以把源全景图的坐标,映射到warp后的坐标系下。 β \beta β的选取:先用引用文献的方法测图片的表面法线,通过基于表面法线和上向量的角距离的二值化来找到水平表面。然后将最大平面(注意是裁剪图里面的最大平面,而不是全景图里面的)的最低点的 y y y坐标反投影到全景图上得到 β \beta β。找不到水平面就用原始全景图。

这个warp操作缺点是不能处理遮挡关系。

用LDR全景图训练网络 训练数据准备 对于SUN360全景图,先用前面提到的方法去计算光源mask来作为GT。然后让每张全景图产生8幅处于-30°到30°之间随机海拔的截幅图,用上面提到的warp方法,每个截幅图对应产生warp后的全景图。并且要把warp后的全景图和对应的光源mask图旋转到裁剪区域总是在中心方位角。 这个过程会产生96000个输入输出对,输入为普通图片,输出是warp后的全景图和对应的光源mask。

网络结构 输入尺寸是256x192,输出的全景图和光照mask都是256x128。输出的光照mask y m a s k y_{mask} ymask表示环境贴图中每个像素为光源的概率。RGB全景图 y R G B y_{RGB} yRGB则作为最终环境贴图的高层颜色纹理。

损失函数 L L 2 ( y , t ) = 1 N ∑ i = 1 N s i ( y i − t i ) 2 L_{L2}(y,t) = \frac{1}{N}\sum^N_{i=1}s_i(y_i-t_i)^2 LL2(y,t)=N1i=1Nsi(yiti)2 其中 N = w i d t h × h e i g h t × 3 N=width \times height \times 3 N=width×height×3,y是网络预测值,t是GT, s i s_i si是像素点 i i i的立体角。 问题是L2函数对于小光源有点过度苛求准确,位置稍有偏差就惩罚过大。所以论文就想把光源mask一开始搞糊点,然后慢慢refine。 为此,论文针对光源mask图提出一个基于余弦距离滤波器: L c o s ( y , t , e ) = 1 N ∑ i = 1 N ( F ( y , i , e ) − F ( t , i , e ) ) 2 L_{cos}(y,t,e) =\frac{1}{N}\sum^N_{i=1}(F(y,i,e) - F(t,i,e))^2 Lcos(y,t,e)=N1i=1N(F(y,i,e)F(t,i,e))2 e跟当前epoch有关。上式中的F为: F ( p , i , e ) = 1 K i ∑ ω ∈ Ω i p ( ω ) s ( ω ) ( ω ⋅ n i ) α e F(p,i,e)=\frac{1}{K_i}\sum_{\omega \in \Omega_i}p(\omega)s(\omega)(\omega \cdot n_i)^{\alpha e} F(p,i,e)=Ki1ωΩip(ω)s(ω)(ωni)αe Ω i \Omega_i Ωi是全景图p上像素点i为中心的半球, n i n_i ni为单位法向量, K i K_i Ki Ω i \Omega_i Ωi上的立体角总和, ω \omega ω半球上某单位方向向量,s是其立体角。

全局损失函数: L ( y , t , e ) = w 1 L L 2 ( y R G B , t R G B ) + w 2 L c o s ( y m a s k , t m a s k , e ) L(y,t,e)= w_1L_{L2}(y_{RGB},t_{RGB})+w_2L_{cos}(y_{mask},t_{mask},e) L(y,t,e)=w1LL2(yRGB,tRGB)+w2Lcos(ymask,tmask,e)

训练细节 85%训练数据,15%测试数据,不混用,训练率0.005。训练40小时,测试10ms就可以推断出mask和RGB图。

用HDR图fine-tune网络 前面已经训练了一个网络,可以准确地预测光源位置,但还不知道强度。继续训练这个网络,但是用一个HDR全景图数据集去训练,使得它能够同时预测位置和强度。

室内HDR数据集 论文贡献了一个新的HDR数据集,2100张高分辨率的室内HDR全景图。

调整网络 四处调整:1)把光源mask最后一个层 conv5-1的权重给随机初始化了;2)训练只更新解码器的权重,只到(up to)FC-1024层;3)目标强度 t i n t t_{int} tint被定义为HDR强度的对数,低强度被截断为0,正常来说光源的强度都不会低。 最终的损失函数改为: L H D R ( y , t , e ) = w 1 L L 2 ( y R G B , t R G B ) + w 2 L c o s ( y m a s k , t m a s k , e ) + w 3 L L 2 ( y i n t , t i n t , e ) L_{HDR}(y,t,e)= w_1L_{L2}(y_{RGB},t_{RGB})+w_2L_{cos}(y_{mask},t_{mask},e)+w_3L_{L2}(y_{int},t_{int},e) LHDR(y,t,e)=w1LL2(yRGB,tRGB)+w2Lcos(ymask,tmask,e)+w3LL2(yint,tint,e) 关于强度的L2项是为了减少反卷积的失真。 训练网络用的的输入输出对与LDR训练过程类似,只不过会输出光源强度,而不是光源mask。

实验 1)展示SUN360数据集上的光源预测结果,前面所述的光源检测器检测的光源作为GT;2)展示HDR fine-tune步骤产生的结果,与用HDR GT产生的结果做比较;3)论文与其他工作的比较,并且做了个用户调查(用每个方法在虚拟物体上复现光源信息,做个比较) LDR网络推断出光源mask,HDR网络推断出光源强度。

LDR网络评价 定性分析:渲染一个兔子。 将进过阈值化等操作后的环境贴图 x m a s k ∗ x^*_{mask} xmask与RGB全景图(GT,为了展示效果)组合在一起: x c o n b i n e d = λ m a s k x m a s k ∗ + λ R G B ( 1 − x m a s k ∗ ) x R G B x_{conbined}=\lambda_{mask}x^*_{mask}+\lambda_{RGB}(1-x^*_{mask})x_{RGB} xconbined=λmaskxmask+λRGB(1xmask)xRGB 从图12可以看出,这个LDR网络准确地预测出了光源的位置。观察兔子也能侧面反映预测得还可以。 HDR网络评价 定量分析:把测试集的HDR损失以直方图的形式展示出来,图14可以看出误差小的个数占多数,少数图像才有较大误差。 定性分析也是类似于LDR网络评价。

重点

在没有相应数据集的情况下,用现有的一个数据集,提出自己的一套算法对它进行适当的修改,产生了适用于此课题的一个数据集。当然还有自己拍摄HDR数据集的贡献等等。

转载请注明原文地址: https://www.6miu.com/read-4823442.html

最新回复(0)