APP下载

基于全连接神经网络的近实时重新着色算法

2020-05-16厉旭杰王怡婷

实验室研究与探索 2020年2期
关键词:训练样本着色线条

厉旭杰, 王怡婷

(温州大学计算机与人工智能学院,浙江温州325035)

0 引 言

图像重新着色方法是指调整和修改图像的颜色外观的处理过程[1-2]。Photoshop软件专门提供了一个“颜色替换”工具用于图像重新着色,但是该方法需要用户手工设置“颜色容差”参数来选取需要重新着色的区域,因此用户通常需要不断调整“颜色容差”参数,这种方法消耗大量的时间。为了提高计算机辅助设计的效率,减少设计师的劳动时间,改善重新着色技术的效果,Reinhard等[3]提出了一种基于色彩迁移的图像重新着色方法,该方法在目标图像和参考图像之间建立一种映射关系,从而把目标图像重新着色成和参考图像具有相似的颜色外观,但该方法的效果严重依赖于参考图像的选取。Huang等[4]提出了一种数据驱动的方法,从数据库中自动寻找匹配的参考图像,用于自动对照片进行重新着色,以增强照片的外观或改变观众对照片的情绪反应。对于一个新的输入图像,该方法可以生成多个重新着色的结果供用户选择,但是该方法需要和数据库中的图片逐一进行特征匹配,消耗大量的时间。Li等[5]利用用户输入着色线条,提出了基于最优化模型的图像重新着色方法,该方法根据提出的特征相量查找每个像素的最近邻域,通过邻域像素把着色线条的颜色值扩散到整个图像。该方法很好地加入了用户的交互,同时能获得高质量的图像重新着色效果,但是该方法需要求解大型的稀疏矩阵,因此需要消耗大量的内存。当图像尺寸达到一定程度,该方法甚至不能获得想要的图像重新着色效果,而且这类方法通常比较耗时。最近几年,基于神经网络的图像编辑方法被大量的研究,特别是卷积神经网络得到了广泛的使用[6-9]。文献[10-11]中利用卷积神经网络,自动进行图像重新着色,但是目前这类方法均采用图像级的样本作为卷积神经网络的训练样本,而训练神经网络通常需要消耗几小时甚至几天的时间。本文提出了一种基于全连接神经网络(FNN)的单个图像重新着色方法。该方法提取着色线条所在区域的像素RGB颜色特征值和相应的着色线条分类为数据集,该方法把FNN作为一个像素级的多分类神经网络,避免了神经网络在训练阶段需要大规模的训练样本的弊端,且能够达到近实时的交互性能,同时用户只需要输入少量的用户着色线条,就能获得高质量的图像重新着色效果。

1 算 法

1.1 网络结构

FNN模型见图1。图像重新着色分类全连接神经网络除了输入层和输出层外,中间还有3个隐藏层。输入层的输入为着色线条所在区域的像素的RGB颜色值,隐藏层1为第1个全连接层,隐藏层1的神经元个数为64,将输入层a0乘以权重W1并加上偏置b1,然后加上ReLU激活函数,得到a1;同理,隐藏层2和隐藏层3为第2个全连接层和第3个全连接层,隐藏层2和隐藏层3的神经元个数均为128,得到隐藏层2的输出a2和隐藏层3的输出a3,用公式表示为:

图1 用于图像重新着色的全连接神经网络模型

式中:W1∈R3×64;W2∈R64×128;W1∈R128×128;b1∈R64;b2∈R128;b3∈R128。

最后一层输出层也为全连接层,不同的是激活函数采用softmax函数,得到:

式中:W4∈R128×K;b4∈RK;K 为着色线条的种类。

1.2 训练数据集

提取着色线条所在区域的像素RGB颜色值和相应的涂色线条分类为数据集,为了减少神经网络的训练时间,对数据集进行随机采样。本文中把FNN作为一个像素级的分类神经网络,把色线条所在区域的像素RGB颜色值作为神经网络的输入,用FNN来做分类,输出每个像素点属于哪类着色线条的分类。

1.3 损失函数

训练样本经过FNN的输出和真实的训练样本输出之间的损失函数如下:

式中:i,k为索引值;M为训练样本的数量;K为着色线条的种类数量;L为交叉熵损失函数;ai为第i个训练样本在softmax层的未激活的输出;yi为训练集中第i个训练样本的分类向量,向量中目标分类yik等于1,其他分类yik等于0;y′ik为softmax的输出,计算了第i个训练样本预测为属于分类k的似然概率,

对损失函数E进行优化求最小化的极值,可以获得FNN的参数,本方法采用mini-batch Adam优化算法来训练深度学习神经网络。

1.4 FNN模型算法实现

用chainer深度学习框架实现全连接网络模型的算法如下:

class colormodel(Chain):

def__init__(self,K,channel=3):

super(colormodel,self).__init__()

