图像检索算法 计算机竞赛
文章目录
- 1 前言
- 2 图像检索介绍
- (1) 无监督图像检索
- (2) 有监督图像检索
- 3 图像检索步骤
- 4 应用实例
- 5 最后
1 前言
🔥 优质竞赛项目系列,今天要分享的是
图像检索算法
该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!
🧿 更多资料, 项目分享:
https://gitee.com/dancheng-senior/postgraduate
图像检索:是从一堆图片中找到与待匹配的图像相似的图片,就是以图找图。
网络时代,随着各种社交网络的兴起,网络中图片,视频数据每天都以惊人的速度增长,逐渐形成强大的图像检索数据库。针对这些具有丰富信息的海量图片,如何有效地从巨大的图像数据库中检索出用户需要的图片,成为信息检索领域研究者感兴趣的一个研究方向。
2 图像检索介绍
给定一个包含特定实例(例如特定目标、场景、建筑等)的查询图像,图像检索旨在从数据库图像中找到包含相同实例的图像。但由于不同图像的拍摄视角、光照、或遮挡情况不同,如何设计出能应对这些类内差异的有效且高效的图像检索算法仍是一项研究难题。
图像检索的典型流程
首先,设法从图像中提取一个合适的图像的表示向量。其次,对这些表示向量用欧式距离或余弦距离进行最近邻搜索以找到相似的图像。最后,可以使用一些后处理技术对检索结果进行微调。可以看出,决定一个图像检索算法性能的关键在于提取的图像表示的好坏。
(1) 无监督图像检索
无监督图像检索旨在不借助其他监督信息,只利用ImageNet预训练模型作为固定的特征提取器来提取图像表示。
直觉思路
由于深度全连接特征提供了对图像内容高层级的描述,且是“天然”的向量形式,一个直觉的思路是直接提取深度全连接特征作为图像的表示向量。但是,由于全连接特征旨在进行图像分类,缺乏对图像细节的描述,该思路的检索准确率一般。
利用深度卷积特征 由于深度卷积特征具有更好的细节信息,并且可以处理任意大小的图像输入,目前的主流方法是提取深度卷积特征,并通过加权全局求和汇合(sum-
pooling)得到图像的表示向量。其中,权重体现了不同位置特征的重要性,可以有空间方向权重和通道方向权重两种形式。
CroW
深度卷积特征是一个分布式的表示。虽然一个神经元的响应值对判断对应区域是否包含目标用处不大,但如果多个神经元同时有很大的响应值,那么该区域很有可能包含该目标。因此,CroW把特征图沿通道方向相加,得到一张二维聚合图,并将其归一化并根号规范化的结果作为空间权重。CroW的通道权重根据特征图的稀疏性定义,其类似于自然语言处理中TF-
IDF特征中的IDF特征,用于提升不常出现但具有判别能力的特征。
Class weighted features
该方法试图结合网络的类别预测信息来使空间权重更具判别能力。具体来说,其利用CAM来获取预训练网络中对应各类别的最具代表性区域的语义信息,进而将归一化的CAM结果作为空间权重。
PWA
PWA发现,深度卷积特征的不同通道对应于目标不同部位的响应。因此,PWA选取一系列有判别能力的特征图,将其归一化之后的结果作为空间权重进行汇合,并将其结果级联起来作为最终图像表示。
(2) 有监督图像检索
有监督图像检索首先将ImageNet预训练模型在一个额外的训练数据集上进行微调,之后再从这个微调过的模型中提取图像表示。为了取得更好的效果,用于微调的训练数据集通常和要用于检索的数据集比较相似。此外,可以用候选区域网络提取图像中可能包含目标的前景区域。
孪生网络(siamese network)
和人脸识别的思路类似,使用二元或三元(+±)输入,训练模型使相似样本之间的距离尽可能小,而不相似样本之间的距离尽可能大。
3 图像检索步骤
图像检索技术主要包含几个步骤,分别为:
-
输入图片
-
特征提取
-
度量学习
-
重排序
-
特征提取:即将图片数据进行降维,提取数据的判别性信息,一般将一张图片降维为一个向量;
-
度量学习:一般利用度量函数,计算图片特征之间的距离,作为loss,训练特征提取网络,使得相似图片提取的特征相似,不同类的图片提取的特征差异性较大。
-
重排序:利用数据间的流形关系,对度量结果进行重新排序,从而得到更好的检索结果。
4 应用实例
学长在这做了个图像检索器的demo,效果如下
工程代码:
关键代码:
# _*_ coding=utf-8 _*_from math import sqrtimport cv2import timeimport osimport numpy as npfrom scipy.stats.stats import pearsonr#配置项文件import pymysqlfrom config import *from mysql_config import *from utils import getColorVec, Bdistancedb = pymysql.connect(DB_addr, DB_user, DB_passwod, DB_name )def query(filename):if filename=="":fileToProcess=input("输入子文件夹中图片的文件名")else:fileToProcess=filename#fileToProcess="45.jpg"if(not os.path.exists(FOLDER+fileToProcess)):raise RuntimeError("文件不存在")start_time=time.time()img=cv2.imread(FOLDER+fileToProcess)colorVec1=getColorVec(img)#流式游标处理conn = pymysql.connect(host=DB_addr, user=DB_user, passwd=DB_passwod, db=DB_name, port=3306,charset='utf8', cursorclass = pymysql.cursors.SSCursor)leastNearRInFive=0Rlist=[]namelist=[]init_str="k"for one in range(0, MATCH_ITEM_NUM):Rlist.append(0)namelist.append(init_str)with conn.cursor() as cursor:cursor.execute("select name, featureValue from "+TABLE_NAME+" order by name")row=cursor.fetchone()count=1while row is not None:if row[0] == fileToProcess:row=cursor.fetchone()continuecolorVec2=row[1].split(',')colorVec2=list(map(eval, colorVec2))R2=pearsonr(colorVec1, colorVec2)rela=R2[0]#R2=Bdistance(colorVec1, colorVec2)#rela=R2#忽略正负性#if abs(rela)>abs(leastNearRInFive):#考虑正负if rela>leastNearRInFive:index=0for one in Rlist:if rela >one:Rlist.insert(index, rela)Rlist.pop(MATCH_ITEM_NUM)namelist.insert(index, row[0])namelist.pop(MATCH_ITEM_NUM)leastNearRInFive=Rlist[MATCH_ITEM_NUM-1]breakindex+=1count+=1row=cursor.fetchone()end_time=time.time()time_cost=end_time-start_timeprint("spend ", time_cost, ' s')for one in range(0, MATCH_ITEM_NUM):print(namelist[one]+"\t\t"+str(float(Rlist[one])))if __name__ == '__main__':#WriteDb()#exit()query("")
效果
5 最后
🧿 更多资料, 项目分享:
https://gitee.com/dancheng-senior/postgraduate
相关文章:

