自定义深度学习分类
该功能采用深度学习算法对点云数据进行分类。此功能采用监督分类,在同一批次数据中,需要手工编辑少量数据的类别,训练模型后批量处理大量数据。支持两种流程:选择训练样本,生成训练模型,处理待分类数据,利用已有的模型处理待分类数据。
采用前后端分离设计(C/S架构),允许局域网内多个用户共用同一服务器下发任务,注意此时需要客户端与服务端互通数据(如文件夹共享)。
使用此功能请确保您已经安装深度学习服务
要求
GPU 要求 | 描述 |
---|---|
GPU 类型 | CUDA 计算能力最小 3.5, 推荐6.1或更高. 查阅更多资料 Compute Capability |
GPU 驱动 | NVIDIA GPU drivers — version 452.39 或更高 |
GPU 内存 | 最小: 6GB 推荐: 8GB 或更高, 取决于深度学习模型结构和批次大小 |
用法
点击 分类 >自定义深度学习分类
使用流程:数据准备-->训练点云分类模型-->使用训练模型分类
注意在首次启用时应设置后端。
如下为任务管理页面,可显示状态/管理训练点云分类模型任务,使用训练模型分类任务.
工具栏从左往右依次为 新建任务,删除任务,启动任务,暂停任务,导出任务,任务信息,导入任务,模型管理,设置,刷新
任务管理页面,可显示状态/管理训练点云分类模型任务,使用训练模型分类任务。注意在首次启动时应当设置连接后端才可使用。
数据准备
在训练之前应当准备好训练需要的数据(已标记数据),可使用LiDAR360提供的剖面编辑功能编辑类别数据。 训练数据应为真实场景数据,允许使用LAS,LAZ,LiData三种格式的数据。根据场景和算法的处理方式不同来调整训练数据数量。原则上参与训练的标注数据越多越好,我们推荐至少准备100m*100m范围的数据使用,以获取良好的使用体验。请注意,数据的标注一定要统一原则,类别的设定尽量不要根据场景变动。错误的标注数据将会带来负面的影响。
训练点云分类模型
点击 分类>深度学习自动分类->训练点云分类模型
用户在按需填写数据路径后,点击default使用默认参数即可开始使用。
- Task Name: 任务名将作为训练好的模型名称。
- Training Data: 将已做好类别标记的数据放在同一文件夹下,会读取文件夹下支持的数据格式所有数据。
- Validation Data:将已做好类别标记的数据放在同一文件夹下,此文件夹下数据将作为范本计算准确率等指标。
数据预处理:
- Advanced Option:可在此处选择数据预处理函数,通常有统计滤波,体素滤波等,一般为避免过密的数据引起意外内存不足问题默认使用体素滤波。
分块函数:
- Split Function: 数据分割,为了避免使用过多的显存,建议用户将数据分割到合适的大小,分割的尺寸选择与数据分布,算法等有关。参数填写指南。
选择类别: 类别映射,其中source class 一或多对应targetclass,这在需要调整算法分类类别和更正类别定义时可以节省很多工作。
模型:
- Model List: 模型暂提供PVCNN,KPConv,MinkUNet三个经典模型(非原版实现,有少量变更),针对这三个算法我们都有提供对应的推荐参数设置,推荐使用左下角Default按钮自动填写后续参数。
训练:
- epochs:迭代周期,每次完整循环处理完所有数据为一个epochs。
- batch size:每批量数据,即每次模型处理几个数据,在内存允许的状态下一般越大越好,在模型精度与训练速度上更有优势.对于具有 8 GB 专用 RAM 的 GPU,请使用默认的批量大小 2,如果您发现训练期间仍有大量 GPU 内存可用,则可以安全地增加批量大小,以一次处理更多块。
- lr: learning rate 学习率,配合优化器控制模型学习的速度与方向(通常学习率越低越稳定也更容易陷入鞍点)。
- optimizer:优化器,同上。
- lr scheduler: 学习率控制器,随周期变化的学习率在某些情况下能获取更好的精度。
- loss:损失函数,在Advanced Option中,默认使用交叉熵CrossEntropyLoss ,FocalLoss一般来说在类别不均衡时有更佳的效果在标签有误的情况下效果可能更差,推荐使用交叉熵。
上述加粗为必填参数,其他可选填。值得注意的是随着版本的更迭,参数可能会出现变动。
使用训练模型分类
点击 分类 >深度学习自动分类 >使用训练模型分类
- Data: 会读取文件夹下支持的数据格式所有数据,并直接修改源数据,在需要时请自行备份数据。
- Model: 选择使用的模型,其中Model的名称将以训练任务名命名,在训练完成后将自动添加进入Model管理。
评估参数:
- batch size:主要控制每次进入模型的数据量,适量增大可加快速度同时会带来更多的内存占用
- weight name:控制选择某项最佳指标(如acc miou等)模型
模型将会在训练任务完全停止时产生(训练任务完成,训练任务暂停,训练任务由内存超出退出)。
上述加粗必填参数,其他可选填。
值得注意的是随着版本的更迭,参数可能会出现变动。
评估点云训练结果
提供三个指标MIoU,Acc,MAcc,主要基于混淆矩阵计算
真实值positive,模型认为是positive的数量(True Positive=TP) 真实值positive,模型认为是negative的数量(False Negative=FN) 真实值negative,模型认为是positive的数量(False Positive=FP) 真实值negative,模型认为是negative的数量(True Negative=TN)
真实类别 | |||
1 | 0 | ||
预测类别 | 1 Positive |
True Positive 真阳 |
False Positive 伪阳 |
0 Negative |
False Negative 伪阴 |
True Negative 真阴 |
这样的四个指标组成的表格成为混淆矩阵
IoU(Intersection over Union) 交并比
即目标与预测的交集/目标与预测的并集
MIoU(Mean Intersection over Union) 平均交并比
Acc(Accuracy)
通常情况下我们只需要关注miou指标,即平均交并比。
设置后端
依次点击如下几个按钮,注意在检测到后端不可连接时,第三步按钮将无法点击。端口号应当与深度学习服务端口号一致。
由于各种不确定因素,存在后台未正常开启的情况,此时表现为功能按钮都成灰色无法启用,请查阅深度学习后端使用手册重启后端服务.
模型管理
模型管理界面可管理可用模型,也可以导入外部模型(仅限LiDAR360客户端产出模型)。
导入任务
可导入外部模型,获取参数/权重。
- 模型文件: 外部模型文件路径(仅支持LiDAR360客户端产出)。 - Use Model Weight:模型权重,勾选时为继续训练,不勾选时仅获取模型训练参数。
深度学习模型对比
以下数据为训练阶段,使用voxel size为0.5的体素下采样,单个数据约20w点,批次为2统计。时间复杂度与空间复杂度主要受数据疏密程度影响,模型多次下采样后的点密度难以控制,只能给到一个大概值提供参考。
硬件配置
CPU:i7-10700k(8t16c)
GPU:RTX3060
算法 | 速度(items/s) | 内存占用(GB) | 空间复杂度 | 时间复杂度 |
---|---|---|---|---|
PVCNN | 1.82 | 8G | 约 O(logN) | 约 O(logN) |
KPConv | 0.04 | 11G | 约 O(logN) | 约O(n^2) |
MinkUNet | 1.05 | 8G | 约O(n) | 约 O(logN) |
通常来说KPConv拥有最高的精度与细节表现,推荐在需要精细分类的小场景下使用此模型。MinkUNet有更大的视野与合适的速度,推荐在大场景下使用。PVCNN拥有不错的细节表现和最快的速度,一般情况下都推荐使用此模型。
特征选择
根据数据特定可以添加RGB与Intensity特征。RGB与Intensity特征可以使模型更早的拟合,在最终精度方面差别不大(视实际数据情况),在内存占用与计算速度上的差异可忽略不计。
特征 | miou |
---|---|
RGB+Intensity | 99.1 |
Intensity | 98.8 |
RGB | 99.0 |
无 | 98.7 |
数据分割
一般建议用户最少选择欲分类个体类别最大尺寸(如欲分类建筑物个体最大为80m*80m,建议分块使用Tile by Range 参数length为90或以上),再根据硬件状况酌情增加。 Tile by Range Point Number 按点数分割,在数据不均匀分布时(如稀疏场景下)可能带来更好的性能。
调试指南
- 内存不够:调小batch_size参数,调小split transform分割大小。
- 类别不均衡:推荐loss更改为Focal Loss。
- loss来回跳动:训练初期时可多等待训练几轮,如果在10-20epoch还不能稳定,可尝试调小lr/10,推荐在lr_scheduler使用Cosine Annealing WarmRestarts。如有需要可前期使用大lr训练,后期使用导入模型训练功能更改为小lr继续训练。
注意事项
- 验证集默认使用训练集的数据增强。
- 用户如未指定输入特征,将根据模型需要输入基础特征。