plan2scene

GitHub
590 78 中等 6 次阅读 昨天MIT图像其他开发框架
AI 解读 由 AI 自动生成,仅供参考

plan2scene 是一个基于学术研究的开源项目,旨在将二维建筑平面图和少量室内照片自动转化为带纹理的三维住宅模型。它主要解决了室内场景重建中数据稀缺和手动建模成本高的问题,让用户无需专业建模技能即可生成合理的 3D 场景。

这个项目非常适合计算机视觉领域的研究人员、3D 内容开发者以及希望快速原型化的室内设计师使用。plan2scene 的核心技术亮点在于其强大的纹理合成能力与物体放置算法。即使在实际拍摄照片缺失或部分不可见的情况下,它也能通过推理补全室内细节,生成连贯的网格模型。

作为论文的官方实现,plan2scene 提供了完整的代码库,支持 Rent3D++ 数据集,并包含了数据预处理、模型训练及评估的全流程脚本。此外,项目还集成了 Embark Studios 的纹理合成工具,确保生成的表面纹理自然真实。无论是用于学术研究基准测试,还是探索自动化 3D 内容生成,plan2scene 都是一个值得尝试的实用工具。

使用场景

室内设计工作室的3D建模师小林,正在为客户的新公寓项目赶制可视化方案,手头只有开发商提供的平面图和几张家装参考照片。

没有 plan2scene 时

  • 必须手动在3D软件中逐墙建模、贴材质,光基础结构就要花掉一整天,效率极低。
  • 参考照片中的地板、墙面纹理无法自动提取复用,只能靠肉眼比对后手动裁剪+拉伸,常出现比例失真或接缝明显的问题。
  • 不同房间若想保持风格统一,需反复切换素材库、手动调整色调与质感,一致性难以保障。
  • 客户临时要求“把客厅瓷砖换成卧室木地板”,修改成本高,几乎等于重做整个空间。
  • 最终交付物缺乏真实感,客户常抱怨“效果图和实景差太远”,沟通成本陡增。

使用 plan2scene 后

  • 输入平面图和参考照片后,10分钟内自动生成带纹理的完整3D场景网格,省去80%的手工建模时间。
  • 工具智能提取照片中的表面材质(如木纹、瓷砖),并无缝合成到对应墙面/地面,纹理自然无拉伸。
  • 自动识别不同房间的材质偏好,在整套户型中保持视觉连贯性,无需人工调色匹配。
  • 修改材质只需替换输入照片,系统重新生成场景,5分钟完成全局风格切换,响应客户需求零延迟。
  • 输出的3D模型具备照片级真实感,客户一眼就能想象入住效果,方案通过率显著提升。

plan2scene 把“平面图+照片”直接变成可交互的真实感3D空间,让设计师从重复劳动中解放,专注创意本身。

运行环境要求

操作系统
  • Linux
GPU

需要 NVIDIA GPU (通过 CUDA_VISIBLE_DEVICES 推断),具体型号、显存及 CUDA 版本未说明

内存

未说明

依赖
notes1. 需按照文档初始化 conda 环境。2. 需下载 Embark Studios texture-synthesis 二进制文件及 seam mask 并配置 JSON 路径。3. 运行 Python 脚本前需设置环境变量 PYTHONPATH=./code/src。4. 预览功能需克隆并编译 SmartScenesToolkit。5. 需下载 Rent3D++ 数据集并按说明组织目录结构。
python未说明 (需参考 docs/md/conda_env_setup.md)
conda
Embark Studios texture-synthesis (command line binary)
SmartScenesToolkit (用于预览和渲染)
plan2scene hero image

快速开始

Plan2Scene

论文的官方仓库:

Plan2Scene: Converting floorplans (平面图) to 3D scenes (3D 场景)

Madhawa Vidanapathirana, Qirui Wu, Yasutaka Furukawa, Angel X. Chang , Manolis Savva

[Paper (论文), Project Page (项目页面), Google Colab Demo (Google Colab 演示)]

Task Overview 在 Plan2Scene 任务中,我们根据 floorplan (平面图) 和一组照片生成住宅的 textured 3D mesh (纹理 3D 网格)。

