theseus
Theseus 是由 Facebook Research 推出的开源库,专为在 PyTorch 中构建可微分的非线性优化层而设计。它主要解决了机器人学和计算机视觉领域中,如何将传统基于专家知识的优化算法与现代深度学习模型无缝融合的挑战。通过支持端到端的梯度计算,Theseus 让神经网络不仅能从最终任务损失中学习,还能利用优化器内置的归纳偏置(如物理约束或几何先验),从而构建出既具备数据驱动灵活性又符合领域逻辑的混合架构。
这款工具非常适合从事机器人控制、状态估计、SLAM 或三维视觉研究的算法工程师与科研人员。如果你需要在深度网络中嵌入复杂的优化步骤,却不想从零开始推导繁琐的梯度公式,Theseus 提供了极佳的解决方案。其核心技术亮点在于丰富的算法支持,内置了高斯 - 牛顿、列文伯格 - 马夸尔特等二阶非线性优化器,以及针对稠密和稀疏矩阵的高效线性求解器(包括 GPU 加速版本)。同时,它采用与应用场景无关的通用接口,让用户能像搭积木一样轻松定制优化层,并将其灵活插入任意神经网络结构中,极大地提升了研发效率。
使用场景
某自动驾驶初创团队的算法工程师正在开发一套端到端的视觉里程计系统,需要将传统的几何优化模块与深度学习感知网络无缝融合。
没有 theseus 时
- 梯度断裂导致训练低效:传统非线性优化器(如 Ceres 或 g2o)无法反向传播梯度,迫使团队使用强化学习或近似监督信号来训练感知网络,收敛速度慢且精度受限。
- 架构耦合度极高:为了模拟优化过程,工程师不得不手动推导雅可比矩阵并编写自定义的 PyTorch 层,代码冗长且极易出错,难以适配不同的传感器配置。
- 无法利用专家先验:由于难以将物理约束(如车辆运动学模型)作为可微层嵌入网络,模型只能单纯依赖数据驱动,在少样本场景下泛化能力差,容易出现违背物理规律的预测。
- 迭代开发周期长:每次调整优化目标函数或求解器策略(如从高斯 - 牛顿法切换到列文伯格 - 马夸尔特法),都需要重写大量底层代码,严重拖慢实验迭代速度。
使用 theseus 后
- 实现真正端到端训练:theseus 提供了可微的非线性优化层,允许梯度直接穿过优化器回传至感知网络,团队得以直接使用最终位姿误差作为损失函数,显著提升了定位精度。
- 模块化快速构建:借助 its 应用无关的接口,工程师仅需定义变量和代价函数即可自动构建优化层,无需手动处理复杂的矩阵求导,轻松集成了稀疏线性求解器以加速计算。
- 神经与符号完美融合:团队成功将专家设计的运动学约束编码为 theseus 的代价项,与神经网络参数共同优化,使系统在极端光照等数据稀缺场景下仍保持鲁棒性。
- 灵活切换求解策略:通过简单配置即可在高斯 - 牛顿、列文伯格 - 马夸尔特等不同二阶优化器间切换,快速验证不同算法组合对最终任务性能的影响,研发效率提升数倍。
theseus 的核心价值在于打破了传统优化与深度学习之间的壁垒,让开发者能像搭积木一样构建兼具物理可解释性与数据驱动能力的混合智能系统。
运行环境要求
- Linux
- macOS
- 可选
- 若需 GPU 加速或编译自定义 CUDA 操作,需要 NVIDIA GPU 及匹配的 CUDA 版本(预编译轮子基于 CUDA 11.6)
- 需安装 nvcc 且版本需与编译 PyTorch 的版本一致
- 部分线性求解器(如稀疏 LU)仅支持 GPU
未说明

快速开始

一个用于可微分非线性优化的库
Theseus 是一个高效且与应用无关的库,用于在 PyTorch 中构建自定义的非线性优化层,以支持将机器人和视觉领域的各种问题构建成端到端可微分的架构。

