ModelNet40格式的理解(PointNet实现第2步)

PointNet实现第2步——数据集ModelNet40格式的理解

本博文主要介绍modelnet40的各种格式区别。

跑PointNet,modelnet40数据集时,有些人直接用.off文件,有些人用的是.ply,有些人用的是.hdf5,这些文件之间有什么跑程序时有什么优劣区别?

对于我而言,因为不是很能理解,所以问了一些大佬,大佬们的回答是:

.off那个是CAD模型,modelnet40_ply_hdf5_2048是基于原来的采样了一下,只有点的坐标,还有一个版本是带法向量的。

对于没有特别需求的来说没有太大区别,大部分人用什么格式完全取决于他下的开源代码的开发者使用的是什么格式。

在此感谢上述大佬的回答,也欢迎其他有不同见解的大佬回复!!! 在这里插入图片描述

ModelNet40数据集来源于http://modelnet.cs.princeton.edu/

官方网站的说明:

this ZIP file contains CAD models from the 40 categories used to train the deep network in our 3D deep learning project. Training and testing split is included in the file. The CAD models are completely cleaned inhouse by ourselves.

ModelNet40数据集包括40个类别,下载完成后可以看到这里:
ModelNet40格式的理解(PointNet实现第2步)_第1张图片
每一个都含有test和train文件。
ModelNet40格式的理解(PointNet实现第2步)_第2张图片
可以看到里面的文件都是.off文件
ModelNet40格式的理解(PointNet实现第2步)_第3张图片

什么是.off文件

介绍

物体文件格式(.off)文件用于表示给定了表面多边形的模型的几何体。这里的多边形可以有任意数量的顶点。

普林斯顿形状Banchmark中的.off文件遵循以下标准。

  • OFF文件全是以OFF关键字开始的ASCII文件。
  • 下一行说明顶点的数量、面片的数量、边的数量。
边的数量可以安全地省略。对模型不会有影响(可以为0)
  • 顶点按每行一个列出x、y、z坐标。
  • 在顶点列表后,面片按照每行一个列表。对于每个面片,顶点的数量是指定的,接下来是顶点的索引列表。

OFF
顶点数 面片数 边数
x y z
x y z

顶点个数N v1 v2 v3 … vn
顶点个数M v1 v2 v3 … vm

具体可参考【这篇博客】

.ply文件

简要定义
PLY - 多边形文件格式也被称为斯坦福三角格式,是用于存储被描述为多边形集合的图形对象的格式。

PLY文件格式是Stanford大学开发的一套三维mesh模型数据格式,图形学领域内很多著名的模型数据,比如Stanford的三维扫描数据库(其中包括很多文章中会见到的Happy Buddha, Dragon, Bunny兔子),Geogia Tech的大型几何模型库,北卡(UNC)的电厂模型等,最初的模型都是基于这个格式的。

PLY多边形文件格式的开发目标是建立一套针对多边形模型的,结构简单但是能够满足大多数图形应用需要的模型格式,而且它允许以ASCII码格式或二进制形式存储文件。PLY的开发者希望,这样一套既简单又灵活的文件格式,能够帮助开发人员避免重复开发文件格式的问题。然而由于各种各样的原因,在工业领域内,新的文件格式仍然在不断的出现,但是在图形学的研究领域中,PLY还是种常用且重要的文件格式。

PLY作为一种多边形模型数据格式,不同于三维引擎中常用的场景图文件格式和脚本文件,每个PLY文件只用于描述一个多边形模型对象(Object),该模型对象可以通过诸如顶点、面等数据进行描述,每一类这样的数据被称作一种元素(Element)。相比于现代的三维引擎中所用到的各种复杂格式,PLY实在是种简单的不能再简单的文件格式,但是如果仔细研究就会发现,就像设计者所说的,这对于绝大多数的图形应用来说已经是足够用了。

格式组成:

头:声明数据格式,规定和点和面片的数据内容
点:点的数据内容(坐标x,y,z 颜色r,g,b等)
线:线的数据内容(组成线的点序号索引,颜色等)
面片:面片的数据内容(组成面的点序号索引,颜色等)

具体可参考【这篇博客】

hdf5文件

说到hdf5,不得不说h5py

h5py是对HDF5文件格式进行读写的python包

  1. h5py介绍
    官方网站【点击此处】
    操作文档【点击此处】
  • h5py软件包是HDF5二进制数据格式的Pythonic接口。
    它使您可以存储大量的数值数据,并轻松地从NumPy中操纵该数据。例如,您可以将磁盘上存储的多TB数据集切片,就像它们是真实的NumPy数组一样。可以将成千上万个数据集存储在单个文件中,并根据需要对其进行分类和标记。
  • H5py使用简单的NumPy和Python隐喻,例如字典和NumPy数组语法。例如,您可以遍历文件中的数据集,或检出数据集的.shape或.dtype属性。您无需了解HDF5的任何特殊知识即可开始使用。
  • 除了易于使用的高级界面之外,h5py还基于HDF5 C API的面向对象的Cython包装。在HDF5中几乎可以用C进行的任何操作,都可以从h5py中进行。

最重要的是,您创建的文件采用了广泛使用的标准二进制格式,您可以与其他人(包括使用IDL和MATLAB之类的程序的人)进行交换。

  1. hdf5
    书籍网址【官方】
    ModelNet40格式的理解(PointNet实现第2步)_第4张图片

简介[官网]

是一种存储相同类型数值的大数组的机制,适用于可被层次性组织且数据集需要被元数据标记的数据模型

ModelNet40格式的理解(PointNet实现第2步)_第5张图片
相关介绍【点击此处】

  • hdf5 files: 能够存储两类数据对象 dataset 和 group 的容器,其操作类似 python 标准的文件操作;File 实例对象本身就是一个组,以 / 为名,是遍历文件的入口

ModelNet40格式的理解(PointNet实现第2步)_第6张图片
一个HDF5文件就是一个由两种基本数据对象(groups and datasets)存放多种科学数据的容器

HDF5 dataset: 数据元素的一个多维数组以及支持元数据(metadata),可类比为Numpy 数组,每个数据集都有一个名字(name)、形状(shape) 和类型(dtype),支持切片操作

HDF5 group: 包含0个或多个HDF5对象以及支持元数据(metadata)的一个群组结构,可以类比为字典,它是一种像文件夹一样的容器;group 中可以存放 dataset 或者其他的 group,键就是组成员的名称,值就是组成员对象本身(组或者数据集)

总之,dataset是类似于数组的数据集,而group是类似文件夹一样的容器,存放dataset和其他group;group和dataset在h5py中的使用有点类似于词典和Numpy中数组的用法。

其他可见【这篇博客】


最后的最后,上面的数据格式是其中一部分,在第三部分,我会介绍点云数据,这里可以先看一下PointNet作者(祁芮中台大佬)对3D检测数据的介绍 ,里面包含对3D场景物体检测数据的介绍,可以先大致了解一下3D检测数据有哪些形式。
3D检测的介绍-祁芮中台

你可能感兴趣的:(#,点云处理,算法,3D检测,点云)