业界 | 对比了六家计算机视觉API,发现最好的竟然是...

选自free Code Camp

作者:Mariya Yao

机器之心编译

参与:蒋思源、刘晓坤

本文通过吉娃娃与松饼的图像对比了流行的六大计算机视觉API,作者希望能借助这些识别情况帮助读者了解各大视觉API的特点与优势。

下图展示了吉娃娃和松饼之间令人惊恐的相似度,这些图片在 AI 行业中流传甚广。但是这里有一个还没有任何其他人问过的问题,即到底哪一个计算机视觉 API 能够完美的处理这些问题,下面本文将探索这个问题的答案。

自从感知机在 1957 年被发明以后,二分分类的实现变得可能。如果你觉得 AI 目前被夸大宣传,可以看看纽约时报在 1958 年的报导,它宣称这个发明将是一种将会「行走、说话、看、写、复制自己并对自我产生意识」的计算机的开端。然而,感知机比如 Mark 1 只是设计用于图像识别而已,实际上它们只能识别线性可分的模式,这使得它们无法学习大多数视觉媒体中存在的复杂模式。

也难怪当时所有人都对它大失所望,并随之发生了 AI 的冬天。之后,多层感知机在 1980 年代流行,卷积神经网络由 Yann LeCun 于 1988 年提出,它们在图像识别任务中的表现性能比单层感知机好很多。

由于大规模标注数据集如 ImageNet 和强大 GPU 计算的助力,更多高级的神经网络架构比如 AlexNet、VGG、Inception 和 ResNet 都曾经在计算机视觉中达到顶尖水平的性能。

计算机视觉和图像识别 API

如果你是一个机器学习工程师,那么在 Keras、TensorFlow 或 PyTorch 任何一个框架中使用预训练的模型和权重进行实验或微调都是很简单的。如果你不喜欢自己调整神经网络,那你很幸运。几乎所有领先的科技巨头和有潜力的初创公司都宣称要通过提供易于使用的计算机视觉 API 促进「AI 民主化」。

那其中哪一个才是最好的呢?为了回答这个问题,在对结果进行互相比较之前,你必须对你的商业目标、产品使用案例、测试数据集和成功指标有清晰的定义。

与其严肃的调查,我们也可以通过一个好玩的例子即「在松饼中找到吉娃娃」,测试在不同的平台中的不同表现,获得高层次的感知理解。

进行测试

