发明内容
发明目的:一个目的是提出一种基于神经网络的单光源场景光照重渲染方法,以解决现有技术存在的上述问题。进一步目的是提出一种实现上述方法的系统。
技术方案:一种基于神经网络的单光源场景光照重渲染方法,包括以下步骤:
步骤1、对已有的图像场景光照数据集进行预处理,同时对数据集进行数据增强;
步骤2、设计光照信息分类网络;
步骤3、设计自重建网络模型;
步骤4、构建光照重渲染网络;
步骤5、使用数据集对光照重渲染网络进行训练。
在进一步的实施例中,所述步骤1进一步为:
步骤1-1、将图像分辨率压缩至预定尺寸,为了防止通道模式不一致所导致的程序出错,将所有图像的通道模式统一改为RGB模式,并将所有图像由H*W*C三维张量在第0维处扩展为N*H*W*C的四维张量;其中H为图像的高,W为图像的宽,C为图像的通道数,N为图像的个数;
步骤1-2、将通道C与H、W进行位置互换,变成N*C*N*W的四维张量;
步骤1-3、将图像的像素值由区间[0,255]归一化到区间[0,1],公式如下:
式中,xnorm是每个通道内归一化之后的结果,x为原始数据,xmax为每个通道内数据的最大值,xmin为每个通道内数据的最小值;如此操作会使得数据分布更加有利于后续最优值的求解;在归一化之后便可以使用将数据进行用于计算。
在进一步的实施例中,所述步骤2进一步为:
步骤2-1、采用VIDIT数据集并布置多个虚拟场景,每个虚拟场景至少包含了12000对训练集和90对测试集,其中共包含有300个不同的虚拟场景,每个场景包含包括8 个方向以及5个色温,共对应至少40组光照场景;
步骤2-2、为光照信息分类网络构建损失函数:
式中,表示预测值,y表示真实值,这样便可以对光照信息进行学习和分类。
步骤2-3、对光照信息分类网络进行训练,并将得到训练权重保存,不再改变;为了得到更多的训练数据使得能有更好的训练效果,我们对训练数据进行了数据增强,我们对12000个数据对进行随机旋转,使得我们总共得到了96000对训练数据,这样使得我们可以从有限的数据中获得更多更全面的数据来增强网络的鲁棒性。
在进一步的实施例中,所述步骤3进一步为:
步骤3-1、步骤2侧重于光照的信息,而设计自重建网络则是为了能够获得更加准确的图像内容信息,对内容编码器做单独的预训练,为内容编码器构建一个完整的端到端的编码器解码器网络,即先进行分解合成的自重建的训练,在这个过程中内容编码器学会图像中各种低级和高级的特征,同时解码器也学会将高级的特征还原回低级特征;
步骤3-2、整个预训练的过程中每次循环迭代时都将一组图像作为输入,然后在编码器中进行卷积编码,再在解码器中还原输入图像;将最后的输出和输入的图像利用损失函数进行误差计算,得到损失之后,再回传网络进行同时更新梯度,并不断重复直到网络收敛,即能够生成和输入图像误差很小的图像时停止训练;这样做,让它首先具备一定的先验基础,有利于深度学习模型在大规模的数据训练中可以更加快速的收敛,能更加快速的找到最优值,并且对于信息的提取具有极大的帮助作用。
在进一步的实施例中,所述步骤4进一步为:
步骤4-1、通过步骤2的光照分类模型可以准确的得到光照信息,通过步骤3,可以的得到一个经过预训练的内容编码器;在步骤4中,我们把步骤2和步骤3进行结合,并进行进一步的优化设计得到光照重渲染模型,理由是这样做可以最大化地提取特征和实现光照重渲染。由以下三个模型组成:一个光照编码器、一个内容编码器和一个解码器。光照编码器负责提取出目标光照信息,内容编码器负责提取出输入图像的内容信息,解码器负责将光照信息和内容信息进行整合;
步骤4-2、在所述光照重渲染模型中引入多尺度特征融合,除在编码器的4个层级与解码器的4个层级之间有跳跃连接之外,同时光照编码器的5个层级都与解码器同样有跳跃连接,这样在保证了光照编码器对引导图进行图像光照信息的提取同时,也让内容编码器的各层特征信息与光照编码器的各层的特征信息相连接,并将连接后生成的特征再次与下一层的光照和内容特征相连接,这样可以做到在兼顾内容特征信息和光照特征信息的同时还能将其结果传递下去,从而可以得到最大的细节保障,具体如下所示:
式中,代表解码器对光照信息和内容信息进行卷积得到的结果,F代表卷积操作, concate表示特征层串联操作,将三个三维张量按照图像通道这个维度进行串联拼接,FD表示反卷积操作,相当于将图像进行上采样,/>代表上一次层级所代表的解码器卷积结果,/>与/>分别代表内容编码器的卷积结果与光照编码器的同一层的卷积结果;
步骤4-3、考虑到不同通道之间的特征所占的重要程度的不一样,我们引入SE 块,它能够对图像特征通道之间关系进行一个更为细致的考量,具体如下:
式中,uc代表的是三维张量的第c个通道,W代表特征图的宽,H代表特征图的高,Fsq代表的是特征压缩;
步骤4-4、在得到压缩后的特征之后,获取各个通道特征的权重大小:
sc=Fex(z,W)=σ(g(z,W))=σ(W2δ(W1z)),
式中,z表示步骤4-3得到的结果,W1表示第一个全卷积层,维度是C/r*C,r是缩放参数,W2表示第二个全卷积层,W2的维度是C/r*C,σ代表非线性sigmoid函数,即经过最后一次激活便可以得到不同通道的权重sc;
步骤4-5、在得到每个通道的权重之后,将各个通道的权重与之前的特征通道进行点乘,得到最终所需要的特征图,如下:
式中,表示单个通道的特征张量,即前面所提到的光照特征张量,这样使得光照特征图在经过SE块之后能够将更准确的信息与内容信息进行结合;
步骤4-6、将输入的图像形状设为N*C*H*H,其中H=W,卷积层核的个数设为N2,卷积核的大小设为K*K,卷积步长stride设为S,设padding(在图像周围进行补0的操作)为P,则输出大小H2如下:
式中,O为输出的图像大小;进而在经过一个卷积操作之后图像的输出大小为 N*N2*H2*H2。可以得到经过卷积后的操作中,N不会变,N2的值等于卷积层中卷积核的个数,即内容编码器各个层中然后将生成的特征图像继续向后传递,因为随着通道数越来越多所以图像的大小也就越来越小;
内容编码器中的卷积层步长均一致,为了获得更多层级的图像特征,我们将通道数设为一个以指数递增的数列,然后将图像的特征逐层分解并增加,这样有利于细节的合成,激活函数我们选择ReLU,相比其他的损失函数,ReLU可以更好的缓解梯度消失的问题,表达式如下所示:
f(x)=max(0,x)
式中,x为被激活的值,f为因变量。
在进一步的实施例中,步骤4-1中所述光照重渲染模型采用L1损失和SSIM损失作为损失函数;
L1损失函数如下:
式中,表示的是预测值,y表示的是真实值;L1损失函数非常适合去衡量一个图像的低级特征,尽可能地保留在低级特征空间中找到最优解;
SSIM损失函数用于衡量图像之间的相似性指标,包括照度相似性、对比度相似性和结构相似性,可以顾及到图像中的各种细节;SSIM损失函数如下:
SSIM(x,y)=[j(x,y)]α[c(x,y)]β[s(x,y)]γ
式中,α>0,β>0,γ>0,j(x,y)表示的是照度相似性,用来衡量两幅图像之间亮度不同的指标,c(x,y)表示对比度相似性,用来表示两幅图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量,s(x,y)表示图像结构之间的比较;
采用Adam优化器,相比其他优化器Adam优化器的性能更加强大,能够以最快的速度找到最优值。
在进一步的实施例中,所述步骤5进一步为:
步骤5-1、将训练数据分成若干个小组,按顺序将小组依次送入神经网络,送入神经网络之后卷积核开始不断地对输入图像进行卷积操作;
步骤5-2、当时一次前向计算完成之后,利用损失函数计算损失,然后开始反向传播,并利用Adam优化器不断地优化卷积核内部的参数;
步骤5-3、在每次训练时给光照编码器一张引导图,以引导图的光照方向和色温作为重渲染的光照信息。
基于上述方法,本发明进一步提出一种基于神经网络的单光源场景光照重渲染系统,该系统包括用于对已有的图像场景光照数据集进行预先处理的第一模块;用于建立光照信息分类网络的第二模块;用于建立自重建网络模型的第三模块;用于建立光照重渲染网络模型的第四模块;以及用于训练光照重渲染网络模型的第五模块。
在进一步的实施例中,所述第一模块进一步用于采集已有的图像场景光照数据集,对数据集进行预处理,同时对数据集进行数据增强;
将图像分辨率压缩至448*448,将所有图像的通道模式统一改为RGB模式,并将所有图像由H*W*C三维张量在第0维处扩展为N*H*W*C的四维张量;其中H为图像的高,W为图像的宽,C为图像的通道数,N为图像的个数;
将通道C与H、W进行位置互换,变成N*C*N*W的四维张量;
将图像的像素值由区间[0,255]归一化到区间[0,1],公式如下:
式中,xnorm是每个通道内归一化之后的结果,x为原始数据,xmax为每个通道内数据的最大值,xmin为每个通道内数据的最小值;
所述第二模块进一步采用VIDIT数据集并布置多个虚拟场景,每个虚拟场景至少包括8个方向以及5个色温,共对应至少40组光照场景;
为光照信息分类网络构建损失函数:
式中,表示预测值,y表示真实值;
对光照信息分类网络进行训练,并将得到训练权重保存,不再改变;
所述第三模块进一步为内容编码器构建一个完整的端到端的编码器解码器网络,即先进行分解合成的自重建的训练,在这个过程中内容编码器学会图像中各种低级和高级的特征,同时解码器也学会将高级的特征还原回低级特征;整个预训练的过程中每次循环迭代时都将一组图像作为输入,然后在编码器中进行卷积编码,再在解码器中还原输入图像;将最后的输出和输入的图像利用损失函数进行误差计算,得到损失之后,再回传网络进行同时更新梯度,并不断重复直到网络收敛,即能够生成和输入图像误差很小的图像时停止训练。
在进一步的实施例中,所述第四模块进一步将第二模块中得到的光照信息和第三模块中得到的经过预训练的内容编码器相结合,得到光照重渲染模型,所述光照重渲染模型包括至少一个用于提取出目标光照信息的光照编码器、至少一个用于提取出输入图像的内容信息的内容编码器、以及至少一个负责将光照信息和内容信息进行整合解码器;
所述光照重渲染模型采用L1损失和SSIM损失作为损失函数;
L1损失函数如下:
式中,表示的是预测值,y表示的是真实值;
SSIM损失函数用于衡量图像之间的相似性指标,包括照度相似性、对比度相似性和结构相似性,SSIM损失函数如下:
SSIM(x,y)=[j(x,y)]α[c(x,y)]β[s(x,y)]γ
式中,α>0,β>0,γ>0,j(x,y)表示的是照度相似性,用来衡量两幅图像之间亮度不同的指标,c(x,y)表示对比度相似性,用来表示两幅图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量,s(x,y)表示图像结构之间的比较;
在所述光照重渲染模型中引入多尺度特征融合,除在编码器的4个层级与解码器的 4个层级之间有跳跃连接之外,同时光照编码器的5个层级都与解码器同样有跳跃连接:
式中,代表解码器对光照信息和内容信息进行卷积得到的结果,F代表卷积操作, concate表示特征层串联操作,将三个三维张量按照图像通道这个维度进行串联拼接,FD表示反卷积操作,相当于将图像进行上采样,/>代表上一次层级所代表的解码器卷积结果,/>与/>分别代表内容编码器的卷积结果与光照编码器的同一层的卷积结果;
在所述光照重渲染模型中引入SE块:
式中,uc代表的是三维张量的第c个通道,W代表特征图的宽,H代表特征图的高,Fsq代表的是特征压缩;
在得到压缩后的特征之后,获取各个通道特征的权重大小:
sc=Fex(z,W)=σ(g(z,W))=σ(W2δ(W1z)),
式中,z表示步骤4-3得到的结果,W1表示第一个全卷积层,维度是C/r*C,r是缩放参数,W2表示第二个全卷积层,W2的维度是C/r*C,σ代表非线性sigmoid函数,即经过最后一次激活便可以得到不同通道的权重sc;
在得到每个通道的权重之后,将各个通道的权重与之前的特征通道进行点乘,得到最终所需要的特征图,如下:
式中,表示单个通道的特征张量;
将输入的图像形状设为N*C*H*H,其中H=W,卷积层核的个数设为N2,卷积核的大小设为K*K,卷积步长stride设为S,设padding为P,则输出大小H2如下:
式中,O为输出的图像大小;
将通道数设为一个以指数递增的数列,然后将图像的特征逐层分解并增加,选择ReLU作为激活函数:
f(x)=max(0,x)
式中,x为被激活的值,f为因变量;
所述第五模块进一步将训练数据分成若干个小组,按顺序将小组依次送入神经网络,送入神经网络之后卷积核开始不断地对输入图像进行卷积操作;当时一次前向计算完成之后,利用损失函数计算损失,然后开始反向传播,并利用Adam优化器不断地优化卷积核内部的参数;在每次训练时给光照编码器一张引导图,以引导图的光照方向和色温作为重渲染的光照信息。
有益效果:本发明提出了一种基于神经网络的单光源场景光照重渲染方法及系统,基于该方法能提取处出所需的光照信息,而自重建网络使得其内部的内容编码器可以学习到足够多的图像内容特征,所以可以将准确的光照信息与图像信息相结合得到接近真实的效果,从而解决了在场景图像中的光照重渲染问题。
具体实施方式
在下文的描述中,给出了大量具体的细节以便提供对本发明更为彻底的理解。然而,对于本领域技术人员而言显而易见的是,本发明可以无需一个或多个这些细节而得以实施。在其他的例子中,为了避免与本发明发生混淆,对于本领域公知的一些技术特征未进行描述。
申请人认为,在现有的技术方案中,基于图像像素直接转换的方法很难学习到光照信息的变换,而基于人脸的光照重渲染方案所需求的先验信息较多过程复杂,并且现有的方案中都存在对光照信息分类和阴影的消除都不够准确。
为解决虚拟场景中图像光照重渲染的问题,申请人提出一种基于光照信息分类的场景光照重渲染的技术方案,在本方案中光照信息分类网络能够对40种光照情况进行准确地分类,并能提取处出所需的光照信息,而自重建网络使得其内部的内容编码器可以学习到足够多的图像内容特征,所以我们可以将准确的光照信息与图像信息相结合得到接近真实的效果,从而解决了在场景图像中的光照重渲染问题,如图3所示。
下面通过实施例,并结合附图,对本发明的技术方案做进一步说明。
如图2所示,本发明涉及到的单光源场景光照重渲染方法主要包括如下五个步骤:
步骤一,数据预处理。
为了方便计算和后续的进一步工作,我们先将正常的图像分辨率由1024*1024压缩到448*448,为了防止通道模式不一致所导致的程序出错,将所有图像的通道模式统一改为RGB模式,并将所有图像由H*W*C三维张量在第0维处扩展为N*H*W*C的四维张量,其中H为图像的高,W为图像的宽,C为图像的通道数,N为图像的个数。为了方便计算再将通道C与H,W进行位置互换,变成N*C*N*W的思维张量。进一步再将图像的像素值由区间[0,255]归一化到区间[0,1],公式如下所示:
其中xnorm是每个通道内归一化之后的结果,x为原始数据,xmax为每个通道内数据的最大值,xmin为每个通道内数据的最小值,这样会使得我们数据分布更加有利于后续最优值的求解。在归一化之后便可以使用将数据进行用于计算。
步骤二,设计光照信息分类模型。
光照信息分类的目的是为了识别和学习图像中的不同光照信息,也是整个流程中十分关键的一步。我们采用的数据集是VIDIT,里面的图像均为虚拟场景的取景,其中包含了12000对训练集和90对测试集。其中共包含有300个不同的虚拟场景,每个场景包含8个方向以及5个色温,即每个场景有40种光照情况。为了能够给网络提供最为准确的光照信息,专门利用了一个网络来进行光照信息的学习,而不是以一种单纯的端到端的学习方式来学习光照重渲染的问题,这样可以更加地去细化一个问题,去使一个问题的解决效果达到最优。且能进一步帮助我们解决光照重渲染问题。本实施例采用经典的resnet50网络作为分类网络模型,并且在其基础上进行了部分结构重新设计,为了让resnet50能够对光照信息更加敏感,我们特意在不同的层之间额外了增加了卷积层,使得在对光照信息的处理上更为准确,就能专门对这40种光照情况进行分类识别并学习到各种光照信息。网络模型进行了5个不同的通道数级的变换,分别是:3,64,128, 256和512。
为了得到更多的训练数据使得能有更好的训练效果,我们对训练数据进行了数据增强,我们对12000个数据对进行随机旋转,使得我们总共得到了96000对训练数据,这样使得我们可以从有限的数据中获得更多更全面的数据来增强网络的鲁棒性。
我们采取的损失函数为交叉熵函数,它相较其他损失函数而言,在分类图像分类领域内所表现出的效果更好,表达式如下所示:
其中表示预测值,y表示真实值,这样便可以对光照信息进行学习和分类。
步骤三:设计自重建网络模型。
步骤二侧重于光照的信息,而设计自重建网络则是为了能够获得更加准确的图像内容信息,我们会对内容编码器做单独的预训练,先为内容编码器构建一个完整的端到端的编码器解码器网络,即先进行分解合成的自重建的训练,在这个过程中内容编码器学会了图像中各种低级和高级的特征,同时解码器也学会了将高级的特征还原回低级特征。整个预训练的过程中每次循环迭代时都会将一组图像作为输入,然后在编码器中进行卷积编码,再在解码器中还原输入图像。将最后的输出和输入的图像利用损失函数进行误差计算,得到损失之后,再回传网络进行同时更新梯度,并不断重复直到网络收敛,即能够生成和输入图像误差很小的图像时停止训练。这样做,让它首先具备一定的先验基础,有利于深度学习模型在大规模的数据训练中可以更加快速的收敛,能更加快速的找到最优值,并且对于信息的提取具有极大的帮助作用。
步骤四:设计光照重渲染网络模型。
通过步骤二的光照分类模型可以准确的得到光照信息,通过步骤三,可以的得到一个经过预训练的内容编码器。在步骤四中,我们把步骤二和步骤三进行结合,并进行进一步的优化设计得到光照重渲染模型,理由是这样做可以最大化地提取特征和实现光照重渲染。由以下三个模型组成:一个光照编码器、一个内容编码器和一个解码器。光照编码器负责提取出目标光照信息,内容编码器负责提取出输入图像的内容信息,解码器负责将光照信息和内容信息进行整合。
在光照重渲染模型中,区别于现有的网络模型和方案,我们进而又设计了两个创新点:一个是多尺度的特征融合,二是含有SE块的跳跃连接。
对于多尺度的特征融合,由图1可见,在编码器的4个层级与解码器的4个层级之间有跳跃连接之外,同时光照编码器的5个层级都与解码器同样有跳跃连接,这样在保证了光照编码器对引导图进行图像光照信息的提取同时,也让内容编码器的各层特征信息与光照编码器的各层的特征信息相连接,并将连接后生成的特征再次与下一层的光照和内容特征相连接,这样可以做到在兼顾内容特征信息和光照特征信息的同时还能将其结果传递下去,从而可以得到最大的细节保障。
具体如下所示:
其中代表解码器对光照信息和内容信息进行卷积得到的结果,F代表卷积操作,concate表示特征层串联操作,将三个三维张量按照图像通道这个维度进行串联拼接,FD表示反卷积操作,相当于将图像进行上采样,/>代表上一次层级所代表的解码器卷积结果,与/>分别代表内容编码器的卷积结果与光照编码器的同一层的卷积结果。
考虑到不同通道之间的特征所占的重要程度的不一样,我们引入了SE块,它能够对图像特征通道之间关系进行一个更为细致的考量(数学)
具体如下所示:
其中uc代表的是三维张量的第c个通道,W代表特征图的宽,H代表特征图的高, Fsq代表的是特征压缩,这一个步骤相当于做了一个全局的平均池化操作,在得到压缩后的特征之后,下一笔便是要得到各个通道特征的权重大小,如下所示:
sc=Fex(z,W)=σ(g(z,W))=σ(W2δ(W1z)),
其中的z就是上一步得到的结果,W1表示的是第一个全卷积层,维度是C/r*C,r 是一个缩放参数,经过一个全卷积层之后再经过一个ReLU激活函数,即δ所表示的意思,经过一次激活之后还需要进行第二次全卷积操作,即W2所表示的,W2的维度是C/r *C,σ代表非线性sigmoid函数,即经过最后一次激活便可以得到不同通道的权重sc。进一步,在得到每个通道的权重之后,便将各个通道的权重与之前的特征通道进行点乘,得到最终所需要的特征图,如下所示:
其中就是单个通道的特征张量,即前面所提到的光照特征张量,这样使得光照特征图在经过SE块之后能够将更准确的信息与内容信息进行结合。
具体来说,
我们将输入的图像形状设为N*C*H*H其中假设H=W,卷积层核的个数设为N2,卷积核的大小设为K*K,卷积步长stride设为S,为了确保图像做卷积计算后输出图像的大小合适,设padding(在图像周围进行补0的操作)为P,则输出大小H2如下所示:
其中O为输出的图像大小,进而在经过一个卷积操作之后图像的输出大小为 N*N2*H2*H2。可以得到经过卷积后的操作中,N不会变,N2的值等于卷积层中卷积核的个数,即内容编码器各个层中然后将生成的特征图像继续向后传递,因为随着通道数越来越多所以图像的大小也就越来越小。
更具体地,内容编码器中的卷积层步长均一致,为了获得更多层级的图像特征,我们将通道数设为一个以指数递增的数列,然后将图像的特征逐层分解并增加,这样有利于细节的合成,激活函数我们选择ReLU,相比其他的损失函数,ReLU可以更好的缓解梯度消失的问题,表达式如下所示:
f(x)=max(0,x)
其中x为被激活的值,f为因变量。
更进一步,Decoder总共分为4个层级与内容编码器相当,且每个层级之间的传递都会设置一个上采样,使得被压缩的分辨率可以被还原。并且在解码器层中,每个卷积层后跟一个DRDB(空洞残差密度块),它使得与之相连的卷积层中的感受野能够被放大,从最基础的一个卷积核的大小的视野k*k逐步到最后被放大到整个图像,并且在其放大的过程中,图像之间的细节会被不断迭代传递,以达到最小的图像信息损失和最大的特征信息利用。
解码器层的每层都会连接一层SN层(可变正则化网络层),它使得解空间更加平滑了,这种平滑使梯度更具有可预测性和稳定性,从而使训练过程更快。
在光照重渲染模型中我们采用的损失函数是L1损失和SSIM损失。
L1损失如下所示:
其中表示的是预测值,y表示的是真实值,L1损失函数非常适合去衡量一个图像的低级特征,尽可能地保留在低级特征空间中找到最优解。
SSIM损失函数是用来衡量两个图像之间相似性的指标,其中包括:照度相似性、对比度相似性和结构相似性,可以顾及到图像中的各种细节。如下所示:
SSIM(x,y)=[j(x,y)]α[c(x,y)]β[s(x,y)]γ
其中α>0,β>0,γ>0,l(x,y)表示的是照度相似性,用来衡量两幅图像之间亮度不同的指标,c(x,y)表示对比度相似性,用来表示两幅图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量,s(x,y)表示图像结构之间的比较。
优化器我们选择的是Adam优化器,相比其他优化器Adam优化器的性能更加强大,能够以最快的速度找到最优值。
如图3所示,输入图像的光照方向为北方,目标方向为东方,中间即生成的结果,可以发现,光照的方向和色温确实与真实图像非常接近。
步骤五:训练光照重渲染网络模型。
具体步骤为:首先将训练数据分成若干个小组,然后按顺序将小组依次送入神经网络,送入神经网络之后卷积核开始不断地对输入图像进行卷积操作,当时一次前向计算完成之后,并利用损失函数计算损失,然后开始反向传播,并利用Adam优化器不断地优化卷积核内部的参数。同时在每次训练时,会给光照编码器一张引导图,以引导图的光照方向和色温作为重渲染的光照信息。
如上所述,尽管参照特定的优选实施例已经表示和表述了本发明,但其不得解释为对本发明自身的限制。在不脱离所附权利要求定义的本发明的精神和范围前提下,可对其在形式上和细节上做出各种变化。