SD-T2I-360PanoImage
一句话生成360度全景图,基于Stable Diffusion扩散模型+ControlNet超分辨率,支持VR看房与虚拟导览
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
一句话生成360度全景图,基于Stable Diffusion扩散模型+ControlNet超分辨率,支持VR看房与虚拟导览
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你走进一个 VR 全景看房应用,360 度环视整个房间——地板、墙壁、天花板,每一处细节都栩栩如生。但这套全景图像是怎么生成的?传统的三维建模需要 CAD 软件、专业设备和数小时的人工调整,成本极高。而 SD-T2I-360PanoImage(项目全称:Stable Diffusion for 360 Degree Panoramic Image)则用扩散模型颠覆了这一流程——你只需要一句话描述,系统就能自动生成一张完整的 360 度全景图。
在虚拟看房、旅游导览、室内设计、VR 游戏等领域,360 度全景图像是沉浸式体验的核心载体。然而,这类图像的获取和制作长期面临三重困境:一是采集成本高——需要 360 度相机或鱼眼镜头设备,单次拍摄就要数百到数千元;二是构图难度大——球形投影的边缘畸变、光照一致性、色温统一都需要专业后期调整;三是扩展性差——每换一个场景就要重新拍摄或建模,无法快速批量生产。
阿里达摩院的研究团队于 2023 年 11 月发布了 Diffusion360 论文,首次提出基于扩散模型生成无缝 360 度全景图像的完整方案,并将核心代码开源至 GitHub。ArcherFMY/SD-T2I-360PanoImage 即为该方案的主要实现仓库,在开源社区获得持续关注与社区 fork。

图1:Text-to-360° 全景图生成效果——客厅
项目实现了双入口生成管线,分别对应文生全景(Text-to-Panorama)和图生全景(Image-to-Panorama)两种使用场景。两者共享相同的超分辨率增强模块,但前段生成策略不同。
当用户输入一句话(如"a living room")时,系统首先在 Stable Diffusion BlendExtendPipeline 中执行标准扩散去噪,生成一张 512 x 1024 的初始全景图像。这里的关键技术是 <360panorama> 特殊标记——它在 CLIP Tokenizer 中被训练为全景视角的隐式条件,引导扩散模型生成符合球面投影规律的图像,而非普通矩形图片。
初始图像随后进入两阶段超分辨率增强:
阶段 1:ControlNet 引导的 2 倍上采样。 系统调用 ControlNet 模型,以初始图像本身作为条件图,在 ControlNet 约束下执行 Img2Img 去噪,将分辨率从 512 x 1024 提升至 1536 x 3072。ControlNet 保留了初始图像的全局结构与布局,防止上采样过程中出现内容漂移。
阶段 2:Real-ESRGAN 2 倍增强。 使用预训练的 RealESRGANer 模型进行最终超分,将图像尺寸推至 3072 x 6144,同时修复球面边缘的拼接缝隙。源码中 blend_h() 函数通过加权线性混合消除拼接线。开启 refinement=True 参数可进行迭代精修以获得更高分辨率。

