基于U-Net网络的QR码褶皱恢复算法

2022-03-01 01:03侯玉坤李功燕许绍云
计算机仿真 2022年1期
关键词:褶皱卷积损失

侯玉坤,李功燕,许绍云

(1. 中国科学院微电子研究所,北京 100029;2. 中国科学院大学电子电气与通信工程学院,北京 100049)

1 引言

目前,QR码技术在日常生活中得到大范围普及,其使用场景不在仅仅局限于网站信息标识、移动支付等,同样在线下商品码、物流快递面单也多已采用这种技术。因为其具有储存信息量大、保密性高、多角度识别、成本低等特点,非常适合在智能物流系统中提供识别信息,同时随着当前国内外电商规模的迅速扩大,包裹投送量也成倍的增长,市场对于物流快递包裹的分拣效率和准确率提出了更高的要求。

通常,在复杂环境下物流分拣系统QR码的识别需要经过相机捕获包裹全局图片、QR码目标检测即位置的精确定位、QR码信息读取等步骤。无论是传统的特征点检测定位方法还是基于深度学习的目标检测算法,都是在得到位置后将QR码分割出来提供给后续信息识别部分。一般地,现在根据QR编码技术开发的软件仅在特定情况下具有较好的识别效果,然而在物流分包裹自动分拣的现场,由于包裹外形的多变性,现实中能够采集到的图片往往不是平整的。甚至有部分图片扭曲较为严重,如果这样直接将QR码图片输入给识别程序通常无法准确进行信息读取。因此,研究高可靠性的褶皱QR码图片恢复方法,对实现复杂条件下物流包裹的高效率自动分拣具有重要的意义。

在褶皱恢复领域,因为影响着图片信息识别的准确性被学者广泛研究,近年来已有不少启发性的研究成果。例如,文献[2]利用景深相机以及精心设计的一些视觉系统来直接测量目标的三维失真,最终得到了高质量的结果,但是额外的硬件需求很大程度上限制了它们的应用。文献[3]通过多相机模型来重建褶皱物体的三维信息。文献[1]首次提出基于卷积神经网络设计的端到端图片恢复算法,在没有额外硬件支持下,相比传统算法表现更加优异。

图1整体功能结构图,主要包括数据制作以及神经网络设计训练,最终得到坐标映射标签用以恢复褶皱图片

图1 整体功能结构图

近年来,深度学习促进图像各个研究领域更进一步的发展,与传统图像算法需要设计者自己手工设计特征相比,深度学习算法可以省去这些过程,通过模型训练自动学习提取相关特征,并将不同任务融合在一个网络中进行优化,具备显著优势。所以在本课题借鉴经典卷积神经网络的思想,设计一种基于U-Net模型的褶皱QR码恢复算法,并利用文献[1]中提出的方法,制作合成的褶皱QR码图片数据集及标签用以训练,文章整体思路如图1所示,最终测试表明该模型可以有效提高褶皱QR码识别效果。

2 数据集制作

本文提出的方法是基于卷积神经网络实现的,所以需要大量的标注样本来完成训练。然而在实际任务中,在没有景深相机等特定的硬件设备支持下很难完成褶皱图片的采集及其标注的准确捕捉,也无法收集到足够数量的褶皱QR码图片。此外,通过手工方式去折叠扭曲QR码标签来模拟现实场景的工作量太大,并不现实。所以本文采用合成数据的方式来得到训练样本,这样同时也可以更方便的获得对应的映射标签。

考虑到一般三维渲染方法获得上万张图片将会花费数月的时间,这对于实验的条件来说极为困难的,同时也会严重影响后续实验的开展。所以,本文综合考虑决定采用2D网格生成的方法来合成训练图片,一定程度上虽然忽略了褶皱的三维物理模型,但相应的训练图片的合成速度更快,网格上的变换计算也更简单,更加方便的进行进一步实验工作。为使得通过2D网格法生成的图片接近实际情况,需遵循如下的约束[1]:QR码标签可以视为局部刚性的,不会膨胀或压缩,同时某一点的形变将会在整个平面上传播。另外合成的训练图片的褶皱方式主要由折叠和弯曲两种方式组成。

