行莫
行莫
发布于 2025-12-04 / 9 阅读
0
0

DreamSim 模型:学习人类视觉相似性的新维度

DreamSim 模型:学习人类视觉相似性的新维度

引言

想象一下,你是一位专业的艺术品鉴定师,需要判断两幅画作的相似程度。传统的计算机可能会说:"这两幅画的像素值差异很大,所以它们完全不同。"但你作为人类专家会说:"虽然像素不同,但它们在风格、主题和情感表达上非常相似。"

DreamSim 就是这样一位"AI 艺术品鉴定师"。它能够像人类一样理解图像的感知相似性,而不仅仅是计算像素级的差异。就像一位经验丰富的鉴赏家,DreamSim 能够捕捉到传统指标无法衡量的相似性维度——语义、风格、结构和感知层面的相似性。


第一部分:DreamSim 是什么?

核心比喻:感知相似性专家

让我们用一个更具体的比喻来理解 DreamSim:

DreamSim 就像一位经过专业训练的视觉相似性评估专家。

传统方法的局限

传统的图像相似度评估方法(如 MSE、PSNR、SSIM)就像用尺子测量两幅画:

传统方法(像素级比较):
- 看到两幅画,比较每个像素的颜色值
- 如果像素值不同,就认为画不同
- 就像用尺子测量,只能看到表面的差异

问题:
- 无法理解语义相似性
- 无法捕捉风格相似性
- 无法感知情感相似性

DreamSim 的突破

DreamSim 就像一位专业的艺术鉴赏家:

DreamSim(感知相似性评估):
- 看到两幅画,理解它们的深层含义
- 能够识别风格、主题、情感的相似性
- 就像艺术鉴赏家,能够看到本质的相似性

优势:
- 理解语义相似性
- 捕捉风格相似性
- 感知情感相似性
- 更符合人类视觉判断

技术定义

DreamSim 是由 MIT、Weizmann Institute of Science 和 Adobe Research 联合开发的感知相似性度量模型,发表在 NeurIPS 2023 Spotlight。它的核心思想是:

通过学习人类对图像相似性的判断,训练一个能够像人类一样评估图像感知相似性的模型,而不仅仅是计算像素级或结构级的差异。

关键特性

  1. 感知对齐:评估结果与人类视觉判断高度一致
  2. 多维度理解:能够捕捉语义、风格、结构等多维度相似性
  3. 使用合成数据训练:在 NIGHTS 数据集上训练,包含人类标注的相似性判断
  4. 灵活应用:可用于相似度计算、图像检索、特征提取、感知损失等多种场景

第二部分:DreamSim 是如何工作的?

比喻:三位专家的协作

DreamSim 使用集成架构,就像三位专家共同评估:

三位专家

1. CLIP 专家(ViT-B/16)

  • 擅长理解图像和文本的语义关联
  • 能够识别图像中的语义内容
  • 就像一位语言学家,理解图像的含义

2. DINO 专家(ViT-B/16)

  • 擅长捕捉图像的视觉特征
  • 能够识别图像的结构和模式
  • 就像一位视觉分析师,理解图像的结构

3. OpenCLIP 专家(ViT-B/16)

  • 擅长理解大规模视觉-语言关联
  • 能够识别图像的风格和特征
  • 就像一位风格鉴赏家,理解图像的风格

协作方式

三位专家分别评估:
  CLIP专家:给出语义相似度评分
  DINO专家:给出结构相似度评分
  OpenCLIP专家:给出风格相似度评分

最终综合评分:
  综合三位专家的意见,得出最终的感知相似度

技术架构

1. 集成架构(Ensemble)

DreamSim 默认使用三个预训练模型的集成:

# 集成架构
ensemble = {
    "CLIP": CLIPModel(ViT-B/16),
    "DINO": DINOModel(ViT-B/16),
    "OpenCLIP": OpenCLIPModel(ViT-B/16)
}

# 综合三个模型的输出
final_score = combine(CLIP_score, DINO_score, OpenCLIP_score)

优势

  • 更准确的评估
  • 多维度理解
  • 鲁棒性强

劣势

  • 计算速度较慢
  • 需要更多资源

2. 单分支架构(Single-Branch)

为了提升速度,DreamSim 也提供单分支版本:

# 单分支架构(约3倍加速)
single_branch_options = [
    "OpenCLIP-ViTB/32",  # 性能最好
    "DINO-ViTB/16",      # 平衡性能
    "CLIP-ViTB/32"       # 速度最快
]

