[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-jacobgil--vit-explain":3,"tool-jacobgil--vit-explain":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",143909,2,"2026-04-07T11:33:18",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107888,"2026-04-06T11:32:50",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":10,"last_commit_at":59,"category_tags":60,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[35,15,13,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":77,"owner_email":78,"owner_twitter":79,"owner_website":80,"owner_url":81,"languages":82,"stars":87,"forks":88,"last_commit_at":89,"license":90,"difficulty_score":32,"env_os":91,"env_gpu":92,"env_ram":92,"env_deps":93,"category_tags":98,"github_topics":99,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":105,"updated_at":106,"faqs":107,"releases":138},5209,"jacobgil\u002Fvit-explain","vit-explain","Explainability for Vision Transformers","vit-explain 是一个专为视觉 Transformer（ViT）模型设计的可解释性分析工具，旨在揭开深度学习“黑盒”的神秘面纱。它主要解决了用户难以直观理解 ViT 模型在图像分类时究竟关注了哪些区域这一痛点，通过可视化手段清晰展示模型的注意力分布。\n\n该工具非常适合 AI 研究人员、开发者以及需要调试模型性能的技术人员使用。其核心亮点在于实现了两种先进的注意力可视化方法：基础的“注意力展开”（Attention Rollout）和更精准的“梯度注意力展开”（Gradient Attention Rollout）。后者能够结合特定类别的梯度信息，精准定位模型是依据图像的哪部分特征做出了最终判断，例如区分同一张图片中的猫与狗。\n\n此外，vit-explain 还内置了多项实用优化技巧。用户可以通过调整参数过滤掉微弱的注意力噪声，并灵活选择多种注意力头融合策略（如取最大值、最小值或平均值），从而获得比传统平均法更清晰、更具洞察力的热力图结果。无论是用于学术探究还是模型诊断，vit-explain 都能帮助用户更深入地理解视觉 Transformer 的决策逻辑。","# Explainability for Vision Transformers (in PyTorch)\n\nThis repository implements methods for explainability in Vision Transformers.\n\nSee also https:\u002F\u002Fjacobgil.github.io\u002Fdeeplearning\u002Fvision-transformer-explainability\n\n\n## Currently implemented:\n- Attention Rollout.\n- Gradient Attention Rollout for class specific explainability. \n*This is our attempt to further build upon and improve Attention Rollout.*\n\n- TBD Attention flow is work in progress.\n\nIncludes some tweaks and tricks to get it working:\n- Different Attention Head fusion methods, \n- Removing the lowest attentions. \n\n\n## Usage\n\n- From code\n``` python\nfrom vit_grad_rollout import VITAttentionGradRollout\n\nmodel = torch.hub.load('facebookresearch\u002Fdeit:main', \n'deit_tiny_patch16_224', pretrained=True)\ngrad_rollout = VITAttentionGradRollout(model, discard_ratio=0.9, head_fusion='max')\nmask = grad_rollout(input_tensor, category_index=243)\n\n```\n\n- From the command line:\n\n```\npython vit_explain.py --image_path \u003Cimage path> --head_fusion \u003Cmean, min or max> --discard_ratio \u003Cnumber between 0 and 1> --category_index \u003Ccategory_index>\n```\nIf category_index isn't specified, Attention Rollout will be used,\notherwise Gradient Attention Rollout will be used.\n\nNotice that by default, this uses the 'Tiny' model from [Training data-efficient image transformers & distillation through attention](https:\u002F\u002Farxiv.org\u002Fabs\u002F2012.12877)\n hosted on torch hub.\n\n## Where did the Transformer pay attention to in this image?\n\n| Image | Vanilla Attention Rollout  |  With discard_ratio+max fusion |\n| -------------------------|-------------------------|------------------------- |\n| ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_ccf4bb08e27b.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_80ff47bd2034.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_a344bd5b55df.png)\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_c580710783ba.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_d9ddcab5292f.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_e3a109ada6f9.png) |\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_5504e8df31ab.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_c2056e4e637e.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_1beb1648bb58.png) |\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_c5b26abdbd29.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_9c45bb6daa0c.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_4ca295a45451.png) |\n\n## Gradient Attention Rollout for class specific explainability\n\nThe Attention that flows in the transformer passes along information belonging to different classes.\nGradient roll out lets us see what locations the network paid attention too, \nbut it tells us nothing about if it ended up using those locations for the final classification.\n\nWe can multiply the attention with the gradient of the target class output, and take the average among the attention heads (while masking out negative attentions) to keep only attention that contributes to the target category (or categories).\n\n\n### Where does the Transformer see a Dog (category 243), and a Cat (category 282)?\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_a717dac0f30c.png) ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_5957a895d2e4.png)\n\n### Where does the Transformer see a Musket dog (category 161) and a Parrot (category 87):\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_bb0106a86dae.png) ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_903bab2a886f.png)\n\n\n## Tricks and Tweaks to get this working\n\n### Filtering the lowest attentions in every layer\n\n`--discard_ratio \u003Cvalue between 0 and 1>`\n\nRemoves noise by keeping the strongest attentions.\n\nResults for dIfferent values:\n\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_88619f83985e.gif) ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_cf275b12f0c1.gif)\n\n### Different Attention Head Fusions\n\nThe Attention Rollout method suggests taking the average attention accross the attention heads, \n\nbut emperically it looks like taking the Minimum value, Or the Maximum value combined with --discard_ratio, works better.\n\n` --head_fusion \u003Cmean, min or max>`\n\n| Image | Mean Fusion  |  Min Fusion |\n| -------------------------|-------------------------|------------------------- |\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_ccf4bb08e27b.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_80ff47bd2034.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_98a5a3aa1ef6.png)\n\n## References\n- [Quantifying Attention Flow in Transformers](https:\u002F\u002Farxiv.org\u002Fabs\u002F2005.00928)\n- [timm: a great collection of models in PyTorch](https:\u002F\u002Fgithub.com\u002Frwightman\u002Fpytorch-image-models)\nand especially [the vision transformer implementation](https:\u002F\u002Fgithub.com\u002Frwightman\u002Fpytorch-image-models\u002Fblob\u002Fmaster\u002Ftimm\u002Fmodels\u002Fvision_transformer.py)\n\n- [An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale](https:\u002F\u002Farxiv.org\u002Fabs\u002F2010.11929)\n- Credit for https:\u002F\u002Fgithub.com\u002Fjeonsworld\u002FViT-pytorch for being a good starting point.\n\n## Requirements\n`pip install timm`\n","# 视觉Transformer的可解释性（基于PyTorch）\n\n本仓库实现了视觉Transformer模型的可解释性方法。\n\n更多信息请参见：https:\u002F\u002Fjacobgil.github.io\u002Fdeeplearning\u002Fvision-transformer-explainability\n\n\n## 当前已实现的功能：\n- 注意力回传（Attention Rollout）。\n- 针对特定类别的梯度注意力回传。\n*这是我们在此基础上进一步改进和优化注意力回传的尝试。*\n\n- 待定：注意力流仍在开发中。\n\n此外，还包含一些调整和技巧以确保其正常运行：\n- 不同的注意力头融合方法。\n- 移除最低权重的注意力。\n\n\n## 使用方法\n\n- 通过代码调用\n``` python\nfrom vit_grad_rollout import VITAttentionGradRollout\n\nmodel = torch.hub.load('facebookresearch\u002Fdeit:main', \n'deit_tiny_patch16_224', pretrained=True)\ngrad_rollout = VITAttentionGradRollout(model, discard_ratio=0.9, head_fusion='max')\nmask = grad_rollout(input_tensor, category_index=243)\n\n```\n\n- 通过命令行调用：\n\n```\npython vit_explain.py --image_path \u003C图片路径> --head_fusion \u003Cmean, min 或 max> --discard_ratio \u003C0到1之间的数字> --category_index \u003C类别索引>\n```\n如果未指定`category_index`，则使用注意力回传；否则将使用梯度注意力回传。\n\n请注意，默认情况下，该工具使用的是来自[高效数据训练的图像Transformer及注意力蒸馏](https:\u002F\u002Farxiv.org\u002Fabs\u002F2012.12877)论文中的“Tiny”模型，该模型托管在PyTorch Hub上。\n\n## Transformer在这张图片中关注了哪些区域？\n\n| 图片 | 原始注意力回传 | 带丢弃比例+最大值融合 |\n| -------------------------|-------------------------|------------------------- |\n| ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_ccf4bb08e27b.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_80ff47bd2034.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_a344bd5b55df.png)\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_c580710783ba.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_d9ddcab5292f.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_e3a109ada6f9.png) |\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_5504e8df31ab.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_c2056e4e637e.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_1beb1648bb58.png) |\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_c5b26abdbd29.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_9c45bb6daa0c.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_4ca295a45451.png) |\n\n## 针对特定类别的梯度注意力回传\n\nTransformer内部流动的注意力会传递不同类别的信息。通过梯度回传，我们可以看到网络关注的具体位置，但它无法告诉我们这些位置是否最终被用于最终的分类决策。\n\n我们可以通过将注意力与目标类别的输出梯度相乘，并在屏蔽掉负值注意力后对所有注意力头取平均值，从而只保留那些对目标类别（或多个类别）有贡献的注意力。\n\n\n### Transformer在哪些地方看到了狗（类别243）和猫（类别282）？\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_a717dac0f30c.png) ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_5957a895d2e4.png)\n\n### Transformer在哪些地方看到了猎犬（类别161）和鹦鹉（类别87）：\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_bb0106a86dae.png) ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_903bab2a886f.png)\n\n\n## 使其实现的一些技巧和调整\n\n### 过滤每一层中最低权重的注意力\n\n`--discard_ratio \u003C0到1之间的值>`\n\n通过保留最强的注意力来去除噪声。\n\n不同丢弃比例的效果：\n\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_88619f83985e.gif) ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_cf275b12f0c1.gif)\n\n### 不同的注意力头融合方式\n\n注意力回传方法建议对所有注意力头的注意力进行平均，但根据经验来看，取最小值或结合丢弃比例取最大值的方式效果更好。\n\n` --head_fusion \u003Cmean, min 或 max>`\n\n| 图片 | 平均融合  |  最小值融合 |\n| -------------------------|-------------------------|------------------------- |\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_ccf4bb08e27b.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_80ff47bd2034.png) | ![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_readme_98a5a3aa1ef6.png)\n\n## 参考文献\n- [量化Transformer中的注意力流](https:\u002F\u002Farxiv.org\u002Fabs\u002F2005.00928)\n- [timm：一个优秀的PyTorch模型集合](https:\u002F\u002Fgithub.com\u002Frwightman\u002Fpytorch-image-models)，尤其是其中的[视觉Transformer实现](https:\u002F\u002Fgithub.com\u002Frwightman\u002Fpytorch-image-models\u002Fblob\u002Fmaster\u002Ftimm\u002Fmodels\u002Fvision_transformer.py)\n\n- [一张图胜过16×16个词：大规模图像识别中的Transformer](https:\u002F\u002Farxiv.org\u002Fabs\u002F2010.11929)\n- 感谢https:\u002F\u002Fgithub.com\u002Fjeonsworld\u002FViT-pytorch，它为我们提供了一个很好的起点。\n\n## 环境要求\n`pip install timm`","# vit-explain 快速上手指南\n\n`vit-explain` 是一个基于 PyTorch 的工具库，用于解释 Vision Transformer (ViT) 模型的注意力机制。它实现了 **Attention Rollout** 和 **Gradient Attention Rollout** 方法，帮助开发者可视化模型在图像分类时关注的具体区域。\n\n## 环境准备\n\n- **系统要求**：支持 Python 3.6+ 的操作系统（Linux, macOS, Windows）。\n- **前置依赖**：\n  - Python\n  - PyTorch\n  - `timm` (PyTorch Image Models)\n\n## 安装步骤\n\n1. 确保已安装 PyTorch。如未安装，请访问 [PyTorch 官网](https:\u002F\u002Fpytorch.org\u002F) 获取适合你环境的安装命令。\n2. 安装核心依赖库 `timm`。国内用户推荐使用清华或阿里镜像源加速安装：\n\n```bash\npip install timm -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n3. 克隆本仓库代码到本地：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fjacobgil\u002Fvit-explain.git\ncd vit-explain\n```\n\n## 基本使用\n\n### 方式一：通过 Python 代码调用\n\n以下示例展示了如何加载预训练的 DeiT-Tiny 模型，并生成针对特定类别（如类别索引 243）的注意力热力图掩码。\n\n```python\nfrom vit_grad_rollout import VITAttentionGradRollout\nimport torch\n\n# 加载预训练模型\nmodel = torch.hub.load('facebookresearch\u002Fdeit:main', \n'deit_tiny_patch16_224', pretrained=True)\n\n# 初始化解释器\n# discard_ratio: 丢弃低注意力分数的比例 (0-1)\n# head_fusion: 注意力头融合策略 ('mean', 'min', 'max')\ngrad_rollout = VITAttentionGradRollout(model, discard_ratio=0.9, head_fusion='max')\n\n# 生成掩码 (input_tensor 需为预处理后的张量)\nmask = grad_rollout(input_tensor, category_index=243)\n```\n\n> **注意**：如果不指定 `category_index`，将使用普通的 Attention Rollout；指定后则使用针对特定类别的 Gradient Attention Rollout。\n\n### 方式二：通过命令行运行\n\n你可以直接使用提供的脚本对图片进行分析。\n\n```bash\npython vit_explain.py --image_path \u003Cimage path> --head_fusion \u003Cmean, min or max> --discard_ratio \u003Cnumber between 0 and 1> --category_index \u003Ccategory_index>\n```\n\n**参数说明：**\n- `--image_path`: 输入图片的路径。\n- `--head_fusion`: 注意力头融合方式，可选 `mean` (平均), `min` (最小), `max` (最大)。推荐结合 `discard_ratio` 使用 `max`。\n- `--discard_ratio`: 噪声过滤比例，范围 0 到 1。数值越高，保留的强注意力区域越集中（例如 0.9 表示只保留前 10% 的注意力）。\n- `--category_index`: 目标类别的索引（ImageNet 类别 ID）。若不填，默认执行普通 Attention Rollout。\n\n**示例命令：**\n分析一张图片中模型对“狗”（类别 243）的关注区域，采用最大融合策略并过滤掉 90% 的低注意力噪声：\n\n```bash\npython vit_explain.py --image_path examples\u002Fdog.jpg --head_fusion max --discard_ratio 0.9 --category_index 243\n```","某医疗影像实验室的研究团队正在调试基于 Vision Transformer 的肺部结节检测模型，急需验证模型是否真正关注病灶区域而非背景噪声。\n\n### 没有 vit-explain 时\n- 模型虽然能输出正确的分类结果，但研究人员无法确定模型是依据结节的纹理特征判断，还是错误地学习了扫描设备的水印或边缘伪影。\n- 传统的注意力可视化方法包含大量低权重的噪声干扰，导致生成的热力图模糊不清，难以精确定位关键病灶。\n- 当模型将“良性”误判为“恶性”时，团队缺乏针对特定类别的梯度回溯手段，无法区分是哪些注意力头导致了误诊。\n- 调整模型结构时只能盲目尝试，缺乏直观的可解释性数据来指导如何融合不同注意力头的信息。\n\n### 使用 vit-explain 后\n- 利用梯度注意力展开（Gradient Attention Rollout）功能，团队能精准生成仅针对“恶性结节”类别的热力图，清晰展示模型决策所依赖的具体像素区域。\n- 通过设置 `discard_ratio` 参数过滤掉底层微弱注意力，有效去除了背景噪声，使病灶区域的聚焦效果更加锐利和直观。\n- 尝试 `max` 等不同的注意力头融合策略后，发现比默认的均值融合更能突出关键特征，迅速定位到模型过度关注非病灶区域的问题。\n- 在发现模型错误关注肋骨边缘而非结节本身后，研究人员有针对性地增加了数据增强策略，显著提升了模型的泛化能力和诊断可信度。\n\nvit-explain 通过将黑盒的注意力机制转化为可视化的决策依据，让开发者从“猜模型在想什么”转变为“看模型在看哪”，极大提升了算法调试效率与信任度。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjacobgil_vit-explain_80ff47bd.png","jacobgil","Jacob Gildenblat","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fjacobgil_be8e147b.jpg","Playing with tensors.",null,"Israel","jacob.gildenblat@gmail.com","jacobgildenblat","jacobgil.github.io","https:\u002F\u002Fgithub.com\u002Fjacobgil",[83],{"name":84,"color":85,"percentage":86},"Python","#3572A5",100,1074,108,"2026-04-06T14:43:20","MIT","","未说明",{"notes":94,"python":92,"dependencies":95},"该工具基于 PyTorch，默认通过 torch.hub 加载 Facebook DeiT (Tiny) 预训练模型。主要依赖库为 timm 和 torch，README 中未指定具体的版本号、操作系统、GPU 型号或内存需求。使用时需注意设置 discard_ratio 和 head_fusion 参数以优化解释效果。",[96,97],"torch","timm",[14,35],[100,101,102,103,104],"vision-transformer","pytorch","explainable-ai","deep-learning","transformer","2026-03-27T02:49:30.150509","2026-04-08T03:57:08.602710",[108,113,118,123,128,133],{"id":109,"question_zh":110,"answer_zh":111,"source_url":112},23612,"如何使用 Google 的 ViT 模型并可视化生成的注意力掩码？","可以使用 `timm` 库加载预训练的 ViT 模型（例如 `vit_large_patch16_384`），然后将其传入 `VITAttentionGradRollout`。生成掩码后，调用 `show_mask_on_image(img, mask)` 函数即可在图像上可视化掩码。示例代码：\n```python\ntimm_vit_model = timm.create_model('vit_large_patch16_384', pretrained=True)\ntimm_vit_model.eval()\nroller = VITAttentionGradRollout(timm_vit_model, discard_ratio=0.9)\nmask = roller(x.unsqueeze(0), label_idx)\nmask = show_mask_on_image(img, mask)\n```","https:\u002F\u002Fgithub.com\u002Fjacobgil\u002Fvit-explain\u002Fissues\u002F2",{"id":114,"question_zh":115,"answer_zh":116,"source_url":117},23613,"这个工具能否帮助理解视觉 Transformer（ViT）的工作原理？","是的，该工具生成的可视化结果以及允许用户深入调整 Transformer 内部机制的功能，可以有效帮助理解视觉 Transformer 的内部运作原理。建议参考项目详细的 README 文档以获取更多信息。","https:\u002F\u002Fgithub.com\u002Fjacobgil\u002Fvit-explain\u002Fissues\u002F1",{"id":119,"question_zh":120,"answer_zh":121,"source_url":122},23614,"是否支持为梯度注意力展开（Gradient Attention Rollout）指定不同的头融合（head_fusion）策略？","支持。维护者确认这是一个很好的想法。用户可以在 `grad_rollout()` 中传递 `head_fusion` 参数，支持的策略包括 \"mean\"（平均）、\"max\"（最大值）和 \"min\"（最小值）。代码逻辑会根据传入的策略对注意力头进行加权融合，例如：\n```python\nif head_fusion == \"mean\":\n    attention_heads_fused = (attention*weights).mean(axis=1)\nelif head_fusion == \"max\":\n    attention_heads_fused = (attention*weights).max(axis=1)[0]\n```","https:\u002F\u002Fgithub.com\u002Fjacobgil\u002Fvit-explain\u002Fissues\u002F3",{"id":124,"question_zh":125,"answer_zh":126,"source_url":127},23615,"该方法是否适用于 Swin Transformer 模型？","目前直接应用于 Swin Transformer 并不简单，因为架构存在差异。虽然社区中有用户表示非常关注此问题的解决方案，但当前仓库尚未提供针对 Swin Transformer 的直接支持或具体实施指南。","https:\u002F\u002Fgithub.com\u002Fjacobgil\u002Fvit-explain\u002Fissues\u002F19",{"id":129,"question_zh":130,"answer_zh":131,"source_url":132},23616,"在使用 torchvision 加载的 ViT 模型时，如何处理 `fused_attn` 属性不存在的问题？","当使用 `torchvision.models.vit_b_16` 等非 DEIT 架构的模型时，可能无法直接使用 `block.attn.fused_attn = False` 这段代码，因为这些模型的结构与 `deit_tiny_patch16_224` 不同。该代码主要用于禁用融合注意力以获取单独的注意力图。如果模型不支持该属性，需要检查模型具体结构或寻找替代方案来提取注意力权重，目前官方未提供针对 torchvision 模型的特定修改代码。","https:\u002F\u002Fgithub.com\u002Fjacobgil\u002Fvit-explain\u002Fissues\u002F27",{"id":134,"question_zh":135,"answer_zh":136,"source_url":137},23617,"输入图像不是正方形（例如 256x128）时该如何处理？","原始代码似乎主要针对正方形图像设计。对于非正方形图像（如 256x128），需要对代码进行调整以适应不同的形状，但具体的修改步骤在当前讨论中未详细给出，通常涉及调整 Patch Embedding 层或插值逻辑以匹配模型预期的输入尺寸。","https:\u002F\u002Fgithub.com\u002Fjacobgil\u002Fvit-explain\u002Fissues\u002F10",[]]