dreamsim

GitHub
596 32 简单 1 次阅读 昨天MIT图像其他
AI 解读 由 AI 自动生成,仅供参考

DreamSim 是一款专注于衡量图像视觉相似度的开源感知度量工具。传统的图像评估方法往往陷入两极分化:要么仅关注像素级的颜色和纹理差异,忽略了整体布局与语义;要么过于侧重高层语义,无法捕捉人类眼中细微的视觉差别。DreamSim 巧妙地填补了这一空白,它能够像人类一样,综合考量图像的构图、姿态及语义内容,给出更符合直觉的相似度评分。

该工具的核心亮点在于其独特的训练策略。研究团队利用扩散模型生成了约 2 万组合成图像数据,并在此基础上结合 CLIP、OpenCLIP 和 DINO 等多种先进模型的嵌入特征进行微调。这种“合成数据 + 多模型融合”的方法,使其在 NIGHTS 基准测试中取得了超越现有指标的优异表现,与人类判断的高度一致性高达 96% 以上。此外,DreamSim 还持续迭代,推出了支持 DINOv2 等新骨干网络的多个变体,不仅适用于图像检索,还能提升语义分割、深度估计等下游任务的效果。

DreamSim 非常适合计算机视觉研究人员、AI 开发者以及需要高质量图像评估方案的设计师使用。无论是用于优化生成式 AI 的输出质量,还是构建更精准的图像搜索系统,它都能提供可靠且专业的量化依据。

使用场景

某电商平台的视觉算法团队正在构建一个“以图搜图”功能,旨在帮助用户通过上传商品照片,快速找到风格、款式或构图高度相似的替代商品。

没有 dreamsim 时

  • 语义匹配过于粗糙:依赖 CLIP 等传统模型时,系统常将“红色跑车”与“红色消防车”判定为相似,仅因颜色和高阶语义接近,却忽略了物体类别和形态的巨大差异。
  • 细节感知能力缺失:使用 LPIPS 或 SSIM 等底层指标时,只要图片经过轻微裁剪或旋转,相似度得分便急剧下降,导致无法识别同一商品的不同拍摄角度。
  • 人工校准成本高昂:由于自动排序结果不符合人类直觉,团队不得不雇佣大量标注人员对检索结果进行人工重排,严重拖慢了产品迭代速度。
  • 长尾场景表现糟糕:对于布局复杂或具有特定艺术风格的商品图,现有指标难以捕捉中层的版式结构和纹理质感,导致推荐结果杂乱无章。

使用 dreamsim 后

  • 人类视觉对齐精准:dreamsim 融合了多层级特征并经过人类感知数据微调,能准确区分“同色不同物”,确保检索结果在物体类别、姿态和语义上与查询图真正一致。
  • 鲁棒性显著提升:即使目标图片经历了裁剪、缩放或视角变换,dreamsim 仍能敏锐捕捉到核心的视觉相似性,稳定召回同一商品的不同展示图。
  • 自动化流程闭环:检索排序结果直接符合人类直觉,大幅减少了对人工干预的依赖,使团队能将精力集中于优化业务逻辑而非修正算法偏差。
  • 中层特征捕捉力强:无论是商品的摆放布局还是独特的材质纹理,dreamsim 都能有效量化这些中层差异,显著提升了时尚类和家居类商品的推荐准确度。

dreamsim 通过填补底层像素差异与高层语义鸿沟之间的空白,让机器的视觉相似度判断真正拥有了“人类的眼光”。

运行环境要求

操作系统
  • Linux
GPU

代码示例显示支持 CUDA (device="cuda"),暗示需要 NVIDIA GPU,但 README 未明确指定具体型号、显存大小或 CUDA 版本要求。

内存

未说明(下载完整未过滤数据集需较大空间,但运行模型本身未提及具体内存需求)

