Skip to content
给每一条河每一座山取一个温暖的名字,我有一所房子,面朝大海,春暖花开。

Your creativity, We Visualed!

VAE(变分自编码器)

VAE(Variational Autoencoder) 是一种生成模型,包含两个主要部分:编码器(Encoder)和解码器(Decoder)。

总结

  • 编码器:将数据映射到潜在空间。
  • 解码器:从潜在空间生成数据。
  • 目标:学习数据的低维表示并生成新数据。

CLIP-(对比式语言-图像预训练)

CLIP(Contrastive Language–Image Pretraining)是 OpenAI 提出的一种多模态模型,用于将图像和文本映射到同一个语义空间。与 VAE 不同,CLIP 没有传统意义上的“编码器”和“解码器”,而是由两个核心组件组成:图像编码器文本编码器

总结

CLIP 的“编码器”包括图像编码器和文本编码器,它们分别将图像和文本映射到同一个语义空间。CLIP 没有传统意义上的“解码器”,而是通过对比学习实现图像和文本的语义对齐。CLIP 的核心优势在于其强大的多模态理解能力,能够广泛应用于图像-文本检索、零样本分类等任务。

代码实现

下面是一个简单的代码示例,使用 OpenAI 的 CLIP 模型 来实现文本和图像的嵌入计算,并计算它们之间的相似度。我们将使用 Hugging Face 的 transformers 库和 OpenAI 的 clip 库来实现。


环境准备

首先,安装所需的库:

bash
pip install torch torchvision transformers clip

代码实现

python
import torch
import clip
from PIL import Image
import requests
from io import BytesIO

# 加载CLIP模型和预处理函数
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)

# 示例文本
texts = ["a photo of a cat", "a photo of a dog", "a photo of a mountain"]

# 示例图像(从网络加载)
image_url = "https://example.com/path/to/your/image.jpg"  # 替换为你的图片URL
response = requests.get(image_url)
image = Image.open(BytesIO(response.content)).convert("RGB")

# 预处理图像和文本
image_input = preprocess(image).unsqueeze(0).to(device)
text_inputs = clip.tokenize(texts).to(device)

# 计算图像和文本的特征嵌入
with torch.no_grad():
    image_features = model.encode_image(image_input)
    text_features = model.encode_text(text_inputs)

# 计算图像和文本的相似度
logits_per_image, logits_per_text = model(image_input, text_inputs)
probs = logits_per_image.softmax(dim=-1).cpu().numpy()

# 输出结果
print("Image features shape:", image_features.shape)
print("Text features shape:", text_features.shape)
print("Similarity probabilities:", probs)

# 打印最匹配的文本
best_match_idx = probs.argmax()
print(f"Best match: '{texts[best_match_idx]}' with probability {probs[0][best_match_idx]:.4f}")

代码说明

  1. 加载模型

    • 使用 clip.load("ViT-B/32") 加载 CLIP 模型和预处理函数。
    • ViT-B/32 是一个基于 Vision Transformer 的 CLIP 模型,适合大多数任务。
  2. 输入数据

    • 文本:texts 是一个包含多个文本描述的列表。
    • 图像:从网络加载一张图像,并使用 preprocess 函数进行预处理。
  3. 特征嵌入

    • 使用 model.encode_image 计算图像的特征嵌入。
    • 使用 model.encode_text 计算文本的特征嵌入。
  4. 相似度计算

    • 使用 model(image_input, text_inputs) 计算图像和文本的相似度。
    • 通过 softmax 将相似度转换为概率。
  5. 结果输出

    • 输出图像和文本的特征嵌入形状。
    • 输出图像与每个文本的相似度概率。
    • 输出最匹配的文本描述。

示例输出

假设输入图像是一只猫,输出可能如下:

Image features shape: (1, 512)
Text features shape: (3, 512)
Similarity probabilities: [[0.95 0.03 0.02]]
Best match: 'a photo of a cat' with probability 0.9500

总结

  • 这段代码展示了如何使用 CLIP 模型计算图像和文本的嵌入,并计算它们之间的相似度。
  • 你可以替换图像和文本输入,尝试不同的任务,例如图像分类、文本-图像检索等。
  • CLIP 的强大之处在于它能够将图像和文本映射到同一语义空间,从而实现跨模态的理解和匹配。

LoRA-低秩自适应

LoRA(Low-Rank Adaptation)是一种用于微调大型预训练模型的技术,旨在高效适应特定任务,同时减少计算和存储开销。

核心思想

LoRA 通过在预训练模型的权重矩阵中引入低秩矩阵来实现微调,避免直接修改原始权重,从而降低资源需求。

工作原理

  • 低秩分解:将权重矩阵分解为两个较小的矩阵,近似表示原始矩阵。
  • 参数更新:仅更新这些低秩矩阵,而非整个权重矩阵,减少可训练参数数量。
ComfyUI has loaded