【图像搜索】基于pytorch官方预训练模型的简易相似图片搜索_以图搜图算法pytorch_曾小蛙的博客-程序员秘密

技术标签: 计算机视觉相关  image retrieve  图像搜索  # Pytorch  pytorch  图像相似度计算  

简易的相似图像搜索算法

图片数据库

原图片数据库

查询结果

查询结果

本文主要方法

流程

  1. 预训练模型 + 单张图像的特征 ( 逐个保存,形成数据库)+ 特征压缩(选做)

  2. 获取查询图像的特征向量

  3. 将查询的特征向量与数据库保存的所有特征进行余弦距离计算

  4. 返回结果

实际

  1. 编写自定义图片数据集读取代码
  2. pytorch SWAV预训练模型paper Unsupervised Learning of Visual Features by Contrasting Cluster Assignments.)
  3. 抽取数据集每一张图片,模型推理得到,4096维度的特征向量 ,保存每一个特征向量
  4. 得到将需要查询的图片的4096维度的向量
  5. 计算查询向量与所有其他图片的余弦距离,并返回距离最近的topk个图片,完成查询

主要参考:

基于论文复杂结构_搜索算法(牛津数据集)

  • PyTorch+flask演示

  • End-to-end Learning of Deep Visual Representations for Image Retrieval

  • 分别学习相似图像与不相似图像的特征:

  • https://github.com/keshik6/deep-image-retrieval#pytorch-source-code

基于自编码机(AE)_搜索算法(以cafir-10为例):

  • PyTorch

  • 有效果图

  • https://blog.csdn.net/weixin_43786143/article/details/116137867

基于成对相似度数据_搜索算法(以cafir-10为例)

  • PaddlePaddle(百度飞浆)
  • https://www.paddlepaddle.org.cn/documentation/docs/zh/tutorial/cv_case/image_search/image_search.html

基于预训练模型_搜索算法(任一小数据集)

  • Keras
  • 基于vgg16预训练模型
  • github 433 star:https://github.com/willard-yuan/flask-keras-cnn-image-retrieval
  • 问题:图片较多时,无法直接使用该项目

Hash图像_特征的获取(多种hash算法)

  • PyTorch
  • 提取图像传统特征,并转换为hash编码
  • https://github.com/JohannesBuchner/imagehash

主要代码

测试数据集导入

python test_read_img.py

保存数据集中的图片到文件夹

修改文件夹路径,以及图片后缀,运行:

python save_fearures_2_npy.py

搜索相同、相似图片

python torch_pretrain_swav_search_one_image.py
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/imwaters/article/details/117426488

智能推荐

利用Cocos+Matchvs开发的IO类游戏源码分享_matchvs的博客-程序员秘密

游戏指引《贪吃星球》是一款IO类游戏,只支持多人玩法 随机加入的房间,房间人数为3人时,即可开始游戏。 其他方式加入的房间,房间人数大于等于4人时,房主可点击开始游戏。 注意:随机加入和其他方式加入的玩家,是不会匹配到一起的。两者进入的房间,不是同一个“空间”。 注意:不同的玩家需要用不同的设备或软件。例如:在游览器运行时,需要用不同的游览器打开不同的游戏实例。玩法说明玩家在游戏...

golang力扣leetcode 125背包问题(二)_golang背包问题_cheems~的博客-程序员秘密

125背包问题(二)125背包问题(二)题解代码125背包问题(二)125背包问题(二)题解懒得解释了,大水题,方法2滚动数组优化代码package main//state: dp[i][j]前i个物品,j的重量,表示的最大价值//function: dp[i][j] = max(dp[i-1][j], dp[i-1][j-A[i-1]]+V[i-1])//intialize:dp = 0//answer: dp[len(A)][m]/** * @param m: An inte

neo4j 基本语法笔记_neo4j 不等于_Joy_joye的博客-程序员秘密

