写点什么

用深度学习技术来找到 Yelp 上的美图

  • 2017-04-04
  • 本文字数:3453 字

    阅读完需:约 11 分钟

本文翻译自 Finding Beautiful Yelp Photos Using Deep Learning ,原作者为Alex M.,已获得原网站授权。

Yelp 的数据库中已经存储了几千万张相片,用户们现在每天都会上传大概十万张,而且速度还在不断加快。事实上,我们发现相片的上传增长率大于相片的查看率。这些相片反映着本地商业的内容和质量,提供了非常丰富的信息。

关于这些相片非常重要的一方面,就是展示出来的内容的类型。在 2015 年 8 月,我们上线了一套新系统,用于将传统饭店有关的相片分为食物、饮料、外观、内景和菜单等几大类。从那以后,我们又为咖啡店、酒吧等类似的商店上线了类似的系统,以此来帮助用户们尽快发现他们想要寻找的那些相片。最近的一段时间,我们又在研究如何进一步提高用户的满意度,具体方法就是给他们看更多漂亮的图片,改进我们的相片排名系统。

理解相片的质量

对比相片的质量,看起来很像是一件非常主观性的工作。喜欢哪张相片或不喜欢哪张相片,有许多因素会影响这样的决定,而且依正在做搜索的用户个人不同,结论也会有所不同。为了能为Yelp 的用户提供更好的体验,相片理解团队必须担当起这项非常有挑战性的工作:确定哪些特点会让相片更受人喜爱,并研发出一套算法,可以依据这些特点来可靠地对相片做出评判。

首先我们试着为相片构建一个点击率预测器,数据源就是从日志中挖掘出来的点击数据。我们的假设是,那些被点击了更多次数的相片应该很明显地会比其它相片好。可事实上这个想法的效果却没有想象中好,原因有几点。首先,人们常常会点开那些比较模糊、或者里面有非常多文字的相片,这么来看看里面到底是什么内容。另外,因为Yelp 上的相片有许多种展示方法,所以很难有效地对比某些特定相片的指标。

之后,我们试用了好几种不同的计算机视觉技术,试着发现一些相片的内在特征,希望可以直接用于质量评分。比如,对摄影师来说有个非常重要的特征叫“景深”,它用来测量相片有多少内容是在焦点里面的。用浅景深可以非常有效地将相片中的物体与它的背景区别开来,上传到Yelp 的相片也不例外。很多时候,在关于某间饭店的许多张相片中,那些最美的总是那些非常明确地对焦到某个具体物体上的。

景深

亚历山大牛排屋

桌面上的艺术

另一个人们判断相片的非常重要的方法就是对比。对比可以测量出在一张相片中,一个物体和它旁边的物体在亮度和颜色等方面的不同。有许多种公式可以用于计算对比,但大多数都要对比亮度,或者相片中附近区域的光强度。

对比

安东尼点心

Tac N Roll

最后,相片中不同物体之间的相对位置也是一个非常重要地审美方面的考虑。比如研究表明,人们对艺术的对称性有着天生的倾向。另外,有些摄影师也非常推崇所谓的“第三法则”,这是一种将相片中的重要元素都按照某个轴排列起来的方法,以此来创建出一种运动或活力的感觉。

对齐

Traif

Augie Chang 摄影室

用深度学习来构建相片评分模型

所有这些考虑都依赖于对相片内不同区域之间的关系的理解。所以当要实现一个相片评分算法时,我们希望算法中也会把这个关系放在非常重要的地位。结果,我们当时非常抱以厚望的就是卷积神经网络模型,或者说是 CNN

在过去的十年里,卷积神经网络模型在图片分类与处理领域内取得了巨大的成功,比如人脸识别和分子疾病检测等。和普通的神经网络类似,它们都会对输入向量做一系列的转换,并使用输出的错误来动态地改进对未来的预测。可是,CNN 还有另外的几层,用到了上文中我们详细讨论过的几个特征。尤其是卷积层会对相片加以许多过滤器,汇聚层也会缩减之前各层的输出规模,以减少计算量。

为了开发这个模型,我们先要收集训练数据。得到训练数据的方法之一就是手工地为成千上万张相片加上标签,标记成漂亮或不漂亮。可是这样的方法代价太大,太耗时,而且会非常依赖于我们的评分员的喜好。另外,还有一点可供我们利用的就是,在相片被上传到 Yelp 的时候,它们通常都会包含着额外的信息,也就是EXIF 数据

