disentanglement_lib
disentanglement_lib 是一个开源库,专门用于研究和评估无监督学习中的“解耦表征”——即让模型自动从复杂数据中分离出独立的语义因子(如形状、颜色、位置等)。它解决了当前无监督学习中难以量化和比较不同模型解耦效果的问题,提供了一套标准化的模型、评估指标和数据集,帮助研究人员更可靠地验证假设。内置 BetaVAE、FactorVAE 等主流模型,以及 Mutual Information Gap、DCI 等十余种评估指标,并支持 dSprites、Shapes3D 等经典数据集,还预训练了上万个模型供直接调用。适合机器学习研究人员、AI 学生和算法工程师使用,尤其适合从事表示学习、生成模型或可解释性研究的群体。其独特亮点在于将训练、后处理、评估与可视化全流程自动化,并通过统一配置系统和 JSON 结果聚合,极大提升了实验的可复现性与效率。所有操作均基于 TensorFlow,支持 Linux 环境,开箱即用。
使用场景
一位机器学习研究员在一家自动驾驶初创公司负责开发视觉感知系统,目标是从车载摄像头的复杂场景中自动分离出车辆、行人、道路标志等独立语义因子,以提升目标检测的鲁棒性。传统方法依赖人工标注和多模型集成,效率低且难以泛化。
没有 disentanglement_lib 时
- 需要从零实现多个变分自编码器(如BetaVAE、FactorVAE),耗费数周时间调试训练流程。
- 缺乏标准化评估指标,无法量化表示是否真正“解耦”,只能靠主观观察中间特征图判断效果。
- 不同数据集(如dSprites、Cars3D)的预处理代码重复编写,难以复用,导致实验周期拉长。
- 没有现成的预训练模型可参考,每次实验都需从头训练,GPU资源浪费严重。
- 实验结果分散在多个文件夹和格式中,无法统一分析,团队协作和论文复现困难。
使用 disentanglement_lib 后
- 通过一行命令
dlib_reproduce --model_num=42快速复现论文中已验证的模型,3小时内完成训练与保存。 - 自动计算MIG、SAP、DCI等7种解耦评分,直接生成数值报告,客观比较不同架构的性能差异。
- 一键下载dSprites和SmallNORB等标准数据集,无需手动处理格式,节省近两周数据准备时间。
- 使用10,800个预训练模型作为基线,快速筛选出最适合车载场景的编码结构,加速模型选型。
- 所有实验配置、中间表示和可视化结果自动聚合为JSON,用Pandas一键生成对比图表,支持团队共享与论文投稿。
disentanglement_lib 让研究人员从重复工程中解放,专注在解耦表示的创新设计与实际场景适配上,将原本数月的探索周期压缩至数天。
运行环境要求
- Linux
推荐使用 NVIDIA GPU,显存 8GB+,CUDA 版本未明确说明,但需支持 TensorFlow GPU
16GB+

快速开始
disentanglement_lib

