主要内容

自动化地面实况标签的语义分割使用激光雷达贴标签机激光雷达点云

这个例子展示了如何在一个点云自动语义标注使用pretrained语义分割网络激光雷达贴标签机应用。在这个例子中,您可以使用AutomationAlgorithm类来自动标记激光雷达贴标签机应用程序。

激光雷达贴标签机应用

良好的地面实况数据是至关重要的发展和自动驾驶和飞行性能评估算法。然而,创建和维护一个多样化、高质量和标签数据集需要大量的努力。的激光雷达贴标签机应用程序提供了一个框架来自动标记过程使用AutomationAlgorithm类。您可以创建一个自定义算法和使用它的应用程序将你的整个数据集。您也可以编辑结果占算法具有挑战性的场景了。

在本例中,您:

  • 使用一个pretrained SqueezeSegV2语义分割网络段三维点云。

  • 创建一个自动化的算法,您可以使用激光雷达贴标签机应用自动段植被、地面、道路、道路标记,人行道上,汽车,卡车,其他车辆,行人、道路障碍,符号,和建筑使用SqueezeSegV2网络体素在点云。

使用SqueezeSegV2网络部分点云

部分点云使用pretrained SqueezeSegV2网络。SqueezeSegV2网络信息如何训练自己,明白了激光雷达点云的语义分割使用SqueezeSegV2深度学习网络。这种pretrained网络组织点云。信息如何将无组织的点云组织点云,看到的无组织的组织转换使用球面投影点云

下载Pretrained网络

下载pretrained SqueezeSegV2网络,PandaSet数据集上训练。

outputFolder = fullfile (tempdir,“Pandaset”);preTrainedMATFile = fullfile (outputFolder,“trainedSqueezeSegV2PandasetNet.mat”);preTrainedZipFile = fullfile (outputFolder,“trainedSqueezeSegV2PandasetNet.zip”);如果~存在(preTrainedMATFile“文件”)如果~存在(preTrainedZipFile“文件”)disp (“下载pretrained模型(5 MB)……”);组件=“激光雷达”;文件名=“数据/ trainedSqueezeSegV2PandasetNet.zip”;preTrainedZipFile = matlab.internal.examples.download万博1manbetxSupportFile(组件,文件名);结束解压缩(preTrainedZipFile outputFolder);结束

激光雷达数据集下载

下载PandaSet从Hesai和规模数据集,将激光雷达数据保存到一个Pandaset文件夹在一个临时文件夹中。注意,数据集的大小是5.2 GB,和MATLAB®代码中止执行,直到下载过程完成。为了避免暂停MATLAB执行期间您可以下载数据集下载到你的本地磁盘,然后提取文件。

lidarDataTarFile = fullfile (outputFolder,“Pandaset_LidarData.tar.gz”);如果~存在(lidarDataTarFile“文件”)disp (“下载Pandaset激光雷达数据(5.2 gb)……”);组件=“激光雷达”;文件名=“数据/ Pandaset_LidarData.tar.gz”;lidarDataTarFile = matlab.internal.examples.download万博1manbetxSupportFile(组件,文件名);解压(lidarDataTarFile outputFolder);结束%检查焦油。gz文件下载,但不是未压缩的。如果~ (fullfile (outputFolder,存在“激光雷达”),“文件”)解压(lidarDataTarFile outputFolder);结束

预测点云分割结果

使用训练网络预测结果点云通过以下步骤:

%加载pretrained网络。outputFolder = fullfile (tempdir,“Pandaset”);负载(fullfile (outputFolder“trainedSqueezeSegV2PandasetNet.mat”),“净”);%读点云。ptCloud = pcread (fullfile (outputFolder“激光雷达”,“0001.纤毛运动”));%将点云转换成5-channel形象。我= helperPointCloudToImage (ptCloud);%预测分割结果。predictedResult = semanticseg (im,净);%显示语义分割结果对点云。helperDisplayLabelOverlaidPointCloud (im, predictedResult);视图(60[39.2 - 90.0])标题(“语义分割结果对点云”)

激光雷达的语义分割算法集成到激光雷达贴标签机

激光雷达的构造一个自动化类语义分割算法。类的继承lidar.labeler.AutomationAlgorithm抽象基类。基类定义了属性和签名方法,配置和运行的应用程序使用自定义算法。的激光雷达贴标签机应用程序提供了一个初始自动化类模板。有关更多信息,请参见为标签创建自动化算法。的LidarSemanticSegmentation类是基于这个模板,为你提供了一个现成的自动化类语义分割点云。评论类的轮廓实现每个API调用所需的基本步骤。