对于每幅给定的标准QR码图片I,都要生成一个与原图尺寸一致的映射矩阵M(H*W*2),其中每个点表示原图同位置像素点映射到褶皱图中的行坐标或列坐标。首先,将矩阵M初始化为原图每个像素点相对于的坐标,即M(x,y,0)、M(x,y,1)分别表示I(x,y)像素的列坐标和行坐标。然后在M中随机选择种子点p,并同时给定随机向量v,P表示坐标,v表示像素点偏移的方向及大小。由上述约束可知种子点处的变形会传播到整张图片其它位置,可以得到相应的偏移pi+wv。

其中W为传播系数,对于不同的褶皱方式本文定义不同的函数表达形式[1]。例如,折叠情况下:w=α/((d+α)),弯曲情况下:w=1-dα,d表示原图某点到种子点及其偏移所确定的直线的归一化距离,系数α大小在0、1之间,用来调节不同的褶皱程度。

这样本文可以在原图上随机得到数个种子点,并对每个种子点执行不同参数(偏移v,系数α等在合理范围内随机生成)的褶皱实现。本文针对每幅标准QR码图片生成相应的不同映射矩阵,利用相应的开源库重映射函数可以直接得到褶皱的QR码图片。详细Python实现代码后续可查看网址https:∥github.com/holykong/QRcode-UNet。

褶皱合成实现伪代码如下所示。

输入:尺寸为256*256标准 QR码图片

输出:褶皱图片以及训练标签

1)In & Background

2)Mesh初始映射矩阵

3)While Num<10:

4) P=rand(0,1)

5) If P>0.5:w=α/((d+α))

6) Else:w=1-dα

7)生成NewMesh

8)Img=Map(IN,NewMesh[0~1,…]) 矩阵映射

9)Out=Img+Background

10) GaussNoise(Out,(5,5),0.01)+对比度拉升

11) Label=Normlize(NewMesh)

11) 输出最终褶皱图片Out以及标签NewMesh

本文收集大量采样于工业线现场的快递包裹图片,经过挑选后制作背景图片数据集,并将得到的褶皱图片和背景图片相融合,用以拟合现实场景下相对复杂的背景,提高泛化性。最终制作10000张合成的褶皱QR码图片,其中每张图都包含不少于10个种子点及对应的褶皱方式。

接下来开始制作训练时所用合成褶皱QR码图片对应的标签。在已知标准图片到褶皱图片的坐标映射后,可以直接利用KD树遍历搜索完成逆向映射,得到从褶皱图片到标准图片的映射矩阵,然后设定含有QR码部分为前景,其余为合成的背景。前景部分映射的坐标值归一化0到1之间,背景全部默认为0,同时增加一维来标识前景和背景,即这一维完成语义分割的功能,最终的训练标签示意如图2所示,第一行分别为标准QR码图片以及生成的无背景褶皱图片,第 行左一和左二两张图分别表示坐标映射矩阵的两个通道归一化到0-1之间后的可视化图,黄色代表接近1,深蓝色代表接近0。第二行右一表示前景和背景的像素分类标签。

图2 合成褶皱图片及标签样式

3 网络结构

由于在本文的任务中,图片中QR码遵循相应的码制标准,这样即使发生弯曲褶皱其内部黑白分布也会保持规整,考虑到这一点,本文选择通过制作映射矩阵的方式,将褶皱QR码图片恢复问题转化为预测图片中像素坐标回归值问题,这会极大地简化QR褶皱恢复的过程,同时更加方便选择深度学习的方法来解决。其中网络预测的标签尺寸与网络输入大小一致,每个像素位置都会输出分类值和坐标回归值,类似于语义分割的像素级预测,所以选择U-Net作为主干网络,另外为优化网络输出的定位精度,在U-Net网络中使用膨胀卷积,整合平移不变损失。同时主体结构末端增加判别器模块,利用对抗训练损失提升网络性能,总体框架如图3所示。

图3 网络整体结构

网络主要由U-Net主体模块、分类和回归分支模块以及判别器模块组成

