pointnet++代码逐行解析(五)——— modelnetdataloader

本文详细解析了PointNet++中的PointNet2_pytorch代码实现,包括数据预处理、最远点采样等关键步骤,并介绍了如何加载ModelNet40数据集。

继续巩固PointNet++代码的实现这篇博客,把代码逐行注释一遍!
pointnet++的所有代码和数据集都在github上,Pytorch代码:https://github.com/yanx27/Pointnet2_pytorch
data_utils中的modelnetdataloader部分的python代码注释如下:

#E/86133/csdn pointnet/pointnet2_pytorch
# -*- coding: utf-8 -*-

# 导入第三方库
import numpy as np
import warnings
import os
from torch.utils.data import Dataset
warnings.filterwarnings('ignore')


# 将数据归一化
def pc_normalize(pc):
    # 计算pc簇的中心点,新的中心点每一个特征的值,是该簇所有数据在该特征的平均值
    centroid = np.mean(pc, axis=0)
    # 3D数据簇减去中心得到到中心的绝对距离
    pc = pc - centroid
    # 取到最大距离
    m = np.max(np.sqrt(np.sum(pc**2, axis=1)))
    # 将数据归一化
    pc = pc / m
    return pc


# 最远点采样
def farthest_point_sample(point, npoint):
    """
    Input:
        xyz: pointcloud data, [N, D]
        npoint: number of samples
    Return:
        centroids: sampled pointcloud index, [npoint, D]
    """

    N, D = point.shape
    xyz = point[:, :3]

    # 先随机初始化一个centroids矩阵,
    # 后面用于存储npoint个采样点的索引位置
    centroids = np.zeros((npoint,))

    # 利用distance矩阵记录某个样本中所有点到某一个点的距离
    distance = np.ones((N,)) * 1e10  # 初值给个比较大的值,后面会迭代更新

    # 利用farthest表示当前最远的点,也是随机初始化,范围为0~N
    farthest = np.random.randint(0, N)

    # 直到采样点达到npoint,否则进行如下迭代
    
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值