当前位置: 首页 > web >正文

《计算机视觉度量:从特征描述到深度学习》—图片多模态CLIP,BLIP2,DINOv2特征提取综述

2024年以后大模型开始被大家熟知,同样基于图片的大模型基础框架同时也被大家开始熟知。最早的图片大模型是OpenAI提出的CLIP,他是一套基于图片数据和文本数据对齐的模型。通过文本对图片数据的描述,来对齐和学习图片特征数据。

在使用这种文本和图像数据对齐模型的过程中,就衍生出图生文和文生图的模型。后来被称为多模态大模型。

模型的实现原理是通过提取和训练图像的特征数据,和文本数据。通过强化学习实现两者数据特征的对齐。在对齐的过程中模型对图像特征数据细节也越来越具体,所以在把多模态的基础模型衍生到传统的视觉模型后,很明显提升准确率。最突出的结论是,目前分类,目标检测,分割模型的TOP1都是多模态的基础模型开发的。

2025年4月为止,在近两年的发展过程中,多模态基础模型也百花齐放,目前主流的除了CLIP以外,还有BLIP2和DINOv2等主流的模型。同样多模态基础模型图像数据特征也使用越来广泛,图片数据的特征提取方法如下:

        特征的提取都是基于VIT的基础网络,把图片切割成Patch(补丁),通过大模型的推理获取关于每个Patch的位置和图片数据的描述特征。模型大小和训练方式的不一样,获取的Patch描述维度也不一样。BLIP2单个Patch描述维度是768,CLIP单个Patch的描述维度是512,DINOv2根据模型大小不一样分为384,768,1024三种维度,对应不同大小的模型

BLIP2图片特征数据提取代码:

#添加Pytorch依赖
import torch
from PIL import Image
#添加多态依赖库
from lavis.models import load_model_and_preprocess
#获取GPU
device = torch.device("cuda") if torch.cuda.is_available() else "cpu"
#加载预训练多模态大模型
model, vis_processors, txt_processors = load_model_and_preprocess(name="blip2_feature_extractor", model_type="pretrain", is_eval=True, device=device)
#读取图片数据
image = Image.open("image.bmp").convert("RGB")
#图片数据Patch编码
image_tensor = vis_processors["eval"](image).unsqueeze(0).to(device)
#通过模型获取编码特征
features = model.extract_features(sample, mode="image")#环境依赖pytorch和lavis

CLIP图片特征提取代码:

import torch
from PIL import Image
from transformers import CLIPProcessor, CLIPModel# 加载预训练的CLIP模型和处理器
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")#加载模型到GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)#加载图片
image = Image.open("Image.bmp").convert("RGB")
#对图片进行Patch编码
inputs = processor(images=image, return_tensors="pt").to(device)
with torch.no_grad():#获取图片特征数据features= model.get_image_features(**inputs).cpu().numpy()#环境依赖pytorch和transformers,PIL

DINOv2图片特征提取代码:

import torch
from PIL import Image
from torchvision import transforms#设置模型图片尺寸
image_w = 1120
image_h = 1120
#加载模型
model = torch.hub.load('facebookresearch/dinov2', self.model_name)
model.eval()
#图片数据预处理方法设置
Transform = transforms.Compose([transforms.Resize(size=self.smaller_edge_size,                 interpolation=transforms.InterpolationMode.BICUBIC, antialias=True),transforms.ToTensor(),transforms.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)), # imagenet defaults])#读取图片函数
img = Image.open(img).convert("RGB")
img = img.resize(1120,1120)
#图片预处理
image_tensor = transform(img)
#图片迁移到GPU
image_batch = image_tensor.unsqueeze(0).to(self.device)
#获取图片特征数据
features = model.get_intermediate_layers(image_batch)[0].squeeze()#环境依赖pytorch和transformers,torchvision ,PIL

体验大模型在工业检测的应用方法,DY搜索'军哥讲视觉',或者WX搜索军哥讲视觉',关注留言

http://www.xdnf.cn/news/2734.html

相关文章:

  • CUDA编程 - 测量每个block内线程块的执行时间 - 如何应用到自己的项目中 - clock()
  • 利用 Google Earth Engine 探索江宁区 2010 - 2020 年 EVI 时空变化
  • 51c大模型~合集122
  • 【人工智能】边缘智能的突破:Ollama模型压缩技术与DeepSeek部署实践
  • 锁和事务谁在外层
  • 西门子PLC结构化编程_水处理系统水泵多备多投
  • Linux中的shell脚本练习
  • 在线图书管理系统的结构化需求分析过程讲解
  • 【Git】项目多个分支开发、维护与优化处理 -- 还未实测 记录初
  • PCL实时动态加载显示点云功能以及laslib配置
  • 使用Python在excel里创建柱状图
  • 如何搭建spark yarn 模式的集群集群
  • uniapp利用生命周期函数实现后台常驻示例
  • auto(x) decay copy
  • 一键叠图工具
  • 浏览器存储
  • 服务器文件同步工具有哪些?
  • 经典数仓架构深度解析与演进:从离线处理到新型架构对比
  • 实战篇:在QEMU中编写和调试VHost/Virtio驱动
  • 从数据到决策:如何使用Python进行自动驾驶数据分析
  • 利用Python打印有符号十进制数的二进制原码、反码、补码
  • 问题 ERROR: for jobmanager ‘ContainerConfig‘ 原因及解决
  • ComfyUI 学习笔记:安装篇及模型下载
  • 2025-4-27-C++ 学习 数组(2)
  • springboot项目文件上传到服务器本机,返回访问地址
  • 高级数据库对象全面解析:视图、存储过程与触发器
  • Express.js 框架教程:从入门到精通
  • 【“星瑞” O6 评测】 — llm CPU部署对比高通骁龙CPU
  • T-BOX应用 NXP S32K148控芯片搭配 SD NAND(嵌入式SD卡)存储的完美结合
  • 设计模式(状态模式)