PointNet、PointNet++代码解析

2023-11-10

如何利用CloudCompare软件进行点云数据标注

https://blog.csdn.net/weixin_44603934/article/details/123591370

PointNet++训练自己的数据集(附源码)

http://www.xbhp.cn/news/39384.html

制作PointNet以及PointNet++点云训练样本

https://blog.csdn.net/CC047964/article/details/124345423

分类任务

主模块文件 train_classification.py

源代码

训练参数配置

def parse_args():
    '''PARAMETERS'''
    parser = argparse.ArgumentParser('training')
    parser.add_argument('--use_cpu', action='store_true', default=False, help='use cpu mode')
    parser.add_argument('--gpu', type=str, default='0', help='specify gpu device')
    parser.add_argument('--batch_size', type=int, default=24, help='batch size in training')
    parser.add_argument('--model', default='pointnet_cls', help='model name [default: pointnet_cls]')
    parser.add_argument('--num_category', default=40, type=int, choices=[10, 40],  help='training on ModelNet10/40')
    parser.add_argument('--epoch', default=200, type=int, help='number of epoch in training')
    parser.add_argument('--learning_rate', default=0.001, type=float, help='learning rate in training')
    parser.add_argument('--num_point', type=int, default=1024, help='Point Number')
    parser.add_argument('--optimizer', type=str, default='Adam', help='optimizer for training')
    parser.add_argument('--log_dir', type=str, default=None, help='experiment root')
    parser.add_argument('--decay_rate', type=float, default=1e-4, help='decay rate')
    parser.add_argument('--use_normals', action='store_true', default=False, help='use normals')
    parser.add_argument('--process_data', action='store_true', default=False, help='save data offline')
    parser.add_argument('--use_uniform_sample', action='store_true', default=False, help='use uniform sampiling')
    return parser.parse_args()
if __name__ == '__main__':
    args = parse_args()
    main(args)

执行train_classification.py时传入参数,不传入则使用parse_args()中的默认值,例如:

python train_classification.py --model pointnet2_cls_ssg --log_dir pointnet2_cls_ssg

入口函数main

一些初始操作:创建目录、log、加载训练数据到tensor

在这里插入图片描述

加载数据集

将自己的数据集用函数ModelNetDataLoader加载成合适的tensor形式,再用torch.utils.data.DataLoader将该tensor格式化为torch可使用的形式。
在这里插入图片描述
其中ModelNetDataLoader函数要根据具体的数据集来确定实现逻辑:数据集 ~> tensor

最远点采样FPS代码解析

注意:一般深度学习框架中都会使用批操作,来加速收敛。
因此采样函数的输入输出应当也要包含批。

def farthest_point_sample(xyz, npoint):
    """
    Input:
        xyz: pointcloud data, [B, N, C]
        npoint: number of samples
    Return:
        centroids: sampled pointcloud data, [B, npoint, C]
    """
    device = xyz.device
    B, N, C = xyz.shape
    S = npoint
    centroids = torch.zeros(B, S, dtype=torch.long).to(device)
    distance = torch.ones(B, N).to(device) * 1e10
    farthest = torch.randint(0, N, (B,), dtype=torch.long).to(device)
    batch_indices = torch.arange(B, dtype=torch.long).to(device)
    for i in range(S):
        centroids[:, i] = farthest
        centroid = xyz[batch_indices, farthest, :].view(B, 1, 3)
        dist = torch.sum((xyz - centroid) ** 2, -1)
        mask = dist < distance
        distance[mask] = dist[mask]
        farthest = torch.max(distance, -1)[1]
    return centroids 

知识储备

pytorch、python知识点

  • nn.BatchNorm1d:批数据的归一化,详细说明可参考这里

最远点采样 ( Farthest Point Sampling )

本质:一句话概括就是不断迭代地选择距离已有采样点集合的最远点。
最远点采样(Farthest Point Sampling)是一种常用的采样算法,特别是在激光雷达3D点云数据中。这篇文章介绍最远点采样方法在一维、二维、三维点集中的使用。附有numpy写的代码和实例。