3.1 U-Net模块

本文使用的主干网络模块主要借鉴于U-Net[4]的对称编码-解码结构,其中编码阶段是网络尺寸收缩过程,通常由卷积层和降采样层组成,主要目的在于提取输入图片特征及捕捉语义,而解码阶段是网络尺寸扩展过程,一般通过转置卷积和跳跃连接实现,其主要目的是实现上采样,因为转置卷积可以还原由降采样操作导致减小的图像维度,从而实现像素级回归或分类任务。但是这样直接转置卷积得到的结果会丢失很多信息,所以一般还需要通过跳跃连接将浅层的编码阶段特征与解码阶段相对应的特征拼接起来以实现精准定位。

U-Net网络中收缩路径上降低图像尺寸可以增大感受野,但是在图像恢复任务中预测是像素级(Pixel-wise)的输出,所以要将最大池化后缩小的尺寸反卷积回到原始的图像尺寸进行预测,之前的池化操作虽然使得每个像素预测都能拥有较大感受野信息。但同时,在减小在增大中间层特征尺寸的过程中必然会丢失一些信息,所以本文考虑在原始U-Net利用池化操作减小尺寸来增加感受野的基础上,将部分标准卷积替换为膨胀卷积(Dilated Convolution)[5],其可以在保持特征图尺寸大小不变的同时,较好地提升感受野,进而丰富语义特征。膨胀卷积的感受野计算方式为

RF=(K+1)×(DR-1)+K

RF表示膨胀卷积输出的感受野,K表示卷积核尺寸大小,DR表示膨胀率(Dilated Rate)。

图4展示了膨胀率为 2的卷积可将原来3×3标准卷积的感受野扩大为7×7。

图4 标准卷积和膨胀卷积(膨胀率为 2)的感受野变化示意图

主干网络的主要参数在图5中已详细给出,在收缩路径和扩展路径本文分别采用了三次的降采样操作和转置卷积,以及14个卷积层。从整个网络可以看到每两次卷积后会接上一个降采样或转置卷积,其中为整体控制模型的参数量,卷积操作中卷积核的大小均为3×3的小卷积核,同时卷积后的激活函数使用常见的ReLU。在收缩路径以及扩展路径之间本文综合考虑整体模型表征能力以及参数量,使用3个串行的膨胀卷积代替常规卷积,利用膨胀卷积串行时线性提高感受野的特性,提高整体模型感受野。其中每次膨胀卷积核均为3×3、步长为1,膨胀率为2。收缩路径上两个卷积层之后的是2×2的最大池化层,同理扩展路径上两个卷积层之后的是3×3、步长为2的转置卷积操作,这样整个网络在对称的降采样和转置卷积层次上特征的尺寸都一致,从而可以直接将收缩路径与扩展路径的特征图拼接起来,最终主干网络末端输出的特征图维度是H×W×64。

图5 U-Net模块详细结构

3.2 分支结构

子网络结构经常被用在图像分割场景下,例如RetinaNet[1]通过ResNet和FPN结构组成的主干网络提取多尺度的特征后,利用两个结构类似但参数不共享的FCN(全卷积网络)子网络分别完成目标框分类以及边框位置回归的任务。本文在U-Net基础网络获得特征后,设计两个分支结构,其由全卷积结构组成,分别用以完成坐标位置的回归以及图片中QR码的精确定位。第一个分支的输出尺寸分别为H×W×1,主要负责预测每个像素点是否属于QR码,方便本文后续直接将背景部分的坐标位置回归值剔除。第二个分支网络输出为H×W×2,两个通道分别表示预测的每个像素对应坐标的列归一化值和行归一化值,详细结构在图2总体网络中给出。

3.3 判别器模块

考虑到主体结构若只是单独用U-Net网络来完成图片的恢复任务,输出的坐标映射矩阵和真实的标签虽然整体分布的趋势是一致的,但会产生较多团状形式的预测,形成了类似于图像中噪声的存在,无法像真实标签那样精细,可以说这是由于分辨率不够或者说定位精度不够造成的,如果不做改变,将会造成恢复出来的图片局部出现变形及错位,严重时甚至会出现图片撕裂,这是本文不希望见到的。因此,选择利用对抗训练[9]的思想以及增加尺度不变损失来进行模型的优化,尺度不变损失会后续小节介绍。