依赖
notes1. 官方明确要求操作系统为 Linux。2. 首次运行代码时会自动下载模型权重。3. 若需提取同时基于 CLS 和 patch 特征训练的模型特征,调用 dreamsim() 时需设置 use_patch_model=True。4. 提供多种单分支模型选项(如 dino_vitb16),相比默认集成模型速度提升约 3 倍。5. 完整 NIGHTS 数据集解压后高达 289GB,普通用户仅需使用默认的 20k 子集或预训练模型即可。
python3
torch
Pillow
pandas
tqdm
peft>=0.2.0
dreamsim hero image

快速开始

DreamSim:利用合成数据学习人类视觉相似性的新维度

项目页面 | 论文 | Bibtex

在 Colab 中打开

Stephanie Fu* $^{1}$, Netanel Tamir* $^{2}$, Shobhita Sundaram* $^{1}$, Lucy Chai $^1$, Richard Zhang $^3$, Tali Dekel $^2$, Phillip Isola $^1$.
(*贡献相等,顺序由随机种子决定)
$^1$ MIT,$^2$ 魏茨曼科学研究所,$^3$ Adobe Research。

teaser

摘要

当前用于感知图像相似性的度量方法主要基于像素和图像块。这些度量能够比较图像的低级颜色和纹理特征,但无法捕捉布局、姿态、语义内容等中级差异。而使用图像级嵌入(如 DINO 和 CLIP)的模型则能反映高级别和语义层面的判断,却未必与人类对更细粒度属性的感知完全一致。

DreamSim 是一种新的感知图像相似性度量方法,它弥合了“低级”度量(如 LPIPS、PSNR、SSIM)与“高级”度量(如 CLIP)之间的差距。我们的模型通过拼接 CLIP、OpenCLIP 和 DINO 的嵌入向量进行训练,并进一步在人类感知判断数据上进行微调。我们收集了约 2 万组由扩散模型生成的图像三元组的感知判断数据。实验表明,与现有度量相比,DreamSim 能更好地匹配人类的相似性判断,可用于图像检索等下游任务。

🚀 最新更新

2024年10月14日: 我们发布了 DreamSim 的 4 种新变体!这些新检查点包括:

  • 以 DINOv2 B/14 和 SynCLR B/16 作为骨干网络;
  • 使用原始对比损失同时在 CLS 特征和密集特征上训练的 DINOv2 B/14 和 DINO B/16。
    • 若要从同时利用 CLS 和 patch 特征训练的模型变体中提取特征,请在调用 dreamsim() 时设置 use_patch_model=True

这些模型(以及原有模型)将在 我们最新的 NeurIPS 2024 论文《感知对齐何时有益于视觉表征?》 中得到进一步评估。

研究发现,我们的感知对齐表征在多种标准计算机视觉任务上均优于基线模型,包括语义分割、深度估计、目标计数、实例检索以及检索增强生成等。这些结果表明,感知对齐可以作为学习通用视觉表征的一个有效目标。更多详情请参阅论文及我们的 博客文章

以下是更新后的 NIGHTS 性能表:

NIGHTS - 验证集 NIGHTS - 测试集
ensemble 96.9% 96.2%
dino_vitb16 95.6% 94.8%
open_clip_vitb32 95.6% 95.3%
clip_vitb32 94.9% 93.6%
dinov2_vitb14 94.9% 95.0%
synclr_vitb16 96.0% 95.9%
dino_vitb16 (patch) 94.9% 94.8%
dinov2_vitb14 (patch) 95.5% 95.1%

2024年9月14日: 我们发布了与 peft>=0.2.0 兼容的集成模型和单分支 DreamSim 模型的新版本。

此外,我们还发布了完整的 10 万条(未过滤)NIGHTS 数据集以及 JND(刚刚可察觉差异)投票数据

目录

要求

  • Linux
  • Python 3

安装

选项 1: 使用 pip 安装:

pip install dreamsim

该包用于导入和使用 DreamSim 模型。

选项 2: 克隆我们的仓库并安装依赖项。 这是运行我们的训练/评估脚本所必需的。

