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代码来做了,这样代码的可移植性就非常高。

你可能感兴趣的:(point,cloud,deep,learning)