Dependencies (依赖项)

  1. 我们使用一个 conda environment (conda 环境),初始化方法 见此
  2. 设置 Embark Studios texture-synthesis (纹理合成) 项目的 command line library (命令行库)
    1. 你可以下载 此处可用 的 pre-built binary (预构建二进制文件)。或者,你也可以从源代码构建。
    2. 下载 此处可用 的 seam mask (接缝掩膜)。
    3. ./conf/plan2scene/seam_correct-example.json 重命名为 'seam_correct.json' 并更新 texture synthesis (纹理合成) command line library (命令行库) binary (二进制文件) 和 seam mask (接缝掩膜) 的路径。

运行 python 脚本时,使用 'code/src' 作为 source root (源代码根目录)。

export PYTHONPATH=./code/src

Data (数据)

  1. Rent3D++ dataset (数据集)

    1. 下载并复制 Rent3D++ dataset (数据集)[PROJECT_ROOT]/data 目录。数据组织方式 见此

    2. [可选] 我们提供了预填充了对象 CAD models (CAD 模型) 的 3D 场景。 如果你希望使用我们使用的 Object Placement (对象放置) 方法重新填充这些场景,请遵循此处的说明

    3. 要复现我们的结果,你应该使用我们提供的 pre-extracted crops (预提取裁剪图)。 这些 crops (裁剪图) 随 Rent3D++ dataset (数据集) 提供,并复制到 ./data/processed/surface_crops 目录。

      [可选] 如果你希望提取新的 crops (裁剪图) 而不是使用这些提供的 crops (裁剪图),请遵循 这些说明

    4. 选择 ground truth (真实值) reference crops (参考裁剪图) 并填充 photo room assignment lists (照片房间分配列表)。

      # Select ground truth reference crops.
      python code/scripts/plan2scene/preprocessing/generate_reference_crops.py ./data/processed/gt_reference/train ./data/input/photo_assignments/train train
      python code/scripts/plan2scene/preprocessing/generate_reference_crops.py ./data/processed/gt_reference/val ./data/input/photo_assignments/val val
      python code/scripts/plan2scene/preprocessing/generate_reference_crops.py ./data/processed/gt_reference/test ./data/input/photo_assignments/test test 
      
      # We evaluate Plan2Scene by simulating photo un-observations.
      # Generate photoroom.csv files considering different photo un-observation ratios.
      python code/scripts/plan2scene/preprocessing/generate_unobserved_photo_assignments.py ./data/processed/photo_assignments/train ./data/input/photo_assignments/train ./data/input/unobserved_photos.json train
      python code/scripts/plan2scene/preprocessing/generate_unobserved_photo_assignments.py ./data/processed/photo_assignments/val ./data/input/photo_assignments/val ./data/input/unobserved_photos.json val
      python code/scripts/plan2scene/preprocessing/generate_unobserved_photo_assignments.py ./data/processed/photo_assignments/test ./data/input/photo_assignments/test ./data/input/unobserved_photos.json test  
      
  2. [可选] Stationary Textures Dataset (静态纹理数据集) - 我们使用以下数据集之一来训练 texture synthesis model (纹理合成模型)。 如果你使用 pre-trained models (预训练模型),则不需要此项。

    • Version 1:我们在 CVPR 论文中使用此数据集。详情 见此
    • Version 2:更新的 textures (纹理) 数据集,在 Rent3D++ dataset (数据集) 上提供改进的结果。详情 见此
  3. [可选] Substance Mapped Textures dataset (Substance Mapped Textures 数据集)仅由 retrieve baseline (检索基线) 使用。

Pretrained models (预训练模型)

Pretrained models (预训练模型) 此处可用

