如何利用深度学习分类Yelp上的商业图片

Yelp上有着全世界各地的Yelper们所上传的成千上万的照片。这些各种各样的照片为通往本地商业提供了一扇大窗,而我们现在仅仅在从里向外看而已。

想要打开这扇窗户,我们需要开发一种图像读取系统,能让我们创造关于个人图像的语义数据。我们最近根据系统所产生的数据推出了标签化照片浏览的服务,并且第一次尝试以内容为基本的图片分类服务。

建立图像分类

读取并理解图像这一历史性的雄心壮志有着许许多多的途径。为了简化我们的问题,我们最初专注于将照片分类为一系列提前定义好的种类。进而,我们将照片种类与下列的餐馆联系起来:

image1

设计一个分类器来将照片划分进这些种类中,我们首先需要收集许多已经有标签的照片。通过不同的方法来进行收集:

照片说明:有许多「菜单」照片在说明中有着「菜单」。相似的,我们可以找到有着「寿司」或「汉堡」的说明,证明它们很有可能是食物。为了前者,我们不得不担心误判的情况,因为有些「食物」或「饮品」的照片的说明上是「菜单上的最棒!」,因此一些清理是必要的。为了帮助识别食品,我们依靠Yelp的菜单结构,它有着食品项目的每个商业列表。我们发现从列表到照片说明来配对视频项目具有着高精确度的数据库。

照片归因:当在Yelp上传照片时,用户可以为照片加上上传的原因,例如「是这个铺面吗?」。他们并不总是精确的,但是仍然可以作为被选中的照片很好的来源信息。

众包:我们通过众包上所有的伙伴们来运行额外的任务,纠正我们对照片的标签是否合适,并收集更多「内部」与「外部」的照片。通过这样的方法可以带来普遍质量优良的标签,并且把成本维持在一定范围内(包括时间与金钱)。

一旦我们有了标签的数据,我们开始以图像分类模型AlexNet的方式利用深度卷积神经网络(CNNs)来识别这些种类。CNNs通常由深度多层卷积神经层(为了提取局部空间与平移不变性)组成、ReLU(Rectified Linear Units)激活函数(为了非饱和神经元)、池层(缩减像素采样与平移不变)、局部响应归一化层(为了更好的产出)以及与传统的前馈神经网络中的全连接层。Softmax回归算法的输出与正则化方法,例如dropout应用也非常普遍。我们的CNN是建立于以Gaffe框架为主的AWS EC2 GPU instance之上。我们喜欢Gaffe是因为它用起来很容易,性能高、开源(BSD2-Clause),并且处于活跃的开发中。为了解决Gaffe的软件附属性,我们将CNN放置在Docker这个容器引擎, 更加容易操作。

我们还为CNN制作了摘要来确保它可以和其他分类器的可能形式更容易的整合,包括了CNN的不同instance。就像下面所提及的那样,我们的基准是「Gaffe分类器」,通过Gaffe运行CNN;这是一种抽象分类的特殊形式,可以读取不同的信号,并运行不同的分类算法。我们现在的「片面(facade)」分类器原理其实是采取两种独立训练Gaffe分类器结果的平均加权值。如果我们决定进一步和依赖其他标志(如照片说明)的分类器的合作,结果会更加直接鲜明。

image07

在2500张照片平均分割的测试中,我们现行的上述分类器展示了94%的精确率与70%的召回率。而这些数据还可以再进一步上升,我们发现这些数据对于下面列出的应用已经足够良好。

照片分类服务

Yelp使用SOA(服务导向结构),并且我们制作了RESTful照片分类服务来支持现存或即将落实的Yelp应用。这个服务的主要应用,就像下面详细讲述的那样,是基于商业分类的照片。鉴于这个服务需要多种分类器(例如不同版本,或者商业的不同类型),服务的应用程序编程接口有一个分类器ID、商业ID还有一个可选类别,继而返回已经被分类的所有商业照片(特殊的则返回到可选类别里),例如:

image11

我们利用标准的MySQL数据库服务器来保存所有分类结果,所有的服务请求都可以被简单的数据库查询来解决。为了避免昂贵的实时分类,并且因为我们现在的应用并不阻碍最新的照片分类,我们只运行离线分类。结构如下图所示:每一个新的分类器都需要过一遍所有的照片,并将分类结果保存在一个数据库里。扫描是计算密集型,但是Yelp的基本设施允许我们通过在多个机器上运行分类器来缓解。在扫描之后,我们还每天自动收集新的照片,分批传送以分类和数据库加载:

image04

应用:封面多样化照片

当我们有了真正的照片分类服务,它可以立即支持Yelp的许多关键特征服务。例如,我们将页面细致化,展示一系列「封面照片」,后者由我们基于用户反馈与特定的照片原因的打分引擎所推荐。我们如今封面照片的典型难题在于抽选出的照片缺少「多样化」:例如,所有下列展出的封面照片都是有关 食物(拉面)的,用户无法看见商业的另一方面,除非他们点开「查看所有」的连接。

image02

照片分类现在让我们通过类别来使得封面图片多样化——我们可以识别得分最高的非食物的图片,将他们整合到封面图片里。通过严格的A/B测试,我们确认了餐厅的客户们喜欢看见一个标出的「食物」照片,与一个标出的「非食物」的照片,以及两个更小的「食物」的照片,与两个「非食物」的照片,就如下图所示。多样化已经大幅度提升了我们客户与图片的互动。

image00

应用:标签图片浏览

就像人们所浏览过的Yelp上的图片,Yelp的大部分来自餐厅的照片都是食物,但是我们已经听说了客户的反馈,他们发现Yelp的图片比起仅仅找到最具有审美性的汉堡要有用得多。

一些人用Yelp的图片来为特别的活动加气氛或者导航到某一个场所,而其他人则用它们来做些更严肃的事情,例如检查一个餐厅是否适合残疾客人。所有这些任务都因为标签照片浏览的应用更加容易,且更加高效。

标签照片浏览是我们最重大的应用,来更新我们的照片分类服务。照片由标签(类别)分类,就像我们在下面看见的一样,想要直接跳到你所寻找的确定信息变得愈发容易。

image06

下一步

new_image10 没有一个机器学习系统是完美的。如果你想帮助提升我们的照片分类质量,请务必标出你所看见的任何一个错误分类的照片。我们正开始探索Yelp巨大的照片库的应用,敬请期待以后的精彩!

机器之心编译出品,编译:Chen Xiaoqing

入门
返回顶部