球面数据的几何深度学习--球形 CNN


在这里插入图片描述

一、说明

   球面数据的几何深度学习–球形 CNN。通过对物理世界的平移对称性进行编码,卷积神经网络 (CNN) 彻底改变了计算机视觉。

二、球形 CNN概述

   在这篇博文中,我们研究了如何将CNN成功的基本原理转移到数据表现出复杂几何形状的问题范围,例如球体。

   这篇博文由来自 Kagenova 的 Oliver Cobb 和 Augustine Mavor-Parker 共同撰写。

   球面数据示例。[照片由 NASA 在 Unsplash 上拍摄]
T在过去十年中,CNN从传统(平面)图像和视频中提取语义意义的能力得到了迅速提高。如果有足够的数据,通常可以达到人类水平的性能。然而,对具有空间结构的数据进行分析远未解决问题。对于各种问题,数据表现出空间结构,但非平面结构。示例包括虚拟现实中的 360° 图像、来自宇宙大爆

### PointNet 中的 T-Net 组件及其功能 PointNet 是一种用于处理点云数据深度学习架构,其设计旨在解决无序点集输入的问题。为了增强模型的能力并提高几何变换下的不变性和鲁棒性,PointNet 引入了一个子模块称为 **T-Net (Transformation Net)**。 #### T-Net 的结构 T-Net 是一个小型的神经网络组件,专门用来估计输入点云的空间变换矩阵。它通常被嵌套在 PointNet 架构的不同阶段中,具体分为两种形式: 1. 输入变换(Input Transform),应用于原始点云。 2. 特征变换(Feature Transform),应用于中间特征层。 以下是 T-Net 的主要组成部分和工作流程: 1. **多层感知器 (MLP)** 首先,T-Net 使用一系列 MLP 层来提取局部特征。这些 MLP 层逐步增加维度以捕获更复杂的模式[^1]。 2. **最大池化操作 (Max Pooling)** 接下来,通过对所有点应用最大池化操作,将每一点的特征聚合为全局特征向量。这种操作使得整个网络对点的排列顺序不敏感,从而满足点云数据的无序特性需求。 3. **全连接层 (Fully Connected Layers)** 全局特征随后通过几层全连接层进一步加工,并最终输出一个 $K \times K$ 大小的变换矩阵,其中 $K$ 表示输入点的维数(通常是 3 或更高)。对于输入变换而言,这个矩阵是一个 $3 \times 3$ 的旋转矩阵;而对于特征变换,则可能涉及更高的维度。 #### T-Net 的作用 T-Net 的核心目的是使 PointNet 能够适应不同类型的几何变化,特别是平移、缩放以及旋转等刚体变换。它的引入显著增强了模型的泛化能力,即使面对未见过的姿态或尺度差异较大的样本也能保持良好的性能表现。 - **输入变换**:当 T-Net 应用于初始点坐标时,它可以校正点云的整体姿态偏差,确保后续计算更加稳定可靠。 - **特征变换**:如果部署到隐藏层之后,则有助于调整内部表达空间的方向分布,促进更好的分离度与区分力形成。 下面展示一段 Python 实现代码片段,演示如何构建简单的 T-Net 结构: ```python import tensorflow as tf from tensorflow.keras import layers def t_net(inputs, num_points, k=3): # Input Shape: (batch_size, num_points, k) net = layers.Conv1D(64, kernel_size=1)(inputs) net = layers.BatchNormalization()(net) net = layers.ReLU()(net) net = layers.Conv1D(128, kernel_size=1)(net) net = layers.BatchNormalization()(net) net = layers.ReLU()(net) net = layers.Conv1D(1024, kernel_size=1)(net) net = layers.BatchNormalization()(net) net = layers.ReLU()(net) # Global feature vector via max pooling over points dimension global_feature = layers.MaxPooling1D(pool_size=num_points)(net) # Fully connected layers to produce transformation matrix fc_1 = layers.Dense(512)(global_feature) bn_fc_1 = layers.BatchNormalization()(fc_1) relu_fc_1 = layers.ReLU()(bn_fc_1) fc_2 = layers.Dense(256)(relu_fc_1) bn_fc_2 = layers.BatchNormalization()(fc_2) relu_fc_2 = layers.ReLU()(bn_fc_2) weights_init = tf.zeros_initializer() transform_matrix = layers.Dense(k * k, kernel_initializer=weights_init, bias_constraint=lambda x: tf.abs(x) < 0.001)(relu_fc_2) identity = tf.reshape(tf.eye(k), [1, k*k]) transform_matrix += identity return tf.reshape(transform_matrix, [-1, k, k]) # Example usage with batch size of 32 and number of points being processed set to 1024. input_tensor = tf.random.uniform((32, 1024, 3)) transformed_input = t_net(input_tensor, num_points=1024, k=3) print("Transform Matrix:", transformed_input.shape) ``` 上述代码定义了一个通用版本的 `t_net` 函数,接受任意大小批次的数据作为输入参数,并返回相应的转换矩阵。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无水先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值