“第一印象很重要。”

虽然上述说法适用于生活的很多方面,但它也适用于电子商务平台。

无论是口音椅子设计的超现代的公寓在曼哈顿,纽约或double-hanging吊床天井面临着郁郁葱葱的绿色后院的风格传统农舍在密苏里州,阿肯色州,从产品的概念建模,其生产和最终销售——仍然在整个过程中常见的一个问题几乎任何类型的产品它会属于?

我们在Wayfair努力帮助消费者对自己的家居用品有信心。我们的方法包括不断创新为我们的产品选择最佳代表的过程,这个过程叫做铅图像选择因为我们想让我们的访问者看到他们想要购买的产品的最佳表现,一个非常简单的方法就是预测每一张图片是否“值得”成为领导形象。一项由数据科学家进行的研究得出结论,从正面角度拍摄的产品图片比展示产品的图片产生更高的点击率(CTRs)回来的产品。能够确定拍摄角度的规模,在我们的目录中数以百万计的项目,因此是重要的确定候选的领先图像。

铅图像选择是很常见的电子商务的平台,这些天从产品的三维模型,而不是实际的产品照片创建使用的图片供应商。这些3D模型是从种子图像这是在设计过程中由艺术家创作依次创建。所以,了解拍摄角度也有助于我们确定我们是否能够建立更好的3D模型的产品,这也有助于我们的客户得到产品的一个更好的感觉,让他们觉得他们的购买信心。具有能够产生很大的3D模型的一个重要组分是具有不够的角度,以使得整个SKU覆盖种子的图片。检查是否正在通过覆盖一组样本图像的足够角度的过程是冗长的苦心和手册。与商业逻辑层(如下所示)沿着镜头角度预测具有用于视觉审批过程自动化程度的提高。

什么是拍摄角度?

简单地说,拍摄角度就是产品的脸和拍摄照片的(虚拟)相机之间的角度。换句话说,它是一个乘积在图像中的角度。

镜头角度预测的建模方法

而有几个更简单的计算机视觉方法可用的角度估计相对同构数据集类似对人类的姿态估计,预测角度不同的数据集,如家具相当棘手,需要深度学习和计算机视觉。

拍摄角度是一个浮动值

然而,尽管深度学习模型擅长于分类,比如区分猫和狗,苹果和橘子,但角度是连续的ntity。

此外,分辨沙发的正面和背面更困难而不是根据特征的相似性来区分猫和狗。人们还必须注意质量保证方面的工作——为回归模型设置一个人在循环中的QA设置将是极其乏味的,因为它将需要一个人注释器来标记粒度值。下面我们将对纯回归和分类方法的优缺点进行比较。

建模方法的比较:回归与分类

评估标准 回归:连续角值

“信息化”

分类:离散正区角度值

“实际的”

评分理由
质量保证措施 人类可以相当容易地解释离散角区

例如,将图像标记为“Front”比标记为40更容易识别°

建模工作 分类需要更少的数据点
性能 据观察,预测在进行回归训练时比分类训练时有更低的分类误差
兼容性 角⇔区 没有反向映射

区⇏角

从更细粒度的结构移动到更细粒度结构时的信息丢失
整体 总的来说,分类更容易处理

但是,回归在性能和兼容性方面提供了非常明显的优势

下面的混合方法:分类+回归

考虑到纯分类和纯回归方法的局限性,我们决定将这些方法合并为混合方法。

在我们开始讨论如何创建混合网络之前,重要的是解决如何创建确保模型的最佳质量的流程。直到今天,深度学习模型仍然依赖于人类标注的数据。在人类注释者之间似乎有不同层次的感知,我们如何创建一个由角度标签组成的数据集,如果不是所有的,至少是大多数注释者都同意的?

为QA生成标签-人类感知和旋转物体的研究

