Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FashionNet: Personalized Outfit Recommendation with Deep Neural Network #1

Open
ccc013 opened this issue Jan 15, 2020 · 4 comments
Open

Comments

@ccc013
Copy link
Owner

ccc013 commented Jan 15, 2020

论文地址:https://www.ijcai.org/proceedings/2017/0239.pdf

@ccc013
Copy link
Owner Author

ccc013 commented Jan 15, 2020

概览

将推荐加入到搭配中,实现个性化搭配的推荐。采用的也是深度学习的算法-- CNN 模型,具体实现就是用 VGG-16 网络模型作为基础,实现 FashionNet 模型,一个 FashionNet 模型包括两个网络,特征提取网络和实现搭配的匹配网络,这部分作者设计了 3 种网络结构,并做了对比实验,而在训练上采用的两阶段训练策略,即先训练一个通用的搭配模型,然后加入用户信息来微调网络模型,此外网络的最终结构如下所示,输入两套搭配,正样本是训练集 polyvore ,也就是用户自己上传的搭配,负样本就是随机选择衣服的搭配,分别通过 FashionNet,然后计算 RankLoss。

@ccc013
Copy link
Owner Author

ccc013 commented Jan 15, 2020

主旨

作者想解决什么问题?

个性化搭配推荐

作者通过什么理论/模型来解决这个问题?

基于深度学习,以 VGGNet 为基础,设计了一个 FashionNet 网络模型

作者给出的答案是什么?

利用 CNN 进行特征提取,然后采用 FC 层进行衣服的匹配性计算,训练上采用两阶段训练,先训练一个通用的搭配模型,再加入用户信息微调模型。

作者为什么研究这个课题?

时尚搭配的需求越来越高,分类、检测、分割等都有在研究,其中搭配推荐的研究和需求也是非常大;

目前这个课题的研究进行到了哪一阶段

之前对于搭配的研究,大部分还处于学习任何两个单品之间的匹配性,以及学习比较通用的搭配模型,并没有考虑个性化推荐;最近开始有一个研究个性化搭配推荐,但还是通过手动设计特征的方法;

而在推荐方面,开始应用深度学习的网络,但推荐的都是单独的物品,并没有尝试推荐搭配这样的做法;

作者使用的理论是基于哪些假设?

  1. 度量学习,搭配的学习,类似于度量学习,设计中也是会学习任意两个单品之间的匹配性;
  2. learn to rank,排序问题

这篇文章存在哪些缺陷?

  1. 利用用户数据进行微调模型,那似乎就是每个用户训练得到一个模型,用户越多,模型也就越多,这还是有些问题;
  2. 加入用户数据,是否能很好学习到用户的个人信息,仅凭 FC 层的微调?

作者关于这个课题的构思有哪几点?

  1. 通用的搭配规则或者搭配常识,比如衬衫会选择牛仔裤进行搭配;

@ccc013
Copy link
Owner Author

ccc013 commented Jan 15, 2020

研究方法

本文研究的问题类似于度量学习,度量学习需要学习的是物体间的距离,或者说是相似性,而搭配需要学会的是衣服之间的匹配性;

网络结构

设计了三种网络结构,如下图所示。

FashionNet A

第一种网络结构,输入的时候将一套搭配里的衣服图片在颜色通道上进行concat,得到的就是一个 w*h*9 的输入图片,然后输入 VGGNet 网络,提取特征,接着是 1 个 FC(全连接)层+ softmax,输出两个数值,表示喜欢和不喜欢的概率;

这个网络的特点就是将特征学习和匹配性衡量都集成在一起;

FashionNet B

第二种网络结构,输入的时候并不会将搭配中的衣服图片 concat 起来,而是分别传入单独的 VGGNet 中,但每种衣服经过的网络都是相同的,也就是都被影射到共同的隐空间中,然后提取到的特征 concat 起来,后面跟着 3 个 FC 层 + softmax。

FashionNet C

前两个网络的问题:

  1. 在获取高阶关系的时候会有困难;
  2. 造成数据空间的扩大(原始数据或者特征空间),这要求大量的训练样本,但实际上并没有足够数量的训练样本;

因此,第三种网络结构,特征提取部分和 FashionNet B 是一样的,但是之后则是将任意的两个衣服提取到的特征 concat,经过各自的匹配网络(3FC+softmax),匹配网络的数量就和搭配数量有关系了;不同的匹配网络应用于不同类型衣服对,比如上装-鞋子,上装-下装对等,匹配网络的结果会累加起来的到搭配的最终得分 s。

训练网络模型

最终训练的网络结构如下图所示,

个性化搭配推荐不仅仅涉及到度量学习,还是是一个排序学习(learning-to-rank )问题,输入是正负样本对,分别输入一个 FashionNet ,网络输出的评分 s ,再采用 rank loss 计算 Loss。公式如下图所示:

