基于深度学习的图像检索 image retrieval based on deep learning (code ,代码)

深度学习与计算机视觉(11)_基于deep learning的快速图像检索系统 本系统是基于CVPR2015的论文《Deep Learning of Binary Hash Codes for Fast Image Retrieval》实现的海量数据下的基于内容图片检索系统,250w图片下,对于给定图片,检索top 1000相似时间约为1s,其基本背景和原理会在下文提到。 2.基本问题与技术 大家都知道,基于内容的图像检索系统是根据图像的内容,在已有图像集中找到最『相近』的图片。而这类系统的 阅读详情

本次代码分享主要是用的caffe框架,至于caffe框架的安装过程不再说明。代码修改自“cross weights”的一篇2016年的文章,但是名字忘记了,谁记得,提醒我下。

一、环境要求

        1、python

        2、gcc

        3、opencv

        4、一些图像数集合,比如holiday、oxford、paris不过这些都是标准数据集,你也可以用到自己的系统上。

        5、完整代码会之后放在github上。

二、使用说明

        1、首先将整个图库进行特征提取

            流程:图像->VGG 最后一个卷积层得到 H*W*512维度的tensor利用*.npy格式进行保存。对于每张图像都需要这么处理,存储每个图像的“特征”。

        

# Copyright 2015, Yahoo Inc.

# Licensed under the terms of the Apache License, Version 2.0. See the LICENSE file associated with the project for terms.

import _init_paths

import os

import caffe

import numpy as np

from PIL import Image

import scipy



###################################

# Feature Extraction

###################################




##################################

#这个函数用于打开图像并且转换为RGB,其中img1=·~~~~~~~这一行可以用于改变图像尺寸。

##################################



def load_img(path):

    try:

        img = Image.open(path)

        rgb_img = Image.new("RGB",img.size)

        rgb_img.paste(img)

        return rgb_img

    except:

        return None


#################################

#这个函数用于转换输入图像的数据量,转换为32位浮点数,同时减去3个通道上各自的均值,将数据进行通道转换。

#################################


def format_img_for_vgg(img):

    d = np.array(img, dtype=np.float32)

    d = d[:,:,::-1]

    # Subtract mean pixel values of VGG training set

    d -= np.array((104.00698793,116.66876762,122.67891434))

    return d.transpose((2,0,1))


#################################

#这个函数用于特征提取,net.blob中的net代表了我们初始化完成后的网络,blob代表数据块

#################################



def extract_raw_features(net, layer, d):

    """

    Extract raw features for a single image.

    """

    # Shape for input (data blob is N x C x H x W)

    net.blobs['data'].reshape(1, *d.shape)                    #这个reshape表示将网络的入口修改为适合我们图像尺寸大小的shape

    net.blobs['data'].data[...] = d                           #d就是我们数据,将数据传入网络中

    # run net and take argmax for prediction

    net.forward()                                             #这个是让网络开始计算

    return net.blobs[layer].data[0]                           #将网络的计算结果输出(定义layer就能得到对应的层的输出)





################################

#下面这两个函数先不用管

################################


def reshape(image):

    mu=np.array((104.00698793,116.66876762,122.67891434))

    transformer=caffe.io.Transformer({'data':net.blobs['data'].data.shape})

    transformer.set_transpose('data',(2,0,1))

    transformer.set_mean('data',mu)

    transformer.set_raw_scale('data',255)

    #transformer.set_channel_swap('data',(2,1,0))


    net.blobs['data'].reshape(10,

                               3,

                                224,224)


    transformed_image=transformer.preprocess('data',image)

    print transformed_image.shape

    return transformed_image


def extract_raw_features_fc6(net, layer, d):

   

    #net.blobs['data'].reshape(1, *d.shape)

    # Shape for input (data blob is N x C x H x W)

   

    net.blobs['data'].data[...]=d

    net.forward()

    return net.blobs[layer].data[0]




#################################

#这是python的主函数入口,parser.add_argument代表我们手动在控制台需要输入的参数,或者提前定义好的一些参数,我们的网络的prototxt和caffemodel的路径也在参数中定义

################################



