PointCNN代碼組織結構分析——以分割爲例

初次用PointCNN的同學,容易看不太懂它的代碼結構。

我們從README.md開始看起。

以分割任務中的Semantic3D數據爲例:

 


 

 cd data_conversions#  

bash download_semantic3d.sh  bash un7z_semantic3d.sh  mkdir ../../data/semantic3d/val  #建了一個驗證集,把四個數據放了進去。  

mv ../../data/semantic3d/train/bildstein_station3_xyz_intensity_rgb.* ../../data/semantic3d/train/domfountain_station2_xyz_intensity_rgb.* ../../data/semantic3d/train/sg27_station4_intensity_rgb.* ../../data/semantic3d/train/untermaederbrunnen_station3_xyz_intensity_rgb.* ../../data/semantic3d/val  

cd split_data  python3 semantic3d_split.py  

cd ..  python3 prepare_multiChannel_seg_data.py -f ../../data/semantic3d/out_part -c 6  

cd ../pointcnn_seg  ./train_val_semantic3d.sh -g 0 -x semantic3d_x8_2048_k16

這是一些列linux上的操作:

首先進入‘data_conversions’文件夾;

然後運行‘download_semantic3d.sh’腳本,用來加載數據集;

接着運行‘un7z_semantic3d.sh’解壓;

接着用‘mkdir’命令在這個文件夾中新建子文件夾,用來存放驗證集;

下一行‘mv’是把這幾個東西移動到剛纔建的文件夾中;

再然後,進入'split_data'文件夾,

運行腳本‘semantic3d_split.py’,對原始數據進行切分,因爲原始數據太大,我們先將它們切成小塊,進行處理。

再然後,返回‘data_conversions’文件夾;

運行腳本,把剛纔切分好的數據,轉換成能夠處理的格式;

進入‘pointcnn_seg’文件夾;

運行腳本train_val_semantic3d.sh,設置了兩個參數,分別是‘-g 0 -x semantic3d_x8_2048_k16’。

然後就開始訓練了。

 

 

到這裏,我們有必要看看train_val_semantic3d.sh做了什麼。裏面有47行代碼,但我們只要關注最後一行就行。

 


 

CUDA_VISIBLE_DEVICES=$gpu python3 ../train_val_seg.py -t ../../data/semantic3d/out_part/train_data_files.txt -v ../../data/semantic3d/out_part/val_data_files.txt -s ../../models/seg -m pointcnn_seg -x $setting > ../../models/seg/pointcnn_seg_$setting.txt 2>&1 &

這行代碼讓系統這麼操作:

使用GPU——用python3來運行代碼——返回上一級文件夾——執行train_val_seg.py代碼,並對其設置了幾個參數。分別是

‘-t’,告訴網絡,訓練數據的ground truth文本是哪個。

‘-v’,驗證數據的ground truth文本。

'-s',保存check points and summary的路徑和文件夾。

'-m',使用哪個模型。

'-x',要使用的設置。

可以說這句話的作用非常強大,把訓練網絡所有需要的東西都告訴代碼了。

 

如果你看過其他分割任務的sh腳本的話,其實和這個sh結構是一模一樣的。而且對於不同分割任務,用於進行訓練的環節(怎麼取模型、取數據、shuffle等操作)統統用一個公共的train_val_seg.py代碼來做了,這樣代碼的可移植性就非常高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章