因为QA更容易处理我们的目标是将360度连续的角度划分成区域,形成“角度类”。为了做到这一点,我们做了一个初步的调查,显示有8个角区:以顺时针的方式绕着圆旋转,我们有前,前右,右,后右,后左,左和前左。但是我们如何将角度映射到区域呢?换句话说,我们如何在不同的角区域之间画出边界?从什么角度“右”变成“前右”?

确定角缩放之间的边界假设不同的人对一幅图像的“前”或“后”会有不同的看法是公平的。例如,在下面的图片中,person 1可以分辨出的“Front”可能是person 2的“Front- right”。为了给我们的训练数据生成标签,我们综合生成的100个种子或参考图像,确定8角区域使用3DSMax。接下来,我们为人类注释者提供了10,000张图片,并要求他们选择最适合图片的角度区域。为了避免偏差,注释者没有提供准确的度值。每张图片由3个注释器标注。如果一个特定的值得到了2个或更多的投票,我们就给这个值分配标签。如果某幅图像没有得到一致意见,我们就忽略它,因为这些异常值只占数据集的6.3%。

投票并在3个平均值中取最佳

在此之后,我们收集了所有的标签,并将其与图像相关角度的实际数值进行比较。在根据角度的实际数值生成角度区域标签的热图后,角度区域之间的边界就出现了。例如,顺时针从0度到360度,在15度左右“Front”开始出现“Front- right”。

获得使用热图拍摄角度的界限

人类感知的研究导致了以下拍摄角度区域图。

镜头角区图表

区映射细节代表性图像沿着角度区域显示,以显示感知如何随着旋转而改变。

考虑不同的几何形状

不同的几何图形

拍摄角度标签不是一个一刀切的方法。不同产品的几何形状有很大的不同。有些产品在本质上是不对称的,比如椅子和床,也就是说,它们有明确的前缘。其他的,像墙壁艺术或区域地毯,有一个平面的几何形状,还有一些,像桌子,是对称的,也就是说,前面和后面看起来几乎一样。

因此,我们根据其几何形状将各种产品分类为以下类别:

  • 三维不对称:物体有一个明确的“前面”,例如,椅子,沙发,床等。
  • 三维对称:从“前面”和“后面”看起来相似的物体,例如,桌子,桌子等。
  • 2D:结构上呈平面的物体,如墙画、地毯、窗帘、相框等。

Note: We can’t define a shot angle zone chart for Round/Tripod/Triangular objects or objects that are symmetrical in 2 or more dimensions such that they look similar from all or many directions—in other words, objects for which one cannot define a “Front” or “Back” or “Left” or “Right” cannot have a zone chart.

创建一种“混合”深度学习模式

自2012年以来,一些深度学习模型已经被引入数据科学界。我们开始试验VGG16,因为它最容易理解,并修改它以满足我们的目的。

桥接分类和回归

我们通过两个步骤实现了混合方法:

  • 预处理(输入)-我们为每个区域分配一个数值(或浮点)值,即标准角度。标准角就是一个区域所覆盖范围的中点。例如,“前右”区域覆盖的角度从15度到75度。这个区域的标准角是45度。所有区域的标准角度都列在上面的“区域映射”表中。对于每一张训练图像,我们只需将区域标签F、FR、R、BR、B、BL、L、FL替换为与区域对应的标准角0°、45°、90°、135°、180°、225°、270°、315°。
  • 后处理(输出)-一旦模型预测了一个角度(浮点值),我们然后根据输出的范围分配一个区域标签。通过这种方式,我们将回归模型的结果转换为可以用于QA的内容(例如,如果模型输出52°,我们将区域“Front-Right”分配给它,因为它位于15°- 75°范围内)。

习惯损失函数,计算圆的损失

每一个成功的深度学习模式的背后,还有一个同样简单的损失函数。什么损失函数是一个深度学习模型是喜欢什么老师是学生。我们的模型需要学习圆的概念,这意味着,它需要学习两个0°和360°是相同的。

从理论上讲,在本领域中可用的几个版本圆形的损失。我们定义使用均方误差(MSE)或差异平方的自定义损失函数如下:

