我正在研究 CIFAR-10 数据集并试图了解模型如何预测图像(即 AI 的可解释和解释)。做到这一点的方法之一是使用遮挡敏感度。我在 Kaggle上找到了关于Occlusion Sensitivity的精彩代码。我使用相同的代码(但用于 3 个通道)。我发现很难理解上面链接中的热图。我了解遮挡敏感性的定义。这很简单。基本上,这个想法是通过用矩形灰色补丁覆盖图像中的对象来遮挡图像,然后测试人工智能是否可以检测到该对象。在链接中我有三个问题:
print('Predicted class: {} (prob: {})'.format(np.argmax(pred), np.amax(out)))
在上面的代码中,np.amax(out) 用于概率,但由于变量“out”在循环中,np.amax(out) 将返回 for 循环的最后一次迭代的最大值可能或可能没有预测到所需的类别。这不应该用 np.amax(pred) 代替吗?例如:如果正确的类是 2 并且最后一次迭代预测类 5,np.amax(out) 将返回类 5 而不是类 2 的概率。我在这里遗漏了什么还是我对代码的理解正确?
链接中提到了
heatmap (low value = important field) and predicted-class map
现在,我了解到当灰色补丁覆盖图像中的重要信息时,热图显示较暗的阴影,这意味着图像的这部分被遮挡时会降低预测类别的概率(如果模型具有高精度,则为正确类别)由模型急剧。但我不明白预测的类图。如何在这些领域预测其他类别?当 15-20 之间(在 y 轴上)有一个补丁时,第 2 类的概率会降低,但是神经网络是如何预测第 8 类和第 9 类的呢?
现在,我对遮挡敏感度确实有效:
- 当图像被灰色块遮挡时,当这个图像被给模型时,模型看到除了灰色块区域之外的整个图像,并根据它所看到的给出预测(这是我认为的,但是当我查看预测的类图时它没有意义)或
- 当图像被灰色块遮挡时,当这个图像被提供给模型时,模型只看到灰色块区域下的图像,并根据它在灰色块区域中看到的内容进行预测(它不对我来说很有意义,但是有了这个,我可以解释预测的类图)
以上哪项是正确的?
我正在使用来自 CIFAR-10 数据集的船舶图像(即第 8 类)
并且被遮挡的图像是
输出是:
Correct class: [8]
Predicted class: 8 (prob: 0.9992953538894653) #Here I have replaced np.amax(out) with np.amax(pred) (Doubt 1)
Predictions:
Class id 8: Count 8
Class id 0: Count 37
Class id 3: Count 2
Class id 1: Count 13
Class id 2: Count 4
热图和预测的类图
如您所见,模型预测类别 0(被遮挡时)最多(计数为 37),但模型预测类别 8(未遮挡时,即当整个图像被提供给模型时)。为什么这样?
另外,什么样的图像更适合训练模型?灰度图像或彩色(3通道:RGB)图像
如果有人可以帮助我理解预测的类图,或者为我提供一个好的链接,那将是完美的!
注意:以下链接已被引用:
但不幸的是,我并没有真正了解遮挡敏感度的核心。我得到直觉(我猜)
非常感谢!