PointCLIP: Point Cloud Understanding by CLIP
Abstract
近年来,基于对比视觉语言预训练(CLIP)的零镜头和少镜头学习在二维视觉识别中表现出了令人鼓舞的效果,该方法在开放词汇设置下学习图像与相应文本的匹配。然而,通过大规模二维图像-文本对预训练的CLIP是否可以推广到三维识别,还有待探讨。在本文中,我们通过提出PointCLIP来确定这种设置是可行的,PointCLIP在CLIPencoded的点云和3D类别文本之间进行对齐。具体而言,我们通过将点云投影到多视图深度图上对其进行编码,并以端到端的方式聚合逐视图的零射击预测,从而实现了从2D到3D的有效知识传递。为了更好地提取全局特征,并将3D少镜头知识自适应地融合到2D预训练的CLIP中,我们进一步设计了一个访谈视图适配器。只需在少量镜头设置下微调适配器,PointCLIP的性能就可以得到很大提高。此外,我们还观察了PointCLIP与经典3d监督网络之间的知识互补特性。通过在推理过程中简单的集成,PointCLIP有助于在最先进的3D网络上实现有利的性能增强。因此,PointCLIP是一种很有前途的替代方案,可以在低数据条件下以边际资源成本有效地理解3D点云。我们在ModelNet10、ModelNet40和ScanObjectNN上进行了深入的实验,以证明PointCLIP的有效性
Introduction
在深度学习领域,尽管2D和3D视觉任务已经取得了显著进展,如图像分类、目标检测和语义分割等,但3D点云数据的处理仍然面临空间稀疏性和不规则分布的挑战。特别是,模型在训练时未曾遇到过的对象类别,现有的分类器往往难以有效识别。针对这一问题,对比视觉语言预训练(CLIP)模型在2D视觉识别中的成功应用,提出了一个具有挑战性的想法:将CLIP模型扩展到3D领域,实现对3D点云数据的理解和分类。CLIP通过大规模图像-文本对的预训练,学习了图像与文本之间的关联,从而在零样本设置下展现出对未见类别的识别能力。然而,将这种能力迁移到3D点云上并非易事,需要解决从2D图像到3D点云的跨模态知识转移问题。为了应对这一挑战,作者提出了PointCLIP方法,它通过将点云数据投影到多个视图的深度图上,并利用CLIP的预训练视觉编码器提取特征,实现了对3D点云的零样本分类。PointCLIP的优势在于,即使在没有3D训练数据的情况下,也能利用2D图像-文本对的预训练知识来理解和分类3D点云数据,这对于在数据稀缺的情况下进行3D点云理解具有重要意义。
论文的研究目标是在低数据条件下实现有效的3D点云理解,并以边际资源成本实现这一目标。作者们计划在ModelNet10、ModelNet40和ScanObjectNN等数据集上进行实验,以验证PointCLIP方法的有效性,并提出未来的工作将探索CLIP在更广泛的3D应用中的泛化能力。
Related work
主要是介绍一些相关的概念。
Zere-shot learning in 3D
零样本学习在3D领域的目标是识别在训练中未出现过的对象。尽管这一概念在2D分类中已广受关注,但在3D领域的应用研究相对较少。早期的工作通过将3D数据集分为“见过”和“未见”的样本,并使用前者训练PointNet来识别后者。随后的研究通过改进3D特征质量和引入三元损失来提高归纳学习的性能,允许使用未标记的数据。与这些方法不同,PointCLIP不依赖于3D样本的训练,而是通过2D数据进行预训练,实现对3D未见样本的直接零样本识别,这一设置在跨2D到3D领域的知识转移方面更具挑战性,并且对于解决实际问题具有紧迫性。
Transfer Learning
迁移学习是一种利用数据丰富的领域知识来辅助数据较少领域学习的技术。在视觉领域,ImageNet预训练对目标检测和语义分割等任务有显著帮助。在自然语言处理领域,通过网页爬取的语料库预训练的模型在机器翻译和自然语言推理任务上取得了优异的性能。
CLIP作为一种新引入的模型,在没有经过微调的情况下,对未见数据集展现出了卓越的图像理解能力。进一步的工作表明,通过引入特定领域的监督,CLIP的性能可以得到显著提升。然而,大多数现有方法都在相同模态内进行知识转移,如图像到图像或语言到语言。与这些方法不同,PointCLIP能够实现从2D图像到3D点云的跨模态知识转移,这为未来在不同模态之间进行迁移学习的研究提供了新的方向和动机。
Deep neural network for point cloud
点云深度神经网络主要分为基于点的方法和基于投影的方法。基于点的方法如PointNet和PointNet++,通过多层感知器对点进行编码,并使用最大池化操作保证排列不变性,近期的研究还引入了更先进的架构设计和几何提取器以提高点云解析能力。而基于投影的方法则将点云转换为体积或多视图数据形式,多视图方法通过将点云投影到多个视图的图像上,并利用在ImageNet上预训练的2D CNN进行处理。然而,这些方法通常需要离线生成或后期渲染,成本较高且不适用于实时应用。与此相反,本文提出的SimpleView方法直接将原始点投影到图像平面上,通过点的垂直距离设置像素值,这种方法具有较低的时间和计算成本,适合高效的端到端零样本识别任务。
Method
首先是一个概述在第3.1节中,首先回顾对比视觉语言预训练(CLIP)用于2D零射击分类。然后在3.2节中,介绍PointCLIP,将2D预训练的知识转移到3D点云中。在3.3节中,提供一个访谈视图适配器,以获得更好的少镜头性能。在第3.4节中,建议将PointCLIP与经过充分训练的经典3D网络集成,以进行多知识互补。
A Revisit of CLIP
PointCLIP的管道。为了弥合模态差距,PointCLIP将点云投影到多视图深度图上,并通过在2D中预训练的CLIP进行3D识别。该开关提供了直接零弹分类和少弹分类的替代方案,分别以实线和虚线表示,从这个图中可以看到分成了视觉编码和文本编码两种方式。
CLIP是一个预训练模型,它通过两个独立的编码器分别对图像和文本特征进行编码,以便将图像与其自然语言描述相匹配。在训练过程中,CLIP从互联网上收集了4亿个图像-文本对,通过对比损失在嵌入空间中对齐图像和文本的特征,实现了对开放词汇表中任何语义概念的零样本分类能力。对于未见数据集,CLIP使用预定义模板构建文本输入,并利用类别文本的C维特征获得零样本分类器。CLIP的视觉编码器将测试图像编码为特征向量,然后通过这些特征和文本编码器的权重计算分类logits,并通过softmax函数得到K个类别的预测概率。整个过程无需额外的训练图像,依赖预训练编码器实现优秀的零样本分类性能。
Point Cloud Understanding by CLIP
这一部分提出了PointCLIP,是一个基于预训练的CLIP模型的方法,用于点云数据的零样本学习。
由于3D数据集通常比2D数据集小且类别有限,这使得难以获得适合迁移学习的预训练3D网络。为了解决这个问题,PointCLIP通过从多个视图生成点投影图像,将无序的3D点云数据转换为CLIP能够处理的格式,从而弥合了2D和3D之间的模态差距。这些投影图像保留了点云的原始属性,并且通过简单的深度图投影,以最小的时间和计算成本实现了高效的端到端零样本识别。
PointCLIP利用CLIP的预训练2D知识,通过视觉编码器提取多视图特征,并通过文本编码器构建零样本分类器,通过加权求和的方式聚合来自不同视角的分类结果,实现了对点云的整体理解,而无需任何3D训练数据。
Inter-view Adapter for PointCLIP
Inter-view适配器的详细结构。给定点云的多视图特征,适配器提取其全局表示并生成面向视图的自适应特征。通过残差连接,将新学习的3D知识融合到预训练的CLIP中
PointCLIP虽然在点云上实现了高效的零样本分类,但其性能仍不及完全训练的3D神经网络。为了解决这一问题,作者提出了一种视图间适配器,是一个附加在PointCLIP之上的三层多层感知器(MLP),用于在少样本设置下提升性能。
在训练过程中,CLIP的视觉和文本编码器被冻结,只有适配器通过交叉熵损失进行微调。适配器通过连接多视图的特征并经过两层线性变换获取全局表示,然后基于全局特征生成适应性特征,并通过残差连接将其添加回原始CLIP编码的特征。
这种方法不仅增强了对点云的整体理解,而且将新学习到的3D少样本知识融合到2D预训练的CLIP中,进一步提升了跨模态性能。通过仅使用少量样本微调适配器,PointCLIP在ModelNet40数据集上实现了显著的性能提升,从而证明了特征适应在3D少样本数据上的重要性和有效性。
Multi-knowledge Ensemble
PointCLIP与传统的点云网络不同,它不是从零开始在3D数据集上训练,而是继承了2D视觉-语言学习的预训练知识。
研究者探究了将传统点云网络和PointCLIP的知识结合起来的可能性,以提高推理性能。实验中,PointNet++和PointCLIP的集成,通过简单的相加方式,提升了分类性能,证明了不同来源知识互补的有效性。这种集成方法不仅在PointNet++上有效,与其他最先进的3D网络集成时也能观察到类似的性能提升。
因此,PointCLIP可以作为一个即插即用的增强模块,用于提升点云识别的鲁棒性。这表明,通过结合不同领域的知识,可以显著提高模型的性能,尤其是在数据稀缺的情况下。
Experiment
Zero-shot Classification
在这个实验中,PointCLIP配备了视图间适配器,并在1到16次shot的设置下,在ModelNet10、ModelNet40和ScanObjectNN数据集上进行了实验。实验中,选择了ResNet-101作为CLIP的预训练视觉编码器,以加强特征提取,并增加了投影视图的数量至10个,特别是增加了左侧视图。实验结果表明,PointCLIP在少样本分类任务中优于其他四种代表性的3D网络,包括PointNet、PointNet++、SimpleView和CurveNet。消融实验进一步分析了不同投影视图对性能的影响,并发现在16次shot设置下,10个视图比6个视图表现更好。
此外,不同的视觉编码器和提示设计对性能也有显著影响,其中ResNet-101编码器和“点云的大[CLASS]”提示设计表现最佳。
最后,通过与其他完全训练的3D网络集成,PointCLIP进一步提升了性能,证明了其作为即插即用增强模块的潜力,能够实现更稳健的点云识别。
Few-shot Classification
这一部分描述了PointCLIP在少样本学习环境下的实验设置、性能表现和消融研究。实验在ModelNet10、ModelNet40和ScanObjectNN数据集上进行,采用了视图间适配器,并在1到16次shot的设置下进行。为了提高效率和性能,使用了ResNet-101作为预训练的视觉编码器,并增加了投影视图的数量至10个。
实验结果显示,PointCLIP在少样本分类任务中优于其他几种3D网络。消融研究表明,增加投影视图的数量可以提高性能,尤其是左侧视图对性能的提升最为显著。此外,不同的视觉编码器和提示设计对性能有显著影响,其中ResNet-101编码器和特定提示设计表现最佳。最后,通过与其他3D网络集成,PointCLIP进一步提升了性能,证明了其作为多知识集成模块的潜力。
Multi-knowledge Ensemble
这部分主要展示了PointCLIP与其他几种3D网络模型集成后性能提升的数据。表中列出了六种不同的3D网络模型(PointNet、PointNet++、RSCNN、DGCNN、SimpleView、CurveNet)在有无PointCLIP集成时的准确率对比,以及性能提升的具体数值和增益比率。这些数据显示了PointCLIP作为一个多知识集成模块,能够显著提升现有3D网络的性能,尤其是在只有少量样本(16-shot)的情况下,PointCLIP在ModelNet40数据集上达到了87.20%的准确率。这表明PointCLIP能够有效地与其他模型集成,通过补充2D视觉语言预训练的知识来增强3D点云的识别能力。
Conclusion
本文提出了PointCLIP,它可以在没有任何3D训练的情况下对点云进行跨模态零射击识别。通过多视图投影,PointCLIP有效地将CLIP预训练的2D知识转移到3D领域。
此外,设计了一个跨视图适配器来聚合多视图特征,并在少量镜头设置下将3D学习的知识融合到预训练的CLIP中。通过微调适配器并冻结所有其他模块,PointCLIP的性能得到了很大提高。此外,PointCLIP还可以作为一个即插即用模块,为传统的3D网络提供补充知识,从而提高性能。除了识别之外,未来的工作将集中在将CLIP推广到更广泛的3D应用上。
相关文章:

PointCLIP: Point Cloud Understanding by CLIP
Abstract 近年来,基于对比视觉语言预训练(CLIP)的零镜头和少镜头学习在二维视觉识别中表现出了令人鼓舞的效果,该方法在开放词汇设置下学习图像与相应文本的匹配。然而,通过大规模二维图像-文本对预训练的CLIP是否可以推广到三维识别&#x…...

搜索(剪枝)
定义: 剪枝,就是减少搜索树的规模、尽早排除搜索树中不必要分支的一种手段。 在深度优先搜索中,有以下几类常见的剪枝方法: 优化搜索顺序排除等效冗余可行性剪枝最优性剪枝记忆化剪枝 例题1:AcWing 167.木棒 题目:…...

python基础知识点
最近系统温习了一遍python基础语法,把自己不熟知的知识点罗列一遍,便于查阅~~ python教程 Python 基础教程 | 菜鸟教程 1、python标识符 以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 f…...
Android SurfaceFlinger——GraphicBuffer获取内存信息(三十一)
上一篇文章介绍了 GraphicBuffer 初始化的 initWithSize() 函数中的申请内存流程,这里我们看一下另一个比较重要的函数,GraphicBufferMapper. getTransportSize 获取内存信息。该函数通常在需要了解缓冲区的实际内存占用情况时调用,例如在调试内存使用情况或优化性能时。 一…...