python3 -m venv ds
source ds/bin/activate
pip install -r requirements.txt
export PYTHONPATH="$PYTHONPATH:$(realpath ./dreamsim)"

若使用 conda 安装:

conda create -n ds
conda activate ds
conda install pip # 用 `which pip` 命令确认
pip install -r requirements.txt
export PYTHONPATH="$PYTHONPATH:$(realpath ./dreamsim)"

使用

有关以下用例的详细示例,请参阅我们的 Colab 演示

快速入门:感知相似性度量

基本用法是测量两张图像之间的感知距离。分数越高表示越不同,分数越低表示越相似

以下代码片段即为所需全部内容。首次运行 dreamsim 时,它会自动下载模型权重。默认模型设置在 ./dreamsim/config.py 中指定。若要从同时利用 CLS 和 patch 特征训练的模型变体中提取特征,请在调用 dreamsim() 时设置 use_patch_model=True

from dreamsim import dreamsim
from PIL import Image

device = "cuda"
model, preprocess = dreamsim(pretrained=True, device=device)

img1 = preprocess(Image.open("img1_path")).to(device)
img2 = preprocess(Image.open("img2_path")).to(device)
distance = model(img1, img2) # 模型接受 [0, 1] 范围内的 RGB 图像,尺寸为 batch_sizex3x224x224

要使用示例图像运行,请执行 demo.py。该脚本应输出距离(0.4453,0.2756)。

单分支模型

默认情况下,DreamSim 使用 CLIP、DINO 和 OpenCLIP(均为 ViT-B/16)的集成模型。如果您需要更轻量级的模型,可以使用仅微调单一骨干网络的 单分支 版本。单分支模型的速度比集成模型快约 3 倍。

可用选项按性能排序为:OpenCLIP-ViTB/32、DINO-ViTB/16、CLIP-ViTB/32。要加载单分支模型,请使用 dreamsim_type 参数。例如:

dreamsim_dino_model, preprocess = dreamsim(pretrained=True, dreamsim_type="dino_vitb16")

特征提取

要使用 dreamsim 提取 单张图像的嵌入,请按照以下代码片段所示使用 embed 方法:

img1 = preprocess(Image.open("img1_path")).to("cuda")
embedding = model.embed(img1)

两张图像之间的感知距离是它们嵌入向量之间的余弦距离。如果嵌入向量已经归一化(默认情况下为真),也可以使用 L2 距离。

图像检索

我们的模型可用于图像检索,并可集成到现有的图像检索流程中。下面的代码根据图像与给定查询图像的相似性对一组图像进行排序。

为了加快速度,我们没有直接对每一对图像调用 model(query, image),而是先使用 model.embed(image) 方法预计算单张图像的嵌入,然后计算这些嵌入之间的余弦距离。

import pandas as pd
from tqdm import tqdm
import torch.nn.functional as F

# 假设 query 是一张示例图像。
# 假设 images 是我们要搜索的一组图像。

# 计算查询图像的嵌入
query_embed = model.embed(preprocess(query).to("cuda"))
dists = {}

# 计算查询图像与每张搜索图像之间的(余弦)距离
for i, im in tqdm(enumerate(images), total=len(images)):
   img_embed = model.embed(preprocess(im).to("cuda"))
   dists[i] = (1 - F.cosine_similarity(query_embed, img_embed, dim=-1)).item()

# 按距离排序并返回结果
df = pd.DataFrame({"ids": list(dists.keys()), "dists": list(dists.values())})
return df.sort_values(by="dists")

感知损失函数

我们的模型可以用作迭代优化中的损失函数(类似于 LPIPS 度量)。以下是关键代码行;完整示例请参阅 Colab

for i in range(n_iters):
    dist = model(predicted_image, reference_image)
    dist.backward()
    optimizer.step()

NIGHTS(人类测试相似性的新型图像生成)数据集

