基于DINOv2的图像相似性比对(含代码和模型数据)

目录

  • 一、概述
  • 二、实践
    • 2.1 安装环境
    • 2.2 示例代码

一、概述

2023年4月份,Meta发布了DINOv2预训练模型。DINOv2属于一种自监督学习算法,相比于以往的自监督技术有了显著改进,并达到了与弱监督算法相当的性能。

DINOv2算法可以在任何图像数据集上进行训练,无需任何关联的元数据,可以视为能够从给定的所有图像中学习,而不仅仅是那些包含特定文本或标题的图像。

这次发布的DINOv2预训练模型是在没有监督的情况下对1.42亿张精心挑选的图像上进行自监督训练得到的,生成的特征无需任何微调即可使用,应用领域包括图像深度估计、语义分割、实例检索等。

考虑到DINOv2强大的图像特征提取能力,下面简单介绍下如何使用DINOv2预训练模型进行图像相似度计算。本文测试平台为Ubuntu20.04。

二、实践

2.1 安装环境

DINOv2是使用pytorch进行训练的,为了能够直接使用DINOv2预训练模型,需要先安装Pytorch。具体安装方法参考Pytorch官网。

接下来安装DINOv2相关依赖:

pip install transformers -i https://mirror.baidu.com/pypi/simple

最后下载dinov2提供的预训练模型,需要自行前往HuggingFace网站上查找dinov2模型进行下载。本文使用dinov2-base模型,对应下载下面三个文件。
在这里插入图片描述
下载完成后将上述三个文件放置在本地一个名为dinov2_base的文件夹中即可。

如果因网络原因无法下载,本文文末提供了完整版代码和模型链接,可以直接下载使用。

2.2 示例代码

代码如下:

from transformers import AutoImageProcessor, AutoModel
from PIL import Image
import torch.nn as nn
import torch

# 定义环境
device = torch.device('cuda' if torch.cuda.is_available() else "cpu")

# 加载dinov2模型
model_folder = './dinov2_base'
processor = AutoImageProcessor.from_pretrained(model_folder)
model = AutoModel.from_pretrained(model_folder).to(device)

# 提取第1张图片特征
image1 = Image.open('img1.jpg')
with torch.no_grad():
    inputs1 = processor(images=image1, return_tensors="pt").to(device)
    outputs1 = model(**inputs1)
    image_features1 = outputs1.last_hidden_state
    image_features1 = image_features1.mean(dim=1)

# 提取第2张图片特征
image2 = Image.open('img2.jpg')
with torch.no_grad():
    inputs2 = processor(images=image2, return_tensors="pt").to(device)
    outputs2 = model(**inputs2)
    image_features2 = outputs2.last_hidden_state
    image_features2 = image_features2.mean(dim=1)
    
# 提取第3张图片特征
image3 = Image.open('img3.jpg')
with torch.no_grad():
    inputs3 = processor(images=image3, return_tensors="pt").to(device)
    outputs3 = model(**inputs3)
    image_features3 = outputs3.last_hidden_state
    image_features3 = image_features3.mean(dim=1)

# 计算相似度
cos = nn.CosineSimilarity(dim=0)
sim12 = cos(image_features1[0],image_features2[0]).item()
sim12 = (sim12+1)/2
print('img1和img2的相似度值: ', sim12)

sim13 = cos(image_features1[0],image_features3[0]).item()
sim13 = (sim13+1)/2
print('img1和img3的相似度值: ', sim13)

上述代码分别对三张图片使用dinov2模型进行了特征向量提取(768维),最后使用cosine函数来计算特征向量之间的相似度。三张图像如下:
在这里插入图片描述

img1和img2的相似度值:  0.8779885470867157
img1和img3的相似度值:  0.6644228100776672

本文完整代码+模型+测试图片的下载地址

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式开发行业会不会也变成java行业?

今日话题,嵌入式开发行业会不会也变成java行业?关于嵌入式行业的未来,与一些人的担忧不同,它并不会内卷化,而是具有相对稳定性的领域。嵌入式开发在制造业等重要第二产业中扮演着关键角色,这些领域的稳定性…

什么是AI数字人互动大屏?

AI数字人结合互动大屏凭借其智能化、互动化、信息化等优势为企业服务、展馆展厅、数字会议带来全新的交互体验和数字化升级。有效为企业提高了沟通效率,节省人力成本,提升服务温度,满足技术创新。 一.数字人互动对话流程: 1.文本转…

【MAC】M2 安装docker 与 mysql

一、docker下载地址 下载地址 二、安装docker完成 罗列一下docker常用命令 # 查看docker版本 docker --version# 拉取镜像 docker pull 镜像名# 查看当前所有镜像 docker images# 查看运行中的容器 docker ps -a docker ps grep| 镜像名#镜像启动操作: sudo dock…

魔众文库系统v5.8.0版本发布:水印、分类与移动端升级,打造更高效文档管理体验

魔众文库系统迎来了全新的v5.8.0版本更新!此次更新不仅对水印功能进行了升级,还新增了辅助分类样式,同时优化了移动端体验。让我们一起来看看这次更新的亮点吧! 一、水印功能全新升级 在v5.8.0版本中,魔众文库系统的…

