第 14 章:ImageNet:给机器一个视觉世界
本章问题:为什么大规模数据集会改变一个领域?
14.1 一个"笨"想法
2006 年,斯坦福大学,一位叫李飞飞的助理教授开始了一个项目。
这个项目的目标在当时看起来既笨拙又过分:把世界上所有的物体都拍下来,然后给每一张图片标注上它里面有什么物体。不是几十个类别,不是几百个,而是超过两万个类别。
同事劝她:一个助理教授不应该做这种耗时巨大、论文产出不确定的事。你应该发论文,拿终身教职,再去做高风险的大项目。
她没有听。
因为她有一个信念:计算机视觉领域被"小数据"困住了。当时最好的算法都在几千张图片上做训练和评测。每个算法各用各的数据集,标准不统一。一个实验室报告 95% 的识别率,另一个报告 92%——但你没法判断是算法更好还是数据更难。
更重要的是,她知道人类视觉系统的能力不是从 1000 个样本里长出来的。人类幼儿在出生后的头几年见过不计其数的物体实例,才逐渐学会区分猫、狗、车、树、面孔和文字。视觉智能需要大量的视觉经验——机器也不会例外。
她决定去为机器创造一个"视觉世界"。
14.2 怎样建立 1400 万张图片的数据库
ImageNet 的架构是从一个已有的概念框架扩展出来的——WordNet。WordNet 是由普林斯顿大学的语言学家开发的词汇知识库,把英文单词按照语义层级组织起来。"狗"属于"犬科动物",犬科动物属于"哺乳动物",哺乳动物属于"动物"。
ImageNet 的思路是:为 WordNet 中的每一个具体名词,收集大量相关的图片实例。
但你要怎么收集 1400 万张图片,还要给它们逐个标注?
互联网可以解决"收集"的问题——搜索引擎返回了海量的图片。但"标注"是瓶颈。你不可能雇几百个研究生来手动给 1400 万张图写标签。
李飞飞团队找到的方案是 Amazon Mechanical Turk——2005 年刚推出的众包平台。你可以在上面发布微型任务:"看这张图,里面有没有猫?有/没有。"每个任务几分钱。几十个国家的陌生人,用碎片化时间,逐张图片做标注。集合起来,几亿美元的标注费用变成了几万美元。
这个过程并不总是顺利的。部分众包工人会敷衍了事——不管图片里有没有狗,统一点"没有"(因为点"没有"比辨认狗要快)。ImageNet 团队不得不设计质量控制机制——对同一张图片让多个人标注,发现答案不一致时再让更多人裁决。
最终,2009 年公开发布的 ImageNet 初版包含了约 320 万张经过质控的清晰标注图片,覆盖了 5,247 个类别。后来经过持续扩充,最终规模达到了约 1,400 万张图片、约 22,000 个类别。
14.3 为什么规模本身改变了一切
ImageNet 不是第一个图像数据集。但它在两个关键维度上是独一无二的。
第一:规模。 在 ImageNet 之前,最知名的公开图像数据集是 Caltech-101(约 9,000 张图像,101 个类别)和 PASCAL VOC(约 10,000 张图像,20 个类别)。ImageNet 把规模提升了三个到四个数量级。在这个量级上,什么可行、什么不可行发生了格局性的变化——在之前被"小数据集"隐藏的过拟合危险消失了,深层模型的训练从中受益最大。
第二:类别体系。 之前的数据集倾向于包含几十到几百个常见类别——人、车、狗、椅子、飞机。ImageNet 把类别推到两万多个。这意味着分类器的任务不再只是"把猫和椅子分开"——它得学会把 200 种不同品种的狗区分清楚。也就是说,模型被逼着关注更细致的视觉差异。
这听起来只是"更多"——更多的图,更多的类别。但"更多"本身是一种方法论。更多的数据让更复杂的模型不再过拟合。更细的类别让模型不能依赖"浅层捷径"(比如"有毛+四条腿=狗"),而必须学习更深层的区别特征。
ImageNet 做了一件非常重要的事情:它把计算机视觉从一个"每个实验室自己定标准"的前科学状态,推向了一个有共同基准的科学领域。 现在你不只是说你做的算法比之前的算法好——你的算法在一个大家都用的数据集上跑到了一个分数,任何人都可以复现、比较。
14.4 ImageNet 挑战赛:擂台的诞生
2010 年,ImageNet 团队发起了第一届 ILSVRC——ImageNet 大规模视觉识别挑战赛。
比赛规则很简单:每人拿到大约 120 万张训练图片(1000 个类别),然后用你自己的算法去分类一个共享的测试集。最终排名只看一个数:Top-5 错误率——算法给出的五个最可能类别中,有没有正确答案。
Top-5 而不是 Top-1 是一个巧妙的设计。对于精细的类别区分(比如"波斯猫"和"喜马拉雅猫"),即使人类有时也无法只从一个角度认出来。如果你只要求一个"最可能"的答案,那错误率和现实使用场景有落差。给五个候选,只要正确答案在其中就算对——这更公平。
第一届比赛(2010)的赢家是传统视觉流水线:手工特征提取 + SVM 分类器,Top-5 错误率约 28%。
第二届比赛(2011)仍然由传统方法主导。错误率略降——但瓶颈开始出现。人们在做细微的特征调优,但每一点提升都是扒着地板往前挪。
2012 年——第三届——发生了那件事。
14.5 一条灰狗,两个时代
ImageNet 挑战赛在 2012 年出现了一个戏剧性的对比。
大多数团队使用的仍然是上一代的路线:手工特征提取,仔细的设计,反复的调整。这些研究者在经过多年的精打细磨后,已经把这个框架推到了极致。
击败了他们的那一组——来自多伦多大学,由辛顿的两个学生 Alex Krizhevsky 和 Ilya Sutskever 在主赛道参赛——用的是对 GPU 的深度利用,以及一个相对较新的架构:卷积神经网络。他们没有用一行手工特征代码。他们的系统直接从像素学到分类。
当比赛结果出来时,像"蝴蝶和贝雷帽"这样的精细类别区分中——包含了各种花朵、斑点、带条纹的昆虫和其他需要细致区分的东西——AlexNet 的分类更准确,而传统方法几乎在这些地方"失明"。
传统视觉系统在这个时刻被超过,不是因为特征工程做得不够好。它不是——当时的特征工程师们极其优秀。而是因为手工特征的框架在本源上少了一种能力:从数据中自动发现"什么特征是相关的"能力。
当你为"摩托车"设计特征时,你会考虑轮胎、车把、车身形状。但你不会想到"摩托车经常出现在路面、路边、山路上——背景也有信息"。这个隐含的相关性信号无法被预想到,但一个深层神经网络可以捡起来。
ImageNet 挑战赛在这一年从"特征工程的校场"变成了"深度学习的亮相舞台"。下一个竞赛周期几乎所有人都换成了神经网络。
14.6 本章小实验:看看你的"ImageNet 直觉"
打开你手机里的相册。随便找 20 张过去一个月拍的照片。
试着给每张照片标注三个标签:一个描述主要的物体("树""狗""杯子");一个描述物体的属性("高的""正在跑的""碎的");一个描述场景或背景("在公园""在办公室""在街边")。
你现在正在做 ImageNet 做了 1400 万次的事情。
然后问自己:
- 这三个标签的信息里,哪一个是你第一眼就确认的,哪一个是你犹豫了一下才确定的?
- 如果你只用一个标签来"分类"这张照片(比如给你的手机增加一个"自动分类到文件夹"的功能),你会选哪一个?你选的这个标签的确定依据——是物体本身("这是一只猫"),还是物体的背景("这是在医院"),还是光线/构图的特定模式?
- 这张照片的特征——最重要的那种——是你可以用文字清楚写出的,还是"我知道是什么但说不清怎么知道的"?
你的犹豫告诉你:图像分类在不被简化的真实世界里,本质上是模糊的、依赖于多层上下文信息的。早期视觉数据集(几十个类别)回避了这种模糊性——物体是单一的,背景是干净的。ImageNet 开始触碰这种复杂性。但真正深层的问题是:怎么让机器从"眼睛看到"到"大脑认出"——而不仅仅是记住越来越多的物体外观。
这就是表示学习要回答的问题。
14.7 本章地图
14.8 本章结语:不只是更多图片
ImageNet 最重要的贡献不是"收集了很多图片"——虽然这也是一项了不起的工程成就。
它真正改变游戏规则的是:设定了共同的标准。
用一个公开的、所有人都能访问的"共同靶子",ImageNet 让工程才华不再能通过"选一个容易数据集"来显得有效。进步不再能用模糊的语言("在我们收集的一个数据集上表现出了提升")来宣称。一个数字,一场比赛,所有人都被摆在同一把尺子上。
而这把尺子,在 2012 年被一个人挥了一把,砍出了一个时代的断裂。
下一章:AlexNet——2012 年的惊雷。
Discussion
留言区 · GitHub-powered comments via Giscus