Project Icon

torch-cam

利用 PyTorch 中卷积层的特定于类的激活的简单方法

TorchCAM使用PyTorch的钩子机制,简化了获取卷积层类激活图的过程。该工具支持多种CAM方法,能够与任意PyTorch模型集成。用户只需几行代码即可设置并检索激活图,并可进行可视化。项目提供详尽的文档和多种演示应用,适用于深度学习模型解释需求的开发人员。

TorchCAM: 类激活探索器

CI 状态 ruff ruff 测试覆盖百分比

PyPi 版本 Conda 版本 python 版本 许可证

Huggingface 空间 在 Colab 中打开

文档状态

简单的方式利用 PyTorch 中卷积层的类特异性激活。

来源: 图片来自 woopets (激活图由预训练的 Resnet-18 创建)

快速导览

设置你的 CAM

TorchCAM 利用 PyTorch 钩机制 无缝获取所有必要信息,以便产生类激活而不需要用户额外的操作。每个 CAM 对象作为你模型的一个包装器。

你可以在文档中找到支持的 CAM 方法的详尽列表,然后按如下使用:

# 定义你的模型
from torchvision.models import resnet18
model = resnet18(pretrained=True).eval()

# 设置你的 CAM 提取器
from torchcam.methods import SmoothGradCAMpp
cam_extractor = SmoothGradCAMpp(model)

请注意,默认情况下,CAM 所获取的层设置为最后一个非降维的卷积层。如果你希望研究特定的层,在构造函数中使用 target_layer 参数。

获取类激活图

一旦你设置了 CAM 提取器,只需像往常一样使用你的模型对数据进行推理。如果需要任何附加信息,提取器会自动为你获取。

from torchvision.io.image import read_image
from torchvision.transforms.functional import normalize, resize, to_pil_image
from torchvision.models import resnet18
from torchcam.methods import SmoothGradCAMpp

model = resnet18(pretrained=True).eval()
# 获取输入
img = read_image("path/to/your/image.png")
# 为你选择的模型预处理
input_tensor = normalize(resize(img, (224, 224)) / 255., [0.485, 0.456, 0.406], [0.229, 0.224, 0.225])

with SmoothGradCAMpp(model) as cam_extractor:
  # 预处理你的数据并传入模型
  out = model(input_tensor.unsqueeze(0))
  # 通过传递类索引和模型输出获取 CAM
  activation_map = cam_extractor(out.squeeze(0).argmax().item(), out)

如果你想可视化你的热图,只需将 CAM 转化为 numpy ndarray:

import matplotlib.pyplot as plt
# 可视化原始 CAM
plt.imshow(activation_map[0].squeeze(0).numpy()); plt.axis('off'); plt.tight_layout(); plt.show()

raw_heatmap

或者如果你希望将其叠加在输入图像上:

import matplotlib.pyplot as plt
from torchcam.utils import overlay_mask

# 调整 CAM 大小并叠加
result = overlay_mask(to_pil_image(img), to_pil_image(activation_map[0].squeeze(0), mode='F'), alpha=0.5)
# 显示结果
plt.imshow(result); plt.axis('off'); plt.tight_layout(); plt.show()

overlayed_heatmap

安装

需要 Python 3.8(或更高版本)和 pip/conda 来安装 TorchCAM。

稳定版本

可以使用 pypi 安装最新的稳定版本包:

pip install torchcam

或使用 conda:

conda install -c frgfm torchcam

开发者安装

或者,如果你希望使用项目中尚未发布的新功能,可以从源码安装包:

git clone https://github.com/frgfm/torch-cam.git
pip install -e torch-cam/.

CAM 动物园

该项目由仓库所有者开发和维护,但实现基于以下研究论文:

来源: YouTube 视频 (激活图由 Layer-CAM 结合预训练的 ResNet-18 创建)

其他

文档

完整的包文档可在这里查看详细说明。

演示App

提供了一个最小的演示 App,供你试用支持的 CAM 方法!可以查看现场演示 Hugging Face Spaces

如果你更喜欢自己运行演示,你需要一个额外的依赖项 (Streamlit) 来运行该 App:

pip install -e ".[demo]"

然后你可以通过运行以下命令轻松在默认浏览器中运行你的应用程序:

streamlit run demo/app.py

torchcam_demo

示例脚本

提供了一个示例脚本,你可以使用它在同一张图片上对多个 CAM 方法生成的热图进行基准测试:

python scripts/cam_example.py --arch resnet18 --class-idx 232 --rows 2

gradcam_sample

所有脚本参数可以通过 python scripts/cam_example.py --help 检查

延迟基准测试

你渴望美丽的激活图,但不知道它是否符合你的延迟需求?

在下表中,你将找到所有 CAM 方法的延迟基准测试(不包括前向传递):

<SOURCE_TEXT>

CAM方法架构GPU平均值 (标准差)CPU平均值 (标准差)
CAMresnet180.11ms (0.02ms)0.14ms (0.03ms)
GradCAMresnet183.71ms (1.11ms)40.66ms (1.82ms)
GradCAMppresnet185.21ms (1.22ms)41.61ms (3.24ms)
SmoothGradCAMppresnet1833.67ms (2.51ms)239.27ms (7.85ms)
ScoreCAMresnet18304.74ms (11.54ms)6796.89ms (415.14ms)
SSCAMresnet18
ISCAMresnet18
XGradCAMresnet183.78ms (0.96ms)40.63ms (2.03ms)
LayerCAMresnet183.65ms (1.04ms)40.91ms (1.79ms)
CAMmobilenet_v3_largeN/A*N/A*
GradCAMmobilenet_v3_large8.61ms (1.04ms)26.64ms (3.46ms)
GradCAMppmobilenet_v3_large8.83ms (1.29ms)25.50ms (3.10ms)
SmoothGradCAMppmobilenet_v3_large77.38ms (3.83ms)156.25ms (4.89ms)
ScoreCAMmobilenet_v3_large35.19ms (2.11ms)679.16ms (55.04ms)
SSCAMmobilenet_v3_large
ISCAMmobilenet_v3_large
XGradCAMmobilenet_v3_large8.41ms (0.98ms)24.21ms (2.94ms)
LayerCAMmobilenet_v3_large8.02ms (0.95ms)25.14ms (3.17ms)

*基本的CAM方法不能够适用于具有多个全连接层的架构

该基准测试在(224, 224)输入上进行了100次迭代,以更好地反映普通用户的预期性能。硬件配置包括一台英特尔® 酷睿™ i7-10750H用于CPU,以及NVIDIA GeForce RTX 2070 with Max-Q Design用于GPU。

您可以按照如下方式在您的硬件上运行此延迟基准测试:

python scripts/eval_latency.py SmoothGradCAMpp

所有脚本参数可以使用python scripts/eval_latency.py --help进行检查

示例笔记本

想要了解更多TorchCAM功能的示例吗? 您可以查看专为提供广泛概述而设计的Jupyter笔记本

引用

如果您希望引用此项目,请随意使用此BibTeX引用:

@misc{torcham2020,
    title={TorchCAM: class activation explorer},
    author={François-Guillaume Fernandez},
    year={2020},
    month={March},
    publisher = {GitHub},
    howpublished = {\url{https://github.com/frgfm/torch-cam}}
}

贡献

想扩展CAM的可能性范围吗?或者也许是提交一篇论文实现?任何形式的贡献都非常感谢!

CONTRIBUTING中可以找到一份简短的指南,以帮助发展这个项目!

许可证

在Apache 2.0许可证下分发。请参阅LICENSE以获取更多信息。

FOSSA状态 </SOURCE_TEXT>

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号