图像检索算法 计算机竞赛
文章目录 1 前言2 图像检索介绍(1) 无监督图像检索(2) 有监督图像检索 3 图像检索步骤4 应用实例5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 图像检索算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐ÿ…...

科学清理Windows系统垃圾,让你的电脑性能快如火箭
文章目录 1. 使用磁盘清理工具2. 清理临时文件2.1 清理用户临时文件夹2.2 清理系统临时文件夹2.3 清理系统临时文件 3.卸载不需要的程序4. 删除不必要的下载文件5. 清理回收站6. 压缩磁盘7. 删除旧的系统还原点8. 禁用休眠功能9. 定期进行磁盘碎片整理10. 禁用不必要的启动项11…...

docker图形胡界面管理工具--Portainer可视化面板安装
1.安装运行Portainer docker run -d -p 8088:9000 \ > --restartalways -v /var/run/docker.sock:/var/run/docker.sock --privilegedtrue portainer/portainer--restartalways:Docker启动后容器自动启动 -p:端口映射 -v:路径映射2.通过…...

环形链表的约瑟夫问题
前言: 据说著名犹太历史学家Josephus有过如下故事: 在罗马人占领乔塔帕特后,39个犹太人和Josephus及他的朋友躲进一个洞里,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个…...
python requests.get发送Http请求响应结果乱码、Postman请求结果正常
最近在写爬虫程序,自己复制网页http请求的url、头部,使用python requests和postman分别请求,结果使用postman发送http get请求,可以得到正常的json数据,但是使用python的requests发送则接受到乱码,response…...
Dialog动画相关
最近需求一个问题,想要在dialog消失时增加动画,之前如上一个文章中遇到的,但是最后改了实现方式,要求在特定的地方缩放,原来的dialog高度是wrap_content的,这样是无法实现的,因此首先需要将dial…...
【java学习—八】==操作符与equals方法(2)
文章目录 1. 操作符2. equals方法String对象的创建 1. 操作符 (1)基本类型比较值 : 只要两个变量的值相等,即为 true. int a5; if(a6){…} (2)引用类型比较引用 ( 是否指向同一个对象 ): 只有指向同一个对象时&#…...