优势

  • 速度快(约3倍加速)
  • 资源占用少
  • 适合实时应用

劣势

  • 精度略低于集成版本

训练数据:NIGHTS 数据集

什么是 NIGHTS?

**NIGHTS(Novel Image Generations with Human-Tested Similarities)**是 DreamSim 的训练数据集。

比喻理解

  • 就像给 AI 提供大量"考试题"和"标准答案"
  • 每道题都是:给定三张图像,判断哪两张更相似
  • 人类标注者给出"标准答案"
  • AI 学习人类的判断标准

数据集特点

  1. 20k 一致三元组:所有标注者都一致认为的相似性判断
  2. 100k 未过滤三元组:包含更多样化的判断(用于研究)
  3. 合成数据:使用生成模型创建多样化的图像对
  4. 人类标注:由真实人类标注者判断相似性

第三部分:DreamSim 的核心功能

功能 1:感知相似度计算

这是 DreamSim 最基础的功能,用于计算两张图像之间的感知距离。

类比理解

  • 就像测量两座城市之间的距离
  • 传统方法:测量直线距离(像素差异)
  • DreamSim:测量"感知距离"(人类感觉的相似程度)

代码示例

"""
感知相似度度量
测量两张图像之间的感知距离。分数越高表示差异越大,分数越低表示越相似。
"""

from dreamsim import dreamsim
from PIL import Image
import torch

if torch.cuda.is_available():
    device = "cuda"
else:
    device = "cpu"

print(f"Using device: {device}")
model, preprocess = dreamsim(pretrained=True, device=device, cache_dir="./models")

img1 = preprocess(Image.open("./images/image1.png")).to(device)
img2 = preprocess(Image.open("./images/image2.png")).to(device)
distance_tensor = model(img1, img2)

print(f"Distance1: {distance_tensor.cpu().item()}")

img3 = preprocess(Image.open("./images/image3.jpg")).to(device)
img4 = preprocess(Image.open("./images/Mona-Lisa-Smile.jpg")).to(device)
distance_tensor2 = model(img3, img4)

print(f"Distance2: {distance_tensor2.cpu().item()}")

输出示例

# 示例输出
distance = 0.4453  # 两张图像差异较大
distance = 0.2756  # 两张图像较为相似
distance = 0.1234  # 两张图像非常相似

功能 2:特征提取

DreamSim 可以提取单张图像的嵌入向量,用于后续任务。

类比理解

  • 就像给每张图像制作一个"身份证"
  • 身份证上的信息(嵌入向量)代表了图像的特征
  • 通过比较身份证,可以判断图像的相似性

代码示例

from dreamsim import dreamsim
from PIL import Image
import torch

if torch.cuda.is_available():
    device = "cuda"
else:
    device = "cpu"

print(f"Using device: {device}")
model, preprocess = dreamsim(pretrained=True, device=device, cache_dir="./models")

img1 = preprocess(Image.open('./images/image1.png')).to(device)
embedding = model.embed(img1)

print(embedding.cpu().numpy())

应用场景

  1. 图像检索:预计算所有图像的嵌入,快速检索
  2. 相似度计算:通过嵌入向量的余弦距离计算相似度
  3. 聚类分析:基于嵌入向量对图像进行聚类

功能 3:图像检索

DreamSim 可以用于图像检索,根据查询图像找到最相似的图像。

类比理解

  • 就像在图书馆找书
  • 传统方法:根据书名或作者(关键词匹配)
  • DreamSim:根据"感觉相似"(感知相似性)

代码示例

from dreamsim import dreamsim
import pandas as pd
from tqdm import tqdm
import torch.nn.functional as F
import torch
from PIL import Image, ImageDraw, ImageFont
import os

if torch.cuda.is_available():
    device = "cuda"
else:
    device = "cpu"

print(f"Using device: {device}")
model, preprocess = dreamsim(pretrained=True, device=device, cache_dir="./models")

# let query be a sample image.
# let images be a list of images we are searching.
images = [
    Image.open('./images/image1.png'),
    Image.open('./images/image2.png'),
    Image.open('./images/image3.jpg'),
    Image.open('./images/image4.jpg'),
    Image.open('./images/image5.jpg'),
    Image.open('./images/Mona-Lisa-Smile.jpg'),
]
query = Image.open('./images/image1.png')

# Compute the query image embedding
query_embed = model.embed(preprocess(query).to(device))
dists = {}