GAN[9]是一种训练生成模型的方法,包括两个互相对抗的模块:生成模型G用于拟合样本数据分布,判别模型D用于估计输入样本是来自于真实的训练数据还是生成模型G。本文借鉴对抗训练的思想帮助末端回归分支预测的坐标映射矩阵更加接近标签的数据分布,同时为保留更多原始图片的结构信息,选择直接将输入与回归分支拼接在一起组合成通道数为5的特征图作为判别器的输入,使用类似于文献Pix2Pix[10]图像翻译的判别器结构更加容易训练。原始GAN模型中判别器将输入的图片映射成单标量的值,表示“真”或“假”,而PatchGAN的结构可以将原图大小的输入映射成N×N的特征输出,每个像素位置可以认为是该像素对应原图感受野区域的“真”或“假”,例如本文任务中图片尺寸为256×256,判别器模块卷积主要参数如表2所示,那么最终输出特征图尺寸为30×30,其中每个像素点对应原始输入的感受野区域为70×70。

表1 判别器模块各层卷积核参数

3.4 损失函数

针对两个不同任务的子网络,本文使用不同的损失函数来完成训练。因为第一个子网络主要负责完成QR码语义分割,这时每个像素只有两个类别,即前景QR码或是背景。所以选择使用在图像分割中常用的Dice Loss,其是Fausto Milletari等人在V-Net[11]中提出的损失函数,在类别较少的语义分割性能表现优秀。而第二个子网络作为坐标位置的回归值,很显然会想到在褶皱图片中距离相近的像素在恢复图片中距离也是相近的,即除了预测与标签之间直接的对应像素损失外,应同时考虑任务本身的尺度不变特性,这方面文献[8]提出的尺度不变损失是具有建设性的工作。同时更多相似的工作文献[1]通过实验发现L1的损失形式比L2损失表现更好,所以最终本文选择如下形式损失函数:

式中λ用于控制第二部分的比重,实验中取λ为0.1。

4 实验

4.1 实验准备

实验的训练数据来源于本文通过OpenCV以及Scikit-learn开源库相关函数,按照2D方法合成的10000张图片以及对应的映射矩阵标签。为保证实验效果,所有图片统一进行数据预处理,主要包括输入归一化以及对比度拉伸等,制作训练数据的主要思路可以参考数据集制作部分原理说明以及相应的伪代码,其中,待制作的标准图片均由二维码生成软件批量生成,背景纹理采集自工业现场包裹快递图片。另外褶皱生成中,为达到较为合适的扭曲效果,种子点数设置为10,褶皱系数控制在0.3~0.7之间由随机数函数得到。同时为提高数据泛化性,添加高斯噪声。实验中主要的硬件配置是:CPU 为56 Intel(R) Xeon(R) CPU E5-2683 v3

2.00GHz;GPU 为 6 块 NVIDIATITAN Xp,每块GPU拥有12G 显存。使用的深度学习架构是Pytorch。软件环境为 Ubuntu 16.04 LTS。

4.2 参数设置

网络模型尺寸输入ReSize为256x256,初始学习率为 10-4。将合成数据集中的8000张图片作为训练集,2000张作为验证集,训练200个Epoch,每20个Epoch过后学习率衰减为的之前的0.9倍。整个训练过程中本文使用自适应优化算法Adam作为优化器,激活函数选用Relu,Batch_Size设置为8。

4.3 结果分析

模型训练的过程中,利用保存的训练集以及测试集上的Loss信息,绘制得到如图6的Loss曲线图,其中,实线代表的是在训练集上的效果,虚线代表的是在验证集上的效果,可以发现在只使用基础U-Net模型时,其在训练集和验证集上的Loss存在较大的差异,也就表示模型存在过拟合,而在添加了膨胀卷积后该情况就会好很多。

图6 模型训练的回归Loss曲线图

