图像相似度数据可视化

社区文章 发布于 2024 年 11 月 18 日

作者:Tony Assi

image/png

创建图像相似度的 2D 散点图数据可视化。你只需要一个包含图像 URL 的 .csv 文件。

Hugging Face Spaces

下载代码

Github 仓库下载代码

git clone https://github.com/TonyAssi/ImSimVis.git

安装

pip install -r requirements.txt

数据

你只需要一个包含图像 URL 的 .csv 文件。该 .csv 文件必须有一个名为“image_url”的列,其中该列的每一行都是一个图像 URL。它也可以包含其他列。

用法

导入模块

from ImSimVis import create_ds_app
  • input_csv 包含图像 URL 列表的 .csv 文件(必须有一个名为“image_url”的列)
  • data_name 数据和应用程序将上传到的 Hugging Face 仓库的名称
  • token HuggingFace 写入访问令牌可以在此处创建。
create_ds_app(input_csv='image_urls.csv',
          dataset_name='images-data-vis',
          token='YOUR_HF_TOKEN')

该脚本将下载图像,生成图像嵌入,将数据集上传到 Hugging Face,并创建一个可视化应用程序。它会打印出数据集和应用程序的 URL。

示例数据集

示例应用


理论

让我们深入了解这是如何工作的。你不需要通读本节,但它将帮助你理解其工作原理以及我为什么要这样实现它。

图像嵌入

图像嵌入使我们能够根据图像相似度比较图像。但是什么是图像嵌入?简单来说,图像嵌入是图像的高级数值表示。它们向计算机表示高级视觉概念,但对我们来说意义不大。

图像嵌入是使用 google/vit-base-patch16-224 模型生成的。它是一个很棒的通用编码器模型。

它们看起来是这样的:

[0.17519, -0.33182, -0.11692... 1.08443, -0.22943, 1.06595]

每个图像嵌入都是一个 1000x1 的向量。那么,如果数据有 1000 个维度,我们如何绘制呢?我们需要将每个 1000x1 的向量降维到 X 和 Y 坐标,以便在我们的 XY 散点图上绘制。

from sklearn.decomposition import PCA
pca = PCA(n_components=2)
reduced_embeddings = pca.fit_transform(embeddings)

总而言之,我们正在将图像(像素值)转换为图像嵌入向量(1x1000 向量)。然后将 1x1000 的图像嵌入向量转换为 XY 坐标。所以最终每个图像都有一个 X 和一个 Y 值,我们可以将其绘制出来。散点图上彼此靠近的图像看起来相似。

实现

我正在使用 Streamlit 进行前端开发,托管在 🤗 Spaces 上。数据可视化使用 Bokeh 完成,这是我能找到的唯一一个可以在悬停时显示图像预览的数据可视化库。

关于我

大家好,我叫 Tony Assi。我是一名驻洛杉矶的设计师。我拥有软件、时尚和营销背景。我目前在一家电子商务时尚品牌工作。查看我的 🤗 个人资料,了解更多应用程序、模型和数据集。

如有任何问题、意见、业务咨询或工作机会,请随时发送电子邮件至 tony.assi.media@gmail.com

社区

注册登录发表评论