利用randlanet训练示例semantic3D数据并将预测结果可视化

1.深度学习环境配置

安装ubuntu 18;安装显卡驱动、cuda、cuDNN;安装anaconda;安装tensorflow-gpu包;下载randlanet

2.训练semantic3D数据并预测

2.1下载数据

进入RandLA-Net-master目录并进入其中utils子目录,运行sh download_semantic3d.sh,注意数据默认下载目录是/data/semantic3d/original_data。

2.2训练数据

运行sudo /home/dky/anaconda3/envs/randlanet7/bin/python main_Semantic3D.py --mode train --gpu 0
其中,/home/dky/anaconda3/envs/randlanet7/bin/python是conda虚拟环境randlanet7的python路径,可以激活ranlanet7后运行which python得到该python路径。

运行命令时会遇到多个错误,其中一个错误是无法找到nearest_neighbors模块。因为randlanet代码包中给出的是关于nearest_neighbors的c++代码,需要手动将其编译成python代码。运行randlanet代码包主目录下的compile_op.sh文件即可,将代码转化成.so文件供python调用。

2.3预测数据

运行sudo /home/dky/anaconda3/envs/randlanet7/bin/python main_Semantic3D.py --mode test --gpu 0。将main_Semantic3D的运行方式改为test模式。

3.可视化

在randlanet主目录下新建plt_Semantic3D.py,并在其中写入代码。可视化代码参考了zzl_1998的劳动成果。运行plt_Semantic3D.py文件。注意更改下数据路径。

from helper_tool import Plot
from os.path import join, exists
from helper_ply import read_ply
import numpy as np
import os
 
 
if __name__ == '__main__':
    path = '/../../data'
    label_folder = './test/Log_2020-04-09_03-32-36/predictions/'
 
    label_to_names = {0: 'unlabeled',
                           1: 'man-made terrain',
                           2: 'natural terrain',
                           3: 'high vegetation',
                           4: 'low vegetation',
                           5: 'buildings',
                           6: 'hard scape',
                           7: 'scanning artefacts',
                           8: 'cars'}
 
 
    original_folder = join(path, 'semantic3d')
    full_pc_folder = join(path, 'original_ply')
 
    test_files_names = []
    cloud_names = [file_name[:-4] for file_name in os.listdir(original_folder) if file_name[-4:] == '.txt']
    for pc_name in cloud_names:
        if not exists(join(original_folder, pc_name + '.labels')):
            test_files_names.append(pc_name + '.ply')
    test_files_names = np.sort(test_files_names)
    # Ascii files dict for testing
    ascii_files = {
        'MarketplaceFeldkirch_Station4_rgb_intensity-reduced.ply': 'marketsquarefeldkirch4-reduced.labels',
        'sg27_station10_rgb_intensity-reduced.ply': 'sg27_10-reduced.labels',
        'sg28_Station2_rgb_intensity-reduced.ply': 'sg28_2-reduced.labels',
        'StGallenCathedral_station6_rgb_intensity-reduced.ply': 'stgallencathedral6-reduced.labels',
        'birdfountain_station1_xyz_intensity_rgb.ply': 'birdfountain1.labels',
        'castleblatten_station1_intensity_rgb.ply': 'castleblatten1.labels',
        'castleblatten_station5_xyz_intensity_rgb.ply': 'castleblatten5.labels',
        'marketplacefeldkirch_station1_intensity_rgb.ply': 'marketsquarefeldkirch1.labels',
        'marketplacefeldkirch_station4_intensity_rgb.ply': 'marketsquarefeldkirch4.labels',
        'marketplacefeldkirch_station7_intensity_rgb.ply': 'marketsquarefeldkirch7.labels',
        'sg27_station10_intensity_rgb.ply': 'sg27_10.labels',
        'sg27_station3_intensity_rgb.ply': 'sg27_3.labels',
        'sg27_station6_intensity_rgb.ply': 'sg27_6.labels',
        'sg27_station8_intensity_rgb.ply': 'sg27_8.labels',
        'sg28_station2_intensity_rgb.ply': 'sg28_2.labels',
        'sg28_station5_xyz_intensity_rgb.ply': 'sg28_5.labels',
        'stgallencathedral_station1_intensity_rgb.ply': 'stgallencathedral1.labels',
        'stgallencathedral_station3_intensity_rgb.ply': 'stgallencathedral3.labels',
        'stgallencathedral_station6_intensity_rgb.ply': 'stgallencathedral6.labels'}
    
    plot_colors = Plot.random_colors(11, seed=2)
    for file in test_files_names:
        print(file)
        test_files = join(full_pc_folder, file)
        label_files = join(label_folder, ascii_files[file])
        data = read_ply(test_files)
        # 绘制原图
        pc_xyzrgb = np.vstack((data['x'], data['y'], data['z'], data['red'], data['green'], data['blue'])).T
        Plot.draw_pc(pc_xyzrgb)
        # 绘制预测结果图
        pc_xyz = np.vstack((data['x'], data['y'], data['z'])).T
        pc_sem_ins = np.loadtxt(label_files)
        pc_sem_ins = pc_sem_ins.astype(int)
        Plot.draw_pc_sem_ins(pc_xyz, pc_sem_ins,plot_colors)

open3d展示模型截图如下:
在这里插入图片描述
在这里插入图片描述

4.参考文章

1.【点云】RandLA-Net Semantic3D SemanticKITTI 预测结果可视化
2.【点云训练】RandLA-Net Semantic3D

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值