文章目录

  • 1 前言
  • 2 图像检索介绍
    • (1) 无监督图像检索
    • (2) 有监督图像检索
  • 3 图像检索步骤
  • 4 应用实例
  • 5 最后

1 前言

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


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 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, 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 最后

大数据毕业设计 图像检索系统设计与实现相关推荐

  1. 大数据毕业设计 - 选题推荐(一)

    文章目录 1 开题指导 1.1 起因 1.2 如何避坑(重中之重) 1.3 为什么这么说呢? 1.4 难度把控 1.5 题目名称 1.6 最后 选题建议 3 最后 毕设帮助,开题指导,资料分享,疑问解 ...

  2. 大数据血缘分析系统设计(三)

    数据级别血缘关系介绍 血缘关系数据的收集 数据ID的标识 数据流转的收集 SQL MapReduce Spark 其他 血缘关系图的可视化 在前面一篇<大数据血缘分析系统设计(二)>中,对 ...

  3. 分享思路:Python+Spark招聘爬虫可视化系统 招聘数据分析 Hadoop职位可视化 大数据毕业设计 51job数据分析(可选加推荐算法)

    开发技术 Hadoop.HDFS.Spark.SpringBoot.echarts.PySpark.Python.MySQL 创新点 大数据架构.爬虫.数据可视化 啰里啰嗦 适合大数据毕业设计.数据分 ...

  4. python大数据毕业设计题目100例

    文章目录 0 前言 1 python - 算法类 毕设选题 2 python - 数据挖掘 毕设选题 3 python - 大数据处理.云计算.区块链 毕设选题 4 python - 网络安全 毕设选 ...

  5. 大数据毕业设计_计算机专业如何才能更好的完成毕业设计呢?

    随着互联网技术的发展,计算机专业也是经历了不同层次的发展,通过最近与不同学校的毕业生进行了解,很多学校都对计算机专业进行了升级,重点引入了像人工智能专业.大数据专业以及云计算专业等.只有我们在大学中打 ...

  6. 【源码开发分享】计算机毕业设计之Python+Spark+Scrapy新闻推荐系统 新闻大数据 新闻情感分析 新闻文本分类 新闻数据分析 新闻爬虫可视化 大数据毕业设计

    开发技术 Hadoop.Spark.SparkSQL.Python.Scrapy爬虫框架.MySQL.协同过滤算法(双算法,基于用户.基于物品全实现).阿里云短信.百度AI人工智能识别.支付宝沙箱支付 ...

  7. 大数据毕业设计题目汇总 python毕设选题推荐

    文章目录 0 前言 1 如何选题 1.1 选题技巧:如何避坑(重中之重) 1.2 为什么这么说呢? 1.3 难度把控 1.4 题目名称 1.5 最后 2 大数据 - 选题推荐 2.1 大数据挖掘类 2 ...

  8. 大数据毕业设计选题推荐(二)

    文章目录 0 前言 1 大数据相关题目 2 开题指导 2.1 起因 2.2 如何避坑(重中之重) 2.3 为什么这么说呢? 2.4 难度把控 2.5 题目名称 3 最后 0 前言 这是学长亲手整理的, ...

  9. 大数据毕业设计题目推荐 毕设选题大全

    文章目录 0 前言 1 如何选题 1.1 选题技巧:如何避坑(重中之重) 1.2 为什么这么说呢? 1.3 难度把控 1.4 题目名称 1.5 最后 2 大数据 - 选题推荐 2.1 大数据挖掘类 2 ...

最新文章

  1. mongoose笔记
  2. linux shell脚本 传参,在bash shell脚本中传播所有参数
  3. 大规模 Node.js 网关架构设计与工程实践
  4. One order deletion tool
  5. 卡方分布分位数_卡方检验和精确概率法及两两比较
  6. 享受阅读的十二个好习惯
  7. linux压缩和解压缩命令大全
  8. JavaScript高级程序设计(2)在HTML中使用JavaScript
  9. python实现qq登录_python实现QQ批量登录功能
  10. SharedObject使用:在FluorineFx.net与Flex中使用共享对象维护在线用户列表实例
  11. 【转载】Altera官方资料整理
  12. 如何用python的turtle画五角星_使用Python的turtle模块画五角星
  13. MetaSploit攻击实例讲解------终端下PostgreSQL数据库的使用(包括kali linux 2016.2(rolling) 和 BT5)...
  14. Codeforces 39H - Multiplication Table(进制转换)
  15. 为什么我不建议你轻易入上位机的“坑”?
  16. thinkphp 启动worker
  17. 【MATLAB】动态绘制曲线图(二维曲线)
  18. harbor企业级镜像仓库搭建
  19. 乙酰六肽-49/Delisens/Acetyl Hexapeptide-49
  20. 出现RPC服务器不可用的解决方法

热门文章

  1. 跟着bob学win10 ump 学习笔记: lesson57 Weather
  2. 三面阿里失败,幸获阿里P8大牛指点,奋战三个月30*14薪入职字节
  3. raid5数据丢失后应该怎么做才能提高数据恢复成功率?
  4. 每日一书丨Rootkit和Bootkit:现代恶意软件逆向分析和下一代威胁
  5. 协同办公管理软件都需要有哪些功能?
  6. KUKA Simpro 3.0.3-第5弹(机器人关节轴活动范围监测)
  7. 什么是教育邮箱?企业邮箱注册流程是什么样的?
  8. 勒索病毒未死,新病毒或又要来袭
  9. PT生存法则(不断补充中)
  10. mysql的group语句_MySQL中distinct与group by语句的一些比较及用法讲解