在最后的模型评价中,本文采用MS-SSIM指标对矫正后的图片与标准图片的相似度进行评价,即多尺度下SSIM(结构相似性)的汇总。一般SSIM考虑了亮度、对比、结构等因素,而在不同分辨率下,人眼对图像差异的敏感程度是不一样的,MS-SSIM在SSIM基础上加入了分辨率的因素。对图像进行降采样处理,在多尺度上分别计算,最后汇总多尺度上的SSIM分数。

在训练集和验证集之外,利用200张对应褶皱变换的QR码图片作为测试集,从而利用MS-SSIM指标对模型的矫正效果进行评价,最终,各个模型的MS-SSIM得分如表3所示,其中模型1位原始U-Net网络,模型2为添加膨胀卷积后的模型表现,Q表示U-Net中添加的膨胀卷积模块数目,一般情况数目越多整体模型感受野加大,但相应地参数量也会增加,所以需要一个合理的取值。模型3在添加膨胀卷积基础之上加入平移不变损失函数,模型4表示在测试时综合box最优的模型3基础上额外加入对抗损失做矫正。

表3 不同参数模型的实验结果对比

从表中可以得知,膨胀卷积以及平移不变损失函数的添加很大程度提升了原始U-Net网络的性能,而且实验表明当膨胀卷积模块设置Q=3时即可达到较好的效果,后续即使继续增加膨胀卷积模块也不会对整体性能有提高,相反会增加模型参数计算量。另外加入判别器模块也会对预测结果有一定提升。考虑不同数据形式时,可以发现混合折叠和扭曲的制作方式相比只单独进行折叠或扭曲形式的在模型上更加优秀,复杂的合成制作方式更能体现现实数据的特征。

图7中选取实验中测试的褶皱QR码图片以及不同结构下模型得到的恢复图片,图中(a)截取褶皱QR码前景图片,图中(b)是U-Net网络在不添加平移不变损失及其它情况下的恢复图片,发现此时图片恢复后虽然整体趋势接近QR码标签,但局部细节仍会有较严重的扭曲和变形。图中(c)表示加入膨胀卷积后褶皱恢复的效果,随着网络感受野的增加,明显发现局部的撕裂和变形明显减少了许多。图中(d)是在将常用的回归损失改为平移不变损失后的效果,相对于MSE损失函数,相近像素之前扭曲更小,对应的恢复更好。图中(e)表示在输出映射矩阵末端加入对抗损失后,映射矩阵的整体偏差减小,可以发现整体效果表现最好。图中(f)是标准未褶皱前的QR码图片。

图7 各种模型参数结果对比图

5 结语

本文提出了一种针对褶皱QR码图片的恢复算法,主要目标用以解决在物流包裹分拣场景中快递包裹上出现的QR码标签褶皱恢复问题。该算法以U-Net网络作为基础框架,通过设计分支网络将坐标位置回归以及前景分离任务分别进行,结合膨胀卷积以及对抗训练的特点,使得网络预测结果更加精细,这对模型的表现能力有了一定的优化提升,最后通过实验验证了算法在合成数据上的有效性和可行性。如图8所示,现实场景中褶皱QR图片,当扭曲程度较轻,主要编码信息完整情况下,本算法可以很好地给予恢复。但无可避免地,由于现实场景数据图片拍摄环境相对复杂,经常会出现过度扭曲或拍摄角度原因造成信息丢失的情况,这也相应地造成算法泛化到真实图片表征能力降低问题,这时恢复后图片局部细节会有畸变,难以复原原始信息。后续本文将会寻找更加优秀代替2D的褶皱模拟方案,同时考虑更加优秀的基础网络模型,提高表现效果。

图8 实际图片效果图

猜你喜欢
褶皱卷积损失
洪涝造成孟加拉损失25.4万吨大米
基于全卷积神经网络的猪背膘厚快速准确测定
基于图像处理与卷积神经网络的零件识别
基于深度卷积网络与空洞卷积融合的人群计数
两败俱伤
动漫人物衣服褶皱的画法(1)
一点褶皱
卷积神经网络概述
褶皱的优雅
梦幻褶皱