训练

采用两阶段训练策略的原因有:

  • 每个用户的搭配数量是比较少的,特别是如果需要训练一个性能很好的神经网络;
  • 很多用户的搭配都比较相似,这些相似的搭配数量并不少;
  • 尽管每个用户的搭配审美都不完全相同,但还是存在很多通用的搭配尝试,比如衬衫通常都会搭配牛仔裤

基于以上的原因,选择两阶段训练网络的策略。

第一阶段的训练时学习一个通用的搭配网络模型,在这一步,会丢弃用户信息,将所有的搭配都混合在一起,然后训练网络。一个训练样本是正样本和负样本的搭配对,采用在 ImageNet 上预训练好的参数初始化 VGGNet,其他的网络层参数则是通过高斯分布进行初始化;

第二阶段是训练用户特定的模型(user-specific model)来进行个性化推荐。初始化是用第一步训练好的网络模型参数,接着使用每个用户的数据来微调网络。

对于上述的 3 种网络结构在第二阶段的微调,是这样设置的:

  1. FashionNet A 的微调是对整个网络都微调(特征提取和匹配网络);
  2. 对于 B 和 C 两个网络,有两种策略:
    • 微调整个网络,特征提取网络和匹配网络都会有个性化的参数,也就是对不同的用户,同样的衣服会有不同的特征表示;
    • 固定特征提取网络,仅微调匹配网络。这种做法会加快训练速度,实际应用中更多的微调都是这种做法。

三种网络结构的参数设置情况如下所示:

@ccc013
Copy link
Owner Author

ccc013 commented Jan 15, 2020

实验

数据集

采用的 Polyvore 数据集,包含来自 800 个用户上传的搭配数据,每套搭配是三件衣服--上装、下装和鞋子,将 polyvore 作为正样本,负样本则是随机选择上装、下装和鞋子得到的搭配。

数据集分为训练集、验证集和测试集,在每个集合中,每个用户的正样本数量分别是 202,46 和 62,而负样本则是正样本的 6 倍,也就是 1212,276 和 372。

指标

NDCG 评价标准,用来评价一个排序的列表,其公式如下所示,第 m 个位置的 NDCG 是:

![](/Users/luocai/Nutstore Files/Study-Notes/paper_reading/images/FashionNet/FashionNet_ndcg.png)

$N_m$ 表示一个理想排序的得分,对于正样本,$y_{\pi'(i)}$ 是 1,负样本是 0;

NDCG 的最优数值是 1;

Mean NDCG 是 NDCG@m (m=1,....M,表示排序的长度)的均值;

最终采用的指标:

  • mean NDCG:所有用户的 mean NDCG@m,也就是先计算不同m数值的NDCG,然后求平均,再除以用户数量;
  • average of NDCG @m:所有用户的NDCG@m,不同m值的均值(仅除以用户数量)
  • top-k 结果中正样本的数量(特定的 k 数量)

参数设置

使用的框架是 Caffe,batch 为 30,epoch 是 18。

学习率的策略参考论文《Returnofthedevilinthedetails:Delvingdeep into convolutional nets》。

实验结果

实验结果如下图所示:

上图中,Initial 是采用初始化参数的结果,也就是预训练模型的结果,Stage one 就是训练好第一阶段的模型,Stage two (partial)Stage two(whole) 就是第二阶段的微调的两种策略,前者就是固定特征提取网络,微调匹配网络,后者就是整个网络都微调;Stage two(direct) 是不经过第一阶段的训练,直接微调网络的结果,应该就是直接用每个用户的数据来训练一个网络模型的结果。

通过实验结果的对比,可以得到这四个结论:

  1. FashionNet A vs B、C 前者是将特征提取和匹配计算都放在一个网络中,而后面两种网络是分开这两种功能,实验结果表明采用不同网络实现不同的功能,可以取得更好的性能;
  2. FashionNet B vs C 两个网络的区别是在匹配网络的设计,前者是仅设计了一个匹配网络,后者是任何两种不同类别的衣服的特征进行 concat 后,输入一个单独的匹配网络,实验结果是后者的效果更好,这表明将高阶关系分开成一系列成对组合是更佳的解决办法;
  3. 两阶段训练策略 对比第一阶段和第二阶段的结果,后者效果更好,这也说明微调是非常有用的技术;
  4. **Stage two (partial) vs Stage two(whole) ** 实验结果表明后者的效果更好,这表明学习一个特定用户的特征表示对于推荐任务很有帮助,但这种策略的训练时间会更久,它需要重新计算所有衣服的特征,因此,实际应用会采用效果稍差的第一种方法,仅仅微调匹配网络。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant