/chinese-painting-retrieval

基于迁移学习的国画图像检索

Primary LanguagePython

基于迁移学习的国画图像检索

项目介绍

随着国画图像数字化进程的推进,利用机器学习技术对国画检索是目前研究热点之一。国画图像检索的分类和检索依赖于大量样本。针对国画图像样本量小,注释信息不完善的问题,提出一种基于迁移学习的国画图像检索方法。在已训练好的通用模型上,通过少量样本训练国画图像分类模型,并将其应用于国画图像检索中。

项目过程

  1. 编写网络爬虫以收集和清理国画图像数据

  2. 建立有 2400 张图像的国画图像样本库

  3. 设计基于 VGG16 网络模型的迁移学习算法,增加分类层,训练网络实现国画图像分类

  4. 将分类模型应用于国画图像检索,分类模型用于缩小搜索规模并提高检索效率

具体算法

载入 VGG16 模型

VGG16 有一个 16 层的模型,是由 13 个卷积层 + 3 个全连接层叠加而成。它需要的输入数据的尺寸是 224*224*3。通过一些卷积神经网络的处理,输出的会是 4096 维的图像特征数据。开辟一个空间,然后载入 VGG16 模型。

生成图像特征

一张一张的载入图像并放入 batch 数组中,图像是一个维度224×224×3 的张量,并且用一个名为 labels 的数组来存放对应图像的标签,通过 VGG16 计算出图像的特征值,并将结果存放到 codes 数组中,这样做的好处是不用频繁去通过 VGG16 来计算特征值,后面有用到的时候直接去 codes 数组里面获取就可以。

保存特征值和标签

通过文件的 IO 操作,将所有图像的特征值编码数组和所有图像标签的标签数组保存到本地硬盘上。

图像分类

首先通过 PyQt 人机界面输入图像的本地路径,程序加载图像,为了符合 VGG 所需要的图像结构,需要对图像进行尺寸调整,将其调为 224×224×3 的图像结构,然后利用 VGG16 计算出当前图像的一个 4096 维的特征值。将其放入已经利用迁移学习训练好的分类器中,分类器根据图像的特征计算出各个类别的可能概率,最后根据概率的大小将该图像归类到概率最大的类别中,这样就实现了图像的分类。

图像检索

之前在迁移学习中已经将所有的图像特征值都存到一个图像特征库中,同时将每张图像名称、所属的类别、以及图像的特征值存入到一个数据库中。之后可以直接使用数据库中的图像特征值进行匹配,无需再获取所有图像的特征值。

输入山水图像的本地路径,加载图像后,利用 VGG16 提取输入的山水图像的 4096 维的特征值,经过图像分类,获取到的是山水类别,根据山水类别查询数据库,获取山水类别的所有图像特征值然后一一与输入的山水图像进行特征匹配。缩小了检索的范围,极大的提升了检索的效率。

选择欧式距离最小的,因为距离越小,图像越相似,检索出来的效果越好,找到最相似的图片的索引,获取它的名称,最后就可以得到路径,从而达到检索目的。

二维间的欧式距离是两个坐标差的平方和的根号,推广到 n 维,就是 n 个坐标差的平方和的根号,只要计算出欧氏距离最小的,就完成图像检索工作了。