下面这张在网上流传的图片展示了吉娃娃和松饼之间惊人的相似之处。这些图像通常在人工智能(AI)行业(包括我自己)的演示中共享。
但有一个问题没有人回答过:在消除像吉娃娃或松饼这样的图像的不确定性时,到底哪一个计算机视觉 API 最好?我今天要研究这个问题。
自感知器算法在1957年被发明以来,二进制分类变得可能。如果你认为人工智能被夸大了,可以看看《纽约时报》在1958年的报道,该报道说人工智能是计算机“能够走路、说话、看、写、复制自己,并意识到自己存在的开始。”虽然感知器机器,如Mark 1,是为图像识别而设计的,但实际上它们只能分辨出线性可分的模式。这使他们无法学习大多数视觉媒体中的复杂模式。
Mark1地址:https://blog.knoldus.com/2017/09/12/introduction-to-perceptron-neural-network/
难怪世界大失所望,一个人工智能的冬天随之而来。从那时起,多层感知(80年代流行)和卷积神经网络(1998年由Yann LeCun首创)在图像识别任务中明显优于单层感知。
大型标签数据集如ImageNet和强大的GPU计算,更先进的神经网络架构(如AlexNet,VGG,
Inception和ResNet)在计算机视觉上达到了最先进水平的性能。
如果你是一个机器学习工程师,你可以很容易地通过使用预先训练的模型和在Keras/
Tensorflow或PyTorch上的权值来对这些模型进行实验和微调。所有领先的科技巨头和有前途的初创公司都声称将通过提供易于使用的计算机视觉API来“民主化AI”。
哪一个是最好的?要回答这个问题,你必须清楚地定义你的业务目标、产品用例、测试数据集和成功的度量标准,然后才能比较这些解决方案。
通过玩具问题测试来区分吉娃娃和松饼,至少可以获得每个平台不同行为的高层次感。
为了做到这一点,我将规范的meme分解成16个测试图像。然后使用工程师Gaurav Oberoi编写的开源代码来整合来自不同API的结果。每个图像通过上面列出的六个API被推送,它们返回高置信标签作为其预测。Microsoft是例外,它返回两个标签和一个标题,而Cloudsight使用human-AI混合技术只返回一个标题。这就是为什么Cloudsight可以为复杂的图像返回精确的标题,但需要10-20倍的时间来处理。
源代码地址: https://github.com/goberoi/cloudy_visionhttps://github.com/goberoi/cloudy_vision
以下是输出的示例。要查看所有16个吉娃娃和松饼图像的结果,请点击: http://www.topbots.com/downloads/code/vision/chihuahua_vs_muffin/。
这些API做得怎么样?除了微软(Microsoft)将松饼错认为是动物,其他所有API都承认图像是食物。但并没有关于食物是面包、蛋糕、饼干还是松饼的协议。谷歌是唯一一个成功识别松饼的API,并将其作为最可能的标签。
让我们来看看吉娃娃的例子。
同样,这些API做得相当好。所有的API都认为这张照片中是一只狗,尽管他们中的一些没有识别出正确的品种。
不过,也有失败的例子。微软在3个不同的时间,都做出了错误的预测,把松饼描述为毛绒动物或者泰迪熊。
谷歌是最好的松饼标识器,测试集中的7个松饼图片中有6个返回“松饼”作为最高置信标签,其他API没有返回“松饼”作为第一个标签,而是返回不太相关的标签如“面包”,“饼干”或“蛋糕”。
尽管有许多API成功的识别了图片,但是谷歌错误的识别了特定的松饼图片,把“口鼻部”和“狗狗”作为预测。
即使是世界上最先进的机器学习平台,也没有成功的完成吉娃娃与松饼的挑战。但一个人类学步儿童也能在分辨食物和费多狗的问题中打败机器学习。
我想知道这些API在吉娃娃和松饼的现实世界图像上的表现有多好,而不仅仅是在被精心设计的图像上。ImageNet恰好有1750张吉娃娃图片和1335张不同种类的松饼图片。
吉娃娃图片地址:http://image-net.org/synset?wnid=n02085620 松饼图片地址:http://image-net.org/synset?wnid=n07690273
有些图像很容易被我们的API识别,因为吉娃娃具有非常明显的类特征,比如凸出的眼睛和尖尖的耳朵。这就是吉娃娃的例子。
另一方面,一些图像是很难识别的。如果同一照片中有多个主题,或者主题被设计或遮挡,API通常会对对象进行错误识别。
在上面的图像中,狗身上的服装可能阻止了API正确识别品种。IBM Watson可以标记出帽子,但无法说出是人还是狗穿戴着帽子。
我们一般使用非结构化的真实数据(包括图像),而人工打上的标签并不总是“真值”。标签可能是错误的,或者是“噪音”。这是ImageNet上的“松饼”分类中的一个例子。
松饼分类地址:http://image-net.org/synset?wnid=n07690273
人类可能会更准确地将这种“松饼”识别为“纸杯蛋糕”。幸运的是,我们的许多API都返回了“蛋糕”、“纸杯蛋糕”或“曲奇”作为比ImageNet分类更相关的预测。Cloudsight的人工标记产生了最准确的结果:“饼干怪兽纸杯蛋糕”,这是一个奇怪的机器可解释的人类发明。
使用多个模型和API可能是评估“标签噪声”的一种有趣的方法。在ImageNet的“松饼”类别中,松饼品种(如麦麸,玉米,和淡烤的酥饼)在视觉上明显不同。很多都被错误地标记为纸杯蛋糕或其他非松饼类型的烘焙食品。
通过不同的图像识别API运行大量的图像,并跟踪常见的重叠和发散的一次性信息可以帮助你系统地标记可能有噪声或错误标签的图像。
奇怪的边注:在ImageNet上搜索不同的松饼分类时,我遇到了一个意想不到的类别,叫做“松饼人”,ImageNet定义为“以前贩卖松饼的流动小贩”。但该类别实际上展示的是人们在展示松饼的图片。
只是为了好玩,我试着用包含的复杂的照片来测试这些API,图片类型为:
下面是这些API如何识别同一张图像上的吉娃娃和松饼:
IBM和Cloudsight是仅有的两个承认图像中存在食物的API。然而,IBM有些猜测很有创意,如“章鱼烧”、“煎饺”和“奶油甜馅煎饼卷”。
还有一个由狗形的纸杯蛋糕引起的混乱:
微软把这张照片称为“一群毛绒动物”。谷歌预测,这张照片可能是“像狗一样的哺乳动物”(0.89),而不是“蛋糕”(0.79)。Clarifai则自信地认为,图像中包含了“食物”(0.99)和“哺乳动物”(0.96)。
在这些复杂或不寻常的情况下,Cloudsight的人工标题显示出了更好的结果。Cloudsight将最后一张图像标记为“12块西部高地白色小猎犬杯形蛋糕”。而且它也承认这是一个流行的meme。
虽然我们不能完全确定哪一个API更好,但是通过使用这些搞笑的示例,可以观察它们的执行质量的差异。
亚马逊的Rekognition不仅擅长识别主要对象,还能识别主要对象周围的许多对象。例如,识别图像中出现的一个人,鸟或一件家具。Rekognition还包括定性判断,如“cute”或
“adorable”。在它的最终预测中,可以很好的平衡客观和主观标签。
谷歌和IBM Watson的视觉API的识别标签都是非常简单的。 除了直接描述性的标签之外,它们似乎没有返回其它标签。这两种方式的性能似乎相当,IBM通常对给定的照片平均返回更多的标签。
微软的标签通常太高层了。例如,“狗”、“犬科”和“哺乳动物”从来没有被指定为“吉娃娃”或“松饼”。微软在自动生成的字幕中识别出“填充动物”。
Cloudsight是人工标记和机器标签之间的混合体。正如你从下面的数据中看到的那样,这个API比其他API慢得多。这就是说,对于复杂或奇怪的照片,Cloudsight的描述往往是最准确的,例如“12块西部高地白色小猎犬杯形蛋糕”。
到目前为止,Clarifai返回的标签最多(20)。然而,它并没有正确地将狗的品种定义为“吉娃娃”。相反,它采用了更通用的标签,如“狗”、“哺乳动物”或“动物”。Clarifai在添加一些定性和主观标签方面做的比较好,比如“可爱的”、“有趣的”和“美味的”。它还会返回诸如“面部表情”或“没有人”等抽象概念,这些标签对于商业化应用和详细描述十分有优势。
如前所述,为了评估这些API,你需要定义清晰的业务和产品目标,适当的测试数据集以及成功的度量标准。你还需要考虑到成本、速度和数量等因素。
以下16张图片来自经典吉娃娃和松饼meme的图片的总结。Amazon Rekognition的执行速度要比其他完全自动化的API稍微快一些。正如预期的那样,Cloudsight的速度较慢,因为人工/AI的融合结构,并且只返回一个标题。Clarifai默认返回20个标签。
所有 API 的价格都可以在各自的网站上找到。大多数 API 都可以免费试用,随后按月计费,在本文写成的时间(2017 年 10 月),各服务的价格大致如下。请注意:这些价格随时可能发生变化。
如果你购买图片的数量在百万张级别的话,大多数 API 的价格在每张图片 0.001-0.002 美元之间。Cloudsight 的价格最贵,在每月 30,000 张图片的购买方式下,每张图 0.02 美元;更小的套餐更贵,可能会达到每张图 0.07 美元!
如果你想要进行自己的非科学但有趣的研究,研究图像识别API可能会有帮助,吉娃娃与松饼meme发起者,Karen Zack,做了大量的“食物与动物”比较,形成了的成熟API基准测试。
以下是其中的一部分: