计算机竞赛 python图像检索系统设计与实现

news2024/11/27 12:04:13

0 前言

🔥 优质竞赛项目系列,今天要分享的是

🚩 python图像检索系统设计与实现

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

1 课题简介

图像检索:是从一堆图片中找到与待匹配的图像相似的图片,就是以图找图。
网络时代,随着各种社交网络的兴起,网络中图片,视频数据每天都以惊人的速度增长,逐渐形成强大的图像检索数据库。针对这些具有丰富信息的海量图片,如何有效地从巨大的图像数据库中检索出用户需要的图片,成为信息检索领域研究者感兴趣的一个研究方向。


2 图像检索介绍

给定一个包含特定实例(例如特定目标、场景、建筑等)的查询图像,图像检索旨在从数据库图像中找到包含相同实例的图像。但由于不同图像的拍摄视角、光照、或遮挡情况不同,如何设计出能应对这些类内差异的有效且高效的图像检索算法仍是一项研究难题。

在这里插入图片描述

图像检索的典型流程
首先,设法从图像中提取一个合适的图像的表示向量。其次,对这些表示向量用欧式距离或余弦距离进行最近邻搜索以找到相似的图像。最后,可以使用一些后处理技术对检索结果进行微调。可以看出,决定一个图像检索算法性能的关键在于提取的图像表示的好坏。

(1) 无监督图像检索

无监督图像检索旨在不借助其他监督信息,只利用ImageNet预训练模型作为固定的特征提取器来提取图像表示。

直觉思路
由于深度全连接特征提供了对图像内容高层级的描述,且是“天然”的向量形式,一个直觉的思路是直接提取深度全连接特征作为图像的表示向量。但是,由于全连接特征旨在进行图像分类,缺乏对图像细节的描述,该思路的检索准确率一般。

利用深度卷积特征 由于深度卷积特征具有更好的细节信息,并且可以处理任

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 sqrt
​    import cv2
​    import time
​    import os
​    import numpy as np
​    from scipy.stats.stats import  pearsonr
​    #配置项文件import  pymysql
​    from config import *from mysql_config import *from utils import getColorVec, Bdistance
​    

    db = 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=0
    
        Rlist=[]
        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=1
            while row is not None:
                if row[0] == fileToProcess:
                    row=cursor.fetchone()
                    continue
                colorVec2=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=0
                    for 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]
                            break
                        index+=1
                count+=1
                row=cursor.fetchone()
        end_time=time.time()
        time_cost=end_time-start_time
        print("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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/891495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hands on RL 之 Off-policy Maximum Entropy Actor-Critic (SAC)

Hands on RL 之 Off-policy Maximum Entropy Actor-Critic (SAC) 文章目录 Hands on RL 之 Off-policy Maximum Entropy Actor-Critic (SAC)1. 理论基础1.1 Maximum Entropy Reinforcement Learning, MERL1.2 Soft Policy Evaluation and Soft Policy Improvement in SAC1.3 Tw…

【Java高级开发高频面试题】面试者角度的口述版

文章目录 1.具备扎实的Java基础集合HashMap底层工作原理HashMap版本问题HashMap并发修改异常HashMap影响HashMap性能的因素HashMap使用优化 SynchronizedThreadLocalAQS线程池JVM内存模型类加载机制与双亲委派垃圾回收算法、垃圾回收器、空间分配担保策略引用计数器算法、可达性…

小白到运维工程师自学之路 第七十七集 (基于Prometheus监控Kubernetes集群)

一、Prometheus简介 Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB);Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本;2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Found…

Next.js - Route Groups(路由组)

路由组的作用 在应用程序目录中,嵌套文件夹通常会映射到 URL 路径。不过,您可以将文件夹标记为路由组,以防止该文件夹包含在路由的 URL 路径中。 这样就可以在不影响 URL 路径结构的情况下,将路由段和项目文件组织到逻辑组中。 …

Vue 根据Upload组件的before-upload方法,限制用户上传文件的类型及大小

文章目录 一、前端 Vue Upload组件的before-upload方法二,使用方法 一、前端 Vue Upload组件的before-upload方法 判断用户上传的文件是否符合要求,可以根据文件类型或者大小做出限制。 文件类型值docapplication/msworddocxapplication/vnd.openxmlform…

Docker基础入门:常规软件安装与镜像加载原理

Docker基础入门:常规软件安装与镜像加载原理 一、Docker常规软件安装1.1、部署nginx1.2、部署tomcat1.3、部署elasticsearch1.4、如何部署kibana-->连接elasticsearch1.5、部署可视化工具 二、 镜像加载原理2.1、镜像是什么2.2、Docker镜像加速原理2.3、分层理解…

