python 以图搜图_Python深度学习,手把手教你实现「以图搜图」
随着深度学习的崛起,极大的推动了图像领域的发展,在提取特征这方面而言,神经网络目前有着不可替代的优势。之前文章中我们也介绍了图像检索往往是基于图像的特征比较,看特征匹配的程度有多少,从而检索出相似度高的图片。而检测图像特征,VGG16具有得天独厚的优势。
接下来本文将会通过一个简单的案例来实现一个基于深度学习的图像检索小工具。
准备工作
老样子,先来准备好我们此次需要使用到的工具:IDE:Pycharm
Python:3.7
Packages:Keras + TensorFlow + Pillow + Numpy
keras
Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow、Theano以及[CNTK后端。简单来说,keras就是对TF等框架的再一次封装,使得使用起来更加方便。
基于vgg16网络提取图像特征
我们都知道,vgg网络在图像领域有着广泛的应用,后续许多层次更深,网络更宽的模型都是基于此扩展的,vgg网络能很好的提取到图片的有用特征,本次实现是基于Keras实现的,提取的是最后一层卷积特征。
思路
主要思路是基于CVPR2015的论文《Deep Learning of Binary Hash Codes for Fast Image Retrieval》实现的海量数据下的基于内容图片检索系统。简单说来就是对图片数据库的每张图片抽取特征(一般形式为特征向量),存储于数据库中,对于待检索图片,抽取同样的特征向量,然后并对该向量和数据库中向量的距离(相似度计算),找出最接近的一些特征向量,其对应的图片即为检索结果。如下图所示:
用户请求和预处理部分主要是Web服务端应该做的,这里不加以讨论,接下来我们主要进行红线标注部分的实现。
实操
提取图片特征
keras在其中文文档中提供了一个利用VGG16提取特征的demo
这里我们需要对其进行简单修改,封装成一个类以便后期调用。如下图所示:
将特征以及对应的文件名保存为h5文件
什么是 h5 文件
h5文件是层次数据格式第5代的版本(Hierarchical Data Format,HDF5),用以存储和组织大规模数据。
H5将文件结构简化成两个主要的对象类型:数据集dataset,就是同一类型数据的多维数组
组group,是一种容器结构,可以包含数据集和其他组,若一个文件中存放了不同种类的数据集,这些数据集的管理就用到了group
直观的理解,可以参考我们的文件系统,不同的文件存放在不同的目录下:
目录就是 hdf5 文件中的 group,描述了数据集 DataSet 的分类信息,通过 group 有效的将多种 dataset 进行管理和划分。文件就是 hdf5 文件中的 dataset,表示具体的数据
下图就是数据集和组的关系:
在 Python 中,我们通常使用 h5py 库对 .h5 文件进行操作,具体的读写方法自行百度,这里不在演示。
抽取数据集中的图像特征保存到 h5 文件中
我们在项目根目录下命名一个database文件夹作为数据集,然后编写一个获取文件夹内图片的方法:
随后我们便可以依次读取数据然后,一一提取其特征保存到文件中了。如下图:
至此,我们就已经算是完成了模型的训练了。
选一张测试图片测试检索效果
经过上述操作,我们已经将数据集中的所有图片的特征保存到模型中了,剩下的就是抽取待测图片的特征,然后和特征集中的特征一一比较向量间的相似度(余弦相似度),然后按照相似度排序返回给用户即可。
以某一个包包为测试图片,输出结果如下所示:
在PyCharm中可以很方便的查看matplotlib生成的图片,第一张为测试图片,后面三张为检索图片,可以看出效果相当好了。
最后
至此我们已经利用深度学习实现了一个图片检索的小工具了,如何将其和web/app结合到一起就不在本文的讨论范围了
如果你想更多的了解Python,点击以下视频跳转链接:
python 以图搜图_Python深度学习,手把手教你实现「以图搜图」相关推荐
- python如何实现找图_Python深度学习,手把手教你实现「以图搜图」
随着深度学习的崛起,极大的推动了图像领域的发展,在提取特征这方面而言,神经网络目前有着不可替代的优势.之前文章中我们也介绍了图像检索往往是基于图像的特征比较,看特征匹配的程度有多少,从而检索出相似度高 ...
- python以图搜图api_Python深度学习,手把手教你实现「以图搜图」
随着深度学习的崛起,极大的推动了图像领域的发展,在提取特征这方面而言,神经网络目前有着不可替代的优势.之前文章中我们也介绍了图像检索往往是基于图像的特征比较,看特征匹配的程度有多少,从而检索出相似度高 ...
- python的顶级高手_Python+深度学习
自从吉多·范罗苏姆1989年为打发圣诞节假期时间而写下用于编写自动化脚本的Python之后,30多年的时间过去了,随着功能不断完善和版本更新,目前Python已成为最流行的一种编程语言,并被广泛用于开 ...
- python未来人工智能主流_python深度学习,未来人工智能三大境界的划分
原标题:python深度学习,未来人工智能三大境界的划分 仙侠小说想必很多人都看过,里边让小编久久不能忘怀的便是这些修仙之人的境界划分情况.同样,在我们生活当中,清朝学者王国维曾用三句古诗词来诠释人生 ...
- [京东实践干货]手把手教你实现「京喜工厂」的CSS动画效果
0 契机与背景 今年Q1(2020年第一季度)参与了京喜事业部「京喜工厂」业务的前端开发.用户可以通过「京喜工厂」参与口罩.抽纸.大米等商品的"在线生产",既能趣味造物,又能免费领 ...
- python线性加权回归_python深度学习-tensorflow实现一个线性回归的案例
线性回归:w1x1+w2x2+w3x3+......+wnxn+bias(这是一个偏移量),我们采用的算法是:线性回归,策略是:均方误差,优化是:梯度下降API, 1.转准备好实验的数据:100个数据 ...
- python数据生成可视化_Python数据分析:手把手教你用Pandas生成可视化图表
大家都知道,Matplotlib 是众多 Python 可视化包的鼻祖,也是Python最常用的标准可视化库,其功能非常强大,同时也非常复杂,想要搞明白并非易事.但自从Python进入3.0时代以后, ...
- 思维导图使用技巧:手把手教你怎么画思维导图 #CSDN博文精选# #系统化学习# #IT技术# #知识图谱#
大家好~我是小C,又见面啦!"文章过滤器"精选大咖干货.助力学习之路. <5天20篇CSDN精选博文带你掌握系统化学习方法>专栏将挑选有关"系统化学习方法&q ...
- 动态文字闪图怎么做?手把手教你在线做动态闪图
想要做炫酷的动态文字闪图,又不会使用专业的做图软件时,应该怎么操作呢?很简单,给大家分享一款在线gif图片制作(https://www.gif.cn/)工具-[GIF中文网],只需要打开浏览器上传jp ...
- 趣图:深度学习之大炮打蚊子
(给程序员的那些事加星标,每天看趣图) 深度学习之大炮打蚊子 ↓↓↓ 往期趣图(点击下方图片可跳转阅读) 关注「程序员的那些事」加星标,每天看趣图 (商务合作联系:Julie_Juliehuang) ...
最新文章
- 线阵相机和面阵相机的区别及应用
- add_compile_options和CMAKE_CXX_FLAGS的区别
- c++-内存管理-bitmap_alloctor
- vue-cli中config目录下的index.js文件详解
- Codeforces Round #496 (Div. 3 ) E1. Median on Segments (Permutations Edition)(中位数计数)
- Windows MinGW配置C、C++编译环境
- 中小学、幼儿园远程视频监控系统技术方案
- java.io.IOException: Server asks us to fall back to SIMPLE auth, but this client is confi的问题
- golang 大数据平台_一文读懂数据平台、大数据平台、数据中台
- 任玉刚【Android开发艺术探索】读后笔记三
- 加不了buff的BuffX,还能让年轻人买单多久?
- 高等代数--线性变换
- 麦迪关键球失误的背后
- 使用 Kitten 编程猫绘制一个魔方
- MySQL对数据表进行分组查询(GROUP BY)
- 前端学习案例16-js中的HMR
- Android端WebRTC本地音视频采集流程源码分析
- IB文学:戏剧作品中的对比手法
- web项目中上传的图片项目重新部署之后被清空如何解决?
- 国开电大大学计算机应用基础 (专科)终结性考试试题以及答案(大作业)所有答案和PPT已经做好,直接填写名字学号即可,详情可以看缩略图。