3.1.2 青花瓷图像的预处理

3.1.2 青花瓷图像的预处理

深度学习模型结构复杂,利用其进行图像分类需要庞大的数据量,图像数据集的规模和质量直接影响模型的效果,利用网络爬虫技术批量下载博物馆官方提供的青花瓷文物图像可以大大提高数据获取的效率。图像的预处理工作也是非常重要的环节,预处理的主要目的是筛选特征图像,突出待识别图像的特征,才能有效扩充数据集。

3.1.2.1 图像分类

利用深度学习进行图像分类任务时往往需要大量的数据,充足的数据才可以对模型进行更好的训练,进而得到更具鲁棒性的分类模型。模型的分类效果直接受到图像数据集的规模和质量影响。故宫博物院官网获取的景德镇青花瓷图像数量不够支撑深度学习需要的数据量,本书在扩充数据集时采用数据增强的方法来进行,使用的具体方法包括随机角度翻转、添加随机噪声、增加亮度和对比度,同时通过数据增强的方法还能够缓解过拟合问题。

3.1.2.2 图像裁剪

基于Python的图像裁剪主要用到的是OpenCV库和PIL(Python Imaging Library)库。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效—— 由一系列C函数和少量C++类构成,同时提供Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。主要用于图像分割、机器视觉、人机互动等相关研究。

PIL是Python一个强大方便的图像处理库。PIL库可以完成图像归档和图像处理两方面功能需求:

(1) 图像归档:对图像进行批处理、生成图像预览、图像格式转换等。

(2)图像处理:图像基本处理、像素处理、颜色处理等。

3.1.2.3 图像增补

由于获取的图像大小不一,为了便于后续研究工作的顺利开展,先对图像数据进行裁剪处理,统一裁剪成大小为224*224像素,图像增补如图3.3所示。为了避免裁剪后出现变形等失真情况,裁剪之前先将图像补成以原图像的长边为边长的正方形,再批量对其进行裁剪。

图3.3 图像增补

裁剪流程如图3.4所示,为了获得原图像的长和宽,先用Image. fromarray函数实现从数组到图像的转换,再通过函数image.size获取原图像的长和宽,将原图像的长度作为正方形的边长生成正方形的底图,底图的R、G、B赋值都为127,因此生成的是灰色的底图。在此基础上,将图像裁剪成224*224像素,使用到的是image.resize函数。

图3.4 青花瓷文物图像整体裁剪流程

将图像进行整体裁剪,实际上类似图像缩放,并没有真的裁剪掉图像的有效信息。图3.5是青花瓷文物图像整体裁剪的结果。

为了更细致地描述青花瓷器的特征,同时达到数据集扩充的目的,我们进行了图像的局部裁剪,获得每张图像的一些局部区域来作为输入进行青花瓷器的分类。如果从图像左上角或右下角等处进行裁剪,会得到大量图像的背景信息,为了保证每张裁剪后的图像信息有效,分别以每张图像长和宽的1/1.5处、1/2处、1/2.5处和1/3处为中心进行局部裁剪,裁剪的图像大小为100*100像素(图3.6)。裁剪用到的函数是image.crop,最后将裁剪后不包含青花瓷器特征的图像或只包含少量特征的图像删除。

图3.5 青花瓷文物图像整体裁剪结果图
(以明宣德时期部分样本为例)

图3.6 青花瓷文物图像局部裁剪结果图
(以明宣德时期部分样本为例)

从故宫博物院官网获取的数据经筛选后,每个朝代只有几十张图像,数据量远远不够,而数据增强可以有效增加训练样本、减少网络的过拟合现象,通过对训练图像进行变换可以得到泛化能力更强的网络,更好地适应应用场景。运用爬虫技术获得的数据样本相对于神经网络需要的训练样本数而言太少了,并且一张图片通过移位、旋转、翻转、缩放,调整亮度、饱和度等处理后,计算机会认为这是不同的图片,因此,可以通过数据增强来获取海量数据样本。因此采用数据增强来扩充数据集,使扩充后的数据集满足输入深度学习模型的需要。具体方法有添加椒盐噪声、高斯噪声、旋转、调整图像亮度等。数据增强后的图片如图3.7所示。

图3.7 青花瓷文物图像数据增强结果图
(以明宣德时期部分样本为例)

改变亮度值后的图片如图3.8所示。下面将不同年代景德镇青花瓷图像数据集进行柱状图展示,可以清楚地看到每个年代青花瓷种类数量的分布情况。如图3.9所示为青花瓷数据集的训练数据集分布情况。

首先,由于imread不能直接读取中文路径的图像,所以读取中文路径的图像用cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)来解决—— 先用np.fromfile读取为np.uint8格式,再使用cv2.imdecode解码。然后对每张图像进行以下处理:分别添加30%的椒盐噪声和高斯噪声,以图像中心为旋转中心旋转15°,调整图像的亮度为原来的90%和150%,使其更暗或更亮,这样最终得到的图像数量是原来的5倍。

图3.8 改变亮度值后的青花瓷文物图像
(以明万历时期部分样本为例)

图3.9 青花瓷图像训练数据集柱状图

原始数据集总计348张图像,经过数据增强和随机裁剪后总计7709张图像,根据图像展示的优劣对不符合实验要求的图像进行剔除,最后参与实验的图像数据总计5933张。图3.10所示为青花瓷原始数据集分 布情况,表3.1为青花瓷图像数据集划分。

图3.10 青花瓷图像原始数据集

表3.1 青花瓷图像数据集划分

在深度学习中,通常在模型训练前都会对图像进行归一化处理,将特征值调整到相近的范围。不归一化处理时,如果特征值较大,梯度值也会较大,特征值较小时,梯度值也会较小。在模型反向传播时,梯度值更新与学习率一样,当学习率较小时,梯度值较小会导致更新缓慢,当学习率较大时,梯度值较大会导致模型不易收敛,因此为了使模型训练收敛平稳,对图像进行归一化操作,把不同维度的特征值调整到相近的范围内,就可以采用统一的学习率加速模型训练。

对数据集图像进行归一化处理是利用深度学习进行图像分类任务时的重要环节,图像归一化是将数据集中的图像在大小和像素值两个方面置于一个共同的统计分布中,实现数据的一致性。经过归一化处理,像素值将调整到(0,1)区间,可以加速模型训练。具体公式如下:

式中 norm—— 图像像素值输出;

xi—— 图像像素值输入;

max—— 图像像素的最大值;

min—— 图像像素的最小值。

经过归一化处理将像素值调整到(0,1)区间。如图3.11所示为部分经过归一化处理的青花瓷图像。

在进行数据集划分时,如果将增强后的图像数据和原始数据放在一起划分会引发数据泄露的问题。本章在进行数据集的划分时,将每一张原始数据和其增强后的图像数据看作是一组,训练集和测试集按照4 1∶的比例进行随机划分,每一组数据只会被一起分到训练集或者测试集,确保划分数据集时不发生数据泄露影响实验结果。

图3.11 增强后图像数据集示意图
(以明天顺青花八仙罐为例)

注:左图为归一化处理得到的青花瓷整体图像,右图(a)~(i)为处理得到的青花瓷细节样本图。