= MSE(因为损失标签) + MSE(罪标签)=(COSθ- 预测COS)2+(罪过θ-预测罪)2

我们使用MSE,因为它是一个去到的概念定义为基于回归模型损失函数。换句话说,MSE处理我们的混合模型的回归部分。该如上面的预处理步骤所述,在本质上是离散的。这使得模型具有“分类”的性质。

评估培训期间模型性能

当要判断我们的模型的性能时,我们计算区域水平准确性。

在这里,我们检查模型兑创造了人类标注的数据使用性能最佳的3分析前面提到的。我们的模型预测的数值(浮点)的图像的角度的值。我们认为预测的角度(用θ”)是正确的,只有当它在于在注释过程中确定正确的区域。

为了计算精度,我们需要预测的角度。在任意时间点,我们可以检索到预测的角度(θ的)的关系如下:
θ” = arctan2(预测罪,预测余弦)

一旦我们有了我们只需要检查一下这个“罗比”属于哪个区域,然后把这个预测的区域和人类标记的实际区域进行比较。我们对验证数据集中的所有图像重复这个步骤,并通过这个简单的关系计算平均区域精度(%):

平均区域精度=(正确预测次数/总预测次数)* 100

对数学的书呆子

这里需要注意的一个有趣的数学问题是,当模型在训练阶段开始做出正确的预测时,即当预测开始接近实际值或角度时θ的实际角度为,则自定义损失函数退化为:

损失= 4 * sin2((θ-θ”)/ 2)

应用小角度近似,我们得到

损失=(θ-θ”)2≈MSE (θ的)

这可能会提高的,为什么不训练与MSE定义的损失函数模型中的问题(θ的)来代替MSE(cos标签) + MSE(罪标签)。我们没有严格的比较性能,但最初的实验中,当我们使用MSE训练中透露了一个非常慢的收敛(θ的)作为损失函数。也许这个问题可以通过更多的实验来回答。但现在,我们坚持用三角比定义的损失函数。

模型架构

模型架构

我们创建了一个准vgg网络,它可以预测角度的数值,该数值需要3个输入:图像以及拍摄角度的正弦和余弦值。

合成数据的训练模型

理想的情况是,我们的角度预测模型能够了解产品的所有可能视图。这意味着通过给我们的模型足够的样本,让它知道“前端”区域是什么样的,然后对所有定义的区域重复相同的过程。同样,理想情况下,按照上面的逻辑,我们正在寻找一个数据集,该数据集具有许多产品的图像,这些图像标记了水平旋转的每个角度。然而,在现实世界中,很少有数据集能够提供这样的家具产品粒度视图。

因此,我们求助于合成数据。使用合成数据背后有三个关键原因:

  • 我们自产的合成数据生成过程创建的图像与我们从供应商那里得到的相当接近。所以性能受到影响的几率是域的差距是较低的,因为模型将从图像中学习,类似于它将工作在推断和生产
  • 它可以让我们训练用的图像模型颗粒状角度信息,而不是教育的培养模式,只有8数字角度值,我们现在可以训练有完整的360°覆盖模型。
  • 它解决了真实世界图像中的数据不平衡(例如,大多数图像属于额叶区域):训练一个数据不平衡的模型会降低性能。一个用拥有大量“正面”图像的数据集训练的模型,将会导致在“背面”或“左边”等其他区域的表现不佳。我们需要一个模型,它在所有可能角度的图像上都表现得很好。尽管可以使用数据增强来实现平衡,但它不会提供足够的差异。

使用3D模型创建合成数据

我们使用来自Wayfair的3D模型库和3DSMax的椅子和沙发的3D模型来创建一个训练图像的数据集。对于每个3D模型,我们生成100个视图,即100个图像,以及颗粒角度信息。以下是该数据集的快照:

生成合成数据 生成合成数据

创建环境图片

上述过程生成轮廓图片或产品与白色背景图片。对于一个典型的家庭环境创造的产品图像或环境图像,我们删除剪影图像的白色背景,并将其替换为环境。