算法性能

首先,定义属性,确定算法的名称和描述,以及使用该算法的方向。

% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -%步骤1:定义所需的属性描述算法。这%包括名称、描述和UserDirections。属性(常数)%名称算法名称%特征向量算法指定的名称。Name =“激光雷达的语义分割”;%描述算法描述%特征向量指定算法的简短描述。描述=“段点云使用SqueezeSegV2网络”;% UserDirections算法使用方向%单元阵列特征向量指定方向%算法用户按照使用算法。UserDirections = {(“ROI标签定义的选择:选择之一”“标记的ROI定义”),运行:按运行自动化运行算法。”,(的审查和修改:审查自动标签间隔的,“使用播放控制。修改/删除/添加roi,没有”满意地自动在这个阶段。如果结果是““满意,点击接受接受自动标签。”),(“接受/取消:如果自动化的结果是令人满意的,““点击接受接受所有自动标签和返回的“手动标记。如果没有“自动化的结果“满意,点击取消返回手动标签”“不保存自动标签。”]};结束

自定义属性

接下来,定义自定义属性所需的核心算法。

% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -%步骤2:定义属性中您想要使用的算法%执行。属性% AllCategories% AllCategories拥有默认的“未标记的”,“植物”,%“地面”,“路”,“路标”,“人行道”、“汽车”,“卡车”,%“OtherVehicle”,“行人”,“RoadBarriers”、“迹象”,%的建筑分类类型。AllCategories = {“未标记的”};% PretrainedNetwork% PretrainedNetwork节省pretrained SqueezeSegV2网络。PretrainedNetwork结束

函数定义

第三步,定义有效数据的函数用来检查和标签定义。

checkSignalType函数检查信号数据支持自动化。万博1manbetx激光雷达的语义分割算法支持的信号类型万博1manbetxPointCloud

函数isValid = checkSignalType (signalType)%仅为激光雷达点云数据信号是有效的工具%检测器算法。isValid = (signalType = = vision.labeler.loading.SignalType.PointCloud);结束

checkLabelDefinition函数检查标签定义适当的类型的自动化。激光雷达的语义分割算法需要体素标签类型。

函数isValid = checkLabelDefinition (algObj labelDef)%只体素ROI标签定义为激光雷达是有效的%的语义分割算法。isValid = labelDef。类型= = lidarLabelType.Voxel;如果isValid algObj。AllCategories{结束+ 1}= labelDef.Name;结束结束

checkSetup函数检查是否一个ROI标签定义选择自动化。

函数isReady = checkSetup (algObj)%有一个选定的ROI自动标签定义。isReady = ~ isempty (algObj.SelectedLabelDefinitions);结束

执行函数

指定执行的功能。的初始化函数初始填充算法基于现有的标签在应用程序状态。在这个例子中,初始化函数加载pretrained语义分割网络并将其保存PretrainedNetwork算法的属性对象。

函数初始化(algObj ~)%加载pretrained SqueezeSegV2语义分割网络。outputFolder = fullfile (tempdir,“Pandaset”);pretrainedSqueezeSeg =负载(fullfile (outputFolder“trainedSqueezeSegV2PandasetNet.mat”));%将网络存储在“PretrainedNetwork”这个对象的属性。algObj。PretrainedNetwork = pretrainedSqueezeSeg.net;结束

运行函数定义了核心激光雷达这种自动化类的语义分割算法。该算法调用运行功能点云序列的每一帧。预计自动化类函数返回一组标签。您可以扩展任何类别网络训练算法。对于本示例中,限制网络段体素的类别植被,地面,,路标,人行道上,汽车,卡车,其他车辆,行人,障碍,迹象,建筑

函数autoLabels =运行(algObj pointCloud)%设置分类矩阵与类别包括违约%的未标记的,“植物”、“地面”,“路”,“路标”,%的人行道上,“汽车”,“卡车”,“OtherVehicle”、“行人”,%’RoadBarriers”和“迹象”。autoLabels =分类(0(大小(pointCloud.Location, 1),大小(pointCloud.Location 2)),0:12 algObj.AllCategories);%转换输入点云五频道形象。I = helperPointCloudToImage (pointCloud);%预测分割结果。predictedResult = semanticseg(我algObj.PretrainedNetwork);autoLabels (:) = predictedResult;结束