if __name__ == '__main__':

    from argparse import ArgumentParser

    parser = ArgumentParser()

    parser.add_argument('--images', dest='images', type=str, nargs='+', required=True, help='glob pattern to image data')

    parser.add_argument('--layer', dest='layer', type=str, default='fc6', help='model layer to extract')

    parser.add_argument('--prototxt', dest='prototxt', type=str, default='vgg/VGG_ILSVRC_16_fc6.prototxt', help='path to prototxt')

    parser.add_argument('--caffemodel', dest='caffemodel', type=str, default='vgg/VGG_ILSVRC_16_layers.caffemodel', help='path to model params')

    parser.add_argument('--out', dest='out', type=str, default='', help='path to save output')

    args = parser.parse_args()

##################################

#这个net=~~~~~~表示将我们的网络进行提前初始化,方便后面调用

####################################

    net = caffe.Net(args.prototxt, args.caffemodel, caffe.TEST)


    if not os.path.exists(args.out):

        os.makedirs(args.out)                         #这里是检测我们的数据来源的路径是否正确


    for path in args.images:

        #img = load_img(path)

        img=image=caffe.io.load_image(path)           #加载图像


        # Skip if the image failed to load

        if img is None:

            print path

            continue


        d = format_img_for_vgg(img)                   #对图像加载并且网络继续提取特征

        #d=reshape(img)                              

        X = extract_raw_features_fc6(net, args.layer, d)      #这后面的两句,是我采用的另外的方式进行  ,修改层名,就会从不同的层抽取特征


        filename = os.path.splitext(os.path.basename(path))[0]

        np.save(os.path.join(args.out, filename), X)            #将得到的结果采用*.npy的数据格式保存下来W*H*C,每一个图片对应一个*.npy

        2、特征进一步计算,这里有很多的文章可以参考,但是我们介绍一种最简单的,就是把H*W*512 变成1*1*512,也就是对于每个H*W进行了sum-pooling也就是求和,这里也可以有别的一些加权方法,很多论文,主要就在这一步做文章。

        这里就一句话:

        def sum-pooling(X): #这里的X就是刚才512*W*H

                return X.sum(axis=1,2)

        3、最后,就是采用欧式距离,和我们求平面中两个点的距离一样。

        distance=(X1-X2)**2

        这里的X需要在计算距离之前进行normlzation。然后才可以计算距离。这样的化,距离排个倒叙就能得到了我们最后的检索结果。

视觉特征-自监督-同源不同crop视图一致性【2023-04】:DINOv2(无监督学习鲁棒视觉特征)【12 亿张互不重复的图像】【判别式自监督方法】【交叉熵损失+iBOT损失】 近期,自然语言处理领域在大量数据上进行模型 Pretraining 取得的突破,为计算机视觉中类似Foundation Model 的发展开辟了道路。这些模型能够生成通用视觉特征,即无需微调即可跨图像分布和任务发挥作用的特征,从而大幅简化图像在任何系统中的使用。本研究表明,现有的 Pretraining 方法,尤其是自监督方法,如果在来自多样化来源的充足精选数据上进行训练,便能够产生此类特征。我们重新审视了现有方法,并结合不同技术,从数据规模和模型规模两方面扩展我们的 Pretraining。 阅读详情

相关推荐

VLA-2025-03:GR00T N1【骨架:Eagle-2;端到端双系统VLA:S2 VLM+S1 DiT+FM;数据:单/双臂+人形,机器人+人类+仿真+神经共592.9M帧/8375.7小时】

通用机器人需要多功能的躯体和智能的头脑。近年来,人形机器人的发展在构建人类世界中通用自主性的硬件平台方面展现出巨大潜力。一个基于海量多样化数据源训练的机器人基础模型,对于使机器人能够推理新情况、稳健应对现实世界的多变性以及快速学习新任务至关重要。为此,我们推出了GR00T N1,一个面向人形机器人的开放基础模型。GR00T N1是一个具有双系统架构的视觉‑语言‑动作(VLA)模型。视觉语言模块(系统2)通过视觉和语言指令来解读环境。随后的扩散Transformer模块(系统1)实时生成流畅的电机动作。

u013250861的博客 283

图像检索之Neural Codes for Image Retrieval

