写点什么

用深度学习技术来找到 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:161894
用户头像

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

关注

评论

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

week8-homework

J

毕业三年,从小公司到大厂,先后四面阿里、小米、美团等,终于收到offer!

Java架构之路

Java 程序员 架构 面试 编程语言

量化自动交易系统开发,量化炒币

薇電13242772558

数字货币 策略模式

对于我们程序员来说,基本面是什么呢?

Java架构师迁哥

第九周作业

dll

程序员的五年:双非学历,两年进入苏宁,五年跳槽到阿里,建议收藏!

996小迁

Java 架构 面试 JVM Spring全家桶

华为云张昆:支持全场景全业务,GaussDB加速企业数字化转型

华为云开发者联盟

数据库

Spring中@Import的作用

张健

Mobileye的创新科技与方案将助力自动驾驶汽车畅行世界、惠及大众

E科讯

即构推出低延迟直播产品L3,可将直播延迟降到1s

ZEGO即构

面向对象之魔术方法· 第1篇《__init__方法,__new__方法》

清菡软件测试

测试

重学JS | 异步编程 Promise

梁龙先森

大前端 编程语言 28天写作

CSS12 - 清除浮动

Mr.Cactus

html/css

专科出身Java开发,2年进入苏宁,5年跳槽阿里,我晋升这么快的秘诀是什么?

Java架构追梦

Java 阿里巴巴 面试 架构师 成长路线

真是太刺激了!美团CTO五轮面试,Java岗高级工程师一二三四五面面经(已拿到offer)

Java架构之路

Java 程序员 架构 面试 编程语言

从根上理解高性能、高并发(四):深入操作系统,彻底理解同步与异步

JackJiang

网络编程 高并发 高性能 即时通讯

连续三年蝉联第一,Flink 荣膺全球最活跃的 Apache 开源项目

Apache Flink

Apache flink

SpringCloud 从入门到精通 09--- 支付服务集群

Felix

sync.singleflight 到底怎么用才对?

cyningsun

并发 Concurrency singleflight Cache Miss Go 语言

用技术的方式,在UI设计稿中设置随机码,保证高清

行者AI

Python

SpringCloud 从入门到精通 08--- Eureka集群

Felix

求职阿里Java 技术岗位的经历,三轮技术面+HR面,面试也不过如此

Java架构之路

Java 程序员 架构 面试 编程语言

区块链即时通讯系统开发方案,IM聊天社交软件开发

v16629866266

再谈跨界 互联网+的建筑行业

张老蔫

28天写作

WireMock 使用

hungxy

测试 WireMock

【设计模式】断路器模式

soolaugust

设计模式 28天写作

Alluxio Day 2021 线上直播

腾讯云大数据

大数据

Dubbo 版 Swagger 来啦!Dubbo-Api-Docs 发布

阿里巴巴云原生

Java 云原生 dubbo 大前端 中间件

波场链智能合约软件开发|波场链智能合约APP系统开发

系统开发

阿里开发7年大牛:闭关60天学懂NDK+Flutter,大厂面试题汇总

欢喜学安卓

android 程序员 面试 移动开发

安卓开发详解!Flutter全方位深入探索,吊打面试官系列!

欢喜学安卓

android 程序员 面试 移动开发

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