【MMAsia 2021】Patch-Based Deep Autoencoder for Point Cloud Geometry Compression

news2024/11/24 12:47:50

文章目录

  • Patch-Based Deep Autoencoder for Point Cloud Geometry Compression
    • 压缩流程
    • 自编码架构
    • 实验结果

Patch-Based Deep Autoencoder for Point Cloud Geometry Compression

https://arxiv.org/abs/2110.09109

这篇论文使用深度自编码器,提出了一种基于分块(patch)的有损点云几何压缩模型。与现有的点云压缩网络(在整个原始点云上应用特征提取和重建)不同,该模型通过采样和KNN操作将输入点云划分为多个小块并独立地压缩处理。最终的完整点云由解压缩后的各个小块组合得到。此外,作者使用分块的局部重建损失训练整个模型,以逼近最优的全局重建性能。使用分块来训练模型有两个优点:

  • 首先,由于分块已经是点云的局部区域,因此网络模型不需要使用多个集合抽象层堆栈来捕获局部细节,从而降低了训练模型的复杂性。
  • 其次,将点云划分成块增强了训练数据,这可以避免过拟合问题,提高模型预测精度。

在点云压缩任务中,该模型可以保证重建的点云与输入点云的点数相同,有很好的率失真性能(尤其是在低比特率下)。此外,还可以通过调整重建点云的点数将该模型应用于其他点云重建任务,例如点云上采样。

压缩流程


首先原始点云被分为两部分:独立的分块和作为分块的辅助信息的采样点坐标。该过程描述如下:

  • 对于 N N N个点的原始点云,使用FPS采集 S S S个点 { p 1 , p 2 , . . . , p S } \{p_1,p_2,...,p_S\} {p1,p2,...,pS},作为各个分块的辅助信息。

  • 对于每个采样点,使用KNN得到 K K K个最近邻点 { p i 1 , p i 2 , . . . , p i K } \{p_i^1,p_i^2,...,p_i^K\} {pi1,pi2,...,piK}。然后计算每个最近邻点相对于采样点的坐标,即 { p i 1 − p i , p i 2 − p i , . . . , p i K − p i } \{p_i^1-p_i,p_i^2-p_i,...,p_i^K-p_i\} {pi1pi,pi2pi,...,piKpi},作为网络模型的输入。

即使使所有分块的总点数等于输入点云的总点数,也不足以覆盖整个点云。因此,作者令 S × K = α N ( α > 1 ) S×K=αN(α>1) S×K=αNα>1来避免某些点无法被捕获。

在编码过程中,每个分块被传递给自编码器的编码器,然后生成一组潜在表示。使用量化器对这些表示进行量化,然后将其与采样点的坐标信息相结合,以形成整个点云的最终潜在表示。

最后,最终的潜在表示被熵编码成比特流并传输到解码器。

解码过程与编码过程基本相反。在获得点云的表示之后,作者从中分离出各个分块的潜在表示,并将这些表示分别传递给自编码器的解码器得到各个重建分块。

然后,作者将解码器输出与辅助坐标信息(采样点坐标 𝑝 𝑖 𝑝_𝑖 pi)相加,以形成最终的重建结果。每个独立预测结果的合并是最终的点云重建结果。为了获得与输入点云相同的分辨率,作者设置络预测点云分块的点数 k = N / S k=N/S k=N/S

自编码架构

自编码器基于PointNet实现分块的变换和压缩。它包括分析变换(analysis transform) f a f_a fa、量化函数(quantization function) Q Q Q和合成变换(synthesis transform) f s f_s fs

  • 分析变换 f a f_a fa: 分析变换用于提取分块的特征表示。在分析转换中,作者首先使用PointNet++的集合抽象(SA)层中的分组层和PointNet层来提取每个点的小尺度局部特征( D D D维),然后使用PointNet提取更高级别的全局特征( d d d维)。

  • 量化函数 Q Q Q: 量化函数用于量化隐特征表示以进一步压缩。在训练过程中作者向 ( 1 , d ) (1,d) (1d)维隐藏特征添加[-0.5, 0.5]的均匀噪声近似量化,这可以使量化过程可微,因此允许在随机梯度下降优化期间进行反向传播。在测试中,作者对隐藏层特征使用舍入运算,以实现后续的熵编码。

  • 合成变换 f s f_s fs: 合成变换用于将量化特征重建为输入形状。使用几个全连接层将量化特征变换到 k × 3 k×3 k×3维,然后重塑为 ( k , 3 ) (k,3) (k,3)得到一个分块的重建结果。