可微分的非线性优化提供了一种通用的方法来编码归纳先验,因为目标函数可以部分由神经网络模型参数化,而另一部分则使用领域专家设计的可微分模型。通过在优化器中进行反向传播,仍然可以保留端到端计算梯度的能力,从而使神经网络能够在最终的任务损失上进行训练,同时还能利用优化器所捕捉到的先验信息。
请参阅 论文列表,其中包含了使用 Theseus 发表的、涵盖多个应用领域的示例。
当前特性
应用无关的接口
我们的实现提供了一个易于使用的接口,用于构建自定义的优化层,并将其插入到任何神经网络架构中。目前支持以下可微分功能:
- 二阶非线性优化器
- 高斯-牛顿法 (GN)、莱文伯格-马夸尔特法 (LM)、信赖域法、狗腿法
- 其他非线性优化器
- 交叉熵方法 (CEM)
- 线性求解器
- 密集型:Cholesky 分解、LU 分解;稀疏型:CHOLMOD、LU(仅 GPU)、BaSpaCho
- 常用代价函数、自动微分代价函数、鲁棒代价函数
- 基于 torchlie 的 李群
- 基于 torchkin 的 机器人运动学
高效的设计
我们支持多项能够提升计算速度和降低内存消耗的功能:
入门指南
先决条件
- 我们强烈建议您在 Python 3.8–3.10 的 venv 或 conda 环境中安装 Theseus。
- Theseus 需要安装
torch。请根据您的 CPU/CUDA 配置,按照 PyTorch 官网 的说明进行安装。 - 为了支持 GPU,Theseus 需要 nvcc 来编译自定义的 CUDA 操作。请确保其版本与编译 PyTorch 时使用的
nvcc --version版本一致。如果不一致,请安装并确保其路径已添加到系统的$PATH变量中。 - Theseus 还需要
suitesparse,您可以按以下方式安装:sudo apt-get install libsuitesparse-dev(Ubuntu)。conda install -c conda-forge suitesparse(Mac)。
安装
pypi
pip install theseus-ai目前我们提供的 wheel 包是使用 CUDA 11.6 和 Python 3.10 编译的 CUDA 扩展。对于其他 CUDA 版本,请考虑从源码安装,或使用我们的 构建脚本。
请注意,通过
pypi安装不会包含我们的实验性 Theseus Labs。 如果需要这些功能,请从源码安装。从源码安装
从源码安装 Theseus 的最简单方法是运行以下命令(请参阅下文以同时包含 BaSpaCho):
git clone https://github.com/facebookresearch/theseus.git && cd theseus pip install -e .如果您有兴趣为 Theseus 做贡献,可以安装:
pip install -e ".[dev]" pre-commit install并按照 CONTRIBUTING 中更详细的说明进行操作。
从源码安装 BaSpaCho 扩展
默认情况下,从源码安装不会包含我们的 BaSpaCho 稀疏求解器扩展。要包含该扩展,请按照以下步骤操作:
按照 这里 的说明从源码编译 BaSpaCho。我们建议使用
-DBLA_STATIC=ON -DBUILD_SHARED_LIBS=OFF标志。运行
git clone https://github.com/facebookresearch/theseus.git && cd theseus BASPACHO_ROOT_DIR=<ba-spacho根目录路径> pip install -e .其中,BaSpaCho 的根目录必须在
build子目录中包含二进制文件。
运行单元测试(需要 dev 安装)
python -m pytest tests
默认情况下,单元测试会包含对 CUDA 扩展的测试。如果未安装 CUDA 支持,可以通过添加 -m "not cudaext" 选项来跳过这些测试。此外,当 BaSpaCho 稀疏求解器扩展未编译时,其测试也会自动跳过。
示例
简单示例。此示例将曲线 $y$ 拟合到包含 $N$ 个观测值 $(x,y) \sim D$ 的数据集上。这被建模为一个 Objective,其中包含一个计算残差 $y - v e^x$ 的 CostFunction。Objective 和 GaussNewton 优化器被封装进一个 TheseusLayer 中。通过 Adam 优化器和 MSE 损失函数,$x$ 变量可以通过对 TheseusLayer 的反向传播来学习。
import torch
import theseus as th
x_true, y_true, v_true = read_data() # 形状分别为 (1, N), (1, N), (1, 1)
x = th.Variable(torch.randn_like(x_true), name="x")
y = th.Variable(y_true, name="y")
v = th.Vector(1, name="v") # 用于优化变量的流形子类 Variable
def error_fn(optim_vars, aux_vars): # 返回 y - v * exp(x)
x, y = aux_vars
return y.tensor - optim_vars[0].tensor * torch.exp(x.tensor)
objective = th.Objective()
cost_function = th.AutoDiffCostFunction(
[v], error_fn, y_true.shape[1], aux_vars=[x, y],
cost_weight=th.ScaleCostWeight(1.0))
objective.add(cost_function)
layer = th.TheseusLayer(th.GaussNewton(objective, max_iterations=10))
phi = torch.nn.Parameter(x_true + 0.1 * torch.ones_like(x_true))
outer_optimizer = torch.optim.Adam([phi], lr=0.001)
for epoch in range(10):
solution, info = layer.forward(
input_tensors={"x": phi.clone(), "v": torch.ones(1, 1)},
optimizer_kwargs={"backward_mode": "implicit"})
outer_loss = torch.nn.functional.mse_loss(solution["v"], v_true)
outer_loss.backward()
outer_optimizer.step()
更多关于 API 和用法的信息,请参阅 教程 以及机器人和视觉领域的 示例。
引用 Theseus
如果您在工作中使用了 Theseus,请引用以下论文,并使用提供的 BibTeX 格式:
@article{pineda2022theseus,
title = {{Theseus: A Library for Differentiable Nonlinear Optimization}},
author = {Luis Pineda and Taosha Fan and Maurizio Monge and Shobha Venkataraman and Paloma Sodhi and Ricky TQ Chen and Joseph Ortiz and Daniel DeTone and Austin Wang and Stuart Anderson and Jing Dong and Brandon Amos and Mustafa Mukadam},
journal = {Advances in Neural Information Processing Systems},
year = {2022}
}
许可证
Theseus 采用 MIT 许可证。详细信息请参阅 LICENSE。
更多信息
- 如有任何问题或建议,请加入 Github Discussions 社区。
- 如发现错误或有新功能需求,请使用 Github Issues 提交。
- 如果您有兴趣参与贡献,请参阅 CONTRIBUTING。
Theseus 的开发离不开以下贡献者的支持:
由 contrib.rocks 制作。
版本历史
0.1.12022/09/280.1.02022/07/200.1.0-b.22022/02/010.1.0-b.12021/12/030.2.22024/09/110.2.12023/07/210.2.02023/06/280.1.42023/01/190.1.32022/11/090.1.22022/10/20常见问题
相似工具推荐
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 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。