代码生成使用SqueezeSegV2激光雷达目标检测网络
这个例子展示了如何生成CUDA®墨西哥人代码激光雷达目标检测网络。在这个例子中,你第一次段pretrained网络的点云,然后集群点和3 d边界盒适合每个集群。最后,您生成网络的墨西哥人代码。
在这个例子是一个激光雷达目标检测网络SqueezeSegV2 [1网络pretrained PandaSet数据集,其中包含8240无组织的激光雷达点云扫描各种城市场景使用了Pandar64传感器。网络可以段12个不同的类和汽车类对象的边界框。
第三方的先决条件
要求
CUDA启用NVIDIA GPU®和兼容的驱动程序
可选
等non-MEX构建静态库,动态库,或可执行文件,这个例子有以下附加要求。
英伟达工具包
英伟达cuDNN图书馆
环境变量的编译器和库。有关更多信息,请参见第三方硬件(GPU编码器)和设置必备产品s manbetx 845(GPU编码器)。
验证GPU环境
验证运行这个示例的编译器和库是否设置正确,使用coder.checkGpuInstall
(GPU编码器)函数。
envCfg = coder.gpuEnvConfig (“主机”);envCfg。DeepLibTarget =“cudnn”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);
负载SqueezeSegV2网络和入口点函数
使用getSqueezeSegV2PandasetNet
功能,附加到这个例子作为支持文件,加载pretrained SqueezeSeg万博1manbetxV2网络。如何训练该网络的更多信息,见激光雷达点云的语义分割使用SqueezeSegV2深度学习网络(激光雷达工具箱)。
网= getSqueezeSegV2PandasetNet;
pretrained网络DAG网络。显示一个交互式可视化的网络体系结构,使用analyzeNetwork
函数。
的segmentClusterDetect
入口点函数在点云组织矩阵作为输入并将其传递到一个训练有素的网络段,集群和检测边界框。的segmentClusterDetect
函数加载网络对象到一个持久变量和重用后续预测持久对象调用。
类型(“segmentClusterDetect.m”);
函数(op, bboxes] = segmentClusterDetect (I) %入口点函数部分,集群和适合三维框。% # % 2021年版权MathWorks公司codegen持续净;如果isempty(净)净= coder.loadDeepLearningNetwork (“trainedSqueezeSegV2PandasetNet.mat”);%通过输入结束。predictedResult =预测(净,我);[~,op] = max (predictedResult [], 3);%的指标点所需的类。carIdx = (op = = 7);%选择所需的类和集群基于距离。ptCldMod =选择(pointCloud(我(:,:1:3)),carIdx); [labels,numClusters] = pcsegdist(ptCldMod,0.5); % Select each cluster and fit a cuboid to each cluster. bboxes = zeros(0,9); for num = 1:numClusters labelIdx = (labels == num); % Ignore cluster that has points less than 150 points. if sum(labelIdx,'all') < 150 continue; end pcSeg = select(ptCldMod,labelIdx); mdl = pcfitcuboid(pcSeg); bboxes = [bboxes;mdl.Parameters]; end end
执行入口点函数
读点云,把它转换成组织格式使用pcorganize
(激光雷达工具箱)函数。为更多的细节在无组织的组织点云转换,看到无组织的组织转换使用球面投影点云(激光雷达工具箱)的例子。
ptCloudIn = pcread (“pandasetDrivingData.pcd”);vbeamAngles = [15.0000 11.0000 8.0000 5.0000 3.0000 2.0000 1.8333 1.6667 1.5000 1.3333 1.1667 1.0000 0.8333 0.6667…0 0.5000 0.3333 0.1667 -0.1667 -0.3333 -0.5000 -0.6667 -0.8333 -1.0000 -1.1667 -1.3333 -1.5000 -1.6667…-1.8333 -2.0000 -2.1667 -2.3333 -2.5000 -2.6667 -2.8333 -3.0000 -3.1667 -3.3333 -3.5000 -3.6667 -3.8333 -4.0000…-4.1667 -4.3333 -4.5000 -4.6667 -4.8333 -5.0000 -5.1667 -5.3333 -5.5000 -5.6667 -5.8333 -6.0000 -7.0000 -8.0000…-9.0000 -10.0000 -11.0000 -12.0000 -13.0000 - -14.0000 -19.0000 - -25.0000);hResolution = 1856;params = lidarParameters (vbeamAngles hResolution);ptCloudOrg = pcorganize (ptCloudIn params);
将组织点云转换成5-channel输入图像使用helperPointCloudToImage
功能,附加到例子作为支持文件。万博1manbetx
I = helperPointCloudToImage (ptCloudOrg);
使用segmentClusterDetect
入口点函数的预测边界框的汽车和细分标签。
[op, bboxes] = segmentClusterDetect(我);
输出的位置和彩色地图。
提出= helperLidarColorMap;:colormap =提出(op);loc =重塑(我(:,:1:3),[],3);
显示的点云分割输出和边界框。
图ax = pcshow (loc, colormap);showShape (“长方体”,父母= ax bboxes透明度= 0.1,…颜色=“绿色”线宽= 0.5);变焦(ax, 2);
生成CUDA墨西哥人代码
生成CUDA®代码segmentClusterDetect
入口点函数,创建一个GPU代码配置对象为一个墨西哥人的目标和目标语言设置为c++。使用coder.DeepLearningConfig
(GPU编码器)函数创建一个CuDNN深度学习配置对象,并将其分配给DeepLearningConfig
GPU代码配置对象的属性。
cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig = coder.DeepLearningConfig (TargetLibrary =“cudnn”);args ={编码器。typeof(我,64 1856 5],[0 0 0])};codegen配置cfgsegmentClusterDetectarg游戏arg游戏报告
代码生成成功:查看报告
生成CUDA®代码TensorRT目标,创建和使用一个TensorRT深度学习配置对象而不是CuDNN配置对象。
运行生成的墨西哥人代码
调用生成的CUDA墨西哥人代码5-channel形象我
创建的,ptCloudIn
。
[op, bboxes] = segmentClusterDetect_mex(我);
得到输出的彩色地图。
:colormap =提出(op);
显示输出。
图ax₁= pcshow (loc, colormap);showShape (“长方体”bboxes,父母= ax₁,透明度= 0.1,…颜色=“绿色”线宽= 0.5);变焦(ax₁, 2);
万博1manbetx支持功能
定义激光雷达彩色地图
的helperLidarColorMap
函数定义了使用的colormap激光雷达数据集。
函数提出= helperLidarColorMap%激光雷达pandaset类的彩色地图提出= [[30 30 30];%不保密的(255 0);%的植被(255 150 255);%的地面(255 0 255);%的道路(255 0 0);%路标(90 150);%人行道(245 150 100);%的车(250 80 100);%的卡车60 30 [150];%其他车辆(255 255 0];%行人[0 200 255);%道路障碍(170 100 150);%的迹象[30 30 255]];%的建筑提出255 = cmap. /;结束
引用
[1],Bichen Xuanyu周,Sicheng赵,翔宇悦,库尔特·Keutzer。“SqueezeSegV2:改进的模型结构和无监督领域适应Road-Object从激光雷达点云分割。“在)举行2019机器人与自动化国际会议上(“国际机器人与自动化会议”,4376 - 82。加拿大蒙特利尔,QC: IEEE 2019。https://doi.org/10.1109/ICRA.2019.8793495。
[2]PandaSet是由Hesai和规模下吗cc -, - 4.0许可证。