终止函数处理所需的清理或销毁后,自动化完成。该算法不需要任何清理,所以函数是空的。

使用激光雷达的语义分割自动化类应用

使用属性和方法的实现LidarSemanticSegmentation自动化算法类文件激光雷达贴标签机,您必须将该算法导入到应用程序。

首先,创建文件夹结构+激光雷达/ +贴标签机在当前文件夹,并自动化类复制到它。

注意:LidarSemanticSegmentation.m文件必须在同一文件夹创建+激光雷达/ +贴标签机文件夹结构。

mkdir (“+激光雷达/ +贴标签机”);拷贝文件(“LidarSemanticSegmentation.m”,“+激光雷达/ +贴标签机”);

接下来,打开激光雷达贴标签机应用和负载PandaSet点云序列。

pointCloudDir = fullfile (outputFolder,激光雷达的);lidarLabeler (pointCloudDir);

AutomateSemanticSegmentationDisplaySignal.png

ROI标签选项卡在左窗格中,单击标签。定义12 ROI的标签名称植被,地面,,路标,人行道上,,卡车,OtherVehicle,行人,RoadBarriers,迹象,建筑标签的类型体素。可选地,您可以选择颜色的标签。点击好吧

出于演示目的,这个例子运行算法的一个子集PandaSet点云框架。选择标签的时间范围。指定第一个15秒的数据集通过输入0开始时间盒子和15结束时间盒子。一双红色的旗帜出现在滑块范围,显示所选时间间隔。应用程序显示只有这个区间的信号帧,和自动化算法适用于只有这个时间间隔。

AutomateSemanticSegmentationFrameRange.png

选择算法中,选择刷新列表。然后,选择语义分割算法>激光雷达。如果您没有看到这个选项,确认当前工作文件夹的文件夹+激光雷达/ +贴标签机,文件命名LidarSemanticSegmentation.m在里面。

点击自动化。应用程序打开一个自动化会话使用算法和显示方向。

AutomateSemanticSegmentationAutomationSession.png

点击运行。创建的算法执行指定序列的每一帧和部分点到植被,地面,,路标,人行道上,,卡车,OtherVehicle,行人,RoadBarriers,迹象,建筑类别。在自动化测试运行程序完成后,使用滑块或箭头键滚动自动化算法的序列定位任何帧标记点错了。使用缩放、锅和三维旋转选项来查看和旋转点云。手动调整结果通过添加或删除体元注释。

AutomateSemanticSegmentationResult.png

万博1manbetx支持功能

helperDisplayLabelOverlaidPointCloud功能覆盖组织三维点云分割结果。

函数predictedResult helperDisplayLabelOverlaidPointCloud(我)% helperDisplayLabelOverlaidPointCloud覆盖标签在点云对象。predictedResult % helperDisplayLabelOverlaidPointCloud(我)%显示覆盖pointCloud对象。我是5个渠道组织%输入图像。predictedResult包含像素标签。ptCloud = pointCloud(我(:,:1:3),强度=我(:,:,4));提出= helperPandasetColorMap;B =labeloverlay (uint8 (ptCloud.Intensity)、predictedResult Colormap =提出,透明度= 0.4);电脑= pointCloud (ptCloud。位置、颜色= B);ax = pcshow (pc);集(ax, XLim = (-70 70), YLim =[-70 - 70])变焦(ax, 3.5)结束

helperPandasetColorMap函数定义了colormap所使用的激光雷达数据集。

函数提出= helperPandasetColorMap提出= [[30 30 30);%无标号(255 0);%的植被(255 150 255);%的地面(237 117 32);%的道路(255 0 0);%路标(90 150);%人行道(255 255 30);%的车(245 150 100);%的卡车60 30 [150];%其他车辆(255 255 0];%行人[0 200 255);%道路障碍(170 100 150);%的迹象(255 0 255)];%的建筑提出255 = cmap. /;结束

helperPointCloudToImage将点云转换为五频图像。

函数形象= helperPointCloudToImage (ptcloud)% helperPointCloudToImage转换五频图像的点云形象= ptcloud.Location;图像(::4)= ptcloud.Intensity;rangeData = iComputeRangeData(图像(:,:1)、图像(:,:2),图片(:,:,3));图像(::5)= rangeData;指数= isnan(图片);图像(指数)= 0;结束函数rangeData = iComputeRangeData xChannel, yChannel, zChannel rangeData =√(xChannel * xChannel + yChannel。* yChannel + zChannel。* zChannel);结束