工程师的时尚法则:找同款?用CNN啊!

编者按:最近微软和Twitter的工程师一起写了一篇博客,教大家利用微软AI工具建立深度学习模型,对买家服装图像与网店相似商品图像进行匹配。使用Azure数据科学虚拟机与Visual Studio Code Tools for AI,就可以快速建立、训练与部署模型。本文由 “大数据文摘”编译自微软机器学习博客文章“Using Siamese Networks and Pre-Trained Convolutional Neural Networks (CNNs) for Fashion Similarity Matching”。

你有没有看过某个网红小姐姐穿了一件特别棒的衣服,然后急切地想找到同款?

你不是一个人——全球零售商都们都想用这个策略获利。

每当某个明星或者时尚博主在微博或者朋友圈po出一张图,这就是一次低成本的营销机会。随着网购与照片分享变得越来越流行,利用用户原创内容(UGC, User Generated Content)的市场营销策略已成为驱动流量与零售额增长的关键。通俗点说,一张漂亮的“买家秀”可能抵得过一票销售辛苦的游说。

相比于专业内容,“买家秀”的价值在于,以图像与视频为例,效果更加具有真实性。

然而,这也存在一定风险,因为很难控制内容质量及其产生的效果。

来自微软的软件工程师Erika Menezes与Twitter软件工程师Chaitanya Kanitkar用AI工具建立一个深度学习模型,希望将买家衣物图像与网店中相同或相似的物品相匹配。

本项目为斯坦福大学2018年春季CS231n课程作业的一部分。

链接:http://cs231n.stanford.edu/

感兴趣的同学也可以查看大数据文摘在网易云专栏上的汉化版课程

网址:

http://study.163.com/course/courseMain.htm?courseId=1003223001&share=2&shareId=10146755

这个“买家秀”还原问题被通称为买家到商家(consumer-to-shop)或街道到商店(street-to-shop)衣物检索问题

本文将具体展示如何使用微软的机器学习平台Azure机器学习(AML)Azure数据科学虚拟机(DSVM)快速推动该项目的开发。

图1 建立、训练与配置跨领域视觉搜索模型的微软AI平台架构图

定义问题

在买家到商家衣物检索问题中,我们试图将用户拍的图片(即一种UGC)与同一件衣物但是由专业摄影师按既定要求拍摄的图片相匹配。用户的图片一般都是手机拍摄,质量比店家的专业商品展列图片差很多。

具体来说,对于每一张新输入的UGC图片,我们希望返回k个与该图片最为相似的商品图片,并从中得到一件最匹配的商品。我们将需要定义一个距离度量函数,来量化被搜索图片与所有商品品类图片之间的相似度,并且根据其值排序得到k个最相似图片。

数据

本文数据采用Deep Fashion数据集的一部分。该数据集包括UGC图片及多种衣物类别的商品品类图片。我们使用四个最主要的衣物类别来进行实验:连衣裙、半裙、上衣与下衣。详见下图。

图2 各类衣物图片数据量

Deep Fashion数据集

http://mmlab.ie.cuhk.edu.hk/projects/DeepFashion.html

图3与图4分别为买家与店家图片示例。这些例子展示了本任务的复杂性:匹配衣物的样式,但颜色不需要一致。

图3 左一与左二为买家衣服秀,左三与左四为同款店家衣服秀

从图3很容易看出,店家图片的质量较高,整件衣物都位于图片中央。买家数据集的挑战在于,每张图片都只对应唯一一个正确商品编码,所以有的与之非常相似但并不是同一商品的衣物就会导致模型精确度降低(请看图4)。为缓解此问题,我们使用Top-K准测(Top-K Accuracy,即在返回的前K个结果中,只要出现了正确的预测结果,则该数据点被记为“正确预测”)来评估模型性能(该方法也被用于衡量衣物相似度)。

图4 左一为买家衣服图,左二与左三为同一件商品的店家图,左四与左五为另一件非常相似但却是不同商品的店家图。

t分布随机邻嵌入(t-Distributed Stochastic Neighbor Embedding, or t-SNE)是一种将高维数据映射到二维空间的常用可视化方法。我们使用t-SNE将预训练ImageNet模型从买家图片中提取出的特征进行可视化,结果如图5所示。裤子的图聚类于左下部,而半裙则聚类于右上部。左半边的图片多为包括腿部的买家图片,而右半边的则是放在平面上拍摄的衣物图片。

图5 t-SNE处理后的买家图片ResNet50分类特征结果

方法

我们尝试了三种方法:

  • 白盒特征

  • 预训练CNN特征

  • 使用预训练CNN特征的孪生网络

下面详细介绍每一种方法。

1.白盒特征(White-Box Features)

我们第一个尝试的白盒特征图片提取器曾在计算机视觉上被广泛应用。特征先被提取,然后它们被连接起来为每一张图片构造一种多特征的表述。我们在此提取了以下特征:

  • 方向梯度直方图(Histogram of Oriented Gradients),计算图像的每一细分区块内各梯度方向的发生次数。

  • 色彩直方图(Color Histograms),将图像中所有颜色划分为25个颜色区间并制作直方图以查看其分布。

  • 色彩一致性(Color Coherence),衡量每一像素的色彩与其所属大区块颜色的相似度。颜色是衣物非常重要的一个属性,因此本特征提取器是用于补充色彩直方图信息的。

  • 哈里斯边角侦测(Harris Corner Detection),提取图像中代表边角的特征点。

我们使用白盒特征计算了每一张买家图片的K近邻,并尝试了若干种标准距离度量函数(L1,L2,余弦函数)。结果如下图所示:

图6 各类衣物白盒特征在不同距离函数下的表现

2.预训练CNN特征

在本方法中,我们使用预训练CNN模型对ImageNet上的1000个物体类别图像进行分类训练。