# Compute the (cosine) distance between the query and each search image
for i, im in tqdm(enumerate(images), total=len(images)):
    img_embed = model.embed(preprocess(im).to(device))
    dists[i] = (1 - F.cosine_similarity(query_embed, img_embed, dim=-1)).item()

# Return results sorted by distance
df = pd.DataFrame({"ids": list(dists.keys()), "dists": list(dists.values())})
print(df.sort_values(by="dists"))
print(df.sort_values(by="ids"))

优化技巧

  1. 预计算嵌入:提前计算所有图像的嵌入,避免重复计算
  2. 批量处理:批量处理图像,提高效率
  3. 使用单分支模型:如果速度要求高,使用单分支版本

功能 4:感知损失函数

DreamSim 可以作为损失函数,用于图像生成、风格迁移等任务的优化。

类比理解

  • 就像训练一位画家
  • 传统损失函数:要求像素级相似(像要求完全复制)
  • DreamSim 损失:要求感知相似(像要求"感觉相似")

代码示例

from dreamsim import dreamsim
from PIL import Image
import torch
import torch.optim as optim
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt

# 设置设备
if torch.cuda.is_available():
    device = "cuda"
else:
    device = "cpu"

print(f"Using device: {device}")

# 加载 DreamSim 模型
model, preprocess = dreamsim(pretrained=True, device=device, cache_dir="./models")
model.eval()  # 设置为评估模式

# 加载参考图像(目标图像)
reference_image_path = "./images/image1.png"
reference_image = Image.open(reference_image_path).convert('RGB')
# preprocess返回的是[3, 224, 224],model()函数内部会处理batch维度
reference_tensor = preprocess(reference_image).to(device)  # [3, 224, 224]

print(f"参考图像tensor形状: {reference_tensor.shape}")

# 创建可优化的图像(初始化为随机噪声或参考图像的副本)
# 方法1: 从随机噪声开始
# initial_image = torch.randn(3, 224, 224, device=device, requires_grad=True)

# 方法2: 从参考图像开始(添加一些噪声)
initial_image = reference_tensor.clone().detach()  # [3, 224, 224]
initial_image = initial_image + torch.randn_like(initial_image) * 0.1
initial_image = torch.clamp(initial_image, 0, 1)  # 确保在[0,1]范围内
initial_image.requires_grad_(True)

print(f"初始图像tensor形状: {initial_image.shape}")

# 创建优化器
optimizer = optim.Adam([initial_image], lr=0.01)

# 优化参数
n_iters = 100  # 迭代次数
loss_history = []

print("开始优化...")
# 使用.item()提取标量值
with torch.no_grad():
    initial_loss = model(initial_image, reference_tensor)
    print(f"初始感知距离: {initial_loss.item():.6f}")

# 迭代优化
for i in range(n_iters):
    # 清零梯度
    optimizer.zero_grad()

    # 确保图像在有效范围内
    current_image = torch.clamp(initial_image, 0, 1)

    # 计算感知距离(损失)
    perceptual_loss = model(current_image, reference_tensor)

    # 可选:添加正则化项(L2正则化,防止过度变化)
    l2_reg = 0.001 * torch.norm(current_image - reference_tensor, p=2)

    # 总损失
    total_loss = perceptual_loss + l2_reg

    # 反向传播
    total_loss.backward()

    # 更新参数
    optimizer.step()

    # 记录损失
    loss_history.append(perceptual_loss.item())

    # 每10次迭代打印一次
    if (i + 1) % 10 == 0:
        print(f"Iteration {i+1}/{n_iters}, Perceptual Loss: {perceptual_loss.item():.6f}")

print(f"最终感知距离: {loss_history[-1]:.6f}")

应用场景

  1. 图像生成:优化生成图像,使其在感知上更接近目标
  2. 风格迁移:保持内容的同时,迁移风格
  3. 图像修复:修复图像,使其在感知上更自然

第四部分:DreamSim 与其他方法的对比

对比表格

特性DreamSimLPIPSSSIMMSE/PSNR
感知对齐✅ 优秀✅ 良好⚠️ 一般❌ 差
语义理解✅ 强⚠️ 中等❌ 弱❌ 无
风格理解✅ 强⚠️ 中等❌ 弱❌ 无
训练数据合成数据+人类标注自然图像--
计算速度中等很快
资源占用中等中等很低

实际对比示例

场景 1:风格相似但内容不同

