clip模型

前言

本文专门开一节写SD原理相关的内容,在看之前,可以同步关注:
stable diffusion实践操作

CLIP,OPENAI 的产品,它解决文字和图片之间对应的问题。
我们常规训练模型后,万一要新增一个分类,这个时候只能重新训练,然后重复之前的工作。
那么有没有一个办法,让我们不用重复之前的工作呢?
GPT中有一个zero-shot,我们只要训练好一个大模型,然后通过一些提示,就能让它自动分类识别。
足够大的模型,足够大的语料就能完成这个任务

我们想要一个足够大的图片模型,然后能做成zeroshot,比如原来只有1k个类别,突然来了一个新的类别,它也能认识,不需要再训练了。
把GPT中文本的方法也用到视觉中来,一个迁移能力非常强的能力(自动认识新类别)。

1 如何实现?

transform 模型
文本的encoder就是transtorm,就是一个GPT,把一个词语提取特征转成向量
图像转特征

1.概论

clip需要大数据量,clip提供了模型,没有提供代码

预训练模型,没有针对任何分类类别做的,而是通过对比学习的思想来通过文本指引帮我们生成任务

2 训练

对角线是正样本,对比学习。
比如,文本描述:狗,图片:狗,这个就是正样本
什么是对比学习?
一批batch,让对角线自己和自己的描述一致,这就是正样本。
让模型学习这幅图片大致描述的是什么。
现在关注的不是类别,而是本质。

3.有什么用?

1.如何进行推理

一个图片,想要分类,你就给它类别,对比相似度。
提示词的好坏,决定了结果。

2.训练

3.提示词

如何提示词,比如一头猪,基于对比学习,不基于某个token

4 transform

Transformer模型详解(图解最完整版)

5 通过代码来玩clip模型

首先要安装:
第一个是长路径支持,适合window

pip install ddddocr

然后安装

pip install transformers[torch]

安装过程如果出现长路径不支持,可以管理员执行:

New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" `
-Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force

具体参考:
Maximum Path Length Limitation

代码如下,这段代码输入几个词组和一张图片,大家可以看看生成什么样的结果。
第一次执行的时候会非常慢,因为会下载模型。
第二次就会很快了。

from PIL import Image

from transformers import CLIPProcessor,CLIPModel

model= CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor=CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")

image=Image.open("dog.png")

test=['dog', 'cat', 'teddy']

inputs=processor(text=test,images=image,return_tensors='pt',padding=True)

outputs=model(**inputs)

logite_per_image=outputs.logits_per_image # this is the image-text similarity score

probs=logite_per_image.softmax(dim=1)

for i in range(len(test)):
    print(test[i],',',probs[0][i])

6 VIT模型

VIT比Resnet强10个点。

7.如何训练

参考:
huggingface.transformers安装教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值