disentanglement_lib 是一个用于研究学习解纠缠表征的开源库。 它支持多种不同的模型、指标和数据集:
- 模型: BetaVAE、FactorVAE、BetaTCVAE、DIP-VAE
- 指标: BetaVAE 分数、FactorVAE 分数、互信息差距、SAP 分数、DCI、MCE、IRS、UDR
- 数据集: dSprites、Color/Noisy/Scream-dSprites、SmallNORB、Cars3D 和 Shapes3D
- 它还包含 10,800 个预训练的解纠缠模型(详情见下文)。
disentanglement_lib 由谷歌大脑苏黎世的 Olivier Bachem 和 Francesco Locatello 创建,用于大规模实证研究
挑战解纠缠表征无监督学习中的常见假设。 Francesco Locatello、Stefan Bauer、Mario Lucic、Gunnar Rätsch、Sylvain Gelly、Bernhard Schölkopf、Olivier Bachem。ICML(最佳论文奖),2019 年。
该代码使用 Python 3 测试,旨在运行在 Linux 系统上(例如 Google Cloud 深度学习虚拟机)。 它使用 TensorFlow、Scipy、Numpy、Scikit-Learn、TFHub 和 Gin。
它是如何工作的?
disentanglement_lib 包含多个不同的步骤:
- 模型训练: 训练一个 TensorFlow 模型,并将训练好的模型保存为 TFHub 模块。
- 后处理: 获取一个训练好的模型,提取表征(例如通过使用高斯编码器的均值),并将表征函数保存为 TFHub 模块。
- 评估: 获取一个表征函数并计算解纠缠指标。
- 可视化: 获取一个训练好的模型并进行可视化。
所有配置细节和不同步骤的实验结果都会被保存并沿步骤传播(详见下文)。最后,它们可以汇总到一个 JSON 文件中,并用 Pandas 进行分析。
使用方法
安装 disentanglement_lib
首先,克隆此仓库:
git clone https://github.com/google-research/disentanglement_lib.git
然后,进入仓库目录(使用 cd disentanglement_lib),运行:
pip install .[tf_gpu]
(或 pip install .[tf] 以安装不带 GPU 支持的 TensorFlow)。
这将安装该包及所有必需的依赖项。
要验证一切是否正常工作,只需运行测试套件:
dlib_tests
下载数据集
要下载训练模型所需的数据,进入任意文件夹并运行:
dlib_download_data
这将在当前工作目录中安装所有必需的数据文件(Shapes3D 数据集除外,因为它并未公开发布)。
为方便起见,我们建议将环境变量 DISENTANGLEMENT_LIB_DATA 设置为此路径,例如在你的 .bashrc 文件中添加:
export DISENTANGLEMENT_LIB_DATA=<数据目录路径>
如果你选择不设置环境变量 DISENTANGLEMENT_LIB_DATA,disentanglement_lib 将始终在当前文件夹中查找数据。
复现先前实验
要完整训练并评估论文《挑战解纠缠表征无监督学习中的常见假设》中 12,600 个模型之一,只需运行:
dlib_reproduce --model_num=<?>
其中 <?> 应替换为 0 到 12,599 之间的模型索引,对应于要训练的模型 ID。
这将花费几个小时,并在 output/<?> 文件夹中生成训练好的模型(包括检查点和 TFHub 模块)、实验结果(JSON 格式)以及可视化内容(包括 GIF 动画)。
如果只想打印该模型的配置而不进行训练,可添加标志 --only_print。
在训练完若干模型后,你可以通过运行以下命令汇总结果(在同一文件夹中):
dlib_aggregate_results
这将创建一个 results.json 文件,包含所有汇总的结果。
运行不同配置
disentanglement_lib 内部使用 gin 来配置超参数和其他设置。
要训练提供的模型之一但使用不同的超参数,你需要编写一个 gin 配置文件,例如 examples/model.gin。
然后,你可以使用以下命令:
dlib_train --gin_config=examples/model.gin --model_dir=<模型输出目录>
来训练模型,其中 --model_dir 指定保存结果的路径。
要按照论文《挑战解纠缠表征无监督学习中的常见假设》中的评估协议评估新训练的模型,只需运行:
dlib_reproduce --model_dir=<模型输出目录> --output_directory=<输出目录>
同样,如果你想自定义表征的提取和评估方式,也可以查看 dlib_postprocess 和 dlib_evaluate。
开始你自己的研究
disentanglement_lib 易于扩展,可用于实现与解纠缠表征相关的新型模型和指标。
要开始,只需浏览 examples/example.py,它向你展示了如何创建自己的解纠缠模型和指标,以及如何将其与现有模型和指标进行基准测试。
预训练的disentanglement_lib模块
重现研究挑战无监督学习中解纠缠表征的常见假设中的全部12,600个模型需要大量的计算资源。
为了促进进一步的研究,disentanglement_lib包含10,800个预训练的disentanglement_lib模块,这些模块对应于使用dlib_reproduce并指定--model_num=<?>在0到10,799之间运行的结果(其他模型对应于未公开发布的Shapes3D)。
每个disentanglement_lib模块包含训练好的模型(以TFHub模块的形式)、提取的表征(同样以TFHub模块的形式),以及记录的实验结果,例如不同的解纠缠分数(以JSON格式存储)。
这使得新模型与预训练模型的比较变得简单,并且能够在预训练模型集合上计算新的解纠缠指标。
要访问这10,800个预训练的disentanglement_lib模块,您可以使用以下链接下载单个模块:
https://storage.googleapis.com/disentanglement_lib/unsupervised_study_v1/<?>.zip
其中<?>对应于0到10,799之间的模型索引(示例)。
存储桶中的每个ZIP文件对应于使用该模型编号运行一次dlib_reproduce的结果。
要了解更多关于所用配置设置的信息,请查看disentanglement_lib/config/unsupervised_study_v1/sweep.py中的代码,或者运行:
dlib_reproduce --model_num=<?> --only_print
常见问题
如何为我的模型制作精美的GIF动画?
如果您运行dlib_reproduce,它们会自动保存到输出目录的visualizations子文件夹中。否则,您可以使用脚本dlib_visualize_dataset生成这些动画,或调用disentanglement_lib/visualize/visualize_model.py中的函数visualize(...)。
结果和模型是如何保存的?
在每个主要步骤(训练/后处理/评估)完成后,都会创建一个输出目录。
对于所有步骤,都有一个results文件夹,其中包含该步骤之前的所有配置设置和实验结果。
gin子文件夹包含以gin格式存储的每一步的运行配置。
json子文件夹包含以JSON格式存储的运行配置和该步骤的实验结果。
最后,aggregate子文件夹包含聚合的JSON文件,每个文件同时包含所有先前步骤的配置和结果。
训练步骤还会额外保存TensorFlow检查点(存放在tf_checkpoint子文件夹中)和训练好的模型作为TFHub模块(存放在tfhub子文件夹中)。类似地,后处理步骤会将表征函数保存为TFHub模块(存放在tfhub子文件夹中)。
如果您运行dlib_reproduce,它会为所有您运行过的不同子步骤创建子文件夹。特别是,它会为每个您计算的指标创建一个输出目录。
如何访问结果?
要访问结果,首先使用dlib_aggregate_results聚合所有结果,指定一个能匹配所有结果文件的glob模式。
例如,在使用dlib_reproduce训练几个不同模型后,您可以指定:
dlib_aggregate --output_path=<...>.json \
--result_file_pattern=<...>/*/metrics/*/*/results/aggregate/evaluation.json
glob模式中的第一个会匹配不同的模型,第二个匹配不同的表征,最后一个*匹配不同的指标。 最后,您可以这样访问聚合后的结果:
from disentanglement_lib.utils import aggregate_results
df = aggregate_results.load_aggregated_json_results(output_path)
在代码中应该查找什么?
以下是对整体代码结构的指南:
(1) 训练步骤:
disentanglement_lib/methods/unsupervised: 包含训练协议(train.py)以及所有用于训练方法的模型函数(vae.py)。这些方法都继承自GaussianEncoderModel类。disentanglement_lib/methods/shared: 包含不同模型中共享的架构、损失和优化器。
(2) 后处理步骤:
disentanglement_lib/postprocess: 包含后处理流程(postprocess.py)以及两种提取方法(methods.py)。
(3) 评估步骤:
disentanglement_lib/evaluation:包含评估协议(evaluate.py)。disentanglement_lib/evaluation/metrics:包含不同解纠缠指标的实现。
超参数和配置文件:
disentanglement_lib/config/unsupervised_study_v1: 包含不同步骤的gin配置文件(*.gin),以及论文[挑战无监督学习中解纠缠表征的常见假设]中实验的超参数扫描(sweep.py)。
共享功能:
bin:用于运行不同流程、可视化数据集和模型,以及聚合结果的脚本。disentanglement_lib/data/ground_truth: 包含生成数据的所有脚本。所有数据集(在named_data.py中)都是GroundTruthData类的实例。disentanglement_lib/utils: 包含帮助函数,用于聚合和保存流程结果以及训练好的模型。disentanglement_lib/visualize: 包含用于数据集和训练模型的可视化函数。
NeurIPS 2019解纠缠挑战
该库也用于NeurIPS 2019解纠缠挑战。挑战包含三个不同的数据集。
- 简单的渲染图像(mpi3d_toy)
- 真实的渲染图像(mpi3d_realistic):尚未发布
- 真实世界图像(mpi3d_real):尚未发布
目前,只有简单的渲染数据集是公开可用的,运行以下命令即可自动下载:
dlib_download_data
其他数据集将在比赛的后期阶段提供。更多关于比赛的信息,请访问比赛网站。有关数据集的更多信息,请参阅这里或arXiv预印本关于从仿真到真实世界的归纳偏置迁移:一个新的解纠缠数据集。
抽象推理实验
该库还包含用于以下论文实验的代码,位于disentanglement_lib/evaluation/abstract_reasoning子目录中:
解纠缠表征对抽象视觉推理有帮助吗? Sjoerd van Steenkiste、Francesco Locatello、Jürgen Schmidhuber、Olivier Bachem。NeurIPS,2019年。
实验方案分为两部分:
首先,要训练解纠缠模型,可以使用标准的复现流程(dlib_reproduce),例如通过以下命令:
dlib_reproduce --model_num=<?> --study=abstract_reasoning_study_v1
其中<?>应替换为0到359之间的模型索引,
对应于要训练的模型ID。
其次,要训练抽象推理模型,可以使用自动安装的流程dlib_reason。
要配置模型,请根据需要复制并修改disentanglement_lib/config/abstract_reasoning_study_v1/stage2/example.gin。
然后,使用以下命令来训练和评估一个抽象推理模型:
dlib_reason --gin_config=<?> --input_dir=<?> --output_dir=<?>
结果将保存在输出目录的results子目录中。
公平性实验
该库还包含用于以下论文实验的代码,位于disentanglement_lib/evaluation/metrics/fairness.py:
解纠缠表征的公平性研究 Francesco Locatello、Gabriele Abbati、Tom Rainforth、Stefan Bauer、Bernhard Schoelkopf、Olivier Bachem。NeurIPS,2019年。
要训练和评估所有模型,只需使用以下命令:
dlib_reproduce --model_num=<?> --study=fairness_study_v1
其中<?>应替换为0到12,599之间的模型索引,
对应于要训练的模型ID。
如果您只想使用论文中的评估协议重新评估已训练的模型,可以使用以下命令:
dlib_reproduce --model_dir=<model_output_directory> --output_directory=<output> --study=fairness_study_v1
UDR实验
该库还包含用于以下论文提出的无监督解纠缠排名(UDR)方法的代码,位于disentanglement_lib/bin/dlib_udr:
变分解纠缠表征学习的无监督模型选择 Sunny Duan、Loic Matthey、Andre Saraiva、Nicholas Watters、Christopher P. Burgess、Alexander Lerchner、Irina Higgins。
UDR可用于新训练的模型(例如通过运行dlib_reproduce获得的模型)或现有的预训练模型。模型训练完成后,可以通过以下命令计算其UDR分数:
dlib_udr --model_dirs=<model_output_directory1>,<model_output_directory2> \
--output_directory=<output>
分数将导出到<output>/results/aggregate/evaluation.json,存储在model_scores属性下。分数将按照输入模型目录的顺序呈现。
弱监督实验
该库还包含用于以下论文提出的弱监督解纠缠方法的代码,位于disentanglement_lib/bin/dlib_reproduce_weakly_supervised:
无需妥协的弱监督解纠缠 Francesco Locatello、Ben Poole、Gunnar Rätsch、Bernhard Schölkopf、Olivier Bachem、Michael Tschannen。
dlib_reproduce_weakly_supervised --output_directory=<output> \
--gin_model_config_dir=<dir> \
--gin_model_config_name=<name> \
--gin_postprocess_config_glob=<postprocess_configs> \
--gin_evaluation_config_glob=<eval_configs> \
--pipeline_seed=<seed>
半监督实验
该库还包含用于以下论文提出的半监督解纠缠方法的代码,位于disentanglement_lib/bin/dlib_reproduce_semi_supervised:
利用少量标签解纠缠变化因素 Francesco Locatello、Michael Tschannen、Stefan Bauer、Gunnar Rätsch、Bernhard Schölkopf、Olivier Bachem。
dlib_reproduce_weakly_supervised --output_directory=<output> \
--gin_model_config_dir=<dir> \
--gin_model_config_name=<name> \
--gin_postprocess_config_glob=<postprocess_configs> \
--gin_evaluation_config_glob=<eval_configs> \
--gin_validation_config_glob=<val_configs> \
--pipeline_seed=<seed> \
--eval_seed=<seed> \
--supervised_seed=<seed> \
--num_labelled_samples=<num> \
--train_percentage=0.9 \
--labeller_fn="@perfect_labeller"
反馈
请将任何反馈发送至bachem@google.com和francesco.locatello@tuebingen.mpg.de。
引用
如果您使用disentanglement_lib,请考虑引用:
@inproceedings{locatello2019challenging,
title={挑战无监督解纠缠表征学习中的常见假设},
author={Locatello, Francesco and Bauer, Stefan and Lucic, Mario and Raetsch, Gunnar and Gelly, Sylvain and Sch{\"o}lkopf, Bernhard and Bachem, Olivier},
booktitle={国际机器学习大会},
pages={4114--4124},
year={2019}
}
这并非谷歌官方支持的产品。
版本历史
v1.42019/11/20v1.32019/10/29v1.22019/07/22v1.02019/06/27常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。