PyTorch 的高级 AI 可解释性
pip install grad-cam
高级教程文档:https://jacobgil.github.io/pytorch-gradcam-book
这是一个包含计算机视觉领域最先进的可解释性 AI 方法的软件包。可用于诊断模型预测,无论是在生产环境中还是在开发模型时。其目标还包括作为新可解释性方法研究的算法和指标基准。
⭐ 面向计算机视觉的综合像素归因方法集合。
⭐ 在许多常见的 CNN 网络和视觉 Transformer 上进行了测试。
⭐ 高级用例:支持分类、目标检测、语义分割、嵌入相似性等。
⭐ 包括平滑方法,使 CAMs 看起来更美观。
⭐ 高性能:在所有方法中完全支持批量图像处理。
⭐ 包含用于验证解释可信度的指标,并可调优以获得最佳性能。
方法 | 功能描述 |
---|---|
GradCAM | 按平均梯度对 2D 激活进行加权 |
HiResCAM | 类似 GradCAM,但逐元素将激活与梯度相乘;对某些模型具有可证明的保真度保证 |
GradCAMElementWise | 类似 GradCAM,但逐元素将激活与梯度相乘,然后在求和之前应用 ReLU 操作 |
GradCAM++ | 类似 GradCAM,但使用二阶梯度 |
XGradCAM | 类似 GradCAM,但通过归一化的激活来缩放梯度 |
AblationCAM | 将激活置零并测量输出的下降情况(此库包括快速批量实现) |
ScoreCAM | 通过缩放激活来扰动图像,并测量输出的下降情况 |
EigenCAM | 采用 2D 激活的第一主成分(无类别区分,但结果似乎很好) |
EigenGradCAM | 类似 EigenCAM,但具有类别区分:激活*梯度的第一主成分。看起来像 GradCAM,但更清晰 |
LayerCAM | 通过正梯度对激活进行空间加权。尤其在较低层次上效果更好 |
FullGrad | 计算网络各处的偏差梯度,然后将它们求和 |
深度特征分解 | 对 2D 激活进行非负矩阵分解 |
可视化示例
使网络认为图像标签为“哈巴狗,巴哥犬”的原因 | 使网络认为图像标签为“虎斑猫,虎斑猫”的原因 | 将 Grad-CAM 与 Guided Backpropagation 结合用于“哈巴狗,巴哥犬”类别的示例 |
---|---|---|
目标检测和语义分割
目标检测 | 语义分割 |
---|---|
3D 医学语义分割 |
---|
解释与其他图像/嵌入的相似性
深度特征分解
分类
Resnet50:
类别 | 图像 | GradCAM | AblationCAM | ScoreCAM |
---|---|---|---|---|
狗 | ||||
猫 |
视觉 Transformer(Deit Tiny):
类别 | 图像 | GradCAM | AblationCAM | ScoreCAM |
---|---|---|---|---|
狗 | ![](https://yellow-cdn.veclightyear.com/2b | |||
这些文档指向新的jupyter-book,用于快速渲染。 | ||||
jupyter笔记本本身可以在git仓库的tutorials文件夹下找到。 |
平滑处理以获得更好看的CAM
为了减少CAM中的噪声,并使其更好地适应对象,支持两种平滑方法:
-
aug_smooth=True
测试时增强:运行时间增加x6。
应用水平翻转的组合,并将图像乘以[1.0, 1.1, 0.9]。
这有助于更好地将CAM集中在对象上。
-
eigen_smooth=True
activations*weights
的第一主成分这有助于去除大量噪声。
AblationCAM | aug smooth | eigen smooth | aug+eigen smooth |
---|---|---|---|
运行示例脚本:
用法: python cam.py --image-path <path_to_image> --method <method> --output-dir <output_dir_path>
若要使用特定设备,例如cpu, cuda, cuda:0或mps:
python cam.py --image-path <path_to_image> --device cuda --output-dir <output_dir_path>
您可以选择以下方法:
GradCAM
, HiResCAM
, ScoreCAM
, GradCAMPlusPlus
, AblationCAM
, XGradCAM
, LayerCAM
, FullGrad
和 EigenCAM
。
某些方法如ScoreCAM和AblationCAM需要大量前向传播,并具有批量实现。
您可以通过以下方式控制批量大小
cam.batch_size =
引用
如果您将此用于研究,请引用。以下是一个示例BibTeX条目:
@misc{jacobgilpytorchcam,
title={PyTorch library for CAM methods},
author={Jacob Gildenblat and contributors},
year={2021},
publisher={GitHub},
howpublished={\url{https://github.com/jacobgil/pytorch-grad-cam}},
}
参考文献
https://arxiv.org/abs/1610.02391
Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization Ramprasaath R. Selvaraju, Michael Cogswell, Abhishek Das, Ramakrishna Vedantam, Devi Parikh, Dhruv Batra
https://arxiv.org/abs/2011.08891
Use HiResCAM instead of Grad-CAM for faithful explanations of convolutional neural networks Rachel L. Draelos, Lawrence Carin
https://arxiv.org/abs/1710.11063
Grad-CAM++: Improved Visual Explanations for Deep Convolutional Networks Aditya Chattopadhyay, Anirban Sarkar, Prantik Howlader, Vineeth N Balasubramanian
https://arxiv.org/abs/1910.01279
Score-CAM: Score-Weighted Visual Explanations for Convolutional Neural Networks Haofan Wang, Zifan Wang, Mengnan Du, Fan Yang, Zijian Zhang, Sirui Ding, Piotr Mardziel, Xia Hu
https://ieeexplore.ieee.org/abstract/document/9093360/
Ablation-cam: Visual explanations for deep convolutional network via gradient-free localization. Saurabh Desai and Harish G Ramaswamy. In WACV, pages 972–980, 2020
https://arxiv.org/abs/2008.02312
Axiom-based Grad-CAM: Towards Accurate Visualization and Explanation of CNNs Ruigang Fu, Qingyong Hu, Xiaohu Dong, Yulan Guo, Yinghui Gao, Biao Li
https://arxiv.org/abs/2008.00299
Eigen-CAM: Class Activation Map using Principal Components Mohammed Bany Muhammad, Mohammed Yeasin
http://mftp.mmcheng.net/Papers/21TIP_LayerCAM.pdf
LayerCAM: Exploring Hierarchical Class Activation Maps for Localization Peng-Tao Jiang; Chang-Bin Zhang; Qibin Hou; Ming-Ming Cheng; Yunchao Wei
https://arxiv.org/abs/1905.00780
Full-Gradient Representation for Neural Network Visualization Suraj Srinivas, Francois Fleuret
https://arxiv.org/abs/1806.10206
Deep Feature Factorization For Concept Discovery Edo Collins, Radhakrishna Achanta, Sabine Süsstrunk