简单的说,环境图像=剪影图像 - 白色背景+随机环境

生成合成环境中结果

我们在真实轮廓图像上对两组产品类进行了推断

  1. 椅子和沙发(52万张图片):我们用34种不同类别的椅子和沙发测试了这个模型
  2. 床(97,000张图片):我们用12个不同类别的床测试模型

以下是我们的发现:

  • 我们测量一个区域水平精度 - 我们认为该模型是正确的预测只有当预测的角度在于在最佳的3人注释过程确定正确的区域
  • 总体精度椅子和沙发被发现为75%,这是相当可比的,并几乎与最先进的准确性在这个出版物的报告这里
  • 我们认为一个较低的准确率为66%数据集。

上述结果均符合,因为我们创造了射门的角度区域图和定义使用仅从椅子和沙发的图片我们的预期。应用对性能不佳的床铺结果相同的定义。这无疑提供了信用的某种程度我们前面提出的产品具有不同的几何形状不同的看法的理论。例如,它可能发生,而15°-75之间的“前 - 右”区椅子谎言°,床位同样可能是一个有点不同。

此外,填补领域的差距是很棘手的。虽然我们在合成图像创建过程中所遵循的过程帮助我们创建了一个训练数据集,它与供应商使用的图像非常相似,因此产生了一个强大的基线模型,但它并不是万无一失的。此外,解决领域差距是一个收益递减的过程。

(A)椅子和沙发 混淆矩阵(B)层

未来的工作

我们永远不会结束。以下是确定的领域,我们可以测试我们的模型,并努力做出一个更整体的算法:

  • 环境图像:用更多的环境图像训练模型
  • 开展更多的人类感知的研究:找到适合每一类产品的区域定义射门角度区域图和设定。虽然这看起来起初,这个过程有前途的,但是可以通过法律收益递减,尤其是对的,取指较小的收入或比别人更少的产品类别的影响。只有更多的实验将完成整个画面。因此,一个更好的方法可能是小组尽可能多的同类产品寻找尽可能并创建相应的拍摄角度的区域定义。
  • 领域差距管理:在合成图像上使用预处理方法,如直方图匹配,使它们更接近我们从供应商那里得到的真实图像
  • 创建数据集,训练和检查模型在产品图像上的性能属于其他几何形状,如三维对称和上面定义的二维。

参考

ShapeNet

https://www.shapenet.org/

设计深度卷积神经网络的连续面向对象估计

https://arxiv.org/pdf/1702.01499.pdf

利用深度卷积神经网络评估小儿骨龄:https://www.researchgate.net/publication/321823302_Pediatric_Bone_Age_Assessment_Using_Deep_Convolutional_Neural_Networks使用卷积神经网络的三维位姿回归(Mahendran等,2017)

https://arxiv.org/abs/1708.05628

深度学习相机位姿回归的几何损失函数(Kendall等人,CVPR 2017)

https://www.youtube.com/watch?v=Rp2Znu1ZJVA

https://arxiv.org/abs/1704.00390

快速单镜头检测和姿态估计

https://ieeexplore.ieee.org/document/7785144

使用大型CAD模型数据集的基于样本部分的2D-3D对齐(Aubry et al., 2014)

https://www.di.ens.fr/willow/research/seeing3Dchairs/supplementary_material/false_positives_2012/index.html

超越帕斯卡-一个基准的三维对象检测在野外

http://cvgl.stanford.edu/projects/pascal3d.html

3D模型+学习:解析宜家对象-精细姿态估计(JJ Lim, 2013)

http://people.csail.mit.edu/lim/paper/lpt_iccv2013.pdf

野外物体的三维姿态估计和三维模型检索(CVPR 2018)

http://openaccess.thecvf.com/content_cvpr_2018/html/Grabner_3D_Pose_Estimation_CVPR_2018_paper.html

合成视点预测

https://ieeexplore.ieee.org/document/7801548

姿态估计的几何深度学习

https://ieeexplore.ieee.org/document/5995327