with self.init_scope():

self.l1color = L.Linear(channel,64)

self.l2color = L.Linear(64,128)

self.l3color = L.Linear(128,128)

self.lf = L.Linear(128,K)

def forward(self,x,c,xc):

hcolor = F.relu(self.l1color(c))

hcolor = F.relu(self.l2color(hcolor))

hcolor = F.relu(self.l3color(hcolor))

y = self.lf(hcolor)

return y

1.5 计算重新着色结果

神经网络的softmax层输出了每个样本属于着色线条的似然概率,最终的图像重新着色结果计算如下:

式中:i为像素索引值;K为着色线条的种类数量;P′ik为第i个样本预测为属于分类k的似然概率;Sk为第k种着色线条的颜色值,当着色线条为特殊白色着色线条时,Sk的值为着色线条覆盖像素下图像原来的颜色值;C为最终的图像重新着色结果。

2 实验结果

本算法使用python 3.7和chainer 5.3.0库实现了基于神经网络的单个图像重新着色方法,所有实验都是在NVIDIA GeForce RTX 2080 Ti GPU和Intel I9-7900X CPU的机器上进行的。采用着色线条所在区域的像素为训练样本,但是训练神经网络仍然需要十几s,为了减少训练时间,获得近实时的效果,对训练数据进行了随机采样,采样率为β。本文研究了采样率和神经网络的迭代次数t对图像重新着色效果的影响。图2比较了β和迭代次数t对图像重新着色效果的影响,当β=0.1,t=2时,图像重新着色效果几乎收敛。较高的β和t不会产生明显更好的重新着色效果。实验中,通常10%的用户笔画像素β=0.1足以训练本文的神经网络用于图像重新着色。因此,本文算法设置β =0.1,t=2。

图2 采样率β和迭代次数t对图像重新着色效果的影响

图3 本方法与目前主流的图像重新着色方法效果对比图

图3比较了本方法与主流的重新着色方法DeepProp[12]、全局最优化方法[13]和局部最优化方法[14]效果对比结果,白色笔画表示图像重新着色后该区域颜色应保持不变,而其他颜色笔画表示图像重新着色后的最终颜色。从图中可以看出,局部最优化和全局最优化方法都有各自的局限性。局部最优化方法只考虑局部窗口内的局部空间邻域传播。局部图像方法为用户提供了良好的局部控制,但当对提供的颜色约束进行相对较远的重新着色时,这种方法的性能较差。因此,他们的方法需要加入更多的用户交互来实现高质量的结果。全局最优化方法可以实现全局颜色传播,用户只需要输入少量的着色线条就可以产生高质量的图像重新着色效果,但是该方法需要消耗很大的内存,当图像达到一定的尺寸,甚至无法产生正确的结果。DeepProp采用卷积神经神经网络来产生图像重新着色效果,但是由于使用图像补丁作为特征向量,DeepProp在重新着色的边缘附近会失去精度[15],需要采用边缘保持滤波器[16]对图像重新着色的结果进行进一步完善,以提高图像重新着色的质量。本方法只需要输入少量的用户重新着色线条就可以产生高质量的图像重新着色效果,后期无需进行完善步骤;同时由于只提取了着色线条所在区域的像素RGB颜色特征值和相应的着色线条分类为数据集,并提出了一种有效的采样策略,使得神经网络的训练达到了近实时的性能,采用mini-batch批量训练,对内存的消耗也很小。

为了测试本方法的运行效率,表1显示了图3中3组图像的运行时间,第2列显示了着色线条像素点个数,第4列显示了本方法运行时间。从表1中可以看出,因为本方法仅仅利用涂色线条所在区域的像素RGB颜色特征值和相应的涂色线条分类为训练集,并采用了有效的采样策略;从而大大减少了神经网络训练的时间和内存要求,只需要1~2 s的时间就能完成图像重新着色。

表1 本方法运行效率(β =0.1,t=2)

3 结 语

本文提出了一种基于FNN的单个图像重新着色方法。该方法仅需要用户在待重新着色图像上输入少量的着色线条,然后提取着色线条所在区域的像素RGB颜色特征值和相应的着色线条分类为数据集,避免了神经网络在训练阶段需要大规模的训练样本的弊端,从而能达到近实时的交互性能,同时用户只需要输入少量的用户着色线条,就能获得高质量的图像重新着色效果。本文提出的算法简单,可以达到近实时的交互性能,特别适合应用在人工智能相关课程中。

猜你喜欢

训练样本着色线条
蔬菜着色不良 这样预防最好
苹果膨大着色期 管理细致别大意
线条之美
人工智能
10位画家为美术片着色
宽带光谱成像系统最优训练样本选择方法研究
融合原始样本和虚拟样本的人脸识别算法
基于稀疏重构的机载雷达训练样本挑选方法
大可:把线条玩到极致
烧脑的线条