雷锋网 AI 科技评论按:当训练好的图像分类器遇到了训练数据里不存在的类别的图像时,显然它会给出离谱的预测。那么我们应该如何改进分类器、如何克服这个问题呢?
老实说,这真的是领域内的一个老大难问题,没人能给出完美的答案。Jetpac(现被谷歌收购) CTO、苹果毕业生、TensorFlow 团队成员 Pete Warden 在个人博客中写下了他的一些个人思考。雷锋网 AI 科技评论编译如下。
几天前,正与我合作的 Plant Village 团队向我提出了一个他们正在开发的应用程序(app)中遇到的问题。他们用 app 检测植物所患的疾病。当它面对植物的叶子时,app 能够给出很好的分类结果,然而如果你让 app 处理电脑键盘的图片,它会认为这是一种受损了的植物。如下图。
对于计算机视觉研究者们来说,这样的结果并不令人意外。但对于大多数其他人来说,这还是令人十分震惊的。所以我想解释为什么会发生这种情况,以及我们可以对此做些什么。
作为人类,我们习惯于对我们看到的周围世界中的任何事物进行分类。自然而然地,我们也希望机器具有相同的能力。然而,大多数模型仅仅被训练用来识别非常有限的物体集合,例如 ImageNet 竞赛中的 1,000 种物体。至关重要的是,训练过程假设模型面对的每个样本一定都是属于这些类别的其中一种物体,而且预测结果也在这个集合的范围内。模型不能选择给出「我不知道!」这样的预测结果,也没有训练数据会帮助分类器学到这样的预测结果。对于科学研究来说,这样的简化处理是很有意义的,但是当我们在现实世界中使用这些最终得到的模型时还是会引起一些问题。
回想起我在 Jetpac 工作的日子,我们很难说服人们相信这个具有开创性的 AlexNet 模型是一个巨大的突破。因为每当我们把运行着 AlexNet 的用于演示的手机给测试者使用时,他们总会将自己的脸让手机识别,而手机的预测结果往往是「氧气面罩」或「安全带」之类的东西。这是因为 ImageNet 竞赛数据集中的物体不包括任何人的标签,但是大多数带有面具或安全带标签的图片都同时包含了人的面孔和标签对应的物体。另一个令人尴尬的错误是,当人们把手机对准一个盘子时,它给出的预测结果竟然是「马桶座」!这是因为在初始的类别中没有盘子,而外形特征最接近的白色圆形物体是一个马桶。
渐渐地,我认为这是一个「开放世界」与「封闭世界」的问题。我们假设模型所要面对的物体在有限的范围内,从而训练和评估模型。然而,一旦模型走出实验室,被用于现实世界的种种应用,这样的假设就不成立了。用户会根据这些模型面对任意放在它们面前的物体的预测结果来评判它们的性能,无论这些物体是否在训练集中。
不幸的是,我不知道有什么简单的方法可以解决这个问题,但是我已经看到了目前有一些策略是对此有所帮助的。显然,我们可以从向训练数据添加一个「未知」类开始处理该问题。而坏消息是,这样做会引发一连串其它的问题:
「未知」类应该包含怎样的样本?可能属于该类的自然图像无穷无尽,所以你应该如何选择哪些图片应该被纳入该类?
在「未知」类中,每种不同类别的物体需要包含多少?
对于那些看起来和你重点关注的类非常相似的未知对象,你应该做些什么?例如,添加一个不在 ImageNet 的 1,000 类物体中,而看起来几乎完全相同的品种的狗,可能会使许多本应该正确匹配的物体被迫分类到未知类中。
在训练数据中需要让未知类的样本占多大的比重?
最后一点实际上涉及到了一个更广阔的问题。你从图像分类网络中的到的预测值并不是概率。它们假设你看到任何特定类的概率等于该类在训练数据中出现的频率。如果你用一个分类里包含企鹅的动物分类器检测亚马逊丛林中的动物,你就会遇到这个问题,因为(几乎)所有看到企鹅的事件都会是假正例误报(false positive,显然这里是不会出现企鹅的,所以当模型认为自己看到了企鹅的时候一定是错误的)。即使是对于美国城市中的狗的种类,罕见的品种在 ImageNet 训练数据中出现的次数也要比在一个宠物狗公园中多,所以他们会被过度描述为假正类。通常的解决方案是弄清在计算过程中你将面临的先验概率,然后利用它们将校准值应用到网络的输出中,从而获得更接近真实概率的结果。
在实际的应用程序中,从整体上帮助解决该问题的主要策略是:将模型的适用范围限制在「应用程序将面对的物体与模型的训练数据匹配」的情况。要做到这一点,一个简单的方法就是对产品进行设计。你可以创建一个用户界面,指引人们在运行分类器之前确保摄像头画面中已经出现了要分类的目标,这和那些要求你对支票或其他文档进行拍照的应用程序经常做的是一样的。
稍微复杂一点的方案是,你可以编写一个独立的图像分类器,它试图去识别那些那些主图像分类器不能识别的情况。这和添加一个单一的「未知」类是不同的,因为它的作用更像一种级联操作,或者用做一个详细的模型前的过滤器。在识别农作物患病情况的例子中,视觉上的操作环境足够独特,所以只需要训练一个训练一个模型来区分叶子和随机选择的其他图片。这些照片之间有足够的相似性,而门模型至少应该能够识别出图片是否是在不支持的场景中拍摄的。该门模型将在运行完整的图像分类器之前运行,如果它没有检测到一些看起来像是植物的东西,它就会提前跳出程序并且返回表明没有发现任何植物的错误信息。
要求你对信用卡拍照或执行其它光学字符识别(OCR)过程的应用程序通常会混合使用屏幕上的方向和检测模糊性或不协调性,从而指导用户拍摄可以成功处理的照片。而一个用于回答「那是树叶吗?」这样的问题的独立图像分类模型则是这种接口模式的简单版本。
本文给出的可能并不是一个令人满意的答案,但是一旦你把机器学习技术引入到带有限制的研究问题之后,它们就会反应出用户期望目标的混乱。在一个人对一个物体的认知过程中,存在很多常识和外部知识,而我们在经典的图像分类任务中并没有获取这些知识。为了获得满足用户期望的结果,我们必须围绕我们的模型设计一个完整的系统,这个系统能够理解它们将被部署到的环境,并切不仅仅基于模型的输出作出明智的决策。
via petewarden.com,雷锋网 AI 科技评论编译