以下是将提供的网页内容整理成的中文Markdown文档:

Canva 设计中使用反向图像搜索进行图像替换

维护一个高质量的图像库是为用户提供无缝设计体验的关键。作为质量流程的一部分,有时需要在模板中替换一张图像。例如,如果第三方媒体库合作到期,我们需要替换掉库中所有使用了其内容的图像。这通常是一个漫长的过程,需要大量的人工资源。因此,我们自然会想,是否可以自动化解决这个问题?

图 1 - Canva 设计中的图像替换示例

图像相似性

图像替换是反向图像搜索的经典应用场景。这种应用需要将输入图像与数据库中最相似的图像进行匹配。然而,相似性是一个主观的概念,因此我们决定通过层次结构来建模图像相似性。

在相似性层次结构中,首先是图像主题。如果你有一张苹果的照片,寻找相似图像时,最重要的是找到另一张苹果的照片。其次是一些更细微的细节,如颜色和色调。例如,红色的苹果应该与其他红色苹果的图片相似。接下来是主题在画面中的位置、图像背景以及传达的情感等。这些因素虽然不那么关键,但对于找到完美的替换图像至关重要。

除了这些考虑因素外,设计中的一个重要方面(尽管不一定包含在图像相似性的定义中)是图像的宽高比。在模板中,如果你想替换一张宽高比为 3:4 的图像,你希望找到另一张具有相同宽高比的图像。

设计考量与需求

在着手寻找解决方案之前,我们首先确立了以下关键需求:

  • 给定一张输入图像,推荐最相似且知识产权安全的图像。
  • 在超过 1.5 亿张图像中进行搜索。
  • 跟踪媒体库的变化。
  • 根据元数据字段(如宽高比)进行过滤。
  • 可重用性和可扩展性,以适应其他应用场景。

在这些需求的指导下,我们开始研究是否可以重新利用现有的内部解决方案来满足我们的需求。

首先,我们考虑重新利用我们的推荐引擎,它可以为用户推荐可能在设计中使用的图像。然而,推荐结果并非仅基于相似性,还受到流行度和设计上下文等因素的影响。因此,推荐的图像可能无法满足我们对相似性的要求。

接下来,我们考虑使用感知哈希系统。给定一张图像,该系统可以返回潜在的重复图像。不幸的是,重复图像和相似图像并非同一概念。重复图像被认为过于相似,不适合我们的用例。如果我们从模板中移除一张图像,其重复图像可能也不应存在,这意味着它可能无法为输入图像始终返回结果。

我们还考虑使用基于文本的图像搜索。这种搜索通常通过元数据匹配图像,描述了 Canva 现有的搜索流程。然而,这种搜索方式并不适合我们的用例,因为虽然元数据通常包含关键特征(如主题),但它无法捕捉到细微的视觉特征,如主体数量、关键颜色和图像情感。

最后,我们考虑使用 AI 生成的图像作为替换图像。但这一选项被排除,因为生成的图像无法保证知识产权安全。

在没有合适解决方案可供重用的情况下,我们不得不构建一个基于图像相似性的图像到图像搜索系统。

图像嵌入

我们首先考虑如何表示图像,这将极大地影响我们下一步决定如何搜索图像。鉴于我们已经排除了基于文本的图像表示(文本到图像搜索),剩下的方向是将图像作为高维向量进行视觉表示,即图像嵌入。我们从训练图像相关任务的机器学习模型中提取这些嵌入。幸运的是,计算机视觉是一个在计算机科学中被广泛研究的领域,因此我们决定探索当前最先进的解决方案,而不是开发新的解决方案。我们选择了 5 种表现优异的模型进行实验:

  • DINOv2
  • CLIP
  • ViTMAE
  • DreamSim
  • CaiT

我们从图像库中选择了 5 万张图像。对于每个模型,我们为每张图像生成嵌入,并使用 Faiss 库将其存储在内存中的向量数据库中。然后,我们选择了 200 张样本图像,并为每个模型找到最近的 3 个邻居。工程师和设计师手动查看了最近的邻居,并根据之前描述的图像相似性层次模型,决定最适合的模型。

