PanFusion
基于双分支扩散模型,直接从文本描述生成无畸变 360° 全景室内图像
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于双分支扩散模型,直接从文本描述生成无畸变 360° 全景室内图像
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图 1:PanFusion 实现文本驱动的 360° 全景图生成,输入一句描述即可输出完整室内空间渲染图。
想象一位室内设计师,对着电脑苦思冥想如何向客户展示一套还未动工的新中式客厅方案。传统做法需要花费数小时在 3D 软件里建模、铺材质、打灯光——而客户只想先看看"感觉对不对"。
文本生成图像工具(Midjourney、DALL·E、Stable Diffusion)本该是救星,但它们输出的都是扁平的"照片视角"图像。把一张 2D 图拼成 360° 全景需要专业技能不说,拼接处还容易出现明显的接缝和扭曲变形。更关键的是:这些主流模型从未专门针对全景图像进行过优化,生成的全景图存在严重的几何畸变和内容不连贯问题。
Monash University(莫纳什大学)与上海人工智能实验室的研究团队正是瞄准了这个痛点,推出了 PanFusion,一种双分支扩散模型,能直接从文本描述生成高质量、无畸变的 360° 全景图像。该论文被计算机视觉顶会 CVPR 2024 收录为 Highlight 论文——录用率仅约 5%,含金量极高。
在深入 PanFusion 的解决方案之前,我们需要理解为什么"用文本生成全景图"这个问题本身就是一个极具挑战性的研究难题。
第一重困难:数据匮乏。 主流图像生成模型之所以能输出惊艳效果,背后依赖的是海量图文配对数据(LAION-5B 等)。但全景图像的专业数据集极为稀少,因为获取 360° 全景图像本身就需要专门的设备,且标注成本高。
第二重困难:几何畸变。 全景图像采用等距矩形投影(Equirectangular Projection),在靠近两极的区域会被严重拉伸。如果直接用标准扩散模型处理全景图像,反馈到生成过程中的特征会出现空间错位,导致墙壁变弯、天花板扭曲等问题。
第三重困难:全局一致性与局部细节的平衡。 全景图像需要跨越 360° 保持风格和光照的一致性——天花板和地板的颜色要呼应,窗户的光线要合理——这对逐区域独立生成的模型来说是天然难题。
PanFusion 的核心思路是"借用" Stable Diffusion 强大的 2D 自然图像生成能力,同时引入专门的分支来处理全景图像的特殊几何约束。两路分支在去噪过程中持续"对话",最终融合出无缝全景输出。

图 2:PanFusion 流水线全景图。(上行)全景分支提供全局布局引导;(下行)透视分支借助 Stable Diffusion 的丰富先验知识引导视角投影。两条分支共用同一个 UNet 主干网络(共享权重),各自配备独立的 LoRA 微调层,在 UNet 不同层级嵌入等距矩形-透视投影注意力(EPPA)模块实现跨分支信息传递。
这个分支扮演"标准扩散模型"的角色,直接利用 Stable Diffusion 2D 图像生成的能力。它将全景图像视为多个重叠的普通视角图像(Perspective View),从自然图像分布中获取光照、材质、风格等方面的丰富先验。代码中,这个分支对应 HorizonNet 预训练网络以及 pers_cn(Perspective ControlNet)控制信号。
全景分支则专门处理 360° 图像的几何特殊性。它接收来自 Matterport3D 真实室内场景数据集的全景图像作为监督信号,学习全景空间中的内容分布规律。这个分支与透视分支共享同一个 UNet 主干网络的权重,大幅降低参数量,但通过独立的 LoRA 层(Low-Rank Adaptation)保留各自的专业化能力。
两个分支之间的信息传递依赖一个精心设计的 等距矩形-透视投影注意力模块(Equirectangular-Perspective Projection Attention, EPPA)。该模块的代码位于 models/pano/modules.py 中的 WarpAttn 类实现。其核心逻辑是:先将全景分支的特征映射回透视视角,计算与透视分支特征的交叉注意力,再投影回全景空间。这种设计让两个分支在去噪过程中动态协调——全景分支告诉透视分支"这里应该是墙壁",透视分支告诉全景分支"这部分的光照应该更柔和"——从而在全局连贯性和局部真实性之间取得平衡。
PanFusion 还支持将房间布局(Room Layout)作为额外条件注入生成过程,实现更精细的空间定制化控制。通过 layout_cond 参数,模型可以结合检测到的家具边界框生成符合特定布局的全景图像。
项目代码结构清晰,采用 PyTorch Lightning 框架组织训练流程,代码量约 3000 行(含外部依赖)。
main.py 使用 PyTorch Lightning 内置的 CLI 工具(LightningCLI)管理配置,基于 jsonargparse 实现 YAML 配置文件解析。训练默认使用 DDP(Distributed Data Parallel)多卡策略,torch.set_float32_matmul_precision('medium') 开启 Tensor Core 加速。日志集成 Weights & Biases(WandB),支持实验追踪和训练可视化。
| 文件 | 职责 |
|---|---|
PanFusion.py | 主模型类,继承 PanoGenerator,实现双分支初始化、前向推理、训练步 |
MVGenModel.py | MultiViewBaseModel,实现 EPPA/WarpAttn 交叉注意力逻辑 |
MVDiffusion.py | MVDiffusion 基线模型,用于消融对比 |
PanoOnly.py | 仅全景分支版本,消融实验用 |
modules.py | 共享层,包括 WarpAttn(EPPA)、位置编码等 |
| 文件 | 职责 |
|---|---|
Matterport3D.py | Matterport3D 全景数据集加载器 |
PanoDataset.py | 全景数据基类,含相机参数计算(FoV/theta/phi)、图像拼接等 |
Demo.py | 演示/域外文本测试数据集 |
项目引入了四个外部库,全部以 submodule 形式管理:
核心依赖:torch==2.0.1、diffusers==0.24.0、lightning[pytorch-extra]、transformers、kornia、xformers。值得注意的是 salesforce-lavis(BLIP 图像描述模型)和 wandb 是非标准依赖,分别用于文本编码和实验追踪。
论文在 Matterport3D 数据集上进行了大量实验,PanFusion 在多项指标上显著优于先前方法:
消融实验也证实了双分支设计和 EPPA 模块的必要性——去掉任一组件都会导致性能显著下降。
适用人群: 具备深度学习研究经验、拥有高性能 NVIDIA GPU(≥16GB显存)的科研人员或工程师。
不适用场景: 普通用户无法直接使用,需要:
scripts/stitch_mp3d.py 等预处理脚本完成全景图拼接推理阶段相对友好,模型提供了开箱即用的预测命令,生成单张全景图约需 1-2 分钟(RTX 3090)。
PanFusion 并非完美,存在以下局限:
PanFusion 的价值不仅在于它解决了"如何生成全景图"这个具体问题,更在于它代表了一个重要趋势:将通用大规模生成模型(Stable Diffusion)的知识,通过巧妙的架构设计迁移到结构化、特殊模态的生成任务中。双分支协同去噪的范式为后续研究(如文本→3D 场景、文本→视频等)提供了可复用的设计思路。
从商业角度看,VR/AR 看房、虚拟家居设计、游戏场景生成等领域对高质量全景图像有强烈需求。PanFusion 将这些场景的图像素材生产效率从"数小时/张"压缩到"分钟级/张",具有显著的降本增效价值。