初次用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 -c6cd ../pointcnn_seg ./train_val_semantic3d.sh -g-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.txt2>&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代码来做了,这样代码的可移植性就非常高。
领取专属 10元无门槛券
私享最新 技术干货