Neural Codes for Image Retrieval(基于神经网络的图像检索) 论文原文:http://arxiv.org/abs/1404.1777 github源码链接:https://github.com/UCAS-Vincent/Spoc 摘要: 已经表明,在大型卷积神经...

文森特的博客 4230

机器学习笔记 - 结合深度学习的基于内容的图像实例检索 相关数据集/网络模型概览

常用的数据集。UKBench (UKB):由10200张物体图像组成。该数据集有2550组图像,每组有四张来自不同视角或照明条件的同一物体的图像,可以视为一种类级监督信息。所有图像都可以用作查询。Holidays:由1491张从个人节日相册中收集的图像组成。大多数图像都与场景相关。该数据集包括500组相似图像,每组具有单个查询图像。数据集还为每个图像提供感兴趣区域的位置信息。Oxford-5k:由11栋牛津建筑的5062幅图像组成。每个建筑都与五个手绘边界框查询相关联。

学以致用 知行合一 1648

在图像检索任务下,使用VGG16的全连接层fc7计算holidays数据集的mAP

本文属原创,转载须标明:https://blog.youkuaiyun.com/saw009/article/details/91788671 ❶.简介 关键词:图像检索;VGG16;holidays数据集;mAP 运行环境:Windows10,MATLAB R2018b 注:本文重点关注如何计算holidays数据集的mAP,因此,不对其他部分做详细解释。 ❷.步骤预览 1.搭建环境 2.特征...

saw009的博客 4645

深度学习图像搜索与识别

深度学习图像搜索与识别

jacke121的专栏 3416

基于深度学习的图像检索系统 (1).pdf

基于深度学习的图像检索系统 (1).pdf

Bit-Scalable Deep Hashing with Regularized Similarity Learning for Image Retrieval and Person Re-ide

摘要 在图像检索中,提取图像特征和生成hash function是两个关键的步骤。之前大部分深度学习的方法这两个步骤是相互分开的,同时输出的hash code的长度是预先设置好的。这样就会忽略掉不同长度的hash code分别代表的意义,同时也限制整个model的灵活性(不同长度的hash code 训练不同的model)。为解决上述两个问题,paper中提出了一种可以生成bit-scalabl...

yinsuiqiang5136的博客 1185

Ansys Zemax实战:5步搞定多模光纤耦合效率优化(附IMAE操作数详解)

本文详细介绍了使用Ansys Zemax优化多模光纤耦合效率的5个关键步骤,包括几何图像分析设置、IMAE操作数应用及偏振效应处理。通过实战案例解析,帮助工程师快速掌握光纤耦合效率提升技巧,特别针对IMAE操作数的配置保存机制和菲涅尔损耗控制进行深度讲解。

potato的博客 690

Python深度学习:从入门到实战

亲爱的读者,欢迎您翻开这本书。我们即将探索的,是深度学习的宇宙——一个由数据、算法与算力构筑的奇妙世界。它既是严谨的科学,也是创造的艺术,更是一条通往未来智慧的修行之路。本书将带您从最基础的数学原理出发,亲手搭建神经网络,驾驭Transformer等前沿模型,最终将智慧转化为现实世界的价值。请放下畏惧,保持好奇。这不仅是一次知识的学习,更是一场思维的远行。来,随我一起,开启这趟非凡的旅程吧。

weixin_45747731的博客 449

基于java的汉服商城管理系统设计与实现的详细项目实例

本文介绍了一个基于Java的汉服商城管理系统设计与实现项目。该项目采用三层架构设计,包含用户模块、商品管理、订单处理、支付结算等核心功能,支持多角色权限控制和响应式前端界面。 系统创新点包括: 专业化的汉服商品管理,支持多规格属性组合 高并发订单处理机制,确保库存实时同步 个性化智能推荐算法提升用户体验 细粒度权限控制保障系统安全 项目采用SpringBoot+MyBatis技术栈,前端使用React框架实现跨设备兼容。数据库设计包含用户表、商品表、订单表等10个核心表,通过事务管理确保数据一致性。 系统解

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 802

Python实战:用MNE-Python从脑电数据中提取P300成分(附完整代码)