FPS算法原理步骤:

  1. 输入点云有N个点,从点云中选取一个点P0作为起始点,得到采样点集合S={P0}。
  2. 计算所有点到P0的距离,构成N维数组L,从中选择最大值对应的点作为P1,更新采样点集合S={P0,P1}。
  3. 计算所有点到P1的距离,对于每一个点Pi,其距离P1的距离如果小于L[i],则更新L[i] = d(Pi, P1),因此,数组L中存储的 一直是每一个点到采样点集合S的最近距离。
  4. 选取L中最大值对应的点作为P2,更新采样点集合S={P0,P1,P2}。
  5. 重复2-4步,一直采样到N’个目标采样点为止。

原理和实现代码(python)

ModelNet40数据集介绍

ModelNet40数据集是用于分类的点云数据集,包含了40个类别,训练集有9843个点云数据,验证集有2468个点云数据,数据集目录结构如下:
在这里插入图片描述
更多介绍请点击

代码实现(基于pytorch)

源码地址

环境配置

(1)Windows系统
python 3.8 cuda 11.1 pytorch 1.8.0 torchvision 0.9.0
(2)ubuntu系统
python 3.7 cuda 11.1 pytorch 1.8.0 torchvision 0.9.0

代码解析

可参考

目录结构

在这里插入图片描述
models:网络模型,如分割模型,分类模型,pointNet模型,pointNet++模型等
log??
data_utils??
visualizer:可视化

README

对于版本迭代的说明。

略…

工具链的安装

The latest codes are tested on Ubuntu 16.04, CUDA10.1, PyTorch 1.6 and Python 3.7:

conda install pytorch==1.6.0 cudatoolkit=10.1 -c pytorch
分类任务运行指南
下载数据集
  • Data Preparation
    Download alignment ModelNet here and save in data/modelnet40_normal_resampled/.
