Project Icon

HorizonNet

基于1D表示和全景拉伸数据增强的房间布局学习

HorizonNet项目通过1D表示和全景拉伸数据增强实现了房间布局学习,能够生成立方体或一般形状的房间布局。该项目提供纯Python实现,支持图像推断、3D布局查看、姿态校正、全景拉伸增强、2D和3D布局定量评估以及数据集准备和训练。支持PanoContext、Stanford2D3D、Structured3D和Zillow Indoor等数据集,提供预训练模型。详细的安装、推断和可视化教程使用户能够高效地使用该工具。

HorizonNet

这是我们CVPR'19论文“HorizonNet: 用1D表示和Pano Stretch数据增强学习房间布局”的实现(项目页面)。

更新

特点

这个仓库是一个纯Python实现,您可以:

  • 对您的图像进行推理,以获得立方体或一般形状的房间布局
  • 3D布局查看器
  • 校正旋转姿态以确保曼哈顿对齐
  • Pano Stretch增强,可复制粘贴以应用于您的任务
  • 定量评估立方体/一般形状的2D IoU、3D IoU、角点误差、像素误差
  • 准备和训练您的数据集

方法概述

安装

Pytorch的安装依赖于机器,请为您的机器安装正确的版本。经过测试的版本是Pytorch 1.8.1和Python 3.7.6。

依赖项(点击展开)
  • numpy
  • scipy
  • sklearn
  • Pillow
  • tqdm
  • tensorboardX
  • opencv-python>=3.1(用于预处理)
  • pylsd-nova
  • open3d>=0.7(用于3D布局查看器)
  • shapely

下载

数据集

  • PanoContext/Stanford2D3D数据集
    • 下载预处理的pano/s2d3d,用于训练/验证/测试
      • 将它们放在data目录下,因此您应该得到:
        HorizonNet/
        ├──data/
        |  ├──layoutnet_dataset/
        |  |  |--finetune_general/
        |  |  |--test/
        |  |  |--train/
        |  |  |--valid/
        
      • testtrainvalid是从LayoutNet的立方体数据集中处理出来的。
      • finetune_general是我们从trainvalid重新标注的。它包含65个一般形状的房间。
  • Structured3D数据集
    • 请参见教程,准备HorizonNet的训练/验证/测试数据集。
  • Zillow Indoor数据集
    • 请参见教程,准备HorizonNet的训练/验证/测试数据集。

预训练模型

请在这里下载预训练模型

  • resnet50_rnn__panos2d3d.pth
    • 在PanoContext/Stanford2d3d的817张全景图像上训练。
    • 训练了300个epoch
  • resnet50_rnn__st3d.pth
    • 在Structured3D的18362张全景图像上训练。
    • 数据设置:原始家具和照明。
    • 训练了50个epoch。
  • resnet50_rnn__zind.pth
    • 在Zillow Indoor的20077张全景图像上训练。
    • 数据设置:layout_visibleis_primaryis_insideis_ceiling_flat
    • 训练了50个epoch。

在您的图像上推理

在下面的说明中,我将以assets/demo.png为例。

  • (从PanoContext数据集修改)