图像A:一幅印象派风格的风景画
图像B:一幅印象派风格的人物画

传统方法(MSE/SSIM):
  - 认为差异很大(像素和结构都不同)
  - 评分:低相似度

DreamSim:
  - 识别出风格相似(都是印象派)
  - 评分:中等相似度(更符合人类判断)

场景 2:内容相似但风格不同

图像A:一张真实的猫的照片
图像B:一张卡通风格的猫的图片

传统方法(MSE/SSIM):
  - 认为差异很大(像素和结构都不同)
  - 评分:低相似度

DreamSim:
  - 识别出内容相似(都是猫)
  - 评分:中等相似度(更符合人类判断)

场景 3:完全不同的图像

图像A:一张猫的照片
图像B:一张狗的照片

所有方法:
  - 都认为差异很大
  - 评分:低相似度

第五部分:DreamSim 的实际应用

应用 1:图像质量评估

场景:评估生成图像的质量

# 评估生成图像与参考图像的感知相似度
generated_image = preprocess(Image.open("generated.jpg")).to("cuda")
reference_image = preprocess(Image.open("reference.jpg")).to("cuda")

quality_score = model(generated_image, reference_image)
print(f"图像质量评分: {1 - quality_score.item():.4f}")  # 转换为相似度

优势

  • 更符合人类对图像质量的判断
  • 能够识别感知层面的质量问题

应用 2:图像去重

场景:识别数据集中相似或重复的图像

# 批量计算图像相似度
images = [Image.open(f"img_{i}.jpg") for i in range(1000)]
embeddings = []

# 预计算所有图像的嵌入
for img in images:
    emb = model.embed(preprocess(img).to("cuda"))
    embeddings.append(emb)

# 计算相似度矩阵
similarity_matrix = []
for i in range(len(embeddings)):
    row = []
    for j in range(len(embeddings)):
        sim = F.cosine_similarity(embeddings[i], embeddings[j], dim=-1)
        row.append(sim.item())
    similarity_matrix.append(row)

# 找出相似图像对(相似度 > 0.95)
duplicates = []
for i in range(len(similarity_matrix)):
    for j in range(i+1, len(similarity_matrix)):
        if similarity_matrix[i][j] > 0.95:
            duplicates.append((i, j))

应用 3:图像编辑评估

场景:评估编辑后的图像与原始图像的感知差异

# 评估编辑效果
original_image = preprocess(Image.open("original.jpg")).to("cuda")
edited_image = preprocess(Image.open("edited.jpg")).to("cuda")

edit_distance = model(original_image, edited_image)
print(f"编辑距离: {edit_distance.item():.4f}")

if edit_distance.item() < 0.2:
    print("编辑效果:感知差异很小,编辑自然")
elif edit_distance.item() < 0.5:
    print("编辑效果:感知差异中等,编辑明显但可接受")
else:
    print("编辑效果:感知差异很大,编辑效果显著")

应用 4:风格迁移优化

场景:使用 DreamSim 作为损失函数优化风格迁移

# 风格迁移优化示例
content_image = preprocess(Image.open("content.jpg")).to("cuda")
style_image = preprocess(Image.open("style.jpg")).to("cuda")
generated_image = content_image.clone().requires_grad_(True)

optimizer = optim.Adam([generated_image], lr=0.01)

for iteration in range(200):
    optimizer.zero_grad()
    
    # 内容损失(保持内容相似)
    content_loss = model(generated_image, content_image)
    
    # 风格损失(迁移风格)
    style_loss = model(generated_image, style_image)
    
    # 总损失
    total_loss = content_loss + 0.5 * style_loss
    total_loss.backward()
    optimizer.step()

第六部分:安装和使用指南

安装方法

方法 1:使用 pip(推荐)

pip install dreamsim

优点

  • 简单快速
  • 自动处理依赖
  • 适合快速使用

方法 2:从源码安装

# 克隆仓库
git clone https://github.com/ssundaram21/dreamsim.git
cd dreamsim

# 创建虚拟环境
python3 -m venv ds
source ds/bin/activate  # Windows: ds\Scripts\activate

# 安装依赖
pip install -r requirements.txt
export PYTHONPATH="$PYTHONPATH:$(realpath ./dreamsim)"

优点

  • 可以修改代码
  • 可以运行训练/评估脚本
  • 适合研究和开发

基本使用

快速开始

from dreamsim import dreamsim
from PIL import Image

