一、前言
前段时间参加了一个图像的比赛,起因于实验室老师在群里发了关于马上金融AI算法大赛的链接,从而得知马上金融这个比赛(后来公司也来学校宣讲了)。由于本人研究方向是图像处理与深度学习这一块,加上之前看过深度学习去雨的相关内容,想来也应该有很多相同之处,于是决定尝试一波。最后很意外地得到了第一名。
二、参赛方法与模型简介
图像修复是目前图像算法领域的重要问题之一,也是其他很多图像应用有效的预处理手段。图像修复的效果在某些场景下极大地影响着最终的图像识别结果,比如人脸识别,目标分类等图像应用。图像修复包括缺失图像补全,图像污迹去除,图像超分辨率等。本赛题要求针对图像污迹去除这一类问题,设计有效的算法,能够尽可能的去除图像上的网纹类污迹,还原真实的图像。
2012年,Hinton课题组运用构建的CNN网络AlexNet,首次参加ImageNet图像识别比赛,一举夺得冠军,且碾压第二名(SVM方法)的分类性能。从2012年至2016年,通过ImageNet图像识别比赛,DL的网络结构,训练方法,GPU硬件都在不断进步。正是由于该比赛,CNN吸引到了众多研究者的注意,再一次掀起了深度学习和人工智能的浪潮。同时,在计算机视觉及图像处理等领域,深度学习特别是CNN的运用,使得图像分类、目标检测、人脸识别等各项任务上都取得了突破性进展。
目前,在学术界,图像修复的主流研究方向仍是采用深度学习的方法。其中比较经典的算法包括:图像超分辨率方法SRCNN及基于上面改进的FSRCNN、ESPCN、VDSR等,图像着色方法Colorization,图像去噪方法DNCNN、IRCNN等,图像去马赛克方法,图像去模糊方法Robust Motion Deblurring、DeblurGAN等,缺失图像补全方法context-encoder、High-Res-Neural-Inpainting等。深度学习的方法可以运用GPU硬件加速,其处理速度也可能远比非深度学习方法快。由此可见,运用深度学习解决这类传统的图像处理问题不论在性能还是速度上仍然有一个很好的效果。
基于上述背景,我们主要采用深度学习的方法处理本赛题的图像污迹去除任务,运用多层卷积神经网络结构自动提取图像特征,建立网纹污迹与真实图像之间的映射关系。主要的技术创新点包括:(1)使用细节信息学习网纹图像与真实图像的残差;(2)通过图像预处理获得网纹先验知识;(3)结合先验信息,采用多任务联合训练的方式,优化网络参数。
三、参赛方法介绍
1. 数据预处理方法
根据主办方提供的数据集,我们将数据集分为了有网纹的图像集并放入input文件夹,干净图像并放入label文件夹,网纹图像与干净图像的mask文件放入map文件夹,于是得到了一张图片的三个文件存于三个文件夹。其中input与label由主办方提供,map中的mask文件由预处理所得,具体方法如下:
a). 读取input与label中对应的图片文件,并将灰度图统一为三通道图像;
b). 计算两者的差值;
c). 二值化所得到的差值图像;
d). 中值滤波去掉噪声。
经处理后,三个文件夹下分别包含10087张图片,其中的具体文件如图1所示。
图1 训练集中样本
我们从10087组照片中,随机选择1500组(资源限制),每一组随机生成500个64x64的patch并存入h5文件用于模型的输入。
2. 参赛方法的理论原理介绍
a). 卷积神经网络
卷积神经网络(CNN)是为了识别二维形状而设计的多层感知器,具有局部感受、层次结构、特征提取和分类过程结合的全局训练的特点。这种结构的设计使其在图像发生移动、偏转、尺度缩放或者任何变化时能够保持高度不变性。现在卷积神经网络的主要应用领域有车牌识别、手写字体识别,人脸关键点的检测,文本分类等方向。
图2为经典的LeNet-5 模型的结构,可以对CNN 网络的整体架构有一个全局的了解,CNN 的网络搭建方式类型繁多,但都是由基本的卷积层(Convolutional Layer)、池化层(Pooling Layer)、激活层(Activation Layer)、全连接层(Fully Connected Layer),目标函数(Objective Function)组合而成的。当然,我们并未使用到池化层与全连接层,而是加入了批规范化(Batch Normalization) 加速训练过程,下面详细地介绍参赛中所使用的技术原理。
图2 LeNet-5网络结构
卷积层:卷积是图像处理领域中较为常见的一种操作,它可以看作是空间的一种线性操作,公式如式(1)所示:
其中f(x,y)表示一幅图像的灰度值, w(s,t)表示一个滤波器,在CNN中被称为卷积核。假设m和n为奇数,则 a=(m-1)/2,b=(n-1)/2。图3展示了图像在CNN中的卷积操作。
图3 卷积操作
CNN 网络中的每个卷积层通常是由很多个参数值不同的卷积核组成,通过卷积操作得到若干卷积特征图。在网络的同一层中,计算得到的特征图尺寸大小是一样的,而该特征图的大小Sout主要受上层的输出结果I、该层的卷积核尺寸K、滑动步长S和边界填0的数量P共4个因素共同影响。计算公式如下:
激活层:激活层主要使用激活函数将线性结果做非线性映射,提高模型非线性建模能力。激活函数必须满足非线性、可微性、单调性、有限输出值的范围的特性。常见的激活函数有sigmoid、tanh、ReLU等,其各自的函数形式及函数图像如下表所示:
表1 常见激活函数
ReLU(Rectified Linear Unit)函数是目前比较常用的一个激活函数,相比于sigmod函数和tanh函数,它有以下几个优点:
a). 在输入为正数的时候,不存在梯度饱和问题。
b). 计算速度要快很多。ReLU函数只有线性关系,不管是前向传播还是反向传播,都比sigmod和tanh要快很多(sigmod和tanh要计算指数,计算速度会比较慢)。
批规范化:Batch Normalization的提出是为了克服深度神经网络难以训练的弊病,同时可以起到防止梯度弥散,加快训练速度,提高模型精度的作用。Batch Normalization算法流程如下:
首先,BN算法在每一次迭代中的每一层输入都进行了归一化,将输入数据的分布归一化为均值为0,方差为1的分布,如下式:
其中,$x^k$为输入数据的第k维,$E[x^k]$表示该维度的平均值,$Var[x^k]$表示该维度的方差。
BN算法在第二步中设置了两个可学习的变量γ和β,然后用这两个可学习的变量去还原上一层应该学到的数据分布,使得第一步的归一化破坏掉的特征通过学习的参数γ和β去纠正从而得到真正学习的特征,保持模型的表达能力。
这样BN就把原来不固定的数据分布全部转换为固定的数据分布,而这种数据分布恰恰就是要学习到的分布,从而加速了网络的训练
表2 Batch Normalization算法的流程
b). 引导滤波
引导滤波(guided filter)算法属于可以保持边缘的一种滤波算法,算法在进行滤波时需要一幅引导图像,引导图像可以是另外单独的图像,也可以是输入图像本身,当引导图为输入图像本身时,引导滤波就成为一个保持边缘的滤波操作。引导滤波可以用于降噪、细节平滑、HDR压缩、抠图、去雾等方面。
引导滤波定义某像素点的输出结果为:
其中,q为输出图像,I为引导图像,a和b是当窗口中心位于k时该线性函数的不变系数。即该方法假定:q与I在以像素k为中心的窗口中存在局部线性关系。具体的推导过程可参考原论文。算法整体实现步骤如下:
(1)利用boxFilter滤波器完成相关系数参数,其中均值包括引导图像均值、原始待滤波图像均值、互相关均值及自相关均值。
(2)根据均值计算相关系数参数,包括自相关方差var,互相关协方差cov。
(3)计算窗口线性变换参数系数a、b。
(4)根据公式计算参数a、b的均值。
(5)利用参数得到引导滤波输出图像q。
c). 参赛方法的具体实现
1) 模型采用的框架
我们采用google深度学习开源框架TensorFlow搭建网络模型,TensorFlow使用数据流图的形式进行计算,每个节点代表一个操作,节点之间通过多维数组(tensor)进行交互,是目前最受欢迎的深度学习开源框架之一。
2) 模型结构与分析
本次参赛模型主要用到的方法有:运用引导滤波获取网纹图像边缘细节信息,减少对于去网纹任务作用较少的信息;使用深度学习技术建立细节层与残差信息的关系映射;加入粗糙的二值mask信息,多任务联合训练判别条纹信息;参赛的模型结构如图4所示:
图4 模型结构图
3) 模型的超参数设定与分析
该模型的深度为26,卷积核大小为3,优化算法使用Adam,batch size大小为20。训练过程中,我们设置的初始学习率为0.1,在每一轮迭代完之后,学习率乘0.1,总共epoch设置为3,即:第一个epoch,学习率为0.1,第二个epoch学习率为0.01,第三个epoch,学习率为0.001。对于两个分支的损失权重,我们尝试过2:1,或者初始权重2:1,然后每一轮迭代后不断降低mask分支的权重,但最终结果都没有刚开始的权重比1:1好。引导滤波中,滤波半径大小被设置为5,epsilon设置为1。
4) 模型的训练方式等
该模型训练过程中输入数据包括:网纹图像X,真实图像Y,mask图像M。对于真实图像输出分支,目标函数使用均方误差loss1;针对mask输出分支,我们使用交叉熵损失loss2。两者采用1:1的比例相加得到最后需要优化的损失函数loss,具体公式如式(5):
其中,N为训练图片数量,f(•)为卷积神经网络,W,b为网络要学习的参数,除了两个分支上的权重不同以外,其余权重两个分支权重共享,X_(i,detail)表示为第i张图片的细节层,通过引导滤波所得。
模型的损失函数:
四、参赛方法评估
1). 参赛模型的评测结果
评价指标:平均PSNR增益率计算公式如下:
其中,PSNR计算公式如下:
其中,MAXI 图像像素最大值,MSE为处理后图像K与原图I的均方误差,大小为MxN,计算公式:
评测结果:线上成绩: 1.20287
2). 参赛方法的创新性
a). 使用边缘细节信息作为网络的输入,而不是原图,减少了学习内容。
b). 学习图像残差信息,使得学习内容减少,模型收敛较快,易于训练。
c). 残差模块,充分利用各层的特征信息。
d). 加入mask信息,相当于增加条纹判断分支,多任务训练使网络学习更多特征。
3). 参赛模型的鲁棒性等
实验结果证明,该模型能够有效地去除网状条纹污迹,还原真实的图像,针对各类场景(背景单一,背景复杂、黑色背景等)都有很好的鲁棒性,以下为各类场景下的网纹去除结果样例。