衣服匹配算法
Learning Type-Aware Embeddings for Fashion Compatibility
摘要
本文主要是为了解决,衣着(帽子,鞋子,衣服)同类之间的相似性,以及异类之间的兼容性问题。文中推荐的方法使用的嵌入向量的的方法,使用这个向量代表衣着的属性,这种方法可以解决以往模型所不能解决的服饰属性的代表性问题。比如从一堆帽子中选择适合衣着搭配的帽子。
简介
左边:传统的方式是将所欲类型的物体,嵌入到同一个空间中,匹配衣服和哪个鞋子最相似,以距离远近来度量。 右边:本文的嵌入方式,首先将所有的先嵌入到一个向量空间中,然后将共有向量空间映射到根据类别分割的子空间中,也就是说评价一个鞋子是否与外套相匹配,就需要在鞋子上衣空间匹配。与公用空间的计算大不相同,需要找到两双鞋子,一个是匹配上衣的,一个是和匹配上衣很不一样的。
传统的方式,进行嵌入会出现,嵌入向量不能表达类别的问题,这就会导致各种问题,比如鞋子和上衣匹配,上衣和裤子匹配,那么传统方式的嵌入向量就需要鞋子与裤子匹配。但是现实中这种情况是不对的。
本文中的方式,在训练公用嵌入向量空间的时候,使用了数据语义Loss, 将语义相似的放到紧邻空间,对每一个比对都放到一个比对空间中,这一步是基于距离度量训练的,以获得匹配分数。
使用type-specific投射,通用embedding到成对适配空间. 同时也训练了一个文本语义模型,正则化通用embedding,并且学习相似以及适配的关系。
相关工作
嵌入方法主要是根据提供的积极对实例以及消极对实例,来学习复杂的联系,目前主要的思路包括,triplet Loss(在人脸识别中具有很好的表现),孪生网络。但是这些特征提取的思路并没有区分类别。后来Han将装束的各类类别变量输入到LSTM。目前来说这些方法训练也是一种困难。
数据集合
使用的是自己采集的数据集合
在划分训练集和测试集的时候是非常有技术含量的,比如需要考虑训练集合中的一件衣服,应该出现在测试集合从未出现的着装中。
最简单的办法是,直接划分,但是有一个问题 一件衣服出现在了train的衣服组合中,也出现在了test的衣服组合中。
还有一个复杂,确保每种衣服只出现在一种数据集合中,使用图像分割算法确保每一件衣服都只出现在一个数据集合中,然后去除一些冗余数据。
类的嵌入向量
首先需要一个卷积网络
将图像对xi, xj映射成yi, yj。其中这种embdeding空间对于标注适配的对距离近,标注非适配的对距离较远
地中xi表示第i个物体。
假设有T个类别,例如xiT表示T类别的第i个, 一个triplet 数据如下{xiu, xjv, xkv},
其中(xi, xj)是合适的,但是xk是随机选择的,从来没有和xiu同时出现过。
u 是有空白。
我们定义M(u, v)为类别嵌入空间,在这里u和v适配。给出一个映射P:u->(u,v)
将类别u映射到M(u,v),这些映射是线性映射主要为了降低维度,对于适配的一组数据(xiu, xjv)距离
保持这个公式足够小。
其中公共的embedding空间向量f(xiu, theta), f(xjv, theta)并不一定相似,这主要依赖与类空间的嵌入映射。
这种通用形式需要进行大量的计算才可,本文中研究了两步的简化方案。
首先使用对角映射度量,其中w(u, v)是一个d维的向量,然后将类空间中的,度量变成下面形式,
其中点代表元素之间相乘。 所以trible loss更改成如下结构
其中u是margin
学习embedding的限制
为了正则化适配的学习,使用了描述文本。对描述文本进行嵌入。
其中t代表x的文字描述,经过g后嵌入向量化。
一般认为图片和他自身描述会相似但是和其他描述会相差较大
限制在xjv, xkv
最后增加了L1针对映射的惩罚向量和L2针对初次embedding的惩罚向量。