图像Embedding:如何用向量表示图片
图片怎么变成数字?图像Embedding就是把图片压缩成一个向量,这个向量包含了图片的核心特征。相似的图片有相似的向量。
你有没有用过"以图搜图"的功能?上传一张照片,搜索引擎能帮你找到相似的图片。它是怎么做到的?
计算机不"看"图片,它只认识数字。所以,要让计算机理解图片,第一步就是把图片变成数字。这个数字不是简单的像素值,而是一个向量——这就是图像Embedding。
想象一下,你用几百个数字来描述一张图片的内容:有没有猫、是什么颜色、光线怎么样、构图如何……这些数字组成的向量,就是这张图片的"数字指纹"。
图像Embedding,就是把一张图片映射到一个高维向量空间。这个向量(通常几百到几千维)包含了图片的语义信息。
关键性质:相似的图片,向量也相似。两张都是猫的照片,它们的向量会很接近;一张猫和一张车的照片,向量会离得很远。
这种相似性可以用余弦相似度或欧氏距离来衡量。这就是为什么我们可以用向量来搜索相似图片——只需要计算向量之间的距离。
生成图像Embedding的方法经历了几个阶段的演变:
早期的图像特征是人工设计的,比如SIFT、HOG、颜色直方图等。这些方法能捕捉一些底层特征,但无法理解高级语义。
用预训练的CNN(如ResNet、VGG)提取特征。通常取倒数第二层的输出作为Embedding。这些特征已经有很强的语义信息,能区分猫、狗、车等类别。
Vision Transformer的[CLS]token就是全局特征的表示。相比CNN,ViT的特征包含更丰富的全局信息和空间关系。
CLIP的图像编码器输出的特征,不仅能表示图像内容,还能和文本对齐。这是目前最强大的图像Embedding方法之一。
把图片库里的所有图片都转成Embedding存起来。用户上传图片时,计算它的Embedding,然后在库里找最近的向量。这就是Google Images、Pinterest Lens的原理。
用Embedding作为特征,训练一个简单的分类器。比如,把商品图片的Embedding输入分类器,判断是哪个类目。
电商网站上,用户看了某个商品,系统推荐相似的商品。方法很简单:找Embedding相近的商品。
计算图片之间的Embedding相似度,如果相似度超过阈值,就认为是重复图片。这在内容审核、版权保护中很有用。
用CLIP等模型,图像Embedding和文本Embedding在同一个空间。你可以用"一只可爱的猫"这样的文本,搜索对应的图片。
不是所有Embedding都一样好。评估Embedding质量有几种方法:
- 线性可分性:好的Embedding让不同类别的图片在空间中线性可分。用简单的分类器就能达到高准确率。
- 聚类效果:同类图片的Embedding应该聚在一起,类间距离远,类内距离近。
- 检索召回率:用Embedding做检索,看召回率和准确率。好的Embedding能找回更多相似图片。
- 鲁棒性:图片稍微变化(旋转、缩放、光照),Embedding应该保持稳定。
维度选择:Embedding维度通常在128-2048之间。维度太低会损失信息,太高增加计算和存储成本。512维是常用的折中方案。
归一化:通常会对Embedding做L2归一化,让所有向量的长度都为1。这样计算余弦相似度就变成了简单的点积,速度更快。
量化压缩:为了节省存储空间,可以用乘积量化(PQ)或局部敏感哈希(LSH)把浮点向量压缩成二进制码。虽然会损失一些精度,但可以大幅节省空间。
📋 本篇要点
- ✓ 图像Embedding把图片压缩成向量,保留了语义信息
- ✓ 相似图片有相似的向量,距离近 = 内容相似
- ✓ 生成方法:传统手工特征 → CNN → ViT → CLIP
- ✓ CLIP的Embedding支持文本-图像跨模态检索
- ✓ 应用:以图搜图、分类、推荐、去重、跨模态检索
- ✓ 好的Embedding:线性可分、聚类清晰、鲁棒性强