我们使用神经网络每层的激活函数作为特征表示,在买家图像与店家图像上使用VGG-16,VGG-19,Inception v3和ResNet50进行训练,并且使用了L1作为度量函数。下图展示了上述模型的层数与参数数量。

预训练神经网络结构

图7展示了模型结果。总体来说,提取特征表现有了很大的提高,ResNet50提取的特征在所有类别上都具有最好的整体表现。半裙类别达到了最好的结果,使用Top-20准确率达到了17.75%。

图7 各大类预训练CNN特征表现

在之前的方法中,我们分两步来计算距离函数。首先,我们使用低等级图像表征或预训练过的卷积神经网络最后一层隐藏层中提取出的特征,从图像中提取表征向量。然后将该向量代入标准化向量距离函数(如L1,L2与余弦函数)进行计算。然而在本方法中,我们使用提取出的买家与店家图像特征对来学习得到距离函数。这里我们使用孪生神经网络

3.孪生网络

孪生网络包含两个或多个完全相同的子网络。这些子网络基本上拥有一致的结构与权重。输入值被分别传入这些网络,最后输出时再合成一个单独的输出值。该输出值衡量输入值之间的距离。该网络使用这些输出值进行训练,最小化相似输入值之间的距离,以及最大化不同输入值的距离。详见图8。

图8 模型结构

我们使用对数交叉熵损失函数,其表达式如下:

这里的X1与X2分别为买家与店家图像特征,t则为目标值——相似特征对则为1,不相似特征对则为0。使用孪生网络以及预训练ResNet50提取特征,结果在几乎所有类别上都有总体表现上的提升(除了连衣裙大类)。最佳表现来自于半裙类别,Top-20精确度为26%。

图9 三种方法在各类衣物图片的表现对比 1) 白盒特征 2) 预训练ResNet50特征 3) 使用孪生网络相似度的ResNet50特征

下图是模型能够正确匹配衣物的例子(见图10),其中排名前20的另外那些返回值也都直观上非常相似,他们基本都是同一件商品或相似商品不同颜色或不同材质。

图10 前20位正确与错误匹配图(错误匹配中仅显示两张图)

应用数据科学虚拟机与
Visual Studio Code Tools for AI

本部分中我们将展示如何使用数据科学虚拟机以及Visual Studio Code Tools for AI来开发深度学习模型。此外,我们还将解释如何使用Azure机器学习以通过类似API的方式操作模型。

数据科学虚拟机

数据科学虚拟机(DSVM)为Azure虚拟机镜像。它被预先安装、配置并测试。所用工具在数据分析、机器学习及人工智能训练中非常流行,如GPU驱动以及深度学习框架(比如TensorFlow)。它帮助你在配置上节约大量时间,提高工作效率。

数据科学虚拟机:

https://azure.microsoft.com/en-us/services/virtual-machines/data-science-virtual-machines/

Visual Studio Code Tools for AI

Visual Studio Code Tools for AI是一个用来建立、测试并部署深度学习/人工智能应用的拓展功能。它与微软云端的机器学习服务(Azure Machine Learning)无缝集成,提供实验数据准备、本地开发调试、训练任务提交等一系列功能。此外,它为企业客户进一步提供运行日志记录、统计和安全管理等功能。

Azure机器学习

Azure机器学习服务为数据科学家与机器学习开发者们提供了处理数据、开展实验、建立、管理并部署机器学习与人工智能模型等的一系列工具。它们允许使用任何Python工具与库。你可以在Azure上使用各种数据与计算服务来存储并使用数据。

训练

我们使用Azure机器学习命令行界面(Command Line Interface,CLI)和VS Code来将我们的数据科学虚拟机建立为一个远程计算目标,“my_dsvm”,并借此提交训练指令来运行实验。

图11.Azure机器学习CLI配置VS Code编辑器界面

部署

我们将模型与代码部署成网页服务的形式,从而可通过REST方式访问。为此,我们使用AML操作模型,结合Visual Studio Code Tools for AI以及Azure机器学习来进行部署,如下所示:

这将使得任何使用REST API的用户都可以使用模型。

详细的部署指导:

https://blogs.technet.microsoft.com/machinelearning/2018/06/05/deep-learning-for-emojis-with-vs-code-tools-for-ai-part-2/

总结

本文中我们讨论了如何建立一个深度学习模型来对买家服装图像与网店相同或相似商品图像相匹配。我们展示了如何使用Azure的数据科学虚拟机与Visual Studio Code Tools for AI来快速开始建立、训练与部署模型,以及如何使用Azure机器学习来轻松操作模型。

代码链接:

https://github.com/ckanitkar/CS231nFinalProject

原文链接:

https://blogs.technet.microsoft.com/machinelearning/2018/07/10/how-to-use-siamese-network-and-pre-trained-cnns-for-fashion-similarity-matching/

本文授权转载自微信公众号“大数据文摘”,张秋玥、胡笳、Alieen编译。

微软研究院AI头条
微软研究院AI头条

专注科研19年,盛产黑科技

产业CNN
3
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

交叉熵技术

交叉熵(Cross Entropy)是Loss函数的一种(也称为损失函数或代价函数),用于描述模型预测值与真实值的差距大小

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

计算机视觉技术

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

t分布随机邻嵌入技术

t分布随机邻嵌入(t-SNE)是由Geoffrey Hinton和Laurens van der Maaten 开发的一种降维的机器学习算法。 这是一种非线性降维技术,特别适合将高维数据嵌入到二维或三维空间,然后可以在散点图中将其可视化。 具体来说,它通过二维或三维点对每个高维对象进行建模,使得类似的对象由附近的点建模,不相似的对象由远点建模。

暂无评论
暂无评论~