1. 预处理(对齐相机旋转姿态)

  • 执行:通过以下命令预处理上面的assets/demo.png
    python preprocess.py --img_glob assets/demo.png --output_dir assets/preprocessed/
    
    • --img_glob指示360房间图像的路径。
      • 支持带引号的shell样式通配符(例如"my_fasinated_img_dir/*png")。
    • --output_dir指示存储结果的目录路径。
    • 有关更详细的脚本使用帮助,请参见python preprocess.py -h
  • 输出:在给定的--output_dir下,您将获得如下结果,并以源图像的基本名称为前缀。
    • 对齐的RGB图像[SOURCE BASENAME]_aligned_rgb.png和线段图像[SOURCE BASENAME]_aligned_line.png
      • demo_aligned_rgb.pngdemo_aligned_line.png
    • 检测到的消失点[SOURCE BASENAME]_VP.txt(这里是demo_VP.txt
      -0.002278 -0.500449 0.865763
      0.000895 0.865764 0.500452
      0.999999 -0.001137 0.000178
      

2. 使用 HorizonNet 估算布局

  • 执行:通过运行以下命令,从上面对齐的图像和线段中预测布局。
    python inference.py --pth ckpt/resnet50_rnn__mp3d.pth --img_glob assets/preprocessed/demo_aligned_rgb.png --output_dir assets/inferenced --visualize
    
    • --pth 训练模型的路径。
    • --img_glob 预处理图像的路径。
    • --output_dir 用于存放结果的目录路径。
    • --visualize 可选项,用于可视化模型的原始输出。
    • --force_cuboid 如果想估算长方体布局(4面墙),添加此选项。
  • 输出:你将获得如下结果,并以源图像的基本名为前缀。
    • 文件名 [SOURCE BASENAME].raw.png 下可视化的1D表示。
    • 提取出的布局角点 [SOURCE BASENAME].json
      {"z0": 50.0, "z1": -59.03114700317383, "uv": [[0.029913906008005142, 0.2996523082256317], [0.029913906008005142, 0.7240479588508606], [0.015625, 0.3819984495639801], [0.015625, 0.6348703503608704], [0.056027885526418686, 0.3881891965866089], [0.056027885526418686, 0.6278984546661377], [0.4480381906032562, 0.3970482349395752], [0.4480381906032562, 0.6178648471832275], [0.5995567440986633, 0.41122356057167053], [0.5995567440986633, 0.601679801940918], [0.8094607591629028, 0.36505699157714844], [0.8094607591629028, 0.6537724137306213], [0.8815288543701172, 0.2661873996257782], [0.8815288543701172, 0.7582473754882812], [0.9189453125, 0.31678876280784607], [0.9189453125, 0.7060701847076416]]}
      

3. 3D 布局查看器

  • 执行:使用点云可视化预测的3D布局。
    python layout_viewer.py --img assets/preprocessed/demo_aligned_rgb.png --layout assets/inferenced/demo_aligned_rgb.json --ignore_ceiling
    
    • --img 预处理图像的路径
    • --layout 来自 inference.py 的 json 输出的路径
    • --ignore_ceiling 不显示天花板
    • python layout_viewer.py -h 获取使用帮助。
  • 输出:在窗口中,你可以使用鼠标和滚轮改变视图角度

你的数据集

参见教程 README_PREPARE_DATASET.md 了解如何准备数据集。

训练

要在数据集上进行训练,详情请参见 python train.py -h 获取选项说明。
示例:

python train.py --id resnet50_rnn
  • 重要参数:
    • --id 必需。实验ID,用于命名检查点和日志
    • --ckpt 输出检查点的文件夹(默认:./ckpt)
    • --logs 日志记录的文件夹(默认:./logs)
    • --pth 若提供,则为微调模式。用于加载已保存的检查点的路径。
    • --backbone 网络的主干(默认:resnet50)
      • 其他选项:{resnet18,resnet34,resnet50,resnet101,resnet152,resnext50_32x4d,resnext101_32x8d,densenet121,densenet169,densenet161,densenet201}
    • --no_rnn 是否移除RNN(默认:False)
    • --train_root_dir 训练数据集的根目录。(默认:data/layoutnet_dataset/train
    • --valid_root_dir 验证数据集的根目录。(默认:data/layoutnet_dataset/valid/
      • 若提供,则将保存验证集上最佳3DIoU的纪元为 {ckpt}/{id}/best_valid.pth
    • --batch_size_train 训练小批量大小(默认:4)
    • --epochs 训练的迭代次数(默认:300)
    • --lr 学习率(默认:0.0001)
    • --device 使用设备ID设置启用CUDA的设备(不在使用多GPU时使用)
    • --multi_gpu 启用所有可用GPU的并行计算

定量评估 - 长方体布局

要在PanoContext/Stanford2d3d数据集上进行评估,首先运行长方体训练模型对所有测试图像进行推断:

python inference.py --pth ckpt/resnet50_rnn__panos2d3d.pth --img_glob "data/layoutnet_dataset/test/img/*" --output_dir output/panos2d3d/resnet50_rnn/ --force_cuboid
  • --img_glob 测试图像文件的shell样式通配符。
  • --output_dir 结果存放目录的路径。
  • --force_cuboid 强制输出长方体布局(4面墙),否则无法评估PE和CE。

获取定量结果:

python eval_cuboid.py --dt_glob "output/panos2d3d/resnet50_rnn/*json" --gt_glob "data/layoutnet_dataset/test/label_cor/*txt"
  • --dt_glob 为所有模型估计文件的shell样式通配符。
  • --gt_glob 为所有真实数据文件的shell样式通配符。

如果你想:

  • 仅评估PanoContext python eval_cuboid.py --dt_glob "output/panos2d3d/resnet50_rnn/*json" --gt_glob "data/layoutnet_dataset/test/label_cor/pano*txt"
  • 仅评估Stanford2d3d python eval_cuboid.py --dt_glob "output/panos2d3d/resnet50_rnn/*json" --gt_glob "data/layoutnet_dataset/test/label_cor/camera*txt"

:clipboard: 公开发布的 resnet50_rnn__panos2d3d.pth 的定量结果如下:

测试数据集3D IoU(%)角点误差(%)像素误差(%)
PanoContext83.390.762.13
Stanford2D3D84.090.632.06
All83.870.672.08

定量评估 - 通用布局

  • 有关详细信息,请参见ST3D的报告 :clipboard: README_ST3D.md
  • 有关详细信息,请参见MP3D的报告 :clipboard: README_MP3D.md

待办事项

致谢

  • 该仓库的部分功劳归于ChiWeiHsiao
  • 感谢limchaos 关于修正Pytorch数据加载器非预期行为可能带来的性能提升的建议。(参见问题#4)

引用

@inproceedings{SunHSC19,
  author    = {Cheng Sun and
               Chi{-}Wei Hsiao and
               Min Sun and
               Hwann{-}Tzong Chen},
  title     = {HorizonNet: 使用一维表示和全景拉伸数据增强学习房间布局},
  booktitle = {{IEEE} 计算机视觉与模式识别会议, {CVPR}
               2019, 美国加利福尼亚州长滩, 2019年6月16-20日},
  pages     = {1047--1056},
  year      = {2019},
}
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号