PointNet++:(1)网络完成的任务分析

-----------物体形状分类任务(Shape Classfication)-------

一、数据准备

modelnet40_normal_resampled.zip 解压后下边有:

(1)有40个子文件是不同的物体类别,每一个类别里边是超级多的txt文件,一个txt文件代表的是每一个物体类别的一个点云数据。

如下打开的是飞机的其中一个txt文件:

PointNet++:(1)网络完成的任务分析_第1张图片其中每一行代表的是这一个点的位置和法向量信息(每一行中的前三个分别对应xyz的坐标值,当然都是经过归一化-1和1之间的值)然后是法向量的信息,也是三个值因为法向量是在这个点垂直与切平面的向量的信息,也是有3个值,所以每一行一共是6个值。

(2)有一个modelnet40_shape_names.txt,这个里边存放的是40个类别的目录的列表的一个文件。

(3)有一个filelist.txt,这个里边一共有12311行,表明所有物体的点云文件一共有12311个。

(4)有一个modelnet40_train.txt这里是用作训练的点云文件的列表,一共有9843个,也就是12311个数据集中有9843用作训练集。

(5)有一个modelnet40_test.txt这里是测试集文件的列表,一共有2468个。

二、PointNet++物体形状分类训练:

PointNet++:(1)网络完成的任务分析_第2张图片

如果出现显存溢出的报错,就要指定一下batch_size,默认batch_size是24,所以给他改小一点,改成16。

PointNet++:(1)网络完成的任务分析_第3张图片训练完会自动生成log文件夹,里面保存了日志文件和网络参数。

训练结束后在log文件夹下存在一个classfication,classfication下边有一个pointnet2_cls_msg,这个pointnet2_cls_msg文件下有checkpoints,如果这个checkpoints下边有一个best_model.pth这是我们训练好的网络模型的权重文件。pointnet2_cls_msg这个文件夹下边有一个logs目录,下面的pointnet2_cla_msg.txt就是我们训练过程的日志,包含一些从什么时候开始训练以及他中间的一些信息,从里边可以看到这个Accuracy是在不断的改善,最终训练好的Best Instance Accuracy可以到0.926613(其中Instance Accuracy是所有物体分类正确以后的统计结果)、Class Accuracy可以到0.915796(Class Accuracy是对每一分类正确的统计,每一个类别我们就是对于40个类别他的Accuracy以后的再进行平均以后的结果)。

三、测试

接下来对训练好的模型进行一下测试。

PointNet++:(1)网络完成的任务分析_第4张图片

PointNet++:(1)网络完成的任务分析_第5张图片

在log--->classfication--->pointnet2_cls_msg--->eval.txt这个里边就是测试的结果,

---------物体部件分割的任务(Part Segmentation)--------

一、数据准备

PointNet++:(1)网络完成的任务分析_第6张图片

shapenetcore_partanno_segmentation_benchmark_v0_normal.zip解压后下边有:(有16个子文件夹,他代表了不同的物体)

(1)有synsetoffset2category.txt,里边罗列了16种物体,以及后边是分别对应的他们文件夹的名字。

PointNet++:(1)网络完成的任务分析_第7张图片

(2)到每一个文件夹下查看有很多个txt文件,比如02691156文件夹下打开一个txt文件如下图:

PointNet++:(1)网络完成的任务分析_第8张图片每一个txt文件里边有很多行数据(2816行,就表示有2816个点的数据),每一行中其中前三个表示xyz的值,接着的中间三个表示法向量的值,最后一个他是飞机部件的编号(0、1、2、3一共有4个部件,也就是说飞机一共被分成了4个部分,)(一共有16个物体,每个物体有若干个部件的分类,一共有50个部件的分类)

二、PointNet++物体部件分割训练

PointNet++:(1)网络完成的任务分析_第9张图片

训练结果在log目录下,part_seg下边pointnet2_part_seg_msg下边checkpoints下边我们训练出的best-model.pth就是我们训练出的网络模型。同时在pointnet2_part_seg_msg下边的logs下边pointnet2_part_seg_msg.txt就是训练过程的记录 .

三、测试

PointNet++:(1)网络完成的任务分析_第10张图片PointNet++:(1)网络完成的任务分析_第11张图片

---------场景语义分割(Semantic Segmentation)任务--------

一、数据准备

PointNet++:(1)网络完成的任务分析_第12张图片PointNet++:(1)网络完成的任务分析_第13张图片

下载完数据集后在解压的时候自己一定要新建立一个s3dis文件夹,否则他在处理的时候会出问题。这个s3dis文件夹下边就会放入我们新解压以后的Stanford3Dataset_v1.2_Aligned_Version这个数据集,这个数据集下边有6个Area,每一个Area下边有不同的场景,比如 conferenceRoom_1下边有一个conferenceRoom_1.txt下边有很多点的数据(前3个是xyz的值即坐标信息,后边3个是RGB的值即颜色信息)这个就是conferenceRoom的一个场景,场景中有办公桌、门、地板等物体,我们要做的事情就是对这个场景中的物体进行分类,我们需要对每一个点它属于哪一个物体进行相应的分类,其实这是一个分割的问题。

解压完数据之后,在训练之前还需要一个步骤,就是进一步的处理。到data_utils目录下执行python collect_indoor3d_data.py 这样处理完的数据他会在data/stanford_indoor3d目录下。

PointNet++:(1)网络完成的任务分析_第14张图片产生这样的npy数据之后我们才能够进行网络模型的训练。

二、训练

这样的任务对于内存和显存的要求都比较高,pointnet++的作者是有4个显卡进行训练的,所以对于我们大家机器的内存和显存要求都比较高,内存最好在64g,显卡最好有4张显卡,这样每张显卡在11~12g可以达到40多g的这样的显存,但是我们平时都没有这么高的配置哈哈,下边是训练的命令和测试的命令,有条件的话可以尝试。

PointNet++:(1)网络完成的任务分析_第15张图片PointNet++:(1)网络完成的任务分析_第16张图片

由于性能配置要求较高,直接shot了进程,没有训练完成。

 

 

你可能感兴趣的:(Deep,learning)