PointNet++:(1)网络完成的任务分析
-----------物體形狀分類任務(Shape Classfication)-------
一、數據準備
modelnet40_normal_resampled.zip 解壓后下邊有:
(1)有40個子文件是不同的物體類別,每一個類別里邊是超級多的txt文件,一個txt文件代表的是每一個物體類別的一個點云數據。
如下打開的是飛機的其中一個txt文件:
其中每一行代表的是這一個點的位置和法向量信息(每一行中的前三個分別對應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++物體形狀分類訓練:
如果出現顯存溢出的報錯,就要指定一下batch_size,默認batch_size是24,所以給他改小一點,改成16。
訓練完會自動生成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以后的再進行平均以后的結果)。
三、測試
接下來對訓練好的模型進行一下測試。
在log--->classfication--->pointnet2_cls_msg--->eval.txt這個里邊就是測試的結果,
---------物體部件分割的任務(Part Segmentation)--------
一、數據準備
shapenetcore_partanno_segmentation_benchmark_v0_normal.zip解壓后下邊有:(有16個子文件夾,他代表了不同的物體)
(1)有synsetoffset2category.txt,里邊羅列了16種物體,以及后邊是分別對應的他們文件夾的名字。
(2)到每一個文件夾下查看有很多個txt文件,比如02691156文件夾下打開一個txt文件如下圖:
每一個txt文件里邊有很多行數據(2816行,就表示有2816個點的數據),每一行中其中前三個表示xyz的值,接著的中間三個表示法向量的值,最后一個他是飛機部件的編號(0、1、2、3一共有4個部件,也就是說飛機一共被分成了4個部分,)(一共有16個物體,每個物體有若干個部件的分類,一共有50個部件的分類)
二、PointNet++物體部件分割訓練
訓練結果在log目錄下,part_seg下邊pointnet2_part_seg_msg下邊checkpoints下邊我們訓練出的best-model.pth就是我們訓練出的網絡模型。同時在pointnet2_part_seg_msg下邊的logs下邊pointnet2_part_seg_msg.txt就是訓練過程的記錄 .
三、測試
---------場景語義分割(Semantic?Segmentation)任務--------
一、數據準備
下載完數據集后在解壓的時候自己一定要新建立一個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目錄下。
產生這樣的npy數據之后我們才能夠進行網絡模型的訓練。
二、訓練
這樣的任務對于內存和顯存的要求都比較高,pointnet++的作者是有4個顯卡進行訓練的,所以對于我們大家機器的內存和顯存要求都比較高,內存最好在64g,顯卡最好有4張顯卡,這樣每張顯卡在11~12g可以達到40多g的這樣的顯存,但是我們平時都沒有這么高的配置哈哈,下邊是訓練的命令和測試的命令,有條件的話可以嘗試。
由于性能配置要求較高,直接shot了進程,沒有訓練完成。
?
?
總結
以上是生活随笔為你收集整理的PointNet++:(1)网络完成的任务分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pycharm报错合集:在pycharm
- 下一篇: 第一章:点云中的滤波问题---Filte