本文提供了一份使用MNE-Python从脑电数据中提取P300成分的完整实战指南。通过详细的代码示例,系统讲解了从环境搭建、数据加载、预处理(滤波、分段、伪迹剔除)到P300波形提取、可视化与参数量化的全流程。重点介绍了如何利用零相位滤波和叠加平均技术,从EEG信号中精准分离出反映认知加工的P300事件相关电位,适用于脑机接口与认知神经科学研究。

weixin_29240343的博客 338

专业 英语

计算机、数学、机械等专业的专业英语词汇

Edward2022的博客 2942

RK3568—基于GM8775C的MIPI转双通道LVDS屏幕调试

Rockchip RK3568 原生显示接口不支持双通道LVDS屏幕的数据输出,因此需要借助显示转换芯片才能实现双通道LVDS屏幕的驱动。本文介绍使用GM8775C芯片方案,在 RK3568 平台实现单路 MIPI DSI 信号输出来驱动双通道LVDS显示屏。 关于GM8775C GM8775C 型 DSI 转双通道 LVDS 发送器产品主要实现将 MIPI DSI 转单/双通道 LVDS功能,MIPI 支持 1/2/3/4 通道可选,每通道最高支持 1Gbps 速率,最大支持 4Gbps 速率。LV.

Industio_优快云的博客 1万+

AI4EDA / AI4Design 完整研究报告:全球论文、项目、机构与产业路线

AI4EDA 与 AI4Design 的核心变化,不是“让大模型写 Verilog”这么简单,而是把芯片工程中的规格、代码、脚本、日志、波形、STA report、formal collateral、layout image、PPA 指标、制造计算等对象统一纳入可学习、可检索、可验证、可迭代的闭环。NVIDIA 的论文谱系清晰呈现了这条路径:先建立可执行评测,再做领域模型和数据工程,然后进入工具反馈、多智能体、长上下文、verifier-guided skill evolution。

weixin_41468466的博客 923

高频面试题-项目介绍篇

聊聊如何介绍项目经历。

m0_73359763的博客 1908

OCR文字识别基础

ocr文字识别

m0_47405013的博客 1755

人工智能专业项目实践-基于深度学习的图像检索

毕业设计-基于深度学习的图像检索研究:深度学习是机器学习中一种对数据进行表征学习的方法,是机器学习的子集,相对于浅层学习具有更多的非线性操作的层级数,旨在利用多个变换阶段分层,组合低层特征形成更加抽象的高层表示,由此将图像像素级信息逐层提取为抽象的语义概念,加速图像内容理解。基于内容的图像检索系统利用深度学习,通过底层识别图像边缘,多层网络识别特定形状,最终得到层次化的特征表示,从而使图像分类、识别和检索的性能显著提升。由于这种深层体系结构自动地从数据的多层抽象中学习特征,尤其是作为计算机视觉领域最成功的一

Hai_Lang_IT的博客 4710

2、实时DSP编程技术及其应用

本文详细介绍了实时数字信号处理(DSP)技术及其应用,涵盖三种流行的浮点DSP处理器系列的特点、开发工具和优化方法。通过具体的应用实例,如语音压缩、音乐信号处理和雷达信号处理,展示了如何在实际项目中应用这些技术,帮助工程师提高系统的性能和可靠性。

cicd6pipeline的博客 837

大数据毕业设计 深度学习图像检索算法研究与实现 - python

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是🚩python图像检索系统设计与实现🥇学长这里给一个题目综合评分(每项满分5分)难度系数:3分工作量:3分创新点:4分图像检索:是从一堆图片中找到与待匹配的图像相似的图片,就是以图找图。

caxiou的博客 1160

AMBA-CHI协议详解(十)

该规范提供了一个Request Retry(请求重试)机制,确保当请求到达一个Completer 时,它要么被接受,要么被给予一个RetryAck响应,以防止阻塞REQ通道。

Crazzy_M的博客 984

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

上一篇: DensePose:Dense Human Pose Estimation In The Wild 论文阅读笔记
下一篇: Beyond Tree Structure Models: A New Occlusion Aware Graphical Model for Human Pose Estimation论文小摘
Jie Ou
博客等级 码龄10年 176粉丝 111原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值