DreamSim 通过在 NIGHTS 数据集上进行微调来训练。有关数据集结构和创建的详细信息,请参阅 数据集页面

运行 ./dataset/download_dataset.sh 可以下载并解压 NIGHTS 数据集到 ./dataset/nights 目录下。解压后的数据集大小为 58 GB。

如果遇到大文件下载困难的问题,可以运行 ./dataset/download_chunked_dataset.sh,将 NIGHTS 数据集拆分为 200 个小压缩包下载。该脚本的输出与 download_dataset.sh 完全相同。

(新!)下载完整的 10 万条预过滤的 NIGHTS 数据集

我们仅使用 2 万个一致同意的三元组进行训练和评估,但出于研究目的,我们也发布了全部 10 万个三元组(其中许多投票较少或存在分歧)。运行 ./dataset/download_unfiltered_dataset.sh 可以下载并解压这个未过滤版本的 NIGHTS 数据集到 ./dataset/nights_unfiltered 目录下。解压后的数据集大小为 289 GB。

(新!)下载 JND 数据

运行 ./dataset/download_jnd_dataset.sh 可以下载最小可觉差(JND)投票数据。CSV 文件将被下载到 ./dataset/jnd_votes.csv。请参阅 Colab 中的示例,了解如何加载 JND 实验数据。

使用 Voxel51 演示可视化 NIGHTS 和嵌入:

FiftyOne

实验

下载资源

运行 ./training/download_models.sh 可以下载并解压必要的 ViT 检查点(用于 CLIP、OpenCLIP 和 MAE)到 ./models 目录下。

训练

要在数据集上微调感知模型,请运行 ./training/train.py。例如,要使用 LoRA 微调 DINO、CLIP 和 OpenCLIP 的集成模型,可以运行:

python ./training/train.py --config ./configs/train_ensemble_model_lora.yaml

我们在 ./configs 中提供了更多示例配置,包括使用 LoRA 和 MLP 头部进行微调的示例。完整的训练选项列表及说明请参阅 ./training/train.py

评估

要对数据集上的感知模型进行评估,请运行 ./evaluation/eval_percep.py。例如,要评估一个训练好的检查点与基准模型在数据集上的表现,可以运行:

python ./evaluation/eval_percep.py --config ./configs/eval_ensemble.yaml

完整的评估选项列表及说明请参阅 ./evaluate/eval_percep.py

引用

如果您认为我们的工作或任何相关材料有用,请引用我们的论文:

@misc{fu2023dreamsim,
      title={DreamSim:利用合成数据学习人类视觉相似性的新维度}, 
      author={Stephanie Fu、Netanel Tamir、Shobhita Sundaram、Lucy Chai、Richard Zhang、Tali Dekel 和 Phillip Isola},
      year={2023},
      eprint={2306.09344},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}
@misc{sundaram2024doesperceptualalignmentbenefit,
      title={感知对齐何时有益于视觉表征?}, 
      author={Shobhita Sundaram、Stephanie Fu、Lukas Muttenthaler、Netanel Y. Tamir、Lucy Chai、Simon Kornblith、Trevor Darrell 和 Phillip Isola},
      year={2024},
      eprint={2410.10817},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2410.10817}, 
}

致谢

我们的代码在ViT特征提取方面借鉴了“Deep ViT Features as Dense Visual Descriptors”仓库,并在代码结构上受到UniverSeg仓库的启发。

版本历史

v0.2.12024/10/15
v0.2.1-checkpoints2024/10/14
v0.2.02024/09/14
v0.2.0-checkpoints2024/09/14
v0.1.32023/07/27
v0.1.22023/07/14
v0.1.02023/06/15

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|昨天
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|昨天
开发框架图像Agent

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.9k|★★☆☆☆|今天
开发框架图像Agent

LLMs-from-scratch

LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

90.1k|★★★☆☆|今天
语言模型图像Agent

Deep-Live-Cam

Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。

88.9k|★★★☆☆|昨天
开发框架图像Agent

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频