AMD GPU上对比语言图像预训练(CLIP)模型的交互(下)

3. 步骤3:检查图像和文本
将COCO数据集中的8幅样本图像及其文本描述输入模型,并比较相应特征之间的相似性。
import os
import matplotlib.pyplot as plt
from PIL import Image
 
# 使用COCO数据集中的图像及其文本描述
image_urls  = [
    "*/6/8378612_34ab6787ae_z.jpg",
    "*/8456/8033451486_aa38ee006c_z.jpg",
    "*/8344/8221561363_a6042ba9e0_z.jpg",
    "*/4147/5210232105_b22d909ab7_z.jpg",
    "*/3098/2852057907_29f1f35ff7_z.jpg",
    "*/3324/3289158186_155a301760_z.jpg",
    "*/3718/9148767840_a30c2c7dcb_z.jpg",
    "*/8030/7989105762_4ef9e7a03c_z.jpg"[1] [2] 
]
 
text_descriptions = [
    “一只猫站在木地板上”,
“跑道上的飞机”,
“一辆停在树旁的白色卡车”,
“一头大象站在动物园里”,
“窗边桌子上的笔记本电脑”,
“一只长颈鹿站在泥地里”,
“一辆公共汽车停在公共汽车站”,
“市场上有两束香蕉”
]
将八幅图像与其各自的文本描述一起显示。
import requests
from io import BytesIO
images_for_display=[]
images=[]
# 创建新图形
plt.figure(figsize=(12, 6))
size = (400, 320)
# 循环浏览每个URL,并在子图中绘制图像
for i, url1 in enumerate(image_urls):
    # # 从URL获取图像
    response = requests.get(url1)
    image = Image.open(BytesIO(response.content))
    image = image.resize(size)
    # 添加子地块subplot(2行,4列,索引i+1)
    plt.subplot(2, 4, i + 1)
    # 绘图
    plt.imshow(image)
    plt.axis('off')  # 关闭轴标签
    # 添加标题(可选)
    plt.title(f'{text_descriptions[i]}')
    images_for_display.append(image)

    images.append(preprocess(image))

# 调整布局以防止重叠

plt.tight_layout()

# 显示图

plt.show()

    将COCO数据集中的8幅样本图像及其文本,特征显示,如图3-2所示。

 

图3-2 将COCO数据集中的8幅样本图像及其文本,特征显示

4. 步骤4:生成特征

接下来,准备图像和文本输入,并继续执行模型的前向传递。此步骤的结果是提取相应的图像和文本特征。

image_inputs = torch.tensor(np.stack(images)).cuda()

text_tokens = clip.tokenize(["It is " + text_descriptions中的文本]).cuda()

with torch.no_grad():

    image_features = model.encode_image(image_inputs).float()

text_features = model.encode_text(text_tokens).float()

5. 步骤5:计算文本和图像之间的相似性得分

对特征进行归一化,并计算每对的点积。

image_features /= image_features.norm(dim=-1, keepdim=True)

text_features /= text_features.norm(dim=-1, keepdim=True)

similarity_score = text_features.cpu().numpy() @ image_features.cpu().numpy().T

6. 步骤6:可视化文本和图像之间的相似性

def plot_similarity(text_descriptions, similarity_score, images_for_display):

    count = len(text_descriptions)

    fig, ax = plt.subplots(figsize=(18, 15))

    im = ax.imshow(similarity_score, cmap=plt.cm.YlOrRd)

    plt.colorbar(im, ax=ax)

    # y轴刻度:文本描述

    ax.set_yticks(np.arange(count))

    ax.set_yticklabels(text_descriptions, fontsize=12)

    ax.set_xticklabels([])

    ax.xaxis.set_visible(False)

    for i, image in enumerate(images_for_display):

        ax.imshow(image, extent=(i - 0.5, i + 0.5, -1.6, -0.6), origin="lower")

    for x in range(similarity_score.shape[1]):

        for y in range(similarity_score.shape[0]):

            ax.text(x, y, f"{similarity_score[y, x]:.2f}", ha="center", va="center", size=10)

    ax.spines[["left", "top", "right", "bottom"]].set_visible(False)

    # 设置x和y轴的限制

    ax.set_xlim([-0.5, count - 0.5])

    ax.set_ylim([count + 0.5, -2])

    # 为布局添加标题

    ax.set_title("用CLIP计算文本和图像相似性得分", size=14)

    plt.show()

plot_similarity(text_descriptions, similarity_score, images_for_display)

    使用CLIP计算文本和图像相似性得分,如图3-3所示。

图3-3 使用CLIP计算文本和图像相似性得分

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AMD GPU上对比语言图像预训练(CLIP)模型的交互(上)