Linux系统编程_进程间通信第1天:IPC、无名管道pipe和命名管道mkfifo(半双工)、消息队列msgget(全双工)
1. 进程间通信概述(427.1) 2. 管道通信原理(428.2) 进程间的五种通信方式介绍 https://blog.csdn.net/wh_sjc/article/details/70283843 进程间通信(IPC,InterProcess Communication)ÿ…...

figma+windows系统
...
typescript实现一个简单的区块链
TypeScript 是一种由 Microsoft 推出的开源编程语言,它是 JavaScript 的超集,允许程序员使用面向对象的方式编写代码,并提供类型检查和语法提示等优秀的开发体验。区块链技术是一种分布式的、可靠的、不可篡改的数据库技术,用于记…...
服务器被暴力破解怎么解决
暴力破解分两种,一种是SSH暴力破解,属于Linux服务器。一种是RDP暴力破解,属于Windows服务器。两者其实攻击手法一样,都是黑客利用扫描工具对某一个IP段扫描,而Linux跟Windows登录端口为别是22和3389。那怎样才能有效避…...
用来生成二维矩阵的dcgan
有大量二维矩阵作为样本,为连续数据。数据具有空间连续性,因此用卷积网络,通过dcgan生成二维矩阵。因为是连续变量,因此损失采用nn.MSELoss()。 import torch import torch.nn as nn import torch.optim as optim import numpy a…...

免费的国产数据集成平台推荐
在如今的数字化时代下,企业内部的数据无疑是重要资产之一。随着数据源的多样性和数量剧增,如何有效地收集、整合、存储、管理和分析数据变得至关重要。为了解决这些常见痛点,数据集成平台成为了现代企业不可或缺的一部分。 数据集成是现代数…...

【yolov8系列】yolov8的目标检测、实例分割、关节点估计的原理解析
1 YOLO时间线 这里简单列下yolo的发展时间线,对每个版本的提出有个时间概念。 2 yolov8 的简介 工程链接:https://github.com/ultralytics/ultralytics 2.1 yolov8的特点 采用了anchor free方式,去除了先验设置可能不佳带来的影响借鉴Genera…...

5256C 5G终端综合测试仪
01 5256C 5G终端综合测试仪 产品综述: 5256C 5G终端综合测试仪主要用于5G终端、基带芯片的研发、生产、校准、检测、认证和教学等领域。该仪表具备5G信号发送功能、5G信号功率特性、解调特性和频谱特性分析功能,支持5G终端的产线高速校准及终端发射机…...
Springboot Actuator 环境搭建踩坑
JMX和Springboot Actuator JMX是Java Management Extensions,它是一个Java平台的管理和监控接口。 为什么要搞JMX呢?因为在所有的应用程序中,对运行中的程序进行监控都是非常重要的,Java应用程序也不例外。我们肯定希望知道Java…...

Vue-3.3ESLint
ESLint代码规范 代码规范:一套写代码的约定规则。 JavaScript Standard Style规范说明https://standardjs.com/rules-zhcn.html 代码规范错误 如果你的代码不符合standard的要求,ESlint会跳出来提醒。 比如:在mian.js中随意做一些改动&a…...
STROBE-MR
Welcome to the STROBE-MR website! About: STROBE-MR stands for “Strengthening the Reporting of Observational Studies in Epidemiology using Mendelian Randomization”. Inspired by the original STROBE checklist, the STROBE-MR guidelines were developed to ass…...

Hive安装配置 - 内嵌模式
文章目录 一、Hive运行模式二、安装配置内嵌模式Hive(一)下载hive安装包(二)上传hive安装包(三)解压缩hive安装包(四)配置hive环境变量(五)关联Hadoop&#x…...
html中登录按钮添加回车键登录
原文链接有3种方法,其它2中不会弄,第二种方法成功,下面详细说说 原html的登录部分是 <button class"btn btn-success btn-block waves-effect waves-light" id"button" >登入</button> 在该html中增加 &…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...