为了我们的目的,我将标准的模因分成了 16 张测试图像。然后我使用了工程师 Gaurav Oberoi 的开源代码(https://github.com/goberoi/cloudy_visionhttps://github.com/goberoi/cloudy_vision)以将不同的 API 的结果合并。每一张图片都将通过以下列出的 6 个 API,并返回高信度(和其预测一样)的标签。而微软例外,它会返回标签和说明文字,以及 Cloudsight,它使用人工-AI 混合技术返回单一的标签文字。这就是为什么 Cloudsight 能为复杂图像返回非常精确的说明文字,却需要 10-20 倍的处理时间。

以下是输出结果的例子。如果想看全部 16 张「吉娃娃 VS 松饼」图片的结果,点击该链接:http://www.topbots.com/downloads/code/vision/chihuahua_vs_muffin/。

这些 API 工作得如何呢?除了微软(将松饼误以为是毛绒玩具)以外,其它的 API 都能将其识别为食物。但它们并没有在这个食物是面包、蛋糕、曲奇饼还是松饼达成一致。谷歌是唯一成功识别其为松饼的 API,它的松饼标签的信度最高。

接下来看一个吉娃娃的例子。

再一次,这些 API 表现的很不错,它们都认出了这是一只狗,虽然有一些认错了品种。

然而其中还是出现了明确失败的结果。微软三次返回了相当错误的说明文字,把松饼描述成了毛绒动物或泰迪熊。

谷歌是最好的松饼识别器,在测试集的 7 张松饼图片中 6 次返回了「松饼」为最高信度标签的结果。而其它的 API 并没有在任何的松饼图片中返回「松饼」作为第一标签,但并不会返回相关度更低的标签如「面包」、「曲奇饼」或「纸杯蛋糕」。

即使是全世界最先进的机器学习平台也栽在搞笑的「吉娃娃 VS 松饼挑战赛」上,而一个人类学步儿童也能在分辨食物和费多狗的问题中打败机器学习。

用现实世界的图像测试

我想知道这些 API 分辨现实世界的吉娃娃和松饼的性能如何,而不只是分辨那些精心挑选的相似图片。ImageNet 正好就有 1750 张吉娃娃的图片和 1335 张各种松饼的图片。

有些图片很容易被这些 API 所识别,因为吉娃娃展示了非常独特的特征,比如鼓起的眼睛和尖尖的耳朵,正如下方这个吉娃娃的例子所示。

另一方面,一些图片就有些麻烦了。如果一张图片中有多个主题,或者主题物被遮盖,识别经常会出现问题。

在上图中,狗的服装可能迷惑了 API 的识别(人类有时候也会受到这种影响)。IBM Watson 可以标记出帽子,但无法说出是人还是狗穿戴着帽子。

处理噪声标签

我们一般使用非结构化的真实数据(包括图像),而人工打上的标签并不总是「真值」,因为标签可能不正确或含有「噪声」。以下是是在 ImageNet「松饼」类别中包含的样本图片。

人们可能更准确地将这个「松饼」识别为「纸杯蛋糕」。幸运的是,很多 API 确实会返回「蛋糕」、「纸杯蛋糕」或「曲奇」等预测类别,这要比 ImageNet 类别更加具有相关性。Cloudsight 的人工标注是「曲奇怪兽纸杯蛋糕」,这可能是最准确的结果,但这对于机器来说是一项奇怪的发明。

使用多个模型和 API 可能是评估「标签噪声」一种有趣的方法。在 ImageNet 的「松饼」类别中,松饼的品种(如粗麸皮、玉米等)在视觉上是可区分的,但许多实际上被误标为纸杯蛋糕或其他非松饼类的烘焙食品。

通过不同的图像识别 API 可以运行大量的图片,并追踪重叠和有歧义的标签以帮助标注有噪声或标签不正确的图片。在 ImageNet 搜索不同的松饼类型时,我们发现有一个「松饼人」的奇怪标签,ImageNet 定义为「以前贩卖松饼的流动小贩」。但该类别实际上展示的是人们在展示松饼的图片。

欺骗 API

仅仅是因为好奇,我们尝试使用一些带「错觉」的图片来欺骗 API。例如使用同时包含吉娃娃和松饼的图片或类似狗形状的纸杯蛋糕图片来测试 API。

以下是 API 识别包含了吉娃娃与松饼图片的结果:

IBM 和 Cloudsight 是仅有的两个 API 确认图像中确实有食物,然而 IBM 还是预测了「章鱼烧」、「日式饺子」等类别。

以下是测试类似狗形状的纸杯蛋糕图片结果:

通常情况下,微软会将该图片描述为「一堆毛绒玩具」。谷歌预测该图片可能为「长得像狗的哺乳动物」(0.89)而高于「蛋糕」(0.79).Clarifai 有很高的置信度认为该图片包含了「食物」(0.99)和「哺乳动物」(0.96)。

在这些复杂或不寻常的情况下,Cloudsight 的人工标注表现出十分优秀的结果。Cloudsight 将上一张图片标注为「12 块西高地白梗纸杯蛋糕」,并将前一张识别为流行的曲奇表情包。

那么哪一个计算机视觉 API 表现得最好?

虽然我们无法通过这些有趣的例子确定哪一个 API 更好,但我们也可以通过它们在上述测试的表现观察哪一个预测更加合理。

Amazon Rekognition

Amazon Rekognition 不仅仅能很好地识别主要对象,同时还能识别它周围的目标。例如当人、鸟和家具同时在图像中时,Rekognition 还能提供定性的判断,例如「漂亮」或「可爱」。这令其在最后预测时良好的均衡了主观和客观标签。

谷歌和 IBM

Google 的 Vision API 和 IBM Watson Vision 识别的标签非常朴素,除了直接表述标签外,它们几乎不会返回其它的类型。两个 API 的性能看起来相当,但平均来说 IBM 返回更多的标签。

微软

微软的标签通常层级较高,例如它经常返回「狗」、「犬」或「哺乳动物」,但从不具体反馈为「吉娃娃」或「松饼」。微软同样会将松饼识别为「毛绒玩具」,你可能认为 ResNet 有更好的性能,但也可能该测试受到数据集的影响,所以我建议你进行更鲁棒的测试。

Cloudsight

Cloudsight 是人工标注与机器识别的混合。该 API 要比其它的慢得多,但它对困难或奇怪的图片描述得更加准确。例如「12 块西高地白梗纸杯蛋糕」。

Clarifai

Clarifai 是返回最多标签(平均 20 个)的 API。但它并没有将狗的品种正确识别为吉娃娃,而是采用更多的通用标签如「狗」、「哺乳动物」或「动物」。此外,Clarifai 还添加了其他一些定性的主观标签,例如「可爱」、「有趣」、「美味」等,它还会返回抽象的概念如「面部表情」和「没人」等。这些标签对于商业化应用和详细描述十分有优势。

其他事项

正如之前提到的,为了获取这些 API,你需要明确定义商业和产品目标,准备合适的测试数据集和成功的标准。你也需要考虑成本、速度和返回的标签数量等因素。

基于吉娃娃与松饼的 16 张对比图像,下图给出了其他标准的总结。Amazon Rekognition 经常比其他全自动 API 快一点。就像预期的那样,Cloudsight 因为人工/AI 融合架构,所以相对较慢,且只返回单张描述。Clarifai 默认给出 20 个标签。

所有 API 的价格都可以在各自的网站上找到。大多数 API 都可以免费试用,随后按月计费,在本文写成的时间(2017 年 10 月),各服务的价格大致如下。请注意:这些价格随时可能发生变化。

  • Amazon — $0.001
  • Microsoft— $0.001
  • IBM Watson — $0.002
  • Google Cloud — $0.0015
  • Cloudsight — $0.02
  • Clarifai — $0.0015

如果你购买图片的数量在百万张级别的话,大多数 API 的价格在每张图片 0.001-0.002 美元之间。Cloudsight 的价格最贵,在每月 30,000 张图片的购买方式下,每张图 0.02 美元;更小的套餐更贵,可能会达到每张图 0.07 美元!

更多研究

如果你对这种不甚严谨,近似于娱乐的图像识别 API 横向对比感兴趣,你或许会对吉娃娃 vs 松饼的创始人 Karen Zack 感兴趣,他还设计了一系列的「食物 vs 动物」比对,形成了成熟的 API 基准测试!

以下是其中的一部分:

原文链接:

https://medium.freecodecamp.org/chihuahua-or-muffin-my-search-for-the-best-computer-vision-api-cbda4d6b425d

本文为机器之心编译,转载请联系本公众号获得授权。