作者 | 王红成
出品|AI科技大本营(ID:rgznai100)
【导读】如何去除一张图像中的阴影部分?在ICCV 2019会上,武汉大学的一篇论文针对这一问题提出了一种用于阴影检测和去除的注意循环生成对抗网络——ARGAN。论文中通过生成一张更加准确的注意力图,用来逐渐显示检测出的阴影区域,然后还原到一张更加真实的去除阴影的图,完成上述过程需要一系列步骤。它是怎么做到的呢?接下来我们看看文章的方法。
论文地址:
Approach
作者提出了一种注意力循环神经网络,用来找到有阴影的图像与之相对应的无阴影的样子之间的映射关系。就像其他的生成对抗网络一样,包含一个生成器和一个判别器,生成器的作用是生成一个没有阴影的图像,这个图像要尽可能地真实。判别器用来区分生成器生成的图像是否真正意义上的真实。
让我们首先注意到figure -2。我们可以看到,第一步,输入一张带有阴影的图像,然后分别的放入到一个阴影注意力检测器(SAD --方便记忆)和阴影去除编码器(SRE)中,可以看到分别可以得到两个输出,一个是SAD输出的关于阴影的部分
和SRE输出的图像
,然后将 放入到SAD中和 分别将 放入到SAD和SRE中。接着就像第一步那样得到相应的输出。然后重复N次,得到 ,最终将输出的 放入到判别器中,判断 是否真实。
先大体来看看步骤,在生成阶段,有一张有阴影的图像I,迭代的更新检测到的阴影区域,这个阴影区域是通过SAD
用一个注意力图 来表示。并且通过SRE
输出一张阴影部分相对更淡的图像或者是完全去除阴影的图像
。其中i表示在第i阶段的去阴影过程。
以上过程由以下的方程表示出来:
在判别阶段,作者让编码器D编码最终输出的无阴影的 ,在对抗网络框架下,通过一种半监督的方式处理对有监督的数据(这些数据是完全没有阴影的ground-truth的图像,ground-truth即就是正确标注好的数据,感兴趣的话可以查询下面的链接)和无监督的图像(就是缺乏正确编注的数据)。
接下来详细展开。
(1)Generative Network
论文的生成器网络结构主要包含了N次渐进式步骤每一次包括一个SAD和一个SRE。SAD:作者运用了注意力机制去选择网络想要去观察,定位输入图像阴影部分和关注SRE所注意的已发现阴影区域的目标。就像在figure -2展示的那样,一个循环与通过长短期记忆网络可以被用来在循环注意力网络中。在循环网络中,LSTM能充分利用之前步骤的中间输出作为先验知识,在之后的步骤中,产生能表示阴影区域的注意力图。其实在大家了解之前的LSTM后,应该一看figure -2 就知道文章的大概方法了。
其具体结构如figure -3所示,前面10个卷积单元,之后接上一个LSTM块,最后在接一个卷积层,需要注意的是每个卷积层到后面都跟着batch normalization和Leaky-ReLU。其中的10个卷积快((Conv+BN+LRelu)用来提取输入的特征,卷积LSTM单元是用来评估阴影区域,如何评估的呢?将之前步骤获得的信息联系起来,然后再将评估后得到的结果传递到下一个步骤去,最后的卷积层用来产生阴影注意力图 (即figure -2的阴影着色图)。
需要指出的一点是,这N个SAD都是相同的网络结构,每个输出的注意力图 都是矩阵,矩阵中的值的范围在0到1之间,而并不是二元掩膜(用选定的图像、图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程),其中的值越大说明更关注这个区域,这就表明大值区域很大可能上就是阴影区域。
就像figure -4展示的那样,那些红色区域的值都接近1,这就表示是阴影区域,相应的蓝色区域的值接近0,则表示非阴影区域,通过这个方式,通过赋予不同的值,能有效的区分硬阴影区域(关注很小的区域)与软阴影区域(注意力相对发散)。
作者观察到刚开始注意力模块不会关注于所有的阴影区域,在接下的步骤中迭代更新下,渐渐的注意里力模块关注到所有的阴影区域,就像figure -4所示,被标记成红色的已被发现的阴影区域在接下来的步骤里越来越标注的准确。
SRE:为了移除掉图像中的阴影部分,作者使用了负例残余的方法和设计了阴影去除编码器(SRE),SRE组合了有阴影的图像和检测到的阴影区域注意力来生成一个用来恢复得到更浅的阴影区域或无阴影区域的negative residual。
基于原论文,什么是负例残差呢?如下图所示。清晰的原图的像素值通常比较小,有雨点的图的像素通常比较大,所以用原图减去有雨点的图,值是负的,我想在这作者借鉴别人去除雨点的方法应用在去除阴影的方法中。大家看看下面的两幅图应该几乎能理解了。
如figure -5所示,SRE先由8个卷积块组成(Conv+BN+LRelu)用来提取特征,之后接上反卷积块(Deconv+BN+LRelu)--卷积的逆操作,用来生成有特殊分布的特征数据的图像。Sikp connection是何凯明在ResNet提出,用来连接卷积层和反卷积层它不仅能够增加通道数和保存之前层的内容信息。
在最后一层的反卷积层后接着2个卷积层块,用来提取特征图,最后用一个接着sigmoid的卷积层将得到的特征图转化到相应的有着3个通道的图。图的尺寸和最开始输入的图像尺寸一样,相应的可以从table -1看到相应的参数信息。最终将sigmoid输出的结果转换残差信息,残差信息是包括了通过乘操作方式得到已检测注意力图 ,接着用来得到negative residual,用这个结果来将上个步骤的图像恢复到轻微的阴影或者无阴影的图像。就像figure -6展示的那样,随着渐进式的步骤下,输出图像的阴影部分越来越淡,最终的输出结果几乎都没有了阴影部分。
(2)Discriminative Network
判别器主要用来区分最后得到的 是否真实。生成器和判别器一直在博弈进步的过程中,最终达到一种平衡状态,生成器看起来能完全去除阴影部分,最后判别器也认为照片看起来真实。figure -2详细描述了判别器的网络结构。其中这些层的输出通道分别为64,128,256,512和1。需要指出的是卷积层的核尺寸为4x4,步长为2,最终判别器输出的是一个概率值。真实照片与生成出来的假照片通过交叉熵损失计算它们之间的差距。
需要值得说明的一点是:因为在有阴影的图像数据集里会可能缺失某些有阴影场景的图像,为了解决这个问题,作者采用了下面这篇论文中的方法。
论文地址
作者使用半监督学习策略,在训练过程中,作者将没有编注的有阴影的图像作为无监督数据。在每个训练过程中。输入一张无监督的图像到生成器中,得到一张没有阴影部分的图像,然后判别器判断生成的图像是否真实,这种半监督的策略能提升网络模型的泛化能力,并且使得生成模型更具有鲁棒性。
进一步为了使得网络训练过程更加稳定,作者采取了普归一化来稳定判别器网络的训练过程,因为普归一化过程是一种简单有效的标准方法,其方法主要限定GAN的判别器的优化过程,并且能使得整个生成器网络模型有更好的生成能力。
Loss function
损失函数主要来自上个部分:1、阴影注意力检测器 2、阴影移除编码器 3、判别器,总损失
的形式如下:
接下来我们来相应的介绍三部分损失函数:
1、Shadow attention detector loss
阴影注意力检测器损失函数
计算方式是计算阴影着色区与输出注意力图之间的均方差(mean square error),其中的阴影着色区域通过比较标注无阴影的图像与相应的阴影图像来获得。在生成器中,作者对阴影注意力检测器迭代了N次,损失函数描述成如下所示:
其中
代表在第i次迭代的均方差的权重,它的计算方式如下所示:
表示计算M与 的均方差。
2、Shadow removal encoder loss
阴影去除编码器损失
包含了精度损失和感知损失(perceptual loss),定义成:
其中
表示由阴影去除编码器产生的淡阴影的图像甚至的无阴影的图像,F表示相应的标识的无阴影图像,
代表精度损失,
代表感知损失。
具体什么是精度损失和感知损失呢?
精度损失是用来计算通过在第i次迭代由阴影去除编码器生成的无阴影图像与相应的标注图像的差别。其值越小,说明精度越高,效果越好。精度损失的计算方程形式如下:
。
感知损失是又来计算编注图像与阴影去除后的结果的全局差别。作者通过在ImageNet dataset使用预训练好的VGG16模型来提取图像特征,感知损失的计算方式如下:
其中VGG和VGG(F)分别代表由模型VGG16提取到的特征。
3、Adversarial loss
对抗损失
是一种监督学习,其表示方法如下:
同时再加上半监督学习,其具体形式如下:
其中
表示是一个无监督的数据,G代表生成器,由判别器的得到输出表示输入到判别器的图像是真实图像的概率。
表示权超参数,期望值是在输入-输出对的监督训练集(I,F)上。
方法就介绍完了,好了,我们来看到应用部分。
Application
文章在Introduction部分介绍了一下:作者分为检测阴影部分和阴影去除两部分,对于检测部分可以在场景几何描述、摄像机定位、场景照明推理等。对与阴影去除部分来说,可以应用在目标检测、目标跟踪、目标识别和图像重构等等,感兴趣的话大家可以查阅相应的论文。
Abstract
文章提出了一种基于注意力循环生成对抗网络-ARGAN,其用来移除和检测图像中的阴影部分。生成器包含了多个渐进式的步骤,每一步,首先由阴影注意力检测器来发现生成的注意力图,注意力图主要详细描述输如图像的阴影区域。鉴于注意力图,由阴影去除编码器得到的负例残差用来恢复得到更为淡阴影的图像甚至没有阴影的图像。设计得到的判别器用来分类最终渐进步骤得到的输出是否真实。更进一步,ARGAN能用半监督的方式训练,这种方式能充分利用足够的无监督数据。实验在四个公开的数据显示,ARGAN对检测简单与复杂阴影区域具有鲁棒性并且能得到更具真实的去除阴影后的图像。方法取得在四个数据集上取得目前为止最好的结果,特别地。在恢复阴影区域的细节上得到结果更为不错。
觉得先方法开始看是不是觉得能帮你捋一边文章方法的内容了呢?但是万事没有那么绝对,找到适合自己的方式才最为重要。
Introduction
刚开始作者介绍了阴影存在于很多图像中,和阴影通常在光照条件产生。作者因此引出了对与阴影部分的检测和移除是由很大的研究价值,可以运用到很多领域中,如在Application中介绍的那样,有很大的研究意义。
通常检测阴影和移除阴影主要分为两个类别。一个类别是一些传统的方法组成,它们是基于一些前验知识,比如阴影部分光照一致性,但是它的缺点是在一些特殊复杂的环境下取得的效果不是很满意,阴影去除的结果不能保证。另外一种类别是应用深度学习的方法,但是深度学习的方法十分依赖监督的数据来学习到鲁棒性的模型,尤其需要指出一点是:在阴影去除结果中,训练数据的缺乏,深度学习的方法会出现颜色扭曲或者其他问题。
因此文章提出了一种基于注意力机制的循环生成对抗网络-ARGAN用于阴影的检测与移除,如figure -2所示,生成器包含多渐进性步骤主要用来去除图像的阴影部分和检测阴影部分,这种渐进式的步骤是由精细到粗糙的形式。判别器是用来判别最终生成器输出的结果的真实性。在生成器中每一步渐进性步骤,阴影注意力检测器是用来生成注意力图,然后阴影去除编码器是用来获得负例残差,通过关联之前去除阴影的图像和当前检测到的阴影主力图得到。得到的负例残差是用来恢复得到淡阴影的图像甚至是没有阴影的图像。
在多渐进式步骤下的生成器提供的事实是:通过一步一步的方式,在一些复杂的场景下都能简单的检测和移除阴影区域。
来自之前步骤检测得到的阴影区域和恢复得到淡阴影的图像作为下一个步骤的输入,因此作者引入了长短期记忆网络(LSTM),用来保存之前有简直的信息,确保检测得到阴影区域更加准确,去除阴影后的图像更加的真实,就像figure -1展示的那样。
作者强调到,他们采取对抗学习的方式,最终通过生成器得到去除阴影的图像。随着训练epoch的 增加,模型的生成和判别能力都相应变强,最后很难区分生成的一张去除阴影后的图像。因此在训练了大量的epoch后,作者利用学习到的生成器的参数在每一个阶段,生成阴影注意力图和阴影去除图,最终对的输出就是最后的结果。
更近一步,作者采用了半监督的学习策略来充分利用足够的无监督的可以从网上得到的阴影图像,通过修改原始生成损失来包含有标签的数据和无标签的数据。作者指出他们首先利用生成对抗模型来去阴影区域,通过输入一张有阴影的图像。然后用判别器判别,这个方式提升了网络模型一般泛化能力和网络鲁棒性。
作者指出了本工作与之前工作的差别。体现在,第一点采取生成对抗学习得方式来优化生成器中的阴影注意力检测器和阴影去除编码器。第二点生成器的学习过程是渐进式的一种方式,能因对复杂的环境下。第三点采取半监督的方式来处理数据,提升网络的鲁棒性。并且在四个公开数据集上取得了最好的结果。说明ARGAN的有效的一种方法。
这一部分主要讲了一下作者的论文动机和提出了那些方法,是怎么来的。有什么创新。
Related Work
主要分为四个部分,接下来我们来一一展开。
1、Shadow detection methods
传统的阴影检测方法是使用用户互动和手工特征,深度学习是自动检测阴影区域,比如在CRF模型通过联系边界和区域的卷积网络来检测阴影部分,还有使用语义意识块阶段CNN网络架构来检测阴影区域,又还有使用生成对抗网络来检测阴影部分,又比如通过分析图像在方位意识行为来检测阴影区域。但是呢,这些方法只能在一张图像有阴影上效果不错,但是在一些复杂场景下的阴影检测准确率不好。
2、Shadow removal methods
阴影去除方法基于是梯度域操控,照明、颜色转移、正确阴影着色和深度信息的方式研究了一阵时间,最近提出了三种深度学习的方法用于阴影去除。1、多内容嵌入式网络,整合高维语义内容用于去除阴影。2、基于生成对抗的网络方式,联合阴影检测和阴影移除方式去除阴影部分。3、ARGAN模型是利用多步骤的渐进式网络并且利用循环单元的方式来去除阴影区域,并且取得的效果表现最好。
3、Generative Adversarial Network (GAN)
GAN的一些应用在图到图的转化,比如超分辨图像领域、图像修复、风格迁移、和域迁移、去雨滴、检测阴影区域和移除阴影区域。但是文章提出了一种基于渐进式、注意力机制的GAN模型,能应用在去除阴影和检查阴影方面。
4、Attention mechanism
注意力机制是用来编码序列数据,这些数据基于给每个参数分配重要的权值的方式。它为自然语言处理方向、语音识别、计算机视觉、图像描述和视觉问答方向提供重大帮助。不同于上述方法,论文采取了一种使用渐进式和循环方法来整合不同层特征的多内容信息。并且能处理复杂环境下阴影去除和检测。
相关工作就介绍完了,主要说明文章采用了什么方法,和该方法与之前方法的不同和创新性。主要也就对文章相应领域方法的概括说明。
接下来我们来看看实施细节和实验结果
Implementation Details
实验是用tensorflow实现的,平台是Intel(R) Xeon(R) Silver 4114 CPU @2.20GHz 192G RAM NVIDIA GeForce GTX 1080Ti。实验的输入尺寸为256x256,生成器的渐进式步骤设定为N=3,
=0.7,minibatch=4,学习率为0.0002,为判别器使用Adam优化器。模型的训练epochs为100,000。
接下来看看实验部分。
Experiments
为了验证论文方法的有效性,模型主要在SBU dataset , UCF dataset , SRD dataset , and ISTD dataset 上进行验证去除和检测阴影的效果,证明是最好的方法。
Performance comparison on shadow detection
我们来看到table -2,ARGAN取得不错的结果,说明了ARGAN能有效的检测真确的阴影区域、LSTM起到很关键的作用,能有效的利用在阴影注意力检测器上、在半监督的学习下,模型取得了不错的效果,证明了模型的鲁班性。
为了进一步解释模型卓越表现,我们来看到figure -7,可以观察到ARGAN能准确地检测阴影区域和更为接近人的表现。figure-8呈现了更加复杂的场景,很显然在阴影检测上,AGGAN取得了最好的表现。这也就说明了,由粗超到精细的渐进式步骤,在有着LSTM层的阴影注意力解码器能不断地提升检测的结果。
Performance comparison on shadow removal
我们来看到table -3,ARGAN取得不错的结果,能有效的去除阴影区域和恢复得到真实的无阴影的图像。实验结果表明,没有LSTM层的话,效果会变差,说明了LSTM起关键性的作用,在无监督的条件下,无论在有阴影区域、无阴影区域和完整图中,都取得了效果的提升。
在半监督学习下,说明了模型能充分利用无监督的有阴影的图像,提升模型的表现。同时能恢复阴影区域。为了进一步说明模型的很好的表现,我们来看到figure -9,在有些无阴影区域的图像的某些区域是黑色的情况下,传统他方法不能有效的判断某些区域是否是阴影区域,对比于其它传统方法,ARGAN能有效的处理整张图像的颜色信息和产生更加真实和自然的去除掉阴影的结果。作者为了验证模型的鲁棒性,我们可以看到figure -10,可以观察到在一些复杂的场景下,ARGAN具有鲁棒性,模型在图像阴影区域恢复上,能使得图像恢复的更加真实,体现对原先阴影区域的周围环境和纹理细节上,这些细节都很好的保存了。
Discussion
作者为了进一步验证应该采取几步的方式,分别取N=1,2,3,4,综合不同阴影检测得分与阴影去除得分,在权衡各自特点下,认为N=3时取得最好的表现。如figure -11所示的那样。
进一步实验,作者可视化阴影去除结果分别在AGAN(无LSTM),ARGAN和ARGAN+SS(半监督)上取得的表现,如figure -12 所示,可以观察到LSTM层对图像的恢复起着关键性的作用,同时在利用半监督的方式的ARGAN,在复杂场景下,能取得更加好的表现。
实验部分就介绍完了,没有特别仔细地展开,如果展开说会显得很冗长,大家可与查阅论文了解。
Conclusions
作者提出了鲁棒性的注意力循环生成对抗网络用于阴影检测和去除,生成器可以用来生成阴影注意力图和恢复得到无阴影的图像,主要通过渐进式的训练方式,由粗糙到精细的过程。同时模型能应对复杂环境处理阴影,还能灵活的与无监督的阴影图像结合使用来训练模型。作者指出未来的工作主要扩展模型应用到视频领域的阴影检测和去除。
(*本文为AI科技大本营投稿文章,转载请微信联系1092722531)
◆
◆