论文:《Learning Fashion Compatibility with Bidirectional LSTMs》
论文地址:https://arxiv.org/abs/1707.05691
代码地址:https://github.com/xthan/polyvore
1. 简介
时尚搭配推荐的需求越来越大,本文是基于两个方面的时尚推荐:
- 给定已有的服饰,推荐一件空缺的衣服,从而形成一套搭配,即在已经有上衣、裤子的情况下推荐一双鞋子;
- 根据多种形式的输入,比如文本或者一件衣服图片,生成一套搭配;
目前存在的难点在于:如何对不同时尚类别的单品通过简单计算视觉相似性来建模和推理其匹配性关系。
目前相关的工作,大部分主要集中在对服饰解析、服饰识别和服饰搜索这三个方向的工作,而对于少量做服饰推荐的工作,也存在这些问题:
- 没有考虑做一套搭配的推荐;
- 只能支持上述两个方向的其中一种,即要不只是推荐一套搭配或者对已有的搭配推荐缺失的一件衣服;
- 目前还没有工作可以支持多种形式的输入,比如可以输入关键词,或者输入图片,或者图片+关键词的输入形式;
对于一套合适的搭配,如下图所示,本文认为应该满足这两个关键属性:
- 这套搭配中的任意一件服饰应该是视觉上匹配并且是形似风格的;
- 搭配不能存在重复类型的服饰,比如包含两双鞋子或者两条裤子;
![](https://i-blog.csdnimg.cn/blog_migrate/576a31f7e5c00167f5ed3733e7b9276d.png)
目前相关在做搭配推荐的工作中,主要尝试的方法有:
- 利用语义属性,即规定了哪些衣服之间是匹配的,但是这种需要对数据进行标记,代价很大而且没办法大量使用;
- 利用度量学习来学习一对时尚单品之间的距离,但是这只能学习两两之间的匹配性,而非一套搭配;
- 对于 2 的改进是采用投票策略,但是同样是计算代价非常的大,而且也没办法利用好集合中所有单品的一致性;
为了解决上述的问题,本文提出了通过一个端到端的框架来联合学习视觉语义向量(visual-semantic embedding) 和服饰物品之间的匹配性关系,下图就是本文的整体框架。
首先是利用 Inception-V3 模型作为特征提取器,将输入图片转成特征向量,然后采用一层共 512 个隐藏单元的双向 LSTM(Bi-LSTM)。之所以采用双向 LSTM,是因为作者认为可以将一套搭配当做是一个特定顺序的序列,搭配中的每件衣服就是一个时间点(time step)。在每个时间点,Bi-LSTM 模型将根据之前的图片来预测下一张图片。
另外,本文的方法还通过将图片特征映射到一个语义表示来学习一个视觉语义向量,它不仅提供了语义属性和类型信息作为训练 LSTM 的输入和正则化方法,还可以实现对用户的多种形式输入来生成一套搭配。
训练好模型后,本文通过三个任务来评估模型,如下图所示,分别是:
- Fill in the blank:给定一套缺失某件衣服的搭配,然后给定四个选择,让模型选择最匹配当前搭配的服饰单品;
- 搭配生成:根据多种输入来生成一套搭配,比如文本输入或者一张服饰图片;
- 匹配性的预测:给定一套搭配,给出其匹配性得分。
2. Polyvore数据集
本文实验采用的是一个叫做 Polyvore 的数据集。Polyvore 是一个有名的流行时尚网站,用户可以在网站里创建和上次搭配数据,这些搭配包含了很丰富的多种形式的信息,比如图片和对单品的描述、对该搭配的喜欢数、搭配的一些哈希标签。
Polyvore 数据集总共有 21889 套搭配,本文将其划分成训练集、验证集和测试集,分别是 17316、1497 和 3076 套。
这里参考了论文《 Mining Fashion Outfit Composition Using An End-to-End Deep Learning Approach》,使用一个中图分割算法保证训练集、验证集和测试集不存在重复的衣服,另外对于包含太多单件的搭配,为了方便,仅保留前 8 件衣服,因此,数据集总共包含了 164,379个样本,每个样本是包含了图片以及其文本描述。
对于文本描述的清理,这里删除了出现次数少于 30 次的单词,并构建了一个 2757 个单词的词典。
另外 Polyvore 数据集的衣服是有一个固定的顺序的——一般是tops、bottoms、shoes 以及 accessories,对于 tops 的顺序也是固定的,一般是 shirts 或者 t-shirts,然后是外套,而 accessories 的顺序一般是手提包、帽子、眼镜、手表、项链、耳环等;
因此,这种固定顺序可以让 LSTM 模型学习到时间的信息。
3. 方法
3.1 Fashion Compatibility Learning with Bi-LSTM
第一部分介绍的是基于双向 LSTM 的服饰匹配性学习。这主要是利用了 LSTM 模型的特性,它们可以学习到两个时间点之间的关系,同时使用由不同细胞调节的记忆单元,有助于利用长期的时间依赖性。
基于这个特性,本文将一套搭配看作一个序列,搭配中的每个图片就是一个独立的时间点,然后利用 LSTM 来对搭配的视觉搭配关系进行建模。
给定一套搭配, F = x 1 , x 2 , ⋯ , x N F={x_1, x_2, \cdots, x_N} F=x1,x2,⋯,xN,其中 x t x_t xt 是搭配中第 t 个衣服经过 CNN 后,提取到的特征。在每个时间点,先采用前向的 LSTM 对给定的图片预测其下一张图片,这种做法学习两个时间点的关系相当于在学习两件衣服之间的匹配关系。
这里使用的 loss 函数如下所示:
其中 $\theta_f $表示前向预测模型中的模型参数,而 P r ( ⋅ ) P_r(\cdot) Pr(⋅) 是 LSTM 模型计算的,表示基于之前的输入来预测得到 x t + 1 x_{t+1} xt+1 的概率。
更详细点说,LSTM 将输入映射到输出也是通过以下一系列的隐藏状态,计算公式如下:
其中 x t , h t x_t, h_t xt,ht 分别表示输入和输出向量,其他的 i t , f t , c t , o t i_t, f_t, c_t, o_t it</