除了这些方法外,我们还尝试将图像发送到 GPT4o,并附上描述它的提示,使用文本描述来搜索 CLIP 向量数据库,因为 CLIP 支持图像到图像和文本到图像的用例。

以下是每种方法对于单个输入图像的最相似图像的结果示例,更多示例请参见“其他模型比较示例”部分。

图 3 - 单个输入图像的最相似图像示例

每个模型都取得了令人印象深刻的结果。描述 + CLIP 的方法效果最差,因为它未能捕捉到许多理想的相似性方面,例如次要主体以及图像中的大多数颜色或色调。最终,在对大量图像进行评估后,我们得出结论,最适合我们用途的模型是 DINOv2。

向量数据库

既然我们决定使用图像嵌入,接下来需要决定采用哪种向量数据库方法,因为这是存储和查询高维向量的最佳方式。我们首先需要决定是采用内存内方法还是外部向量数据库。

对于内存内方法,我们需要将整个 1.5 亿张图像的图像库加载进来,对其进行嵌入并将其包装在索引中,然后将其持久化到内存中。这将需要一台成本高昂、拥有大量 RAM 的专用机器,这与 Canva 推荐的设计方法并不相符。此外,媒体库大小的显著波动将需要迁移到拥有更多 RAM 的服务器,从而进一步增加维护成本。

相比之下,我们可以像使用典型的持久化解决方案一样与外部向量数据库进行交互,能够实时更新以适应媒体库的任何变化,且成本更低。此外,支持元数据字段和字段过滤也是可能的,这对于像根据图像宽高比进行过滤等操作至关重要。我们选择了这种方案,并且由于时间和成本原因,决定使用第三方向量数据库,而不是自行构建。

结果

总体而言,照片搜索结果令人印象深刻,但在图形替换方面表现稍弱。该系统在保留照片的主题、背景和整体情感方面表现出色,但在包含文本、符号或非写实图像(如卡通或绘画)的图像中表现较弱。

以下是一些替换效果良好的示例:

图 4 - 替换效果良好的示例

以下是一些替换效果较弱的示例:

图 5 - 替换效果较弱的示例

出现这些弱点的可能原因有两个。首先,DINOv2 是在一个名为 LVD-142M 的自定义数据集上训练的。尽管该数据集是闭源的,但构成其组成部分的许多开源数据集大多来自照片,而不是卡通或符号丰富的图像。其次,DINOv2 并未针对符号识别任务进行训练,而是更多地用于一般对象、纹理和场景分类,这源于其在图像的掩码部分上进行训练。

因此,在没有定制原始 DINOv2 图像嵌入方法的情况下,我们在照片上取得了良好的结果,这对于需要此功能的专业设计师来说是一个巨大的帮助。

用户界面

现在系统已经上线,我们可以将其功能集成到模板助手(Template Assistant)中,这是我们展示给 Canva 模板设计师的菜单。设计会检查是否存在违反媒体规定的情况并进行突出显示,并向设计师展示排名前 8 的相似图像。用户选择后,相似图像将替换掉框架中的图像。我们可以将设计提交给人工审核并重新发布到模板库中,从而创建一个用于质量控制的人工参与系统。以下是带有反向图像搜索建议的用户界面示例:

图 6 - 带有图像替换建议的模板助手

专业设计师的初步试用表明,与常规搜索相比,使用替换建议进行图像替换的速度提高了 4.5 倍。对于结果较差的情况(如卡通和符号丰富的图像),用户可以选择多个建议,或者完全使用 Canva 的常规搜索功能。

未来工作

该系统已经达到了最小可行产品(MVP)的质量水平,但仍有许多改进空间,例如包含文本的图像。一个想法是在将图像存储到数据库之前检测图像中的任何符号或文本,并将其作为元数据字段记录在向量数据库中。然后,对于新的输入图像,我们可以将检测到的文本或符号与向量数据库中现有的文本元数据进行匹配。

例如,如果图像包含文本“一月”,我们可以将其存储在数据库中的“文本”字段中。然后,当我们提供输入图像时,会检测到符号和文本。如果存在,我们可以使用子字符串匹配等方法将向量数据库的结果过滤为完全匹配或接近匹配的文本。如果这种方法过于严格

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