Kd-Networks学习笔记

Kd-Networks是一款将点云数据用于pytorch深度学习框架以实现模型识别的神经网络。他将点云转换成kdtree,继而可以作为一种结构性数据输入到设计好的神将网络。

论文链接
Github源码链接
kdtree介绍-CSDN

首先是数据集

程序设计者提供了一个点云数据集,包含15990个点云数据,分为16个类型。
16个类型包括:

{'Table': 1, 'Knife': 2, 'Car': 3, 'Chair': 4, 'Motorbike': 0, 'Pistol': 7, 'Laptop': 14, 'Mug': 8, 'Lamp': 9, 'Rocket': 5, 'Cap': 11, 'Guitar': 12, 'Airplane': 10, 'Bag': 13, 'Earphone': 6, 'Skateboard': 15}

每个点云由2048个点组成,可以建立12层的kdtree:
注意,一定注意这里是二阶张量
在这里插入图片描述
每个点云也有自己的标签,是一个tensor数据:
在这里插入图片描述
如果某个点云的点数不到2048,那用0来补全

        if point_set.size(0) < num_points:
            point_set = torch.cat([point_set, point_set[0:num_points - point_set.size(0)]], 0)

建立KDtree

		cutdim, tree = make_cKDTree(point_set.numpy(), depth=levels)

上述方法得到cutdim, tree两个变量。
cutdim可以理解为在kdtree建立过程中每个节点切割空间的维度
tree是三阶张量。可以理解为分为12层的一个树状结构
根节点是tree[-12],为未分层的结构
在这里插入图片描述
叶子节点是tree[-1],是完全分好的结构
在这里插入图片描述
得到建立好的2048个点的kdtree排列还没结束。需要把他转化成tensor变量,在进行转置

points = torch.FloatTensor(tree[-1])
points_v = Variable(torch.unsqueeze(torch.squeeze(points), 0)).transpose(2, 1)

points_v是points的转置,points_v到points的转换如图所示
在这里插入图片描述
cutdim同样也是一个12层的张量,cutdim[-1]是对叶子节点上每一个叶子的维度表示。
将points_v, cutdim_v喂到神经网络中,得到一组估算概率。
在这里插入图片描述
上图中tensor([1])就是预测结果,也就是pred.data.max(1)[1]
然后通过下面语句可以得到预测值和真实值是否相等,correct的值为0(不等)或1(等)

		correct = pred_choice.eq(target.data).cpu().sum()
        corrects.append(correct)
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值