运行代码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PointNet、PointNet++代码解析 的相关文章

  • 数学之路-python计算实战(16)-机器视觉-滤波去噪(邻域平均法滤波)

    coding utf 8 code myhaspl 64 myhaspl com 邻域平均法滤波 半径为2 import cv2 import numpy as np fn 61 34 test3 jpg 34 myimg 61 cv2 i
  • 机器视觉(Robot Vision)——1

    参考书籍 Robot Vision MIT机器视觉课程指定教材 机器视觉探究两个基本问题 xff1a 成像过程的基本原理是什么 xff1f 如何探索对成像过程 求逆 的基本知识和方法 所谓 求逆 xff1a 具体来说 xff0c 就是从一张
  • 图像处理入门5-特征提取

    特征提取 图像特征提取属于图像分析的范畴 是对图像信息的深层理解 是数字图像处理的高级阶段 同时也是图像识别的开始 特征工程是图像处理的必备工具 所以掌握它的重要性不言而喻 什么是特征 特征是某一类对象区别于其他类对象的相应 本质 特点或特
  • 车牌识别中的不分割字符的端到端(End-to-End)识别

    传统的车牌识别过程是往往是这样的 车牌定位 gt 车牌判断 gt 车牌字符的分割 gt 车牌字符的识别 这种方法有个好处就是 仅仅需要较少的字符样本即可用于分类器的训练 在光照 相机条件好的情况下也能取得较好的效果 现在大多数商业车牌识别软
  • 国外机器视觉解决方案供应商Top 10

    由制造行业的杂志 Manufacturing Tech Insights 2016年评选的机器视觉解决方案供应商Top 10名单如下 Cognex 提供强大的机器视觉软件解决方案 高效的设备防错与故障检测监测供应商 Datalogic 为了
  • 缺陷检测公开数据集大全

    一 弱监督学习下的工业光学检测 DAGM 2007 数据下载链接 https hci iwr uni heidelberg de node 3616 数据集简介 主要针对纹理背景上的杂项缺陷 较弱监督的训练数据 包含十个数据集 前六个为训练
  • 开始使用OpenCV

    开始使用OpenCV 1 编译OpenCV 1 1 使用命令行的方式配置OpenCV OpenCV官网教程 OpenCV官网教程使用命令行的方式进行配置 写的很详细 按照教程操作 一般都能成功 由于国内访问GitHub不稳定 所以推荐使用w
  • Ciclop开源3D扫描仪软件---Horus源码分析之src\horus\engine\calibration\moving_calibration.py

    联系方式 QQ 2468851091 call 18163325140 Email 2468851091 qq com coding utf 8 This file
  • 利用华硕e6308_P8P67_PRO主板开发双目立体视觉问题小结

    利用华硕e6308 P8P67 PRO主板开发双目立体视觉问题小结 实验室有台组装计算机 主板是华硕e6308 P8P67 PRO 实验室要求我利用该计算机开发双目立体视觉系统 咋看上去 这块主板很猛 motherboard的图解如下 可以
  • Opencv 视频帧的读写处理指导

    Opencv 视频帧的读写指导 思路指导 1 先打开视频文件 2 遍历视频帧 3 处理视频帧 4 保存所有的视频帧 1 打开视频 1 当读取的是保存的视频时 打开视频的方法为 cv VideoCapture capture 视频名 将视频放
  • opencv中的split函数

    split函数的功能是通道分离 原型 void split const Mat src Mat mvBegin void split InputArray m OutputArrayOfArrays mv 用法很显然 第一个参数为要进行分离
  • PointNet、PointNet++代码解析

    如何利用CloudCompare软件进行点云数据标注 https blog csdn net weixin 44603934 article details 123591370 PointNet 训练自己的数据集 附源码 http www
  • ICP算法(Iterative Closest Point迭代最近点算法)

    最近在做点云匹配 需要用c 实现ICP算法 下面是简单理解 期待高手指正 ICP算法能够使不同的坐标下的点云数据合并到同一个坐标系统中 首先是找到一个可用的变换 配准操作实际是要找到从坐标系1到坐标系2的一个刚性变换 ICP算法本质上是基于
  • 基于OpenCV3.0图像处理中常见的五个滤波函数

    初学OpenCV的开发者很容易被OpenCV中各种滤波方法所困扰 不知道到底该用哪里一个来做滤波 表面原因看起来是因为OpenCV中各种滤波方式实在是太多太杂 其背后原因是对各种滤波方法的应用场景认知出现了问题 所以这里小编从应用场景与项目
  • 【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)

    基于3DOF机械臂的五子棋机器人 文章目录 基于3DOF机械臂的五子棋机器人 1 前言 2 机器视觉系统概述 2 1 机器 2 2 视觉 2 3 系统 3 系统组成概述 3 1 使用工具盘点 3 2 流程图 4 制作步骤建议 5 需要的知识
  • 【机器视觉学习笔记】大津法/Otsu最大类间方差法 最佳阈值处理(C++)

    目录 概念 C 源码 OtsuThreshold 主函数 效果 完整源码 平台 Windows 10 20H2 Visual Studio 2015 OpenCV 4 5 3 本文所用源码修改自C opencv 图片二值化最佳阈值确定 大津
  • 【python】将自定义常用的一些函数封装成可以直接调用的模块方法

    将常用一些的函数封装成可以直接调用的模块方法 1 背景 2 具体步骤 3 扩展 1 背景 在实际的操作过程中 经常会用到一个功能 如果每次编写代码的时候都进行重新编写或者打开已经编写好的函数进行复制粘贴 这样就显得很麻烦 有没有什么方法可以
  • Ciclop开源3D扫描仪软件---Horus源码分析之src\horus\engine\calibration\autocheck.py

    c 光明工作室 2017 2037 COPYRIGHT 光明工作室团队成员大部分来自全国著名985 211工程院校 具有丰富的工程实践经验 本工作室热忱欢迎大家的光临 工作室长期承接嵌入式开发 PCB设计 算法仿真等软硬件设计 1 基于C8
  • 机器视觉基础

    机器视觉基础 什么是机器视觉 机器视觉常见的应用 机器视觉常用的概念 硬件选型 控制器 相机 镜头 附件选型 什么是机器视觉 机器视觉常见的应用 机器视觉常用的概念 快门时间越短 图片越暗淡 光圈小了 照片会暗淡 硬件选型的时候考虑物距 W
  • open3D点云分割

    将底面和物体分割开 import time import open3d as o3d import numpy as np mesh box o3d geometry TriangleMesh create box width 0 4 he

随机推荐