【点云系列】Pyramid Point Cloud Transformer for Large-Scale Place Recognition

1. 简介

ICCV 2021
论文https://openaccess.thecvf.com/content/ICCV2021/papers/Hui_Pyramid_Point_Cloud_Transformer_for_Large-Scale_Place_Recognition_ICCV_2021_paper.pdf
代码https://github.com/fpthink/PPT-Net

之前介绍的TransLoc3D与这篇文章思想类似。

2. 动机

本质上就是使用了金字塔层级架构。然后分别用点Transformer提取特征,VLAD编码特征。

其中学习不同区域之间的关联性: 金字塔 点transformer模块 + 图嵌入

本质上也是得益于金字塔架构的性能提升。

3. 方法

整体框架:

整体网络架构包括二个部分:

  1. 金字塔点Transformer,其本质上就是提取不同分辨率下的特征,构成金字塔
  2. 金字塔VLAD,本质就是把1中不同分辨率的特征分别VLAD,然后拼接起来作为最终的全局描述子;

在第二个部分当中,拼接的部分使用到了门限机制来生成最终的全局描述子。
在这里插入图片描述

图嵌入模块:

作用:为每个点构建几何上的局部领域表达。
输入:每个点及其KNN临近点
输出:每个点的局部嵌入表达

具体操作:

  1. 每个点云,使用FPS采样N个点,为其构成KNN图。
  2. 1的KNN图 输入给 图卷积 来构建每个采样点的局部嵌入。

这里采样没有使用PointNet++里的Query ball的模式,原因:这样可以捕获点云不同密度区域的特征。

图卷积部分包括两部分

  1. 局部特征:使用EdgeConv[50]来描述 每个点的局部邻居 的 局部几何结构。
    在这里插入图片描述
    公式说明
    i i i个点的坐标 p i ∈ R 3 p_i \in\mathbb{R}^3 piR3
    i i i个点的特征 x i ∈ R C x_i\in \mathbb{R}^C xiRC
    j j j反应了第 i i i个点的第 j j j个邻居。
    局部残差捕获:坐标残差: △ p j i = p j − p i \triangle \mathbf{p}_{ji}=\mathbf{p}_j-\mathbf{p}_i

基于Pyramid Vision Transformer (PVT-v2) 实现奥特曼图像识别通常涉及到深度学习库如PyTorch,并结合Vision Transformers框架。这里是一个简化的步骤概述: 1. **安装依赖**: 首先,你需要安装必要的库,包括`torch`, `torchvision`, `transformers`以及用于处理PVT-v2模型的`pvt-torch`库。 ```bash pip install torch torchvision transformers pvt-torch ``` 2. **加载预训练模型**: 从Hugging Face或GitHub上下载预训练的PVT-v2权重,并加载到模型中。例如,你可以使用`PVTv2`模型: ```python from pvt_torch.models import PVTv2 model = PVTv2(pretrained=True) model.eval() ``` 3. **数据预处理**: 对奥特曼图片进行适当的归一化、裁剪和调整尺寸,使其适应模型输入格式。 4. **特征提取**: 使用PVT-v2对图像进行前向传播,得到金字塔特征图。 ```python import torchvision.transforms as transforms transform = transforms.Compose([ transforms.Resize(model.input_size), transforms.CenterCrop(model.input_size), transforms.ToTensor(), transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]), ]) image = Image.open('ultraman.jpg') # 替换为你的奥特曼图片路径 input_tensor = transform(image) batched_input = input_tensor.unsqueeze(0) features = model(batched_input)[1:] # 获取除了CLS token以外的所有特征 ``` 5. **识别**: 将特征图馈送到分类层进行识别。这通常需要额外的头部网络(比如FCN头),以及一个特定于任务的分类器。如果已有预训练的分类器,则可以直接应用于这些特征。 6. **识别结果**: 得到的是每个类别(可能是奥特曼角色)的概率分布,找到概率最高的类别作为预测。 注意:这只是一个基础示例,实际应用中还需要数据集、损失函数、优化器等组件,并可能涉及迁移学习或微调模型。完整的代码会包含训练循环和评估部分,而这里是简化版的推理代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值