另外,我们发现有个判断质量的非常好的方法,就是相片是不是由单反相机(Digital Single-Lens Reflex Camera,DSLR)拍摄的。单反相机可以让摄影师调节透镜类型和光圈大小,更好地控制把相片里的哪个部分作为焦点。更进一步,单反相机的传感器更大,对光线更敏感,即使在非常昏暗的环境下也可以拍出非常漂亮的相片。最后,总是使用单反相机的人经验会更丰富,也可以抓拍到质量更好的相片。

把这样的相片送给我们的模型去学习,就可以学到这些重要的相片特征,那么即使是在那些不是由单反相机拍出来的相片中,也可以识别出好相片。

即使这张相片是由 iPhone 拍出来的,我们的模型也还是给了它非常高的评分。

我们尝试了好多种方法来训练这个模型。一开始,我们收集了十万张单反相机和非单反相机拍出来的相片,分别标上好的和差的标签,然后送给名为 AlexNet 的模型中去学习,这个模型是由多伦多大学的研究员在 2012 年提出的。为了提高这个模型的精度,我们还用了几百万张相片的数据量去训练了另一个模型。最后,我们还尝试过一个名叫 GoogLeNet 的模型,这是 Google 的研究员在 2014 年开发的,艺术水平非常高,比之前最好的模型的层次还明显深。

同时 Yelp 的工程师们也手工评判了几千张相片,里面的相片都是我们可以非常自信地说非常好或者非常差的。在上面的每个测试中,我们还会把每个模型的训练成果,用于评判这几千张相片,来进一步看看效果。我们发现每经过一次迭代,我们正确判断好图或者差图的能力都得到了提高。

最后,为了把我们模型的判断结果转化为质量评分,我们在模型的最后一层使用了可能性输出的方法,为每一张输入的相片都生成一个确定的标签。换句话说,如果我们的模型认为有 80% 的机会标签应该是“高质量”,那我们就给那张相片打分 0.8。这种方法可以很直观地把一个二元分类器的输出结果转化成了很容易打分的结果。

更进一步

我们的初步分析表明,我们的算法推荐的图片都是那些焦点更突出、更明亮和在审美上使人更愉悦的。可是有些时候也不是让我们非常满意,这就促使我们去找到办法对某些相片进行重新评估和排序。最终,我们为大家提供的系统可以把多种不同的信息整合起来,为商户提供最好的相片,展示给用户。

相片评分算法

商户相片评级流水线

在我们现在的流水线中,我们先用上面描述的模型为一家商户生成所有的品质评分。然后再根据下面的特征对这些得分进行调整:

  • 标志过滤:我们发现商户标志的相片通常被我们的模型打出很高的分,即使用户压根对它们不感兴趣,不会看也不会点击它们。比如说,其中可能会包含一张海报,里面只有饭店的名字。于是,我们就基于相片的亮度直方图的熵训练了一个单独的分类模型,用它来降低这类相片的分值。
  • 分辨率:为了对我们的神经网络的输入进行标准化,也为了加快计算速度,我们在把每张相片输入系统之前都进行了转换,缩小成了 227*227 像素的大小。可是这意味着模型无法判断这样的相片会不会太小,因而无法为用户提供关于商户的足够好的内容。为了处理这样的情况,我们对达不到某个标准的图片降低评分。

最后,我们用上了分类算法算出来的标签,用它们来保证不同种类的相片都可以显示在一家商户的相片列表的前面。

应用:封面相片排序

在 Yelp 上,每家商户的页面都会展示一些最漂亮的相片,我们叫做封面相片。在之前的许多年,我们都是根据喜欢、投票、上传日期和相片标题等来计算、挑选这些相片。可是,这样的方法有许多弊端。

首先,这样的系统非常容易产生选择性偏见。封面相面比别的相片有更多的机会被查看和点击。结果,一旦某张相片出现在了商户的封面上,它就有极大的可能性一直留在那里,即使更有吸引力更有用的相片在之后被上传上来,这一点也很难改变。另外,只是根据喜欢来选定的相片最终有可能会推荐一些“点击诱饵”,比如某些质量很差、也不怎么相关、但却由于包含了某些有引诱性的内容而受到了很多支持的相片。

现在有了排名算法,我们相信出现在饭店首页的封面相片的质量一定会大大提高。大家自己去看看吧

弗里蒙特,Country Way

旧版本

高质量版本

旧金山,Octavia

旧版本

高质量版本

圣克拉拉,Kunjip

旧版本

高质量版本

旧金山,Gary Danko

旧版本

高质量版本

下一步的计划

