服饰搭配综述

Learning Type-Aware Embeddings for Fashion Compatibility

1. 模型主要思想

  主要目标是希望能找到一个特征空间,在这个特征空间中,特征之间的欧氏距离的远近能够表达出对应服饰的**搭配程度(compatibility)**,也就是让搭配的服饰之间特征的距离尽可能近,而不搭配的服饰特征之间的距离尽可能远。这就很容易去联想到triplet loss。

  传统使用卷积的方法提取特征,然后用上面描述的,让搭配的服饰的两个特征尽可能相近,让不搭的两个特征距离尽可能远的方法不太可行。主要原因是因为,如果一件衬衣和一双鞋子搭配,那么衬衣与鞋子的特征距离就会被拉进。如果这双鞋子和一顶帽子搭配,而这顶帽子和刚刚的衬衣不搭配的话,就会出现一个问题。由于鞋子与帽子是搭的,因此鞋子和帽子的距离就会被拉近,同时帽子也会与衬衣的距离相近,然而衬衣与帽子是不搭的,这样就会出现问题。主要的原因是距离是可以传递的,而是否搭配(compatibility)是无法传递的。也就是A和B搭配,B和C搭配,不一定就能得出A和C也是搭配的。

  因此,这篇文章首先使用一个卷积特征提取器,将原始图片映射到一个特征空间,这个特征空间一般用于分类(检验similarity),然后再通过学习一个映射(mapping),如图1所示,将原始的特征空间映射到类型特征空间中,对于两两类型都会有一个独立的特征空间,比如上衣-裤子、裤子-鞋子、鞋子-上衣等等,在这个上衣-裤子的特征空间中,只判断上衣与裤子的compatibility。这样做就能可以保证了在特征空间上距离度量的一致性,不会产生搭配传递性的问题了,但是这样会产生另外一个问题,也就是我们只能对两件单品进行一对一判断是否搭配,但是无法多对一进行判断是否搭配。也就是我们可以判断上衣和裤子是否搭配,但是在搭配套装生成的过程中,我们先找出了一件与上衣搭配的裤子,如果我们想找一件与上衣裤子这个组合搭配的鞋子就无法做到,我们只能通过判断上衣搭配的鞋子,或者裤子搭配的鞋子(目前通过上衣去计算所有鞋子的距离,再通过裤子去计算所有鞋子的距离,再将两个距离相加,选出距离之和最小的鞋子)。

![图1](https://i.imgur.com/IJwx8Ua.png)

2. 模型结果以及一些细节

  在数据集的构建上,作者构建了一个三元组,对于同一个outfit中的服饰,我们认为其是搭配的,在制作三元组时,首先通过遍历所有的outfit,选取一件作为query,将这个outfit剩余的服饰作为其positive sample,与此同时选取与positive sample 类型一致的商品,但是不与query商品出现在同一套搭配里的商品作为negative sample,这样训练的三元组数据就制作完成了。(这种制作数据集的方法会存在一个问题,在负样本的挑选上,其实有可能会选到与其搭配的裤子作为负样本)

对于一般的triplet loss形式如下所示:

![](https://i.imgur.com/BvmUsmb.png)

其中u为设置的margin,主要是为了防止d(i,j)=d(i,k)这种情况发生。

模型的Loss分成三个部分:

  1. compatibility loss:

    ![](https://i.imgur.com/s6lPLcx.png)
    这个loss用于衡量服饰之间搭配程度,服饰经过卷积输出的图片特征经过映射变换,将不同类型的服饰特征 $x_i^{(u)} , x_j^{(v)}, x_k^{(v)}$ 映射到属于自己类型的那个特征空间下,再采用三元组的思想,进行距离的计算得到相互搭配样本 $x_i^{(u)}$ 与 $x_j^{(v)}$ 的距离,以及相互不搭的样本 $x_i^{(u)}$ 与 $x_k^{(v)}$ 的距离。套用triplet loss,将样本和postive样本的距离与negative样本之间的距离做差,最后再加上一个margin,去极小化这个值,这样我们就能确保query样本与正样本之间的距离尽可能小,同时query与负样本之间距离尽可能的大。
  2. similarity loss:

    $L_{sim}=\lambda_1l(x_i^{(u)} , x_j^{(v)}, x_k^{(v)})+\lambda_2l(t_i^{(u)} , t_j^{(v)}, t_k^{(v)})$
    文章除了使用了compatibility loss之外,还加上了衡量相似度的loss,这个loss主要是针对卷积特征提取这一部分,将输出的卷积特征之间采用triplet loss计算方式,对卷积特征以及文本特征都进行计算,保证相同类型的图片之间的视觉特征和文本特征距离尽可能小,而不同类型之间的视觉特征和文本特征尽可能大。
  3. vse loss:
    借鉴了Hanxintong的LSTM搭配算法[1]里使用的loss,文章同时训练了一个视觉语义特征空间,在这个特征空间中,让第i个item的图像特征$x_i^{(u)}$与其文本特征$t_i^{(u)}$距离尽可能近,同时让第i个item的图像特征$x_i^{(u)}$与第j个item的文本特征$t_j^{(v)}$距离尽可能远。

最后为了鼓励模型学习到的权重保持稀疏性,对将特征映射到对应的类型的特征空间上采用了L1惩罚,同时对图片特征提取部分采用了L2惩罚。

模型结构如下所示

Learning Similarity Conditions Without Explicit Supervision

1. 模型思想

  对于服饰搭配,其中最核心的部分就是Metric Learning,也就是去学习出一个函数来判断两个items的特征是否搭配。通常一件服饰有着多个视觉特征,比如类型、颜色、风格等等。一件红色的卫衣与一双红色的高跟鞋在颜色特征上相似,但是在类型特征上并不相似。同样扩展到搭配上,这两件商品在颜色上是可以进行搭配的,但是在商品风格上却并不搭配,因此一个简单的embedding空间是无法学习到这些矛盾的搭配(或者相似性)概念的。基于type-aware的网络,将服饰类型作为一个condition传入到网络,来简化模型需要学习的复杂特征,在这两个items的特征字空间上只关注除去类型之外的特征。这样会存在着一个问题,模型无法泛化到未见过的类型商品上,因此这篇文章就想不用输入用户定义好的类型,来学习到这些搭配的特征。

2. 模型结构以及细节

  模型结构如下图所示,首先模型通过一个卷积神经网络来提取出图片的特征,紧接着会将卷积特征通过M个条件mask$C_j$被映射到M个不同的特征子空间中。而对于条件权重分支部分,其实可以将其看成注意机制,该分支包含了两个fc层,最后是一个softmax输出M个子空间的权重。举个栗子,假如我们将这M个子空间理解为类型子空间、颜色子空间、风格子空间,条件权重分支就会决定当前去比较哪一个子空间的特征

  这篇文章的目的是在一个弱监督的条件下,将不同的相似条件以及属性作为一个隐藏变量,来学习区分数据