Pointnet++改进:在特征提取模块加入NAMAttention注意力机制,有效涨点

简介:
1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!
2.本篇文章对Pointnet++特征提取模块进行改进,加入
NAMAttention注意力机制,提升性能。
3.专栏持续更新,紧随最新的研究内容。

目录

1.理论介绍

2.修改步骤

2.1 步骤一

         2.2 步骤二

         2.3 步骤三


1.理论介绍

NAMAAttention注意力机制简介:

注意力机制是近年来研究的热点之一(Wang et al。[2017],Hu等人[2018],Park等人[2018]、Woo等人[2018]和Gao等人[199])。它有助于深度神经网络抑制不太显著的像素或通道。许多先前的研究都侧重于通过注意操作捕捉显著特征(Zhang等人[2020],Misra等人[2021年])。这些方法成功地利用了来自不同维度特征的相互信息。然而,它们缺乏对权重的贡献因素的考虑,这能够进一步抑制不重要的通道或像素。受Liu等人的启发。【2017】,我们旨在利用权重的贡献因素来改善注意力机制。我们使用批量归一化的比例因子,该比例因子使用标准偏差来表示权重的重要性。这可以避免添加SE、BAM和CBAM中使用的完全连接层和卷积层。

因此,我们提出了一种有效的注意力机制——基于归一化的注意力模块(NAM)

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是 PointNet++ 加注意力机制改进的代码示例: ```python import tensorflow as tf def get_attention_weight(x, y, dim): """ 获取注意力权重 :param x: 输入特征向量 :param y: 相关特征向量 :param dim: 特征向量维度 :return: 注意力权重 """ w = tf.Variable(tf.random_normal([dim, 1], stddev=0.1), name='attention_w') b = tf.Variable(tf.zeros([1]), name='attention_b') z = tf.matmul(tf.concat([x, y], axis=1), w) + b a = tf.nn.softmax(z) return a def get_attention_feature(x, y, dim): """ 获取注意力特征向量 :param x: 输入特征向量 :param y: 相关特征向量 :param dim: 特征向量维度 :return: 注意力特征向量 """ a = get_attention_weight(x, y, dim) f = tf.concat([x, y], axis=1) * a return f def pointnet_plus_plus_attention(x, k, mlp, is_training): """ PointNet++ 加注意力机制改进 :param x: 输入点云数据,shape为(batch_size, num_points, num_dims) :param k: k-NN 算法中的 k 值 :param mlp: 全连接网络结构 :param is_training: 是否为训练 :return: 输出结果,shape为(batch_size, num_points, mlp[-1]) """ num_points = x.get_shape()[1].value num_dims = x.get_shape()[-1].value with tf.variable_scope('pointnet_plus_plus_attention', reuse=tf.AUTO_REUSE): # 首先进行 k-NN 建模,找到每个点的 k 个最近邻点 # 根据每个点与其 k 个最近邻点的距离,计算点之间的权重 dists, idxs = knn(k, x) # 将点特征和最近邻点特征进行拼接 grouped_points = group(x, idxs) grouped_points = tf.concat([x, grouped_points], axis=-1) # 对拼接后的特征进行全连接网络处理 for i, num_output_channels in enumerate(mlp): grouped_points = tf_util.conv1d(grouped_points, num_output_channels, 1, 'mlp_%d' % i, is_training=is_training) # 对每个点和其最近邻点进行注意力权重计算 attention_points = [] for i in range(num_points): center_point = tf.expand_dims(tf.expand_dims(x[:, i, :], axis=1), axis=1) neighbor_points = tf.gather_nd(grouped_points, idxs[:, i, :], batch_dims=1) attention_feature = get_attention_feature(center_point, neighbor_points, num_dims * 2) attention_points.append(tf.reduce_sum(attention_feature, axis=1, keep_dims=True)) # 将注意力特征向量拼接起来,作为输出结果 output = tf.concat(attention_points, axis=1) return output ``` 在这个代码中,我们使用了 `get_attention_weight` 函数来获取注意力权重,并使用 `get_attention_feature` 函数来获取注意力特征向量。在 PointNet++ 加注意力机制改进中,我们对每个点和其 k 个最近邻点计算了注意力权重,然后用注意力权重加权求和得到了注意力特征向量,最后将所有注意力特征向量拼接起来作为输出结果。 请注意,这只是一个简单的示例,实际上,PointNet++ 加注意力机制改进的实现要比这个复杂得多。如果您需要更复杂的实现,建议参考相关论文或其他开源实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AICurator

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

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

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

打赏作者

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

抵扣说明:

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

余额充值