【Python程序设计】基于Python Flask 机器学习的全国+上海气象数据采集预测可视化系统-附下载链接以及详细论文报告,原创项目其他均为抄袭

基于Python Flask 机器学习的全国上海气象数据采集预测可视化系统 一、项目简介二、开发环境三、项目技术四、功能结构五、运行截图六、功能实现七、数据库设计八、源码下载地址 一、项目简介 在信息科技蓬勃发展的当代,我们推出了一款基于Python Flask的全国上海气…

什么是合成数据(Synthetic Data)?

关于合成数据您需要知道的一切 推出人工智能(AI)的企业在为其模型采集足够的数据方面会遇到一个主要障碍。对于许多用例来说,正确的数据根本不可用,或者获取数据非常困难且成本高昂。在创建AI模型时,数据缺失或不完整…

哨兵1号处理流程

分步步骤 1.打开.mainsafe文件 2.轨道校正:Radar—>Apply Orbit File,勾上Do not fail 3.热噪声去除:Radar—>Radiometric—>S-1 Thermal Noise 4.辐射定标:Radar—>Radiometric—>Calibrate (只选outp…

day20 飞机大战射击游戏

有飞行物类 飞行 爆炸 的连环画, 飞行的背景图 , 子弹图, 还有游戏开始 暂停 结束 的画面图。 设计一个飞机大战的小游戏, 玩家用鼠标操作hero飞行机, 射出子弹杀死敌机,小蜜蜂。 敌机可以获得分数&…

Vue2集成Echarts实现可视化图表

一、依赖配置 1、引入echarts相关依赖 也可以卸载原有的,重新安装 卸载:npm uninstall echarts --save 安装:npm install echarts4.8.0 --save 引入水球图形依赖 npm install echarts-liquidfill2.0.2 --save 水球图可参考文档&#xff1…

【Python】使用python解析someip报文,以someip格式打印报文

文章目录 1.安装scapy库2.示例 1.安装scapy库 使用 pip 安装 scapy 第三方库,打开 cmd,输入以下命令: pip install scapy出现如图所示,表示安装成功: 2.示例 要解析someip格式报文,需要导入someip模块&a…

rabbitmq的死信队列

目录 成为死信的条件 消息TTL过期 队列达到最大长度 消息被拒 延迟队列 延迟队列使用场景 消息设置 TTL 队列设置 TTL 两者区别 producer 将消息投递到 broker 或者直接到 queue 里了, consumer 从 queue 取出消息 进行消费,但某些时候由…

汇聚产学合力二十载,2023英特尔学术大会在南京开幕

8月16日,以“合聚创 共IN智能时代”为主题的“2023英特尔(中国)学术大会”在南京开幕,邀请专家学者共话科技界前沿趋势,展示科研成果和技术解决方案。本次大会延续了英特尔“为智能而聚能”,推动中国产业界…

ShowMeBug CEO李亚飞受邀出席ArchSummit 全球架构师峰会

2023年7月21-22日,极客邦科技旗下InfoQ中国举办的ArchSummit 全球架构师峰会(深圳站)2023 在深圳顺利召开。本次会议,聚集了国内外数百位架构师专家来分享技术内容,像MySQL之父、科大讯飞涵盖语言大模型、AIGC、可观测…

214、仿真-基于51单片机温度甲醛一氧化碳(co)电机净化报警Proteus仿真设计(程序+Proteus仿真+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一&a…

Spring系列七:声明式事务

🐘声明式事务 和AOP有密切的联系, 是AOP的一个实际的应用. 🐲事务分类简述 ●分类 1.编程式事务: 示意代码, 传统方式 Connection connection JdbcUtils.getConnection(); try { //1.先设置事务不要自动提交 connection.setAutoCommit(false…

【数理知识】向量与基的内积,Matlab 代码验证

序号内容1【数理知识】向量的坐标基表示法,Matlab 代码验证2【数理知识】向量与基的内积,Matlab 代码验证 文章目录 1. 向量与基的内积2. 二维平面向量举例3. 代码验证Ref 1. 向量与基的内积 假设存在一个二维平面内的向量 a ⃗ \vec{a} a &#xff0c…

复旦微FR0触摸原理(1)

传统的家电产品通常使用物理按键来进行操作,但随着科技的不断进步,越来越多的家电产品开始采用触摸屏幕和触摸按键来提供更加智能化和便捷的操作方式。 本篇介绍复旦微FM33FR026的触摸检测原理 TSI 模块使用自电容的 方法来检测触摸行为。 自电容检测的原…

半导体退火那些事(1)

1.半导体退火的原理 半导体材料在晶体生长和制造过程中,由于各种原因会出现缺陷、杂质、位错等结构性缺陷,导致晶格不完整,施加电场后的电导率较低。通过退火处理,可以使材料得到修复,结晶体内部重新排列,…