Inference on Rent3D++ dataset (在 Rent3D++ 数据集上进行推理)

  1. 按照数据部分所述下载并预处理 Rent3D++ dataset (数据集)。

  2. 设置 pretrained model (预训练模型) 或训练一个新的 Plan2Scene network (网络)。

  3. 使用 VGG textureness score (VGG 纹理度分数) 为 observed surfaces (观测表面) 合成 textures (纹理)。

    # For test data without simulating photo unobservations. (drop = 0.0)
    python code/scripts/plan2scene/preprocessing/fill_room_embeddings.py ./data/processed/texture_gen/test/drop_0.0 test --drop 0.0
    python code/scripts/plan2scene/crop_select/vgg_crop_selector.py ./data/processed/vgg_crop_select/test/drop_0.0 ./data/processed/texture_gen/test/drop_0.0 test --drop 0.0
    # Results are stored at ./data/processed/vgg_crop_select/test/drop_0.0
    
  4. 使用我们的 texture propagation network (纹理传播网络) 将 textures (纹理) 传播到 unobserved surfaces (未观测表面)。

    python code/scripts/plan2scene/texture_prop/gnn_texture_prop.py ./data/processed/gnn_prop/test/drop_0.0 ./data/processed/vgg_crop_select/test/drop_0.0 test GNN_PROP_CONF_PATH GNN_PROP_CHECKPOINT_PATH --keep-existing-predictions --drop 0.0
    

    要预览结果,请遵循以下说明。

预览输出

  1. 完成推理 (inference) 步骤。
  2. 修正预测纹理的接缝 (seams) 并使其可平铺 (tileable)。
    # For test data without simulating photo unobservations.
    python code/scripts/plan2scene/postprocessing/seam_correct_textures.py ./data/processed/gnn_prop/test/drop_0.0/tileable_texture_crops ./data/processed/gnn_prop/test/drop_0.0/texture_crops test --drop 0.0
    
  3. 使用 embed_textures.py 生成嵌入纹理的 .scene.json 文件。 一个 scene.json 文件描述房屋的 3D 几何结构。 可以使用 SmartScenesToolkit 的 'scene-viewer' 通过浏览器预览(您需要克隆并构建 SmartScenesToolkit)。
    # For test data without simulating photo unobservations.
    python code/scripts/plan2scene/postprocessing/embed_textures.py ./data/processed/gnn_prop/test/drop_0.0/archs ./data/processed/gnn_prop/test/drop_0.0/tileable_texture_crops test --drop 0.0
    # scene.json files are created in the ./data/processed/gnn_prop/test/drop_0.0/archs directory.
    
  4. 使用 render_house_jsons.py 将 .scene.json 文件渲染为 .png 图片。
    • 下载并构建 SmartScenesToolkit
    • ./conf/render-example.json 重命名为 ./conf/render.json 并更新其字段以指向 scene-toolkit。
    • 运行以下命令生成预览。
      CUDA_VISIBLE_DEVICES=0 python code/scripts/plan2scene/render_house_jsons.py ./data/processed/gnn_prop/test/drop_0.0/archs --scene-json
      # A .png file is created for each .scene.json file in the ./data/processed/gnn_prop/test/drop_0.0/archs directory.
      
  5. 使用 preview_houses.py 生成带有预览的定性结果页面。
    python code/scripts/plan2scene/preview_houses.py ./data/processed/gnn_prop/test/drop_0.0/previews ./data/processed/gnn_prop/test/drop_0.0/archs ./data/input/photos test --textures-path ./data/processed/gnn_prop/test/drop_0.0/tileable_texture_crops 0.0
    # Open ./data/processed/gnn_prop/test/drop_0.0/previews/preview.html
    