Addressables资源如何进行完整性校验

1)Addressables资源如何进行完整性校验 2)使用SpriteAtlas时出现冗余精灵,如何指定用哪一个图集 3)anim文件进行精度处理后某些信息丢失 这是第365篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了…

STM32----HAL库函数

1.STM32系统框架 1.1 Cortex-M内核&芯片 1.2 F1系统框架 4个主动单元4个被动单元 AHB:高级高性能总线 APH:高级外围总线 其中 1 为 主动单元 , 2为被动单元 总线时钟频率&…

轻量化压缩之【剪枝】

在深度学习领域,剪枝是一种常用的模型轻量化技术,主要是通过移除神经网络中被认为不重要的连接(即权重)来减少模型的大小和计算量。移除的连接可以是单独的权重(非结构化剪枝),也可以是整个神经…

深度学习模型轻量化方法介绍

深度学习模型轻量化是指通过一系列技术手段减少模型的大小和计算需求,使其能够在资源有限的环境中(如移动设备、嵌入式系统)运行。下面是一些常见的模型轻量化方法: 模型剪枝(Pruning): 描述: 模型剪枝涉及…

【智能家居远程控制系统】ESP8266连接阿里云(一)

系列文章目录 第一章 阿里云物联网平台搭建 第二章 订阅与发布MQTT消息 第三章 为ESP8266-NodeMCU搭建ArduinoIDE环境 第四章 ESP8266连接阿里云 第五章 阿里云平台云产品流转 第六章 使用Aruino与云产品流转实现远程控制ESP8266 文章目录 目录 系列文章目录 前言 一…

Python 面向对象(1)

软件编程的实质是将我们的思维转变成计算机能够识别语言的一个过程。 目录 面向过程 面向对象 理解面向对象 面向过程: 面向对象: 面向对象的特点 完成需求时: 类的设计 类与对象的关系 创建类 设计类 类的介绍 格式 创建类实例…

【离散数学】——期末刷题题库(树其一)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

【Midjourney中文目录】Midjourney产品使用说明

Midjourney使用说明 Midjourney是一款开发出来的智能绘画工具,它利用先进的AI技术为用户提供快速、高效、多样化的绘画体验。 Midjourney软件以其独特的特色和功能赢得了广大用户的喜爱。首先,它能够快速生成AI制图,只需输入关键字&#xf…

无懈可击的防泄密之旅:迅软DSE在民营银行的成功实践

客户简要介绍 某股份有限公司主体是中部地区的民营银行,由其母公司联合9家知名民营企业共同发起设立。正式开业于2016年,紧紧围绕目标产业生态圈和消费金融,着力打造产业银行、便捷银行、数字银行、财富管理银行为一体的BEST银行&#xff0c…

C#深拷贝效率对比

对于浅拷贝和深拷贝,前面的文章已经说明了。 C#浅拷贝和深拷贝数据-CSDN博客 本篇说一下,深拷贝的效率问题,效率一直是程序追求的,效率越高肯定越好,有时候功能是实现了,但是运行以及处理数据的效率非常低…

【算法系列篇】递归、搜索和回溯(四)

文章目录 前言什么是决策树1. 全排列1.1 题目要求1.2 做题思路1.3 代码实现 2. 子集2.1 题目要求2.2 做题思路2.3 代码实现 3. 找出所有子集的异或总和再求和3.1 题目要求3.2 做题思路3.3 代码实现 4. 全排列II4.1 题目要求4.2 做题思路4.3 代码实现 前言 前面我们通过几个题目…

idea恢复默认出厂设置

idea恢复默认出厂设置 1、IDEA 2021 之后, 在顶部工具栏,选择 File | Manage IDE Settings | Restore Default Settings. 2、或者双击shift搜索Restore Default settings然后点击restore and restart

企业微信无法给Gmail发邮件问题

问题说明 在使用企业微信给国外客户的Gmail邮箱发信件的时候,邮件一直被退信,退信内容如下: 发件人(*******.cn)域名的DNS记录未设置或设置错误导致对方拒收此邮件。 host gmail-smtp-in.l.google.com[142.251.175.2…

左右按钮实现滚动轮播Demo(js手搓版本)

提示:适用于当放置按钮空间区域有限,通过左右箭头实现有限空间放置更多的按钮的情形,自适应布局的简单Demo支持二次开发和改造 文章目录 效果图Demo源码解释说明总结 效果图 在该区域存在五个按钮,点击左边按钮向左边滚动&#xf…

查看git的帮助信息

说明 在cmd窗口、或者git Bash shell下执行git --help或者git -h命令&#xff0c;可以查看git的帮助信息。 执行git <command> --help命令可以查看某个命令的帮助信息&#xff0c;其中<command>表示某个具体的命令。 示例1&#xff1a;在git Bash shell下运行git…

新能源线束电接头气密测试快速工装

线束气密测试是新能源车生产过程中必须要测试流程&#xff0c;包括常规的电缆测试、电接头测试、接线端子测试等。需要用到相应的快速接头来密封连接线束一端&#xff0c;进行充气或封堵&#xff0c;并连接上检漏仪等相关设备&#xff0c;检查产品密封防水合格性。 线束快速密封…