1. GPU平台部署
对于嵌入式 GPU 端,由于其支持 CUDA 与 TensorRT 加速计算库,可以通过 CUDA与 TensorRT 对模型进行大幅度的优化。CUDA 的加速主要使用到了上文提到的一些内存对齐排列、并行计算、矩阵乘法优化方法等策略对网络推理进行加速。而 TensorRT的加速原理是将现有的模型算法以及输入输出编译为 CUDA GPU 可以直接运行的机器码。这样在实际的网络推理过程中,GPU 便不需要像常用的深度学习框架那样加载模型,初始化后等待输出。大大的提升了在 GPU 端的运行速度并且优化了 GPU 的资源占用。
嵌入式 GPU 端部署流程图如上图所示。完整的嵌入式 GPU 平台应用部署的具体流程如下: (1)经过Pytorch训练过程可得到 Pytorch 训练输出的 Pth 格式模型文件,对该模型文件进行格式转换变为 ONNX 格式,之后可方便再转换为其他框架支持的模型格式。 (2)利用 ONNX 自带的优化工具可将模型转换后的一些冗余结构进行删除,再使用 TensorRT 的转换工具将训练的语义分割模型从 ONNX 格式序列化后编译为 TensorRT 推理时用到的引擎文件。
(3)模型转换完毕后,模型还需要数据的前处理与后处理才可正常完成语义分割任务,因此需将数据前处理算法与后处理算法结合模型文件的读取与推理部分代码打包后编译成动态库实现部署。其中前处理算法主要包括输入图像的尺寸调节、利用数据集均值与方差对输入图像数据进行标准化与归一化。同时 TensorRT 推理时要求输入数据必须是内存连续的,因此数据处理时还需要保证三个通道数据内存连续。模型推理后的数据后处理算法则主要是利用通道维度的最大值索引获得像素分类结果并转换为彩色图完成可视化。
2. 实验结果分析
在实际室内场景部署后分割效果如下图 所示。整体来看分割效果是比较不错的,实际场景中的类别有墙面、地面、白板、投影幕布、桌子、椅子、电脑等,各类物品分割效果均是较为准确的。从第一排至第四排的分割结果以及融合效果可以看出,所提出的 LCSNet 网络在实际室内场景应用时整体分割效果边界清晰,类别准确无混淆。
同时通过分析分割可视化结果发现在数据集中没有对应类别样本的物体分割能力存在一些不足。如第一排中图像右侧的玻璃门,由于其半透明且训练数据中没有玻璃门因此被分割成了墙面类别。而第三排桌面下方的杂物、第四排图像右侧的机械臂与机器人、第五排图像中桌面的杂物等在训练数据集中均没有较为精细的类别标签,因此虽然可以将该物体图像区域进行正确分割,但类别都为其他类。在后续规划中,为得到类别更为精细的室内场景语义分割会针对实际场景扩增标注类别对场景类别进一步细化,对数据集进行增补。