AMD GPU上对比语言图像预训练(CLIP)模型的交互 3.1.1 介绍 对比语言图像预训练(CLIP)是一种连接视觉和自然语言的多模态深度学习模型。它是在OpenAI的论文从自然语言监督中学习可转移的视觉模型(2021)中介绍的,并在大量(4亿)图像字幕对的网络抓取数据上进行了对比训练…

推荐关注《AI芯片开发核心技术详解》(1)、《智能汽车传感器:原理设计应用》(2)、《TVM编译器原理与实践》(3)、《LLVM编译器原理与实践》(4),谢谢

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

惊!Docker Desktop竟然不会自动释放磁盘空间,C盘告急!

Docker Desktop竟然不会自动释放磁盘占用 > > 操作系统:Windows 11 家庭中文版 (23H2,22631.4037)16GB > > Docker Desktop 版本:v4.34.3 > 1. 缘起 docker pull docker-0.unsee.tech/savatar101/omniparse:0.1 拉取镜像,某个片段卡住,我主动取消了改操…

深入掌握FastAPI与OpenAPI规范的高级适配技巧

title: 深入掌握FastAPI与OpenAPI规范的高级适配技巧 date: 2025/03/30 01:16:11 updated: 2025/03/30 01:16:11 author: cmdragon excerpt: OpenAPI规范是RESTful API的标准描述格式,FastAPI通过自动化Schema生成机制将Pydantic模型和路径操作转换为标准OpenAPI文档,实现实…

‌Docker Desktop启动后自动加载Ubuntu WSL,docker-desktop-data WSL消失问题解析

‌Docker Desktop启动后自动加载Ubuntu WSL,docker-desktop-data WSL消失问题解析操作系统:Windows 11 家庭中文版 (23H2,22631.4037)16GB Docker Desktop 版本:v4.34.3如果赶时间,可以直接看结论。 Docker Desktop用的频次不是很高,记得之前安装完,用wsl --list -v命…

Prometheus的标签管理

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.标签概述1.什么是标签2.标签主要有两种表现形式3.Prometheus对数据处理的流程二.relabel_configs修改target标签案例1.为targets自定义打标签案例2.使用target_label新增标签2.relabel_configs替换标签…

极速启动,SAE 弹性加速全面解读

本文将深入探讨 SAE 如何通过镜像加速、应用启动加速、CPU Burst 等核心技术手段,实现极速启动与高效运行,帮助用户构建更加稳定、高效的云端应用。作者:牛通(奇卫) 在当今快速发展的云计算时代,业务的稳定性和响应速度成为了企业竞争力的重要标志。无论是应对突发流量还…

Redis缓存穿透、击穿与雪崩:问题分析与解决方案

在现代高并发系统中,Redis作为缓存层被广泛使用,其高效的读写性能为系统提供了强大的支持。然而,在使用Redis缓存的过程中,缓存穿透、击穿和雪崩等问题可能会对系统造成严重影响。本文将围绕这些问题展开讨论,并结合Redis的特性提出具体的解决方案。 一、Redis缓存穿透:如…

java - 使用OpenCV + Tesseract识别图片验证码

java - 使用OpenCV + Tesseract识别图片验证码tesseract tesseract-ocr/tesseract: 是一个开源的光学字符识别(OCR)引擎,适用于从图像中提取和识别文本。特点是可以识别多种语言,具有较高的识别准确率,并且支持命令行和API调用。项目地址:https://gitcode.com/gh_mirror…

【笔记】力扣 2316. 统计无向图中无法互相到达点对数——并查集, + 一种巧妙的求两两相乘之和的方法

2316. 统计无向图中无法互相到达点对数 中等 提示 给你一个整数 n ,表示一张 无向图 中有 n 个节点,编号为 0 到 n - 1 。同时给你一个二维整数数组 edges ,其中 edges[i] = [ai, bi] 表示节点 ai 和 bi 之间有一条 无向 边。 请你返回 无法互相到达 的不同 点对数目 。 示例…

APT Package Manager

from pixivWhat is APT? Anatomy of the Package System(软件包系统剖析), is the Debian packaging system, 用于管理软件包,可以将其想象成命令行版的App Store.Debian 是一个自由且开源的 Linux 发行版,Ubuntu 是基于 Debian 构建的 Linux 发行版。它由 Canonical 公司…

22.1-任务的状态 第22章-FreeRTOS项目实战--任务的创建与执行 FreeRTOS 项目 FreeRTOS学习笔记 FreeRTOS移植 FreeRTOS开源项目 FreeRTOS面试题汇

这个是全网最详细的STM32项目教学视频。 第一篇在这里: 视频在这里: https://www.bilibili.com/video/BV16x4y1M7EN/?share_source=copy_web&vd_source=f5d5850ab773377dff308188468fbc77 STM32智能小车V3-STM32入门教程-openmv与STM32循迹小车-stm32f103c8t6-电赛 嵌入式…