测试CLIP zero-shot learning

简介: CLIP是OpenAI的多模态预训练模型,使用对比学习在大量文本-图像对上训练,便于迁移至各种下游任务,如图像分类、OCR等。它通过分别编码文本和图像并计算相似度来评估匹配度。在图像分类测试中,CLIP能有效识别图像类别。此外,CLIP还可用于图像描述生成、文本搜图和文本生成图片(如AIGC)。近期研究致力于优化CLIP的数据、模型和监督方法。5月更文挑战第11天

测试CLIP zero-shot learning

1. 什么是CLIP

yyq-2023-03-06-21-42-50.png

CLIP是OpenAI在Learning Transferable Visual Models From Natural Language Supervision提出的多模态的预训练模型,CLIP利用文本和图像的配对数据,基于对比学习的方式训练的预训练模型,对于方便迁移到下游任务,如图像分类识别,精细图像分类,OCR,动作识别和地理信息定位等等。

以往的视觉模型,都是基于一定场景下监督训练的出来的,这种受限制的监督形式限制了它们的通用性和可用性,如增加一个类别,就要重新收集数据,重新迭代模型。虽然有few-shot learning或者zero-shot learning,但是性能远不如监督学习的模型。

CLIP(Contrastive Language-Image Pre-training)用文本的监督方式,在4亿数据集上可以有效的迁移到新的任务。

yyq-2023-03-04-23-49-37.png

CLIP分别对文本和图像训练两个Encode模型,并用相似度度量的方式进行监督。可以构造(image, text)的配对方式,通过计算相似度来判断配对是否相关。

2. CLIP图像分类识别测试

CLIP可以用来做什么?我们用来做下图像分类的测试:

import torch
import clip
from PIL import Image

device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("./ViT-B-32.pt", device=device)
image = preprocess(Image.open("./images/R-C.jpg")).unsqueeze(0).to(device)
text = clip.tokenize(["a sexy photo", "a porn photo", "a normal photo"]).to(device)

with torch.no_grad():
    image_features = model.encode_image(image)
    text_features = model.encode_text(text)

    logits_per_image, logits_per_text = model(image, text)
    probs = logits_per_image.softmax(dim=-1).cpu().numpy()

print("Label probs:", probs)
# Label probs: [[0.9614  0.02727 0.01154]]

CLIP本质上是建立文本和图像的相关性,对文本和图像进行编码。从代码可知,CLIP用在图像分类上:

  • 图像分类的类别构建text,并用clip进行编码
  • 对图像进行编码
  • 计算图像和类别的编码的相似性
  • 取相似性最大的类别

CLIP论文给出许多构建类别的文本的text,如"a photo of 《label》"

CLIP是不是可以做一个万物识别的分类模型?

3. CLIP的其他用途

CLIP建立了text和image的关系,那么CLIP可以应用的场景:

  • 给图生成一个文本说明
  • 以文本搜图
  • 以文本生成图片,这个就是现在很多的AIGC(如DALE-2,Stable Diffusion),是在CLIP基础上加上扩散模型来生成图像

最近对CLIP优化的总结:

  • Democratizing Contrastive Language-Image Pre-training: A CLIP Benchmark of Data, Model, and Supervision

yyq-2023-03-06-21-46-50.png

目录
相关文章
|
6天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
34 3
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
57 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
237 7
Jmeter实现WebSocket协议的接口测试方法
|
2月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
242 3
快速上手|HTTP 接口功能自动化测试
|
1月前
|
JavaScript 前端开发 API
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
40 0
|
2月前
|
JavaScript 前端开发 测试技术
ChatGPT与接口测试
ChatGPT与接口测试,测试通过
48 5
|
3月前
|
网络协议 测试技术 网络安全
Python进行Socket接口测试的实现
在现代软件开发中,网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯,都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中,Socket(套接字)技术扮演了重要角色。 Socket 允许计算机上的程序通过网络进行通信,它是网络通信的基础。Python 提供了强大且易于使用的 socket 模块,使开发者能够轻松地创建客户端和服务器应用,实现数据传输和交互。 本文将深入探讨如何利用 Python 编程语言来进行 Socket 接口测试。我们将从基础概念开始介绍,逐步引导大家掌握创建、测试和优化 socket 接口的关键技能。希望本文可以给大家的工作带来一些帮助~
|
4月前
|
存储
Postman 接口测试配置 Pre-request Script
Postman 接口测试配置 Pre-request Script
210 5
Postman 接口测试配置 Pre-request Script
|
3月前
|
网络协议 测试技术 网络安全
Python进行Socket接口测试的实现
在现代软件开发中,网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯,都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中,Socket(套接字)技术扮演了重要角色。 Socket 允许计算机上的程序通过网络进行通信,它是网络通信的基础。Python 提供了强大且易于使用的 socket 模块,使开发者能够轻松地创建客户端和服务器应用,实现数据传输和交互。 本文将深入探讨如何利用 Python 编程语言来进行 Socket 接口测试。我们将从基础概念开始介绍,逐步引导大家掌握创建、测试和优化 socket 接口的关键技能。希望本文可以给大家的工作带来一些帮助~
|
3月前
|
SQL Java 测试技术
SpringBoot单元测试快速写法问题之PorkService 接口中的 getPork 方法的作用如何解决
SpringBoot单元测试快速写法问题之PorkService 接口中的 getPork 方法的作用如何解决