# 加载模型(首次运行会自动下载权重)
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = dreamsim(pretrained=True, device=device)

# 计算两张图像的感知距离
img1 = preprocess(Image.open("image1.jpg")).to(device)
img2 = preprocess(Image.open("image2.jpg")).to(device)
distance = model(img1, img2)

print(f"感知距离: {distance.item():.4f}")

使用单分支模型(更快)

# 使用 DINO 单分支模型(约3倍加速)
model, preprocess = dreamsim(
    pretrained=True, 
    dreamsim_type="dino_vitb16",
    device=device
)

# 可选的其他单分支模型:
# - "openclip_vitb32"  # 性能最好
# - "clip_vitb32"      # 速度最快

提取图像嵌入

# 提取单张图像的嵌入
img = preprocess(Image.open("image.jpg")).to(device)
embedding = model.embed(img)

print(f"嵌入维度: {embedding.shape}")
print(f"嵌入值范围: [{embedding.min():.4f}, {embedding.max():.4f}]")

配置选项

DreamSim 的默认配置在 ./dreamsim/config.py 中定义。主要配置选项包括:

# 模型配置
config = {
    "use_patch_model": False,  # 是否使用 patch 特征
    "dreamsim_type": "ensemble",  # 模型类型
    "cache_dir": None,  # 缓存目录
}

第七部分:技术细节和原理

模型架构详解

1. 特征提取

DreamSim 使用 Vision Transformer (ViT) 作为特征提取器:

# 简化的架构流程
def dreamsim_forward(image1, image2):
    # 1. 特征提取
    features1 = extract_features(image1)  # 使用 ViT
    features2 = extract_features(image2)
    
    # 2. 特征融合(集成模型)
    if ensemble:
        features1 = combine_features(
            clip_features1, 
            dino_features1, 
            openclip_features1
        )
        features2 = combine_features(
            clip_features2, 
            dino_features2, 
            openclip_features2
        )
    
    # 3. 计算距离
    distance = compute_distance(features1, features2)
    return distance

2. 距离计算

DreamSim 使用余弦距离计算感知相似度:

# 余弦距离计算
def cosine_distance(embed1, embed2):
    # 归一化嵌入
    embed1_norm = F.normalize(embed1, p=2, dim=-1)
    embed2_norm = F.normalize(embed2, p=2, dim=-1)
    
    # 计算余弦相似度
    cosine_sim = F.cosine_similarity(embed1_norm, embed2_norm, dim=-1)
    
    # 转换为距离(1 - 相似度)
    distance = 1 - cosine_sim
    return distance

训练过程

1. 数据准备

# NIGHTS 数据集结构
dataset = {
    "triplets": [
        {
            "anchor": "image1.jpg",      # 锚点图像
            "positive": "image2.jpg",    # 相似图像
            "negative": "image3.jpg",    # 不相似图像
            "label": 1  # 人类标注:positive 更相似
        },
        # ... 更多三元组
    ]
}

2. 损失函数

DreamSim 使用对比学习损失:

# 对比学习损失
def contrastive_loss(anchor, positive, negative):
    # 计算距离
    pos_dist = model(anchor, positive)
    neg_dist = model(anchor, negative)
    
    # 损失:positive 距离应该小于 negative 距离
    loss = max(0, pos_dist - neg_dist + margin)
    return loss

3. 微调过程

# 微调流程
1. 加载预训练模型(CLIP、DINO、OpenCLIP)
2. 在 NIGHTS 数据集上微调
3. 使用对比学习损失优化
4. 保存微调后的模型

第八部分:最佳实践和建议

1. 选择合适的模型

场景 1:需要最高精度

# 使用集成模型(默认)
model, preprocess = dreamsim(pretrained=True, device=device)

场景 2:需要快速处理

# 使用单分支模型
model, preprocess = dreamsim(
    pretrained=True, 
    dreamsim_type="openclip_vitb32",  # 性能最好的单分支
    device=device
)

场景 3:需要最快速度

# 使用最快的单分支模型
model, preprocess = dreamsim(
    pretrained=True, 
    dreamsim_type="clip_vitb32",
    device=device
)

2. 批量处理优化

# 批量处理图像
def batch_process(images, batch_size=32):
    embeddings = []
    for i in range(0, len(images), batch_size):
        batch = images[i:i+batch_size]
        batch_tensor = torch.cat([preprocess(img) for img in batch]).to(device)
        batch_emb = model.embed(batch_tensor)
        embeddings.append(batch_emb)
    return torch.cat(embeddings, dim=0)