图2:Text-to-360° 全景图生成效果——山脉
图生模式的独特之处在于引入了 py360convert 球面投影转换:当用户提供一张普通照片和一张遮罩图(mask)后,系统先将遮罩区域通过 c2e()(Cubemap-to-Equirectangular)投影转换为 360 度等距矩形格式,再与原图融合,形成 ControlNet 的条件图。这种方式允许用户对原始场景的特定区域进行 360 度"撑开",生成扩展后的全景图。
| 步骤 | Text-to-Panorama | Image-to-Panorama |
|---|---|---|
| 输入 | 文本提示词 | 图像 + 遮罩 + 文本提示 |
| 初始生成 | SD BlendExtendPipeline | SD Image2PanoPipeline + ControlNet |
| 上采样 | ControlNet Img2Img + Real-ESRGAN | 同左 |
| 显存需求 | 16GB(基础)/ 24GB(高分辨率) | 同左 |
项目的 Python 依赖栈层次清晰:
| 层级 | 技术 | 作用 |
|---|---|---|
| 基础框架 | PyTorch + CUDA | 底层算力支撑 |
| 扩散模型 | diffusers 0.26.0 | DiffusionPipeline 抽象、Scheduler 管理 |
| 文本编码 | transformers (CLIP) | 提示词向量化 |
| 图像引导 | ControlNetModel | 条件生成控制 |
| 超分辨率 | Real-ESRGAN (basicsr) | 图像增强 |
| 投影转换 | py360convert | 球面与立方体投影互转 |
| 内存优化 | xformers + model_cpu_offload | 降低显存占用 |
项目代码遵循 Apache 2.0 许可证,核心管线(StableDiffusionBlendExtendPipeline)直接继承自 HuggingFace diffusers 的 StableDiffusionPipeline,并在其基础上扩展了 blend_v() 和 blend_h() 球面拼接融合方法,以及支持超长提示词(max_embeddings_multiples=3)的 get_weighted_text_embeddings() 函数,实现了对超过 77 token 限制的复杂提示词的完整编码。
upscale=False),生成 512 x 1024 的初始全景图,单次推理约 1-2 分钟。device='cpu',但速度极慢,不推荐生产使用。此外,项目明确要求 diffusers >= 0.20.0, <= 0.26.0,原因在于新版本(>0.26.0)的 VAE 解码策略会导致超分辨率结果出现过饱和(over-saturated)问题。
git clone https://github.com/ArcherFMY/SD-T2I-360PanoImage.git
cd SD-T2I-360PanoImage
pip install -r requirements.txt
最大门槛在于模型权重获取:官方要求从百度网盘或 HuggingFace(archerfmy0831/sd-t2i-360panoimage)手动下载权重文件并解压到 models/ 文件夹。
文生全景的调用约 20 行代码即可完成一次完整的全景图生成,上手难度属于中等偏低:
import torch
from txt2panoimg import Text2360PanoramaImagePipeline
prompt = 'The living room'
input = {'prompt': prompt, 'upscale': False}
model_id = './models'
txt2panoimg = Text2360PanoramaImagePipeline(model_id, torch_dtype=torch.float16)
output = txt2panoimg(input)
output.save('result.png')
项目作者于 2024 年 5 月发布了独立的 ComfyUI 插件(https://github.com/ArcherFMY/Diffusion360_ComfyUI),提供图形化节点编辑界面。此外,阿里云 ModelScope 也上线了在线 Demo,可直接网页体验,无需本地配置。
1. 显存需求高。 16GB 是最低门槛,阻挡了大量消费级 GPU 用户。
2. 百度网盘下载障碍。 官方首选模型下载地址为百度网盘,体验不佳。HuggingFace 镜像虽已提供,但并非所有子模型都已同步。
3. 拼接痕迹明显。 两阶段超分辨率在极端场景下可能出现结构断裂或重复纹理,blend_h() 只能缓解无法消除。
4. 版本锁定风险。 diffusers 版本限制在 0.20-0.26,长期维护存在一定成本。
Diffusion360 的出现标志着生成式 AI 从 2D 图像向 3D 环境演进的重要节点。与传统基于 NeRF/3DGS(三维高斯溅射)的方法相比,扩散模型方案在推理速度上具有明显优势——单张全景图生成耗时以分钟计,而非数小时的神经渲染。
从技术演进路径看,360 全景图生成的下一个方向将指向视频级全景内容(360 degree Video)和可控场景生成(结合 ControlNet/LoRA 实现风格、布局的精准控制)。此外,随着开源社区对 Flux、SD3 等新一代扩散模型的适配,该项目的影响力有望从 Stable Diffusion 生态进一步扩展。
综合来看,SD-T2I-360PanoImage 是一款技术含量高、实现完整、文档清晰的学术开源项目,适合 AI 研究者和计算机视觉工程师深入研究与二次开发,也适合 AI 爱好者通过 ComfyUI 或 ModelScope 进行快速体验。