首页 > 编程知识 正文

pointrend在什么上发表的,pointnet代码运行

时间:2023-05-03 12:02:22 阅读:31382 作者:2678

写在前面

本文主要分析和解读PointNet (以前有解读论文)的代码,有助于更好地理解其思想。 可见PointNet的结构并不复杂,比CNN更简单。 了解PointNet的关键是了解一维卷积在网络中的作用,本文对这一部分进行了详细的描述。 另外,PointNet的最大缺点是不考虑周围的局部信息,所有的卷积操作都针对单一点进行。 这在PointNet上受到关注,在后面的文章中对其进行解读。

1 .下载代码

这部分很简单。 在github上,作者发布了TensorFlow的版本。 这里使用的是Pytorch的版本。 链接如下。 点对点跟踪代码。

按照页面上的说明本地下载代码和数据集。

2 .数据集

让我们先看看数据集是什么样的。 这里使用的是包含16种样本的ShapeNet。 中有多个文件夹,每个文件夹包含相同类型的示例。 与各文件夹对应的类别如下。

打开第一个Airplane文件夹时,它包含许多. pts格式的文件。 这就是不同飞机型号的点云形式,里面有坐标点。 坐标是规范化的。

然后,用下载文件中的可视代码,稍微修改一下,看看数据有多长。 下图是飞机和包。

对于分类问题,训练时直接读取积分数据和类别。 在数据加载器中,以各样本的坐标为中心,随机强调。 另外,值得注意的是,在输入网络训练之前,对样本进行了特定数量的随机重采样。 严格来说,网络并不是对样本点数没有要求,因为目的是确保输入到网络中的样本点数全部相同。

3 .模式和实现

a .关于一维卷积conv1d

在PointNet中,卷积操作都是conv1d,与卷积神经网络中使用的conv2d略有不同,这里首先介绍conv1d的操作原理,以便更好地理解数据在PointNet中是如何变化的

首先,假设实验中所有样品重采样2500点,则每个样品的大小为2500*3。 为了进行卷积操作,输入网络进行是翻转的,同时为了便于理解,假设batch size=1,最终输入网络的样本大小为1*3*2500,其中1个为batch size

第一个卷积操作为con v1=torch.nn.con v1 d (3,64,1 ),输入信道=3,输出信道=64,卷积核大小为1,并且卷积核的第二个维度为in _ chhh

进一步了解,在第一个卷积层中,使用conv1卷积x时,实际上必须使用64个3*1卷积核进行卷积,输出大小为1*64*2500。 其中一个是batch size。

之后,还进行多层折叠。 可以看到,采样的坐标从最初的三维(xyz )经过多次卷积变为1024维。

这里,稍微联想到的是,在卷积神经网络中,图像矩阵本身包含位置信息,并且由于每个卷积考虑周围像素的值,所以针对每个卷积提取的特征通常对像素值和周围周围像素的信息进行聚合以获得更高维特征。 例如,一般将图像的第一层卷积,提取边缘、纹理等特征。 但是,在这里的卷积中,您会发现只是卷积某一点的坐标,完全没有(很难)考虑到其他点的信息。 因此,很难感性地理解将一个三维坐标折叠后会得到什么样的特征。 我专门看了文本分类下的一维卷积,这里又有点不同,很有趣。 具体分析就放在最后的延长上。

b .网络详细信息

一旦理解了一维卷积,互联网就变得简单了。 针对分类问题,如果将batch size标记为n,则示例在网络中的变化为n *3* 25003354 n * 64 * 25003354 n * 128 * 25003354 n * 1024 * 2500—— n * 1024

除了整体之外,还有两个分支网络制作了transform(t-net )。 第一个叔网在输入数据后不久,结构与上面的过程基本一致。 该分支对样本进行一系列卷积和FC后,输出为3*3矩阵,首先将样本与其矩阵相乘,论文对样本进行旋转对齐。 第二个T-Net是在第一次卷积之后添加的,即n*64*2500,其获得64*64的变换矩阵,对n*64*2500的样本进行变换。

实验表明,对于使用的16种ShapeNet数据集,分类时T-Net效果不大,是否有T-Net对网络的最终结果几乎没有影响。 具体请参阅结果部分。

4 .结果

基于叔网的分类

B .未使用叔

et分类

5. 延伸

在NLP的文本分类中,用的也是一维卷积,但和PointNet中卷积核大小总是1不同,文本分类网络中卷积核大小很多时候是大于1的。如下图例子所示,样本大小是7*5,每个词向量大小是5,对应点云中点的坐标维度是3。7代表有7个词,对应点云样本有2500个点。上面提到,在PointNet中所有卷积核的大小都是1, 也就是每层卷积都是对单个点样本进行处理,并没有考虑别的点。但在下面的例子的一维卷积中,卷积核可以不同。比如可以是2,3,4等。

下图深红色的就是一个尺寸为4的卷积核,结果是一个4*1的输出。在这个卷积过程中,每一个输出值都是同时考虑了4个词向量的值,所以会提取到词之间的关系特征。但类似的做法并不能在PointNet中实现。原因也很简单,在文本分类中,每个词向量的关系是可以确定了,相邻的词向量本身代表了一种现实中的前后关系,但对于点云样本,在存储时位置相邻的点并不意味这在实际的空间中是相邻的,这一点是很难保证的。

但不可否认的是,在卷积过程中无法考虑周围点的信息会严重减低网络的能力,尽管在我们的例子中分类精度很高,但那只是因为样本比较简单而已,一旦加入了背景噪声,难度就很大了,这个问题应该是点云网络一个比较大的挑战了。

值得注意的是,在PointNet++中,已经关注了到了局部信息的问题,并尝试去解决,在下一篇中,会进行解读。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。