基于 SASL/SCRAM 让 Kafka 实现动态授权认证
一、说明 在大数据处理和分析中 Apache Kafka 已经成为了一个核心组件。然而在生产环境中部署 Kafka 时,安全性是一个必须要考虑的重要因素。SASL(简单认证与安全层)和 SCRAM(基于密码的认证机制的盐化挑战响应认证机制ÿ…...

通用多级缓件组件
背景 业界第三方缓存框架一般为redis,本地缓地ehcache或guava,一般通过spring提供的restTemplate操作缓存 然而这样会存在以下问题: 与缓存中间件强耦合需手动整合多级缓存不支持注解数据更新时无法自动刷新缓存存在缓存穿透、缓存击穿、缓…...

MindIE Service服务化集成部署通义千问Qwen模型
一、昇腾开发者平台申请镜像 登录Ascend官网昇腾社区-官网丨昇腾万里 让智能无所不及 二、登录并下载mindie镜像 #登录docker login -u XXX#密码XXX#下载镜像docker pull XXX 三、下载Qwen的镜像 使用wget命令下载Qwen1.5-0.5B-Chat镜像,放在/mnt/Qwen/Qwen1.5-…...
chrome 接口请求等待时间(installed 已停止)过长问题定位
参考: 解决实际项目中stalled时间过久的问题 背景: 测试反馈系统开 6 个标签页后, 反应变的很慢 定位: 看接口请求瀑布流, 已停止时间很长, 后端返回速度很快, 确定是前端的问题 推测是并发请求窗口数量的问题, 屏蔽部分一直 pending 的接口, 发现速度正常了, 搜到上面的参…...

HDialog特殊动画效果
基于HDialog的特殊动画效果实现 业务场景 在开发过程中直接使用HDialog所展现的效果很快,同时不能够与用户所点击位置进行交互,会造成用户的体验观感不够好。因此需要实现一种能够从用户点击按钮位置以可变动画效果所展现的Dialog效果。 工作原理及实…...

基因组挖掘指导天然药物分子的发现-文献精读34
基因组挖掘指导天然药物分子的发现 摘要 天然产物是临床药物的主要来源,也是新药研发过程中先导化合物结构设计和优化的灵感源泉。但传统策略天然药源分子的发现却遭遇了瓶颈,新颖天然产物的数量逐渐无法满足现代药物开发的需求和应对全球多药耐药的威胁…...

hcip学习 DHCP中继
DHCP 中继 在可能收到 DHCP Discover 报文的接口配置 DHCP 中继, 指明 DHCP 服务器的地址,然后将 DHCP 发现报文以单播的形式送到 DHCP 服务器上 DHCP 中继报文的源地址和目标地址怎么确定 1、源地址:收到 Discover 报文的接口地址 2、目…...
[Mysql-函数、索引]
目录 函数: 日期函数 字符串函数 数学函数 聚合函数 索引: 索引分类 慢查询 创建索引 函数: MySQL函数,是一种控制流程函数,属于数据库用语言。 MySQL常见的函数有: 数学函数 用作常规的数学运…...
org.eclipse.jgit 简单总结
org.eclipse.jgit 是一个用于处理 Git 版本控制系统的纯 Java 库。它允许你读取和写入 Git 仓库,执行如克隆、拉取、推送、提交等操作。下面我将通过几个例子来展示如何使用 org.eclipse.jgit 进行一些常见的 Git 操作。 1. 克隆仓库 克隆一个远程 Git 仓库到本地目…...

Fork软件笔记:一键拉取仓库所有模块
Fork是一个好用的git工具,只是没有中文而已(不过不用翻译也能看使用)。 工具下载地址:https://fork.dev/ 界面展示: 当项目中仓库模块比较多时,可以看到每个模块都是一个分页,每一个都要手动切换…...

常见的锂电保护芯片 单节锂电保护/双节锂电保护芯片
目前外出贸易的要求不断增多,出口的产品基本上都需要带上锂电保护芯片 以下是常见的单节锂电保护芯片的选型 包括了市面上大部分的可用型号。 锂电保护芯片的脚位上面基本都是通用,可以直接替代 双节的锂电保护使用情况较少,需要外置MOS管调节…...
初识Java(六)
一、String类 1、类中有操作字符串的方法 查找:找到某个字符是字符串内的第几个:charAt;找到某个字符在字符串内第一次出现的下标:index 替换:替换所有:replaceAll;替换首个:repla…...

Spring-原理篇-DispatcherServlet 初始化 怎么和IOC进行了打通?
委托模式的体现,在初始化醒目的时候Spring MVC为我们提供了一个DispatcherServlet,映射了所有的路径,所有的请求都会先到达这里然后被转发到具体的Controller 进行处理,此文来探索一下,DispatcherServlet 初始化的时候…...
关于swift- OC混编使用Pod遇到的2个错误
错误1 Cannot find interface declaration for UITableViewCell, superclass of "DEFUITalbleViewCell" Cannot find interface declaration for UIView, superclass of "DefUIView" Cannot find interface declaration for 系统类, superclass of "自…...

Golang | Leetcode Golang题解之第290题单词规律
题目: 题解: func wordPattern(pattern string, s string) bool {word2ch : map[string]byte{}ch2word : map[byte]string{}words : strings.Split(s, " ")if len(pattern) ! len(words) {return false}for i, word : range words {ch : patt…...

【Django5】模型定义与使用
系列文章目录 第一章 Django使用的基础知识 第二章 setting.py文件的配置 第三章 路由的定义与使用 第四章 视图的定义与使用 第五章 二进制文件下载响应 第六章 Http请求&HttpRequest请求类 第七章 会话管理(Cookies&Session) 第八章 文件上传…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果。 方法一:使用 XML 的 <foreach> 标签ÿ…...

Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...