基础教程官方网址,这个教程基础知识很全全面,从数据库的安装,到spring框架下的使用都有。neo4j数据库的基本概述:neo4j的优点:图数据库的有点是按照的关系深度的遍历。例如:A 的朋友的妻子的妈妈,,类似于这样的推理,图数据库可以推理4层甚至五层,而关系型数据库智能推理三层。neo4j数据库的容量:节点和关系大约可以存储350亿个,关系可以存储27.5亿。neo4j图模...

Android中FTP服务器、客户端搭建以及SwiFTP、ftp4j介绍_安卓ftp4j给服务器创建路径_smqh2011的博客-程序员秘密

最近一段时间,因为公司项目的需要,对HTTP协议以及FTP协议都有所了解,并且在基于网络开放源代码  基础上,能够完成项目的要求。今天给大家分享下,怎样建立属于我们自己的FTP服务器以及FPT客户端,同时  非常非常感谢这些开源软件及其作者为IT行业做出的贡献,最大程度上至少解放了我们这些IT码农。且看正文。       本文主要内容:                1、F

iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化-李明杰-专题视频课程..._seemygo的博客-程序员秘密

得遇名师,突飞猛进!iOS培训王者MJ(李明杰)老师精心研发,iOS进阶课程,实用技术不断的更新和升级,更快帮助职场人士在开发领域脱颖而出。远程视频教学,无须长途奔袭,碎片化时间学习,成长随时随地!...

DSPE-PEG11-Azide,分子式是C66H129N4O20P的储存条件:-20°C_XYBMSWKJ的博客-程序员秘密

英文名称:DSPE-PEG11-Azide分子式:C66H129N4O20P分子量:1329.74储存条件:-20°C纯度:95%结构式:其他产品列表:Biotin-PEG11-azideCAS号:2276672-04-7分子式:C34H64N6O13SBiotin-PEG11-azideCAS号:956494-20-5分子式:C17H34N4O7Azido-PEG11-azideCAS号:1392284-57-9分子式:C24H48N

随便推点

AngularJS中使用ng-repeat的index_ng-repeat index_whereismatrix的博客-程序员秘密

AngularJS中的ng-repeat中,隐含的index,可以使用$index来访问,也可以自己指定index对应的变量名。

(分享)程序上怎么减小误/提高读数精度?_莫邪博客的博客-程序员秘密

//滤波算法:用一个程序上的滤波—比如求平均数,排序等各种方法来用来调整误差//来源:摩尔吧公开课//修改:2018年10月5日//程序员:画中仙//-----------------------------------------------------------------------//1.平均数 滤波----最基础的//方法:连续取N个采样值进行算术平均运算;//N值较大时:信号平滑度较高,但灵敏度较低//N值较小时:信号平滑度较低,但灵敏度较高//N值的选取:一般流量,N=12

BZOJ 1018 [SHOI2008]堵塞的交通traffic_weixin_30414305的博客-程序员秘密

AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1018分析:  为什么会只有2行呢?...于是我们就想到了:因为如果一行太水了[并查集真的可以弄么?...],如果多行好像又没那么好打了是吧...  于是想到两行也可以当做一行来玩的吧...和序列有关的,想办法来维护连通性的数据结构...  于是用到的是线段树咯: ...

Memcached安装学习教程_weixin_44014185的博客-程序员秘密

Memcached的安装如下此篇教程仅供学习,阐述Memcached缓存如何安装和对其的理解。首先,安装Memcached,点击下载下载安装文件以及源码。解压文件(我这里将安装文件放在F盘文件夹memcached-1.2.6-win32-bin中)。以管理员身份运行cmd。第一步:定位解压文件位置,如果是F盘,则直接输入F: ,然后回车键;第二步:定位memcached.exe所在的文...

SpringBoot中使用EasyPoi导出excel_springboot easypoi导出excel_三婶儿的博客-程序员秘密

以往数据的导入导出,都是使用传统的poi进行操作的。相对来说较为麻烦,推荐使用EasyPoi。几行代码,几个注解就可以完事,方便快捷。下:一、在线快速创建一个SpringBoot项目具体操作:https://blog.csdn.net/weixin_43770545/article/details/90764631二、引入EasyPoi的pom依赖 <...

推荐文章

热门文章

相关标签