我们来用 Picasso 的两个内置可视化能力来处理本文开头的坦克问题:局部遮挡与显著图。在这些例子中,我们将使用预训练的 VGG16 模型进行分类。已知该模型很擅长进行坦克分类,atv,所以能否使用这些可视化来查看模型是不是真正根据是否存在坦克,而非天空进行分类? 通过依次遮挡图像的各个部分,我们可以判断哪些区域在分类中更为重要。该图像由 VGG16 模型进行分类,具有 94%的正确分类概率。图像中较亮部分的分类概率更高。例如,天空那部分区域很亮,因为遮挡天空并不影响其被分类为存在坦克的概率。相反,坦克的胎面区域更暗,因为若这些区域不存在,模型将难以明确所看到的是否为坦克。 我们能看出这种可视化可能如何帮助军队:当「坦克性」的部分(如坦克的胎面)丢失时,模型将无法成功分类。而有趣的是,当一部分胎面被遮挡时,图像更可能被分类为半履带车。直观而言,atv,这么分类存在一定的道理,因为半履带车的前半部分是车轮。 除非你标出全部车轮,否则这个模型很肯定这就是半履带车;除非你将车轮遮挡,否则它也会很肯定这不是坦克。图像来源:维基百科 除了局部遮挡,我们还提供开箱即用的显著图。显著图可以通过反向传播查看分类中输入图像的导数。在给定像素处的高导数值则意味着更改该像素能更大程度上影响分类结果。 坦克的显著图。更亮的像素表明该「坦克」图像的输入像素具有更高的导数值。而好的预兆是,最亮的像素似乎处于图像的坦克区域。请注意,绝大多数非坦克区域都是暗的,仅有少数例外,这意味着改变这些像素不应改变图像的「坦克性」。 添加可视化 我们希望新的可视化能够很容易被整合。而你只需要将可视化代码放在可视化文件夹中,再绘制一个 HTML 模板来显示即可。 若想查看如何构建简单的可视化示例,请参阅 ClassProbabilites 可视化教程。 系统给出的相对分类概率与你可做出的最简单的可视化有关。 使用你自己的模型 当然,你将会使用已包含的可视化与经过训练的神经网络。我们已将其尽量简化,但你至少应定义三种方法: 1. 预处理:告知可视化如何将上传的图像转变为神经网络输入 2. 后处理:告知可视化如何将扁平的中间层变为图像尺寸(这是在中间层操作的可视化所需的,例如显著图) 3. decode_prob:通过用类型名称进行注释,来告知可视化如何解释原始输出(通常为概率数组) 本教程详细介绍了如何构建这些功能,而它们可以独立于应用程序的源代码之外进行指定。 显著图可视化的结果。这个应用程序正在使用具有 VGG16 模型的 Keras 框架。这个示例预包装了代码。由于显著图取决于输入层中关于中间层的导数,因此必须告知可视化如何使用`decode_prob`重塑输出张量并生成图像。 贡献 我们欢迎任何与改善构建此应用程序有关的建议。若你想要贡献可视化功能或其他资料,那再好不过了!请查阅我们的 Github 存储库了解更多信息。我们遵循 EPL 来发布 Picasso,因为我们打算让它归入 Eclipse 基金会旗下。 参考文献 1. Yudkowsky, Eliezer.「Artificial Intelligence as a Positive and Negative Factor in Global Risk.」Global Catastrophic Risks, edited by Nick Bostrom and Milan M. ?irkovi?, 308–345. New York: Oxford University Press. 2008. 2.「Tesla Driver Killed In Crash With Autopilot Active, NHTSA Investigating」. The Verge. N.p., 2017. Web. 11 May 2017. 3. Zeiler, Matthew D., and Rob Fergus.「Visualizing and understanding convolutional networks.」European conference on computer vision*. Springer International Publishing, 2014. (责任编辑:本港台直播) |