在 Rent3D++ 数据集上测试

  1. [可选] 下载预训练模型或训练 Subs 指标 (Substance) 所使用的物质分类器。 训练说明可在 此处 找到。 预训练权重可在 此处 找到。 跳过此步骤将省略 Subs 指标。

  2. 生成 60% 照片未观测 (photo unobservations) 情况下的整体评估报告。我们在论文评估中使用了此设置。

    # Synthesize textures for observed surfaces using the VGG textureness score.
    # For the case: 60% (i.e. 0.6) of the photos unobserved. 
    python code/scripts/plan2scene/preprocessing/fill_room_embeddings.py ./data/processed/texture_gen/test/drop_0.6 test --drop 0.6
    python code/scripts/plan2scene/crop_select/vgg_crop_selector.py ./data/processed/vgg_crop_select/test/drop_0.6 ./data/processed/texture_gen/test/drop_0.6 test --drop 0.6
    
    # Propagate textures to un-observed surfaces using our GNN.
    # For the case: 60% (i.e. 0.6) of the photos unobserved.
    python code/scripts/plan2scene/texture_prop/gnn_texture_prop.py ./data/processed/gnn_prop/test/drop_0.6 ./data/processed/vgg_crop_select/test/drop_0.6 test GNN_PROP_CONF_PATH GNN_PROP_CHECKPOINT_PATH --keep-existing-predictions --drop 0.6
    
    # Correct seams of texture crops and make them tileable.
    # For test data where 60% of photos are unobserved.
    python code/scripts/plan2scene/postprocessing/seam_correct_textures.py ./data/processed/gnn_prop/test/drop_0.6/tileable_texture_crops ./data/processed/gnn_prop/test/drop_0.6/texture_crops test --drop 0.6
    
    # Generate overall results at 60% simulated photo unobservations.
    python code/scripts/plan2scene/test.py ./data/processed/gnn_prop/test/drop_0.6/tileable_texture_crops ./data/processed/gt_reference/test/texture_crops test
    
  3. 生成已观测表面 (observed surfaces) 的评估报告。无模拟的照片未观测。我们在论文评估中使用了此设置。

    # Run inference on using drop=0.0.
    python code/scripts/plan2scene/preprocessing/fill_room_embeddings.py ./data/processed/texture_gen/test/drop_0.0 test --drop 0.0
    python code/scripts/plan2scene/crop_select/vgg_crop_selector.py ./data/processed/vgg_crop_select/test/drop_0.0 ./data/processed/texture_gen/test/drop_0.0 test --drop 0.0
    
    # Correct seams of texture crops and make them tileable by running seam_correct_textures.py.
    python code/scripts/plan2scene/postprocessing/seam_correct_textures.py ./data/processed/vgg_crop_select/test/drop_0.0/tileable_texture_crops ./data/processed/vgg_crop_select/test/drop_0.0/texture_crops test --drop 0.0
    
    # Generate evaluation results for observed surfaces.
    python code/scripts/plan2scene/test.py ./data/processed/vgg_crop_select/test/drop_0.0/tileable_texture_crops ./data/processed/gt_reference/test/texture_crops test
    
  4. 生成 60% 照片未观测情况下未观测表面 (unobserved surfaces) 的评估报告。我们在论文评估中使用了此设置。

    # It is assumed that the user has already generated the overall report at 0.6 drop fraction.
    
    # Generate results on unobserved surfaces at 60% simulated photo unobservations.
    python code/scripts/plan2scene/test.py ./data/processed/gnn_prop/test/drop_0.6/tileable_texture_crops ./data/processed/gt_reference/test/texture_crops test --exclude-prior-predictions ./data/processed/vgg_crop_select/test/drop_0.6/texture_crops
    
  5. 生成 此处 所述的 FID 指标 (Fréchet Inception Distance) 评估报告。

在自定义数据上推理

如果您有扫描的平面图 (floorplans) 图像,可以使用 raster-to-vector 将这些平面图图像转换为矢量格式。然后,遵循 此处说明 创建房屋的纹理 3D 网格 (meshes)。

如果您有其他格式的平面图矢量,可以将它们转换为 raster-to-vector 标注格式。 然后,遵循与之前相同的说明创建房屋的纹理 3D 网格。 R2V 标注格式及其示例在 raster-to-vector 仓库的数据部分 中进行了说明。

训练新的 Plan2Scene 网络

Plan2Scene 由两个可训练组件组成:1) 纹理合成阶段 (texture synthesis stage) 和 2) 纹理传播阶段 (texture propagation stage)。每个阶段分别训练。训练过程如下。

  1. 按照 此处 所述训练纹理合成阶段。
  2. 按照 此处 所述训练纹理传播阶段。

基线模型 (Baseline Models)

基线模型可在此处 查看

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

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 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

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 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架