重建结果和输入之间的误差(失真)用Chamfer distance计算:

在这里插入图片描述

其中 P P P为训练过程一个batch的总分块数。 x x x表示原始点云的分块 S i S_i Si的一个点。 y y y表示预测分块 S i ′ S'_i Si的一个点。

最终损失函数设置为 L = D C D + λ R L=D_{CD}+λR L=DCD+λR,其中 R R R是由隐藏层特征的概率分布估计的比特率。比特率估计表达式如下所示:

其中 z ~ i \tilde{z}_i z~i是在为分块 S i S_i Si添加均匀噪声之后的表示。 q ( z ~ i ∣ S i ) q(\tilde{z}_i|S_i) q(z~iSi)表示 z ~ i \tilde{z}_i z~i的实际边缘分布。 p z ~ i ( z ~ i ) p_{\tilde{z}_i}(\tilde{z}_i) pz~i(z~i) z ~ i \tilde{z}_i z~i的熵模型,使用[https://arxiv.org/abs/1802.01436]中的UNIVARIATE NON-PARAMETRIC DENSITY MODEL估计。需要解释的是, λ λ λ对压缩率的影响并不显著,作者主要依靠改变瓶颈层中 d d d的大小来调整压缩率。

自编码器的具体网络参数为:

其中:

  • 集合抽象层:SA(分块中的点数,每个分组中的点数,共享参数的MLP层每个层的大小)

  • PointNet:PN(共享参数的MLP层每个层的大小)

  • 全连接层:FC(输入特征大小,输出特征大小)

实验结果

Visualization of Training Process

Compression Performance Comparison

Influence of Patch Count on Compression Performance

Application to Point Cloud Upsampling

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

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

相关文章

发票识别OCR及查验API接口为企业化解难题

对于当今的现代企业来说,分散的财务管理模式效率不高,管理成本反而相对较高,制约了集团企业发展战略的实施,因而需要建设财务共享模式。一个企业要建成财务共享中心,面临的难题是大量的数据采集和信息处理工作&#xf…

一组类型相同的数据【C 数组】总结

作者 : 会敲代码的Steve 墓志铭:博学笃志 切问静思 前言:本文旨在复习C语言数组章节的知识点、分为以下几个部分: 什么是数组一维数组、一维数组的初始化、一维数组的遍历、冒泡排序。二维数组、二维数组的创建和初始化、二维数…

多功能采集仪VH03接口使用说明

传感器接口 传感器接口须使用设备专门配备的测线,一端为 DB9 一端为用颜色区分的多个鳄鱼夹,线(鳄鱼夹)颜色和功能定义详见“设备组成和接口定义” 。 充电和通讯接口 VH03 使用标准的 USB Type-C 接口完成设备充电和通讯&…

创建一个vue项目

文章目录前言一、安装node.js二、vue ui命令没有反应原因1.vue ui命令是vue 3.x版本以上才支持,因此需要更新vue的版本。2.更新vue版本2.1首先使用以下命令卸载旧版本2.2然后使用下面命令安装最新版本2.3查看是当前版本号2.4此时,输入 vue -h 命令查看co…

HMS Core 3D流体仿真技术,打造移动端PC级流体动效

移动设备硬件的高速发展,让游戏行业发生翻天覆地的变化,许多酷炫的游戏效果不再局限于电脑端,玩家在移动端就能享受到场景更逼真、画质更清晰、体验更流畅的游戏服务。但由于移动设备算力不足,为了实现真实感的水体效果&#xff0…

cesium地形上面绘点时,山背面点位始终显示在地形上

cesium地形上面绘点时,山背面点位始终显示在地形上,如下图: 深度检测也是打开的,各种方法试完之后,也没有找到问题,把viewer属性注释之后,就没有出现这个问题,于是一个个属性&#…

【LeetCode】C语言实现---用队列实现栈用栈实现队列

目录👉用队列实现栈👉用栈实现队列👉用队列实现栈 入口:OJ 题目描述: 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 em…

redis的消息发布订阅实现

文章目录前言一、创建好springboot项目,引入核心依赖二、使用步骤1. 自定义一个消息接受类2.声名一个消息配置类3.编写一个测试类总结前言 一般项目中都会使用redis作为缓存使用,加速用户体验,实现分布式锁等等,redis可以说为项目中的优化,关键技术实现立下了汗马功劳.今天带来…

YonBuilder应用构建教程之移动端基础配置

在YonBuilder中除了PC端应用的构建外,我们还可以构建配套的移动端页面。对于同一个数据实体可以实现PC端和移动端的数据同步修改,使数据录入、修改、审批等更加便捷。本篇文章通过对员工信息实体的移动端页面构建来对YonBuilder移动端配置的基础流程进行…

利用ENVI对遥感图像校正

1.几何校正 引起图像几何变形一般分为两大类:系统性和非系统性。系统性一般由传感器本身引起,有规律可循和可预测性,可以用传感器模型来校正,卫星地面接收站已经完成这项工作;非系统性几何变形是不规律的,它可以是传感器平台本身…

【Axure高保真原型】移动端钱包原型模板

今天和大家分享移动端钱包的原型模板,里面包含了11大模块,各个模块都是高保真高交互的原型模板,大家可以在演示地址里体验哦 【原型预览及下载地址】 https://axhub.im/ax9/4c3757a85d201a4c/#c1 这个原型还可以在手机上演示哦&#xff0c…

Bitmiracle Docotic.Pdf Library 8.8.14015 Crack

C# 和 VB.NET 的 PDF 库 Docotic.Pdf 是用于 .NET 的高性能 C# PDF 库。您可以使用它在 .NET Core、ASP.NET、Windows Forms、WPF、Xamarin、Blazor、Unity 和 HoloLense 应用程序中创建、阅读和编辑 PDF 文档。 该库支持 .NET 6、.NET 5、.NET Standard/.NET Core 和 .NET 4.…

Opencv(C++)笔记--模板匹配cv::matchTemplate()和最值计算cv::minMaxLoc()

目录 1--模板匹配 1-1--OpenCV API 1-2--六种匹配方法 1-3--代码实例 2--最值计算 2-1--OpenCV API 1--模板匹配 使用模板图像与原图像进行匹配,OpenCV提供了相应的模板匹配函数cv::matchTemplate(),并支持六种模板匹配方法。 1-1--OpenCV API vo…

【Linux】Linux项目自动化构建工具——make/Makefile

我举报,有人不学习!!! 文章目录一、makefile原理二、初步理解makefile的语法1.gcc如何得知,源文件不需要再编译了呢?2.为什么执行的指令是make和make clean呢?三、makefile的推导规则四、Linux…

2023年1月数据治理认证DAMA-CDGA/CDGP(线上)招生简章

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…

C语言刷题系列——17.计算平均成绩 18.找出总分最高的学生19.通讯录排序

结构 - PTA练习题🐤计算平均成绩🏀 题目要求🏀 题解💻step1.定义结构体💻step2.输入N;随后N行 每行给出一位学生的信息💻step3.求平均值💻step4.输出平均线以下的学生的信息&#x1…

数据可视化最简单的方式-饼状图,折线图,条形图

一个软件或者网站分为前端,后端。 后端传统意义就是处理后端的数据。 后端又分为数据库编程人员和后端业务逻辑人员。 前端顾名思义解决后端传递的数据。传递的数据如何显示是前端人员考虑的问题。 前端人员不光要设计好网页界面,而且要将数据的可视…

嵌入式:ARM协处理器指令总结

文章目录(一)协处理器的数据操作二进制编码汇编格式(二)协处理器的数据存取二进制编码汇编格式(三)协处理器的寄存器传送二进制编码汇编格式未使用的指令空间ARM支持16个协处理器,用于各种协处理…

java Redis基础 数据类型 常用命令 java中使用Redis

Redis是一个基于内存的key-value结构数据库。 Redis入门 Redis简介 Redis应用场景: Redis 下载与安装 Windows版下载地址:https://github.com/microsoftarchive/redis/releases Linux版下载地址: https://download.redis.io/releases/ Red…

Java 中的main方法原理介绍。

//深入了解main方法 // 解释main方法的形式为什么是这样写的? // public static void main(String[] args) // 问题1:是谁调用main方法? // java虚拟机调用main方法,所以main的访问权限是public // 问题2:为什么是st…