MonoScene: Monocular 3D Semantic Scene Completion

news2024/10/6 0:29:17

Paper name

MonoScene: Monocular 3D Semantic Scene Completion

Paper Reading Note

URL: https://arxiv.org/pdf/2112.00726.pdf

TL;DR

  • 2022 cvpr 论文,提出一种能在室内与室外场景均可使用的单目 SSC 方案,与特斯拉的 Occupancy Network 非常相似

Introduction

背景

  • 由图像估计出 3d 信息是个回到计算机视觉根源的问题,当前大部分方法都需要通过 2.5D 或者 3D 输入来进行 3d 估计,比如通过 Lidar 或深度相机,这些传感器相比于单目相机一般会更昂贵、占用空间更大、并对外部有干扰。如果能通过单目相机估计场景 3d 信息能为更多新应用铺平道路
  • 3d 语义场景完成 (SSC)通过同时推理几何与语义信息来解决场景理解问题
    • 当前方法的局限性是需要依赖深度数据输入,或者只能在室内或室外场景下使用

本文方案

  • 本文提出一种能在室内与室外场景均可使用的单目 SSC 方案
    • 提出一种将 2D 特征投影到 3D 的方法: FLoSP
    • 提出一种 3D Context Relation Prior (3D CRP) 提升网络的上下文意识
    • 新的 SSC loss 来优化场景类亲和力和局部截头体比例

Dataset/Algorithm/Model/Experiment Detail

在这里插入图片描述

  • Monoscene ppl 流程
    • 输入 2d 图片,经过 2d unet 提取多层次的特征
    • Features Line of Sight Projection module (FLoSP) 用于将 2d 特征提升到 3d 位置上,增强信息流并实现2D-3D分离
    • 3D Context Relation Prior (3D CRP) 用于增强长距离的上下文信息提取
    • loss 优化
      • Scene-Class Affinity Loss:提升类内和类间的场景方面度量
      • Frustum Proportion Loss:对齐局部截头体中的类分布,提供超越场景遮挡的监督信息
  • 网络结构
    • 2D unet:EfficientNetB7 用于提取图像特征
    • 3D UNets:2层 encoder-decoder 结构,用于提取 3d 特征
    • completion head:3D ASPP 结构和 softmax 层,用于处理 3D UNet 输出得到3d场景 completion 结果

实现方式

Features Line of Sight Projection (FLoSP)

在这里插入图片描述

  • 对于 2d unet 的多尺度输出特征(1,2,4,8),分别过 1x1 conv,然后将多尺度的特征分别映射到 3d 空间中(映射方式是将 3d voxels 中心投影到 2d 特征上进行采样),最后对多尺度特征分别映射得到的 3d voxel 特征进行加和得到最终输出

3D Context Relation Prior (3D CRP)

在这里插入图片描述

  • 通过 2d 分隔中的 CPNet 启发,在 3d unet 增加 3D CRP 模块,学习 n 向体素↔体素语义场景关系图,本文 n 为 4,主要包含以下 voxel 类型
    • free:至少有一个 voxel 是 free
      • similar
      • different
    • occupied:所有 voxel 都是 occupied
      • similar
      • different
  • 上述的体素↔体素语义场景关系图构建是 n 2 n^2 n2 复杂度,本文使用 超体素↔体素 关系来降低存储和计算消耗
    • 将超体素定义为非重叠组,每个组包含 s 3 s^3 s3 个相邻体素
    • 超体素↔体素关系数量则降低为 N 2 s 3 \frac{N^2}{s^3} s3N2
    • 对于某个超体素 V,以及体素 v,体素关系对的数量为 s 3 {s^3} s3 ,本文不是回归V↔ν中的M关系的复数计数,而是预测M个关系中的哪一个存在
  • 3D Context Relation Prior Layer: 输入 3d map,经过 ASPP 卷积提升感受野,然后利用 1x1 conv 和 sigmoid 将 3d map 生成 M 组关系矩阵 A ^ m \hat{A}^m A^m,利用加权交叉熵损失进行训练;关系矩阵与重塑的超体素特征相乘,以收集全局上下文(或者, A m A^m Am 中的关系可以通过移除 Lrel 来自我发现(w/o M),即表现为注意力矩阵)
    在这里插入图片描述
    加权交叉熵
    在这里插入图片描述
    其中权重为
    在这里插入图片描述

Losses

Scene-Class Affinity Loss

  • 优化了类可导(P)recision、(R)ecall和(S)pecificity,其中Pc和Rc测量相似 c 类体素的性能,Sc 测量不相似体素(即不属于c类)的性能
    在这里插入图片描述
    其中 p i p_i pi 是 voxel-i 的 gt class, p ^ i , c \hat{p}_{i,c} p^i,c 代表预测为 c 类的概率
  • 使用以下 loss 提升上面的类别 metrics
    在这里插入图片描述
    实际使用中会分别优化几何和语义

Frustum Proportion Loss

在这里插入图片描述

  • 基于单目消除遮挡区域的歧义性是难以实现的,所以观察到遮挡区域的体素往往被预测为物体的一部分,提出了 Frustum Proportion Loss 来显式优化截头体中的类分布从而缓解上述问题
    • 将输入图片分为 lxl 的 patches,对于每个 patch 投影到的 frustum 中对齐预测和 gt 的类别分布
      在这里插入图片描述
      其中 P k P_k Pk 是 k voxel 中的真实 gt 分布, P ^ k \hat{P}_k P^k 是 k voxel 中的预测分布

Training strategy

  • 整体 loss 为上面的 4 个 loss 加上 ce loss
    在这里插入图片描述

实验结果

数据集

  • NYUv2
    • 有 1449 Kinect 采集的室内场景图,体素标注为 240x144x240,13类 (11个语义,1 free,1 unknown)
    • 640x480
    • 795 train;654 test
  • semantic kitti
    • 室外雷达采集,体素标注为 256x256x32,voxel grid 尺寸为 0.2 m,21 类(19 语义,1 free,1 unknown)
    • 使用 cam2 作为输入,1226x370,左裁剪到 1220x370
    • 3834 train;815 val

训练超参

在这里插入图片描述

评价指标

  • SC:occupied voxels 的 IoU,不细分语义类别
  • SSC:每个类别的 mIoU
  • 注意:之前文章对于室内仅对表面和 occluded voxels 进行评估,室外则是所有 voxel 都评估,本文因为对所有 voxels 进行评估,所以重新训练了所有的对比 baseline

NYUv2 与 SemanticKITTI 对比

  • 因为本文是第一篇用纯视觉输入的工作,其他 baseline 基本是用深度估计网络 adabin 来提供深度或者伪 lidar 信息得到,monoscene 能取得 SOTA 效果
    在这里插入图片描述

与 2.5D/3D 输入方法对比

  • 因为信息量降低还是有一定差距,但某些 mIoU 之类的指标也有比其他方法更高的
    在这里插入图片描述

可视化对比

在这里插入图片描述
在这里插入图片描述

消融实验

  • FLoSP 很重要,其他的均有贡献
    在这里插入图片描述
  • FLoSP 中多尺度有涨点
    在这里插入图片描述
  • Frustums Proportion loss 中 8x8 分块效果较好
    在这里插入图片描述
  • 2d-3d 投影变化对比
    在这里插入图片描述

泛化性实验

  • 在 SemanticKITTI 上训练,其他数据集上验证效果,大部分是合理的,不过 distortion 会变大在这里插入图片描述

Limitation 分析

  • 几何预测或语义预测的细粒度不行
  • 小物体效果不行(SemKITTI 上小物体占比小于 0.3%)
  • 其他数据集上泛化性一般

Thoughts

  • 实验非常充分,复现效果也很好,不过用 v100 复现训练发现训练时长比论文中高
  • 本文可以作为单目 SSC 的 baseline 进行一些实验迭代

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/147048.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java基础】day12

一、Redis 的缓存穿透、缓存击穿、缓存雪崩是什么? 缓存穿透 请求不存在【 DB 和 Redis 中都不存在】的数据,导致请求直接打到持久层数据库中,导致数据库负载过高,甚至导致宕机。这样的请求几乎可以导致请求次次到达 DB &#xff…

Cesium中tif转经纬度投影或墨卡托地图瓦片 CesiumLab系列教程

Cesium 目前支持的影像切片规范有两种形式的: 1.经纬度直拉切片方式 (GeographicTilingScheme ), 2.web 墨卡托切片方式 (WebMercatorTilingScheme)。 根据常规传统,瓦片大小都是 256&#x…

数字验证学习笔记——SystemVerilog芯片验证22 ——功能覆盖率策略覆盖组

一、功能覆盖率策略 1.1 收集信息而非数据 对于一些设计,你需要关心的是合法的寄存器地址和非法的寄存器地址,可写的寄存器域和非法的寄存器域,而不是具体的寄存器地址数值。一旦关注的地方着眼于感兴趣的状态,而不是具体数值&a…

2022年中职网络安全竞赛SSH弱口令渗透测试解析(详细)

B-7 SSH弱口令渗透测试 任务环境说明: 服务器场景:Server18(关闭链接)服务器场景操作系统:Linux(版本不详)在本地PC渗透测试平台Kali中使用zenmap工具扫描服务器场景Server18-2所在网段(例如:172.16.101.0/24)范围内存活的主机IP地址和指定开放的21、22、23端口。并将…

【NI Multisim 14.0原理图环境设置——标题栏】

目录 序言 一、标题栏 🍍1.添加标题块 🍍 2.修改标题块 (1)直接修改 (2)标题块编辑器 序言 NI Multisim最突出的特点之一就是用户界面友好。它可以使电路设计者方便、快捷地使用虚拟元器件和仪器、仪表…

【C++】命名空间 以及 如何理解using namespace std;

目录 命名空间 1.由来 2.概念 3.使用 方法一 方法二 方法三 4.嵌套使用 命名空间 很多人在学习C的时候,第一个代码想必是如下样子的。和C语言相比,库函数换了,同时多了一个 using namespace std; 但是,你真的了…

Allegro174版本新功能介绍之高阶Contour模式使用

Allegro174版本新功能介绍之高阶Contour模式使用 在Allegro低版本166以及172版本中,有Contour命令,但是只有沿着routekeepin和Connect Line功能,如下图 当升级到了174版本的时候,Allegro支持沿着任意目标走线,甚至是过孔和铜皮,如下图 具体操作介绍如下 以沿着这块铜皮轮…

一元三次方程求解 -- 二分查找

[NOIP2001 提高组] 一元三次方题目描述思路codetag:数学,二分查找 题目链接:洛谷P1024: [NOIP2001 提高组] 一元三次方 题目描述 思路 先对三次函数求导得到二次函数 3ax22bxc03ax^2 2bx c 03ax22bxc0 然后利用求根公式计算出两个极值点 …

Vue--》Vue3自定义组件以及新组件的使用讲解

目录 customRef Vue3提供的新组件 Fragment Teleport Suspense Vue3中全局API的改变 customRef 创建一个自定义的ref&#xff0c;并对其依赖项跟踪和更新触发进行显示控制。 <template><input type"text" v-model"keyword"><h3>…

谷粒学苑项目-第一章公共模块下的Swagger配置类-1.4

一、在common子模块下创建Swagger配置类 1. guli_parent->common子模块->service_base子模块->SwaggerConfig配置类 common子模块是pom类型 <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId>…

【Java寒假打卡】Java基础-集合Collection

【Java寒假打卡】Java基础-集合Collection集合与数组之间的区别集合体系结构Collection常用的方法集合-迭代器迭代器原理分析迭代器删除方法的注意事项增强for循环集合与数组之间的区别 数组的长度是不可变的&#xff0c;集合的长度是可变的数组可以存基本数据类型和引用数据类…

Xilinx AXI4 协议

AXI4 相对复杂&#xff0c;但 SOC 开发者必须掌握。AXI 协议的具体内容可参考 Xilinx UG761 AXI Reference Guide。在这里我们简单了解一下。 AXI4 所采用的是一种 READY&#xff0c;VALID 握手通信机制&#xff0c;即主从模块进行数据通信前&#xff0c;先根据操作对各所用到的…

填满背包方案数OJ

目录 LintCode 炼码物品大小不重复的填满背包的方案数 LintCode 炼码 物品大小存在重复情况 LintCode 炼码不重复的组合个数 完全背包_牛客题霸_牛客网 LintCode 炼码物品大小不重复的填满背包的方案数 描述给出 n 个物品, 以及一个数组, nums[i]代表第i个物品的大小, 保证大…

编辑PDF文件的两种方法

PDF文件具备较好的稳定性、兼容性&#xff0c;在日常工作中的应用非常广泛&#xff0c;但想要编辑文件内容就不那么容易了&#xff0c;下面来说说编辑PDF文件的两种方法。 方法一&#xff1a; 我们知道&#xff0c;查看PDF文件只需要阅读器就可以了&#xff0c;如果想对文件内…

springboot 整合 webservice服务

目录webservice百科创建一个springboot项目并导入相关依赖编写webservice接口编写实现类发布webservice浏览器访问postman调用在前一段时间用到了webservice服务&#xff0c;今天整理了一下&#xff0c;记录下来。webservice百科 Web Service是一个平台独立的&#xff0c;低耦…

Apifox调用Security权限接口

Apifox调用Security权限接口1. SpringBoot3.0集成SpringSecurity1.1 pom1.2 properties配置2. Apifox 配置2.1 配置根目录Auth2.2 ApiFox 分享调用本地接口本教程环境&#xff1a; Apifox&#xff1a;2.2.14 &#xff08;建议更新到最新版本&#xff0c;老版本Auth从父级继承可…

flowable数据表详解

爬虫组件分析目录概述需求&#xff1a;设计思路实现思路分析1.flowable2.数据表的命名规则3.ACT_RU_*4.ACT_ID_*5.ACT_HI_*数据表的介绍参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hard…

AjaxRedis问题总结

一、JQuery——Ajax实现三大方法的应用及区别&#xff08;get,post,ajax&#xff09; 1. $.get()方法 <script type"text/javascript">$(function () {$("#send").click(function () {$.get("AjaxHandler.ashx", {username: $("#use…

【操作系统】国科大《高级操作系统》思考题整理

参考用书&#xff1a;《Linux内核设计的艺术》 引言 国科大杨力祥《高级操作系统》思考题整理 思考题 为什么开始启动计算机的时候&#xff0c;执行的是BIOS代码而不是操作系统自身的代码&#xff1f;&#xff08;P1&#xff0c;3&#xff09; 加电的一瞬间&#xff0c;计算…

graphviz安装及使用、决策树生成

一、graphviz下载安装 下载网址&#xff1a;http://www.graphviz.org/download/ 选择合适版本下载 1.1 双击安装 1.2 点击下一步 1.3 点击我接受 1.4 添加至系统路径 勾选添加至当前用户的系统路径&#xff0c;创建桌面图标可选&#xff0c;点击下一步 1.5 选择安装位置 浏…