diffusion-explainer
JavaScript开源图像生成项目
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
JavaScript开源图像生成项目
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有过这样的困惑:对着 Midjourney 输入一句"一只赛博朋克风格的狐狸",几秒钟后它就吐出一张图——但这个过程到底是怎样的?那些噪点是怎么一步步变成毛茸茸的狐狸尾巴的?
Diffusion Explainer 就是来解决这个困惑的。它是佐治亚理工学院和 IBM Research 的研究者们开发的一个交互式可视化工具,把 Stable Diffusion 生成图像的全流程掰开了给你看——从文本编码、潜空间扩散,到最终的图像重建,每一步都在浏览器里用动画和图表呈现出来。

要理解这个工具,先得搞懂 Stable Diffusion 在做什么。
想象你面前有一块满是噪点的屏幕,Stable Diffusion 的工作就是把这团乱麻「去噪」成一张清晰的图像——但它不是一步到位的,而是逐步迭代,每一步都在猜测"现在应该怎么调整,才能让图像更像我想生成的东西"。
关键在于,这个过程发生在**潜空间(Latent Space)**里,而不是直接操作像素。潜空间可以理解为一个"压缩后的概念世界"——每一个点代表一种可能的图像概念。在潜空间里进行扩散和去噪,计算量比直接处理像素少了数十倍,这就是 Stable Diffusion 能跑在消费级 GPU 上的原因。
而 Diffusion Explainer 把这个过程可视化了。你可以看到文本 prompt 是如何被编码成向量、扩散过程如何在潜空间展开、每一步去噪后图像发生了什么变化。
Diffusion Explainer 提供了三个层次的可视化:
L1 概览层:展示从文本到图像的完整流水线概览。你可以选中一个预设 prompt(比如"A majestic lion"或"A cyberpunk cityscape"),工具会动态展示整个生成流程——CLIP 文本编码器的输出、U-Net 去噪步骤数、图像重建过程,一目了然。
L2 流程层:深入查看每个模块的内部工作。展开文本编码模块,可以看到 prompt 中的每个 token 如何被映射到 CLIP 的词向量空间;展开去噪模块,可以看到 U-Net 在每一步是如何接收噪声图并输出预测噪声的;展开图像重建模块,可以看到 VAE 如何把潜空间结果解码为最终像素图。
L3 数学层:进一步揭示底层的数学运算。L3 视图用颜色热力图展示张量维度变化,让有一定数学基础的开发者理解矩阵运算在每一步的具体规模。
除了教学演示,Diffusion Explainer 还内置了对比功能:你可以同时运行两个不同的 prompt,观察它们的潜空间轨迹差异,或者比较同一 prompt 不同随机种子(seed)的生成路径有何不同。
从代码结构来看,这个项目是一个纯前端项目,完全运行在浏览器中,不依赖后端服务。
前端技术栈:JavaScript + D3.js(D3.js 用于数据驱动图表的渲染)。D3 在这里的作用是将扩散过程的时间序列数据实时渲染为动画和交互图表。
关键模块:
js/architecture.js — 整体 UI 框架,响应 prompt 选择、模型参数调整、对比按钮等交互事件js/denoise_l2expl.js — L2 级别去噪过程可视化,负责渲染 U-Net 每次迭代后的潜空间状态js/denoise_l3expl.js — L3 级别数学层展示,渲染张量维度热力图js/text_l2expl.js — L2 级别文本编码可视化,展示 CLIP 如何将自然语言转为向量js/function.js — 共享函数库,包括 UMAP 降维可视化等python/compress.py — 预处理脚本,将预生成的扩散过程数据(图片序列)压缩为可在浏览器高效加载的格式预生成数据策略:Diffusion Explainer 的巧妙之处在于,它并没有在浏览器里实时运行 Stable Diffusion 模型(那需要 GPU),而是在构建时预先运行了完整扩散过程,把每一步的潜空间状态、每一步的图像都保存下来。浏览器加载时只需按时间线回放这些预生成数据——这是典型的"用空间换时间"策略,让教育演示在普通设备上流畅运行。

这个项目的部署方式简单到有点"反高潮":你甚至不需要安装 Python 依赖。
git clone https://github.com/poloclub/diffusion-explainer.git
cd diffusion-explainer
python -m http.server 8000
然后浏览器打开 http://localhost:8000 即可。任何一个能跑 Python 的环境(包括 Windows/Mac/Linux),三行命令就能跑起来。
项目未提供 Docker 化方案,也没有 docker-compose 文件,因此对于习惯容器化部署的团队来说稍显不便。但由于是纯静态项目,部署到 GitHub Pages、Vercel 或任何静态文件托管服务也是零门槛。
Diffusion Explainer 并不是一个完美的工具,以下几点值得注意:
1. 预生成数据的局限:由于使用预生成数据,工具中展示的扩散路径是固定的,无法实时响应用户自定义 prompt 的扩散过程。如果你输入一个工具里没有预设的 prompt,就只能看到通用流程说明,无法得到针对性的可视化结果。
2. CLIP 内部机制黑箱:工具只展示了 CLIP 输出的向量结果,但没有揭示 CLIP 本身(一个 6 亿参数的 Transformer 模型)是如何学会把图像和文本关联起来的。CLIP 的训练过程和内部注意力机制仍然是一个黑箱。
3. 精度与真实模型的差异:Diffusion Explainer 展示的扩散过程是经过简化的。真实的 Stable Diffusion 实现涉及复杂的调度器(scheduler)逻辑和 CFG(Classifier-Free Guidance)参数调节,工具中的可视化可能过于理想化,与实际推理过程存在偏差。
4. 没有量化反馈:工具本身无法告诉你生成结果的"质量"如何,也没有 FID、LPIPS 等客观指标的可视化对照。
Diffusion Explainer 发表于 IEEE VIS 2024(可视化领域的顶级会议),代表了 AI 教育工具的一个发展趋势:用交互式可视化替代静态文档,让抽象的模型行为变得可触达。
这类工具的价值在于,它服务的不仅是开发者,还包括政策制定者、艺术创作者、对 AI 好奇的普通公众。当越来越多人能理解 AI 生成背后的基本原理,社会对 AI 工具的讨论也会更理性。
目前类似的工具还包括 Google 的"TensorFlow Playground"(神经网络学习曲线可视化)、Risto H. H. 的"CNN Explainer"(卷积神经网络可视化)等。Diffusion Explainer 填补了生成式 AI 可视化教育这一细分领域的空白。

Diffusion Explainer 是一个设计精巧的 AI 教育工具,它通过预生成数据 + D3.js 可视化的方式,把 Stable Diffusion 的核心工作流程拆解展示给用户。对于 AI 爱好者来说,它是理解扩散模型的入门窗口;对于开发者来说,它提供了观察模型中间状态的参考视角。项目部署极其简单(一个 http.server),但不支持 Docker,适合教育场景和快速演示。