Outfit Compatibility Prediction and Diagnosis with Multi-Layered Comparison Network
论文题目:Outfit Compatibility Prediction and Diagnosis with Multi-Layered Comparison Network
论文地址:https://arxiv.org/abs/1907.11496
代码:https://github.com/WangXin93/fashion_compatibility_mcn

联系方式:
github:https://github.com/ccc013
知乎专栏:机器学习与计算机视觉,AI 论文笔记
微信公众号:AI 算法笔记
简介
本文基于一个多层比较网络(Multi-Layered Comparison Network,MCN) 实现搭配匹配预测和诊断,并实现一个端到端的框架。主要贡献如下:
- 通过采用梯度值来近似输入商品的相似度实现对搭配的诊断,可以给出搭配中哪件商品最不不合适,并可以通过替换该商品来提高搭配的评价得分;
- 利用CNN 的不同层的特征进行商品之间两两对比,得到一个相似度矩阵,然后再通过两层全连接层来输出搭配的评价得分;CNN的不同层特征可以解释为不同级别的语义信息,从低级的颜色、纹理到高级的风格等信息;
- 对 Polyvore 进行处理,得到一个更加干净的数据集 Polyvore-T,并对类别进行归纳得到新的 5 大类型–上装、下装、鞋子、包和首饰(Top、Bottom、Shoe、Bag、Accessory)
本文的应用可以如下所示,主要分为三方面的应用:
- 判断搭配好坏,也可以对搭配进行评分;
- 对搭配进行诊断,判断需要替换哪件商品;
- 根据 2 的诊断结果,从数据集选择合适的同类别商品进行替换。

背景
1. 时尚商品识别和理解
时尚商品识别是实现搭配匹配性的第一步,也是非常关键的步骤。
《DeepFashion》[7]论文建立了一个时尚商品数据集–DeepFashion,并采用CNN学习商品的类别、属性和位置信息;
一些相关的方法分别从有监督、无监督,加入文本信息、搭配之间的关联信息等方面来提高对商品的识别精度。
2. 视觉匹配性学习
搭配的匹配性是非常主观的审美标准,但目前也存在不少搭配相关的网站,比如 Polyvore 数据集(也是目前搭配领域非常常用的数据集)。
之前对于搭配匹配性的学习方法主要分为两个方向:
- 学习一对商品的匹配性
- 采用端到端方法学习搭配的匹配性
对于一对商品的匹配性,可以通过计算商品的特征的欧式距离,但最近的学者认为搭配匹配性并不像检索任务一样严格,并不太适用欧式距离来学习,于是就有很多工作是尝试采用其他的 metric learning 方法来学习。但这个方向的问题是没有考虑到整体搭配的匹配性和两两商品的匹配性之间的关系。
对于第二个采用端到端方法,则可以学习多种商品的特征,然后利用 MLP 来计算搭配的匹配性得分。但 MLP 并不是一个有效的学习每个商品间关系的方法。也有工作采用 LSTM 进行学习,但搭配更类似集合,而不是序列,因为它是无序的。
方法
MCN 整体流程如下所示:

从上图可以知道,MCN 总共分为四大部分,分别如下:
- Multi-layered Feature Extractor
- Comparisons at Different Layers
- Predictor
- Outfit Diagnosis by Gradients
其中第四部分是对搭配进行诊断,训练模型阶段仅包含前三个部分。下面会分别介绍这几部分内容:
1. Outfit Diagnosis by Gradients
整体搭配的匹配性是综合考虑了商品之间两两在不同方面,比如颜色、纹理、风格等,进行对比后的结果。一般要学习整体匹配性和成对商品相似度的关系,可以考虑两种方法:
- 线性模型
优点:有很好的解释性,输入的权重就表明其输出的重要性程度;
缺点:受限的容量
- 多层感知器(MLP)
优点:有更好的容量
缺点:可解释性差
结合两者的优点,所以本文是采用梯度来近似每对商品的相似度的重要程度,从而找出不合适的商品。
首先给出商品之间的相似度矩阵 R,其公式如下所示,具体的计算方法将在下一节介绍。

R 矩阵中每个数值都是两个商品在不同特征的相似度,因为本文采用了 CNN 的四层输出特征,所以 R 矩阵是有四个,也就是 K = 4,K 表示商品对比的不同方面,其大小 N ∗ N N*N N∗N,N 是搭配中商品的个数,而本文的 N = 5,设置了搭配的商品数量上限是 5 件,因此 R 矩阵的大小是 5 ∗ 5 5*5 5∗5。
当然这里在代码实现的时候,并不需要存储 5*5 = 25 个数值,而是仅需要 15 个数值,这是剔除重复的元素。
在获得相似性矩阵 R 后,就会将这个矩阵传到 2 层的 MLP,即两个全连接层,这里 R 矩阵的维度就是 (batch, 15*4)。通过两层 MLP 输出搭配的匹配得分,公式如下所示:

这里使用了非线性激活函数 ReLU,即 R 和最终搭配得分 s 之间是一个非线性关系,这有助于提高搭配匹配判断的性能,但并不好解释做出这个搭配匹配判断结果的原因,因此采用的就是上述说的梯度值。
具体来说,对搭配评价得分 s 采用一阶泰勒展开式,可以得到:

这个近似公式就是一个线性模型(wx+b的形式),这里的权重 W 就可以用于表示相似度矩阵的重要程度,也就是每对商品的相似性的重要性,而 W 的元素是等于 s 对每个 R 的导数,即: