图像识别解释方法的视觉演变
正文字数:4270? 阅读时长:7分钟
图像识别(即 对图像中所显示的对象进行分类)是计算机视觉中的一项核心任务,因为它可以支持各种下游的应用程序(自动为照片加标签,为视障人士提供帮助等),并已成为机器学习(ML)算法的标准任务。
作者 /?Ali Abdalla
原文链接 /
作者Ali?Abdalla是Gradio的联合创始人之一,他是该公司的一名机器学习工程师。在此之前,他曾在特斯拉、iRobot和麻省理工学院工作过。他发表过几篇学术论文,并为许多开源项目做出了贡献。你可以在推特上搜索@si3luwa找到他。
在过去的十年中,深度学习(DL)算法已成为最具竞争力的图像识别算法。但是,它们默认是“黑匣子”算法,也就是说很难解释为什么它们会做出特定的预测。
为什么这会成为一个问题呢?这是因为ML模型的使用者通常出于以下原因而希望能够解释图像的哪些部分导致了算法的预测结果:
1.?机器学习调试模型,开发人员可以分析解释识别偏差和预测模型是否可能推广到新的图像
2. 机器学习模型的用户可能会更加信任一个模型,如果提供了为什么做出特定预测的解释的话。
3. 关于ML的法规(例如GDPR)要求一些算法决策可以用人类的语言来解释。
在以上因素的推动下,在过去的十年中,研究人员开发了许多不同的方法来打开深度学习的“黑匣子”,旨在使基础模型更具可解释性。有些方法对于某些种类的算法是特定的,而有些则是通用的。有些是快的,有些是慢的。
在本文中,我们概述了一些为图像识别而发明的解释方法,讨论了它们之间的权衡,并提供了一些示例和代码,您可以自己使用Gradio来尝试这些方法。
留一法
LEAVE-ONE-OUT
在深入研究之前,让我们从一个适用于任何类型图像分类的非常基本的算法开始:留一法(LOO)。
LOO是一种易于理解的方法。如果您要从头开始设计一种解释方法的话,那么这是您可能会想到的第一个算法。其想法是首先将输入图像分割为一系列较小的子区域。然后,运行一系列预测,每次遮罩(即将像素值设置为零)其中一个子区域。根据每个区域的“蒙版”相对于原始图像影响预测的程度,为每个区域分配一个重要度分数。直观地来说,这些分数量化了哪一部分的区域最有助于进行预测。
因此,如果我们在一个3x3的网格中将图像分成9个子区域,则LOO如下所示:
那些最暗的红色方块是影响输出最大的方块,而颜色最亮的方块对输出的影响最小。在这种情况下,当顶部中心区域被遮罩时,预测置信度下降幅度最大,从初始的95%下降到67%。
如果我们以更好的方式进行分割(例如,使用超像素而不是网格),我们将获得一个相当合理的显著图,该图突出了杜宾犬的脸,耳朵和尾巴。
LOO是一种简单而强大的方法。根据图像分辨率和分割方式,它可以产生非常准确和有用的结果。正如使用InceptionNet预测的那样,下面这张图就是LOO应用于1100?×?825像素的金毛寻回犬图像。
在实践中,LOO的一个巨大优势是它不需要任何访问模型内部的功能,甚至可以处理除识别之外的其他计算机视觉任务,从而使它成为一个灵活的通用工具。
那有什么缺点呢?首先,它很慢。每次一个区域被遮罩,我们就对图像进行推断。要获得一个具有合理分辨率的显著图,您的遮罩尺寸可能必须很小。因此,如果您将图像分割成100个区域,则将需要100倍的推理时间才能获得热度图。另一方面,如果您有太多的子区域,则对它们中的任何一个区域进行遮罩不一定会在预测中产生很大的差异。此LOO的第二个限制是,它没有考虑到区域之间的相互依赖性。
因此,让我们来看一个更快,更复杂的技术:梯度上升。
梯度上升
VANILLA GRADIENT ASECENT [2013]
梯度上升这一方法的提出,可以追溯到2013年发表的一篇名为Visualizing Image Classification Models and Saliency Maps [2013]的论文中找到。LOO和梯度上升这两个方法之间存在着概念上的关系。使用LOO时,我们考虑到当我们逐个遮盖图像中的每个区域时,输出是如何变化的。通过梯度上升,我们可以一次计算出每单个像素对输出的影响。我们如何做到这一点的呢?答案是使用反向传播的改进版本。