前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【论文复现】CLIP模型也能处理点云信息

【论文复现】CLIP模型也能处理点云信息

作者头像
Eternity._
发布于 2024-11-24 00:29:04
发布于 2024-11-24 00:29:04
17700
代码可运行
举报
文章被收录于专栏:登神长阶登神长阶
运行总次数:0
代码可运行

概述

CLIP模型擅长于将图像与广泛的文本描述相匹配,并取得了显著成效。鉴于此,研究者们开始探究:那些在二维图像与文本对大规模预训练中表现优异的模型,是否同样能够适用于三维知识领域。PointCLIP模型无需依赖渲染过程,而是创造性地将点云数据转换为多视角的深度图像来进行编码,并进一步整合这些视角下的零样本预测结果,以此实现从二维到三维的知识迁移。这一方法有望成为在资源有限和数据稀缺条件下,利用CLIP模型进行高效三维点云解析的一种极具潜力的替代方案。

本文所涉及的所有资源的获取方式:这里

模型结构

模型总览图

  • PointCLIP模型首先将点云投影到不同视图下,形成M个深度图作为图像信息。之后采用CLIP模型,对图像信息和文本信息进行编码。计算两者的余弦相似度,得到零样本输出结果。
  • 当进行少样本输出时,设计了一个轻量级的视图间适配器来聚合多视图表示并生成自适应特征,通过微调这样的适配器并冻结所有其他的模态,PointCLIP的性能得到了很大的提高。

点云的投影


  • 为了将点云转换为CLIP可访问的表示,从多个视图生成投影图像,以消除3D和2D之间的差距。
  • 以俯视图为例,针对点云中的某个点(x,y,z),它在俯视图下的坐标为([x/z,y/z],z为深度,此时满足近大远小的特点。即z越远,物体越小,和现实生活中的照片一致)

视图间适配器


  • 对整个模型进行微调,巨大的参数和不充分的样本很容易会导致过拟合
  • 视图间适配器时一个三层感知机模型,增加该结构可以在少样本设置下进一步提高模型的性能
  • 采用残差结构将CLIP的2D知识与适配器新学习的3D少样本知识进行融合,进一步的促进了跨模态的知识转移,同时可以更好的进行视图预测。

演示效果


零样本投影


少样本投影


核心逻辑


代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# PointCLIP主体结构
# 目的是为了获得图像和文本之间匹配的概率是多少
def forward(self, pc, label=None): 

        # Project to multi-view depth maps
        images = self.mv_proj(pc).type(self.dtype)

        # Image features
        image_feat = self.visual_encoder(images)
        image_feat = self.adapter(image_feat)
        image_feat = image_feat / image_feat.norm(dim=-1, keepdim=True)   

        # Store for the best ckpt
        if self.store:
            self.feat_store.append(image_feat)
            self.label_store.append(label)

        # Text features
        text_feat = self.textual_encoder()
        text_feat = text_feat / text_feat.norm(dim=-1, keepdim=True)
        
        # Classification logits
        logit_scale = self.logit_scale.exp()
        logits = logit_scale * image_feat @ text_feat.t() * 1.

        return logits

# Adapter的主体结构
    def forward(self, feat):

        img_feat = feat.reshape(-1, self.num_views, self.in_features)
        res_feat = feat.reshape(-1, self.num_views * self.in_features)
        
        # Global feature
        global_feat = self.global_f(img_feat * self.fusion_ratio.reshape(1, -1, 1))
        # View-wise adapted features
        view_feat = self.view_f(global_feat)
        
        # 将全局特征和局部特征进行相加
        img_feat = view_feat * self.adapter_ratio + res_feat * (1 - self.adapter_ratio)

        return img_feat

使用方式


  1. 可视化时:修改需要读入的文件路径,可以查看不同文件下的点云形式
  2. 以零样本方式进行训练 cd scripts bash zeroshot.sh
  3. 以少样本方式训练 cd scripts bash fewshot.sh

部署方式


代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/ZrrSkywalker/PointCLIP.git
cd PointCLIP

conda create -n pointclip python=3.7
conda activate pointclip

pip install -r requirements.txt
pip install open3d
pip install opencv-python
pip install matplotlib

# Install the according versions of torch and torchvision
conda install pytorch torchvision cudatoolkit
wget https://download.pytorch.org/whl/cu116/torch-1.13.0%2Bcu116-cp37-cp37m-linux_x86_64.whl
pip install torch-1.13.0+cu116-cp37-cp37m-linux_x86_64.whl
wget https://download.pytorch.org/whl/cu116/torchvision-0.13.0%2Bcu116-cp37-cp37m-linux_x86_64.whl
pip torchvision-0.13.0+cu116-cp37-cp37m-linux_x86_64.whl


# Install the modified dassl library (no need to re-build if the source code is changed)
cd Dassl3D/
python setup.py develop

cd ..

参考文献

pointclip论文 github地址

编程未来,从这里启航!解锁无限创意,让每一行代码都成为你通往成功的阶梯,帮助更多人欣赏与学习!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验