TensorFlow-similarity 学习笔记13

2021SC@SDUSC

本篇博客为项目汇报:应用本学期对Tensorflow.Similarity的学习认识,实现相似图片搜索系统。

基于TensorflowSimilarity的相似图片搜索引擎

  • 摘要
  • 1 总体设计
    • 1.1 需求规定及运行环境
    • 1.2 基本设计概念和处理流程
  • 2 图像预处理
    • 2.1读取和预处理
  • 3 神经网络模型
    • 3.1 什么是VGG16
    • 3.2为什么选择VGG16
  • 3.3特征提取
  • 4 搜索
    • 4.1利用 L2 Norm 计算距离
    • 4.2图片数据库
  • 5 总结

摘要

传统图像搜索引擎是一个图像数据库,一般可以通过使用关键字进行搜索,以便用户可以找到有价值的图像。 创建于 2001 年 7 月 12 日的谷歌图片搜索引擎是当今最全面、最著名的图片搜索引擎,2001 年,Google 注意到对其常规搜索无法满足的特定查询的巨大搜索需求。 对于特定的搜索,谷歌注意到图像结果会比同样情况下的文本结果好得多。但是限制与图片的特定标注以及不同用户对同一事物描述的差异,当用户根据一个图片搜索其他相关图片时,结果往往不理想。
[1] [2] 介绍了如何利用PyTorch训练和评估CNN以进行图像搜索,包括:用于图像检索的训练(微调)CNN;Supervised Whitening,作为后处理,用于全局图像描述符;在Oxford和Paris数据集上测试 CNN 图像检索。
综上,结合学习相似开源项目代码[3][4],我使用Tensorflow.Keras(目前流行的开源人工神经网络库)+ Flask,编写完成一个简单但易于使用的Image Reverse Retrieval Engine。

1 总体设计

1.1 需求规定及运行环境

使用者上传需要搜索的图片,根据相似度的高低排序反馈前30个最相似的图片。


如图,输入图片为人和一只宠物狗,系统反馈30张同种类宠物狗的图片,并更具相似度高低排序输出。

1.2 基本设计概念和处理流程

代码部分分为三大主体:feature_extractor.py, offline.py, server.py。

feature_extractor.py:调用深度学习模型,定义方法extract(self, img)进行图像预处理并
利用ImageNet预训练模型VGG-16进行特征提取,最后对提取的特征矩阵正则处理。
Offline.py:对数据库里的每个图片进行一个特征提取,每个4096D特征存入./static/feature以便后期搜索。
server.py:此文件运行网络服务器。 我们可以通过 Flask 网络界面将我们的查询图像发送到服务器。 服务器通过简单的线性搜索找到与查询相似的图像。

2 图像预处理

在框架飞速发展的今天,每个框架都有自己处理图片的方式,每个框架都有自己的规范。 因此,在一个框架中开发的 CV 解决方案在另一个框架中可能无法按预期工作。[5] “Tensorflow 的 tf.image.resize 如何偷走了我生命中的 60 天” 是这种情况的一个例子。 找出问题所在可能需要数天时间,并且可能会大大延迟项目进度。

2.1读取和预处理

因为计算机视觉实验均使用opencv完成,当最初使用OpenCV读取图片时,会出现部分图片颜色不正常情况,如下图1:

通常,图像具有红、绿和蓝 (RGB) 三种颜色通道,它们在像素中产生颜色。 这些通道的顺序会改变像

你可能感兴趣的:(tensorflow,python,深度学习)