我们收到的关于这个变化的反响非常好,我们也还有许多可以做的工作,来进一步提供相片的可用性和相关性。相片理解团队正在开发一套更全面的系统,也会把商户的类型和摄影师的身份、以及上文中讨论的用户反馈和品质因素等考虑进来,进一步为 Yelp 的用户提供更好的体验。请期待我们接下来的更新吧

鸣谢:相片排名系统由 Wei-Hong C.、Alex M.、Colin P.、Prasanna S.、Joel O. 和 Frances H. 设计并实现。

2017-04-04 17:162009
用户头像

发布了 152 篇内容, 共 72.8 次阅读, 收获喜欢 64 次。

关注

评论

发布
暂无评论
发现更多内容

对于一款软件而言,完备的功能固然重要,但交互体验也不该被忽视

Philips

Java 敏捷开发 UI .net core 交互设计

吐血整理Windows电脑入侵自检大全

BigYoung

黑客 windows 日志 异常 自检

CIC国信公链:做坚实的底层技术支撑,让区块链为现代农业插上腾飞的翅膀

CNG农业公链

区块链 农业发展 CIC国信公链 CNG农业链 赵其刚

Django 表单处理流程详解

BigYoung

django 表单 流程

为什么越来越多的非计算机领域企业,在自主做软件时都选择使用快速开发工具?

Philips

Java 敏捷开发 快速开发 .net core

不懂 ZooKeeper?没关系,这一篇给你讲的明明白白

大头星

Java zookeeper 分布式

linux入门系列4--vi/vim编辑器

黑马腾云

vim Linux centos7 操作系统 VI

对于一款软件而言,完备的功能固然重要,但交互体验也不该被忽视

Learun

Java 敏捷开发 快速开发 .net core

为什么越来越多的非计算机领域企业,在自主做软件时都选择使用快速开发工具?

Learun

Java 敏捷开发 快速开发 .net core

白话讲解:消息队列到底解决了什么问题?

博文视点Broadview

读书笔记 分布式 RocketMQ 中间件 消息队列

「分布式一致性协议」从2PC、3PC、Paxos到 ZAB

大头星

lgloo Software 的 Jira Cloud 转型之旅

Atlassian

项目管理 DevOps 敏捷开发 Jira Cloud

当代一线城市年轻人工作生活实录(HR篇)

Learun

Java 敏捷开发 快速开发 .net core

艺术与科技的碰撞!Tristan Easton携手英特尔为漫威粉丝带来十代酷睿《复联》收藏版

最新动态

linux入门系列5--新手必会的linux命令

黑马腾云

Linux centos7 Shell linux命令 linux操作

Windows AD巡检报错处理

BigYoung

windows AD 报错 巡检

低/零代码平台的优点有哪些?

代码制造者

编程语言 低代码 零代码 信息化 编程开发

当代一线城市年轻人生活工作实录(蓝领打工仔篇)

Philips

Java .net 敏捷开发 快速开发 MES系统

Kotlin这么火!如何快速从Java过渡到Kotlin

华章IT

Java kotlin 协程 安卓

《漫威复联》PC版游戏即将登陆,英特尔为其独家 CPU 合作伙伴

最新动态

十年磨一剑-BIGO全球音视频技术解决方案

InfoQ_3597a20b53cc

人工智能 大数据 技术

Linux入门系列1--环境准备及Linux安装

黑马腾云

Linux centos 运维 操作系统

linux入门系列2--CentOs图形界面操作及目录结构

黑马腾云

Linux centos7 操作系统 系统运维

CentOS 7 配置Supervisor 服务遇到的坑总结

BigYoung

centos 报错 Supervisor

Django2.x中url路由的path()与re_path()参数解释

BigYoung

django path url re_path 参数

Nginx配置80端口用于多个域名

石云升

nginx 域名配置 80端口共用

LeetCode题解:88. 合并两个有序数组,双指针+从后往前,JavaScript,详细注释

Lee Chen

大前端 LeetCode

linux入门系列3--常见的linux远程登陆管理工具

黑马腾云

Linux xshell securecrt putty finallshell

话题讨论 | 特斯拉和拼多多杠上了,你有什么看法?

InfoQ写作社区官方

写作平台 话题讨论

跟我一起基于Karma搭建一个测试环境(上)

Jack Q

大前端 Karma 测试框架搭建

当代一线城市年轻人工作生活实录(HR篇)

Philips

Java 敏捷开发 快速开发 .net core

用深度学习技术来找到Yelp上的美图_语言 & 开发_Alex M._InfoQ精选文章