3. 内存优化

# 使用梯度检查点(如果内存不足)
model = dreamsim(pretrained=True, device=device)
# 在训练时使用 torch.utils.checkpoint

# 使用混合精度(加速)
from torch.cuda.amp import autocast
with autocast():
    distance = model(img1, img2)

4. 结果解释

# 距离分数解释
def interpret_distance(distance):
    if distance < 0.2:
        return "非常相似"
    elif distance < 0.4:
        return "较为相似"
    elif distance < 0.6:
        return "中等相似"
    elif distance < 0.8:
        return "不太相似"
    else:
        return "完全不同"

distance = model(img1, img2).item()
print(f"相似度: {interpret_distance(distance)}")

第九部分:常见问题和解决方案

Q1: 模型下载很慢怎么办?

A: 使用镜像站或手动下载

# 设置 Hugging Face 镜像
import os
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'

# 然后加载模型
model, preprocess = dreamsim(pretrained=True, device=device)

Q2: 内存不足怎么办?

A: 使用单分支模型或减小批次大小

# 使用单分支模型(内存占用更少)
model, preprocess = dreamsim(
    pretrained=True, 
    dreamsim_type="dino_vitb16",
    device=device
)

# 减小批次大小
batch_size = 8  # 而不是 32

Q3: 如何提高处理速度?

A: 使用单分支模型、批量处理和 GPU

# 1. 使用单分支模型
model, preprocess = dreamsim(pretrained=True, dreamsim_type="openclip_vitb32")

# 2. 批量处理
embeddings = model.embed(batch_images)  # 而不是循环处理

# 3. 使用 GPU
device = "cuda"

Q4: 距离分数如何解释?

A: 参考以下标准

距离范围      | 解释
-------------|------------------
0.0 - 0.2    | 非常相似
0.2 - 0.4    | 较为相似
0.4 - 0.6    | 中等相似
0.6 - 0.8    | 不太相似
0.8 - 1.0    | 完全不同

Q5: 可以用于视频相似度吗?

A: 可以,但需要逐帧处理

# 视频相似度计算
def video_similarity(video1_frames, video2_frames):
    distances = []
    for frame1, frame2 in zip(video1_frames, video2_frames):
        dist = model(preprocess(frame1), preprocess(frame2))
        distances.append(dist.item())
    return np.mean(distances)  # 平均距离

第十部分:总结和展望

核心要点总结

  1. DreamSim 是什么

    • 感知相似性度量模型
    • 能够像人类一样评估图像相似性
    • 使用合成数据和人类标注训练
  2. 为什么重要

    • 更符合人类视觉判断
    • 能够捕捉多维度相似性
    • 适用于多种应用场景
  3. 如何使用

    • 安装:pip install dreamsim
    • 基本使用:计算两张图像的感知距离
    • 高级应用:图像检索、特征提取、感知损失
  4. 技术特点

    • 集成架构(CLIP + DINO + OpenCLIP)
    • 单分支版本(更快)
    • 在 NIGHTS 数据集上训练

应用前景

DreamSim 在以下领域有广阔的应用前景:

  1. 图像生成:评估生成图像的质量
  2. 图像编辑:评估编辑效果
  3. 图像检索:基于感知相似性的检索
  4. 图像去重:识别相似图像
  5. 风格迁移:优化风格迁移效果
  6. 图像质量评估:评估图像质量

未来发展方向

  1. 更快的模型:进一步优化速度
  2. 更多维度:理解更多相似性维度
  3. 视频支持:扩展到视频相似度
  4. 多模态:扩展到文本、音频等多模态

参考资源

  • GitHub 仓库https://github.com/ssundaram21/dreamsim
  • 论文:DreamSim: Learning New Dimensions of Human Visual Similarity using Synthetic Data (NeurIPS 2023 Spotlight)
  • Colab 演示:查看 GitHub 仓库中的 Colab 链接
  • NIGHTS 数据集:用于训练 DreamSim 的数据集

引用格式

如果使用 DreamSim,请引用:

@misc{fu2023dreamsim,
      title={DreamSim: Learning New Dimensions of Human Visual Similarity using Synthetic Data}, 
      author={Stephanie Fu and Netanel Tamir and Shobhita Sundaram and Lucy Chai and Richard Zhang and Tali Dekel and Phillip Isola},
      year={2023},
      eprint={2306.09344},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

评论