天天看點

com.alibaba.easyexcel導出指定的列_MATLAB開發自動駕駛第五課-導出和導入多個信号的地面真值标簽...

com.alibaba.easyexcel導出指定的列_MATLAB開發自動駕駛第五課-導出和導入多個信号的地面真值标簽...

按照 "為多個信号貼标簽 "

小明師兄:MATLAB開發自動駕駛第四課-多信号的地面真相标簽​zhuanlan.zhihu.com

com.alibaba.easyexcel導出指定的列_MATLAB開發自動駕駛第五課-導出和導入多個信号的地面真值标簽...

程式給信号貼上标簽後,導出标簽并探索如何存儲它們。

設定

打開包含标記信号的 Ground Truth Labeler 應用程式會話。 可以從 MATLAB® 指令行打開會話。例如,如果将該會話儲存到名為groundTruthLabelingSession,輸入此指令。

groundTruthLabeler groundTruthLabelingSession.mat
           

在應用程式工具條上,選擇 "導出标簽">"到工作區"。在 "導出到工作空間 "視窗中,使用預設的導出變量名稱 gTruth,然後單擊确定。應用程式會将 groundTruthMultisignal 對象 gTruth 導出到 MATLAB工作區。該對象包含從應用程式會話中捕獲的地面真相标簽。

如果沒有将groundTruthMultisignal對象導出到工作區,請從變量gTruth中加載一個預定義對象。用于加載該對象的函數作為輔助檔案附在本例中。如果使用自己的對象,标簽位置等資料可能與本例中顯示的資料不同。

if (~exist('gTruth','var'))
gTruth = helperLoadGTruthGetStarted;
end
           

顯示groundTruthMultisignal對象gTruth的屬性。該對象包含有關信号資料源、标簽定義以及 ROI 和場景标簽的資訊。這些資訊存儲在對象的單獨屬性中。

gTruth = 
groundTruthMultisignal with properties: 
DataSource: [1x2 vision.labeler.loading.MultiSignalSource] 
LabelDefinitions: [3x7 table]
ROILabelData: [1x1 vision.labeler.labeldata.ROILabelData] 
SceneLabelData: [1x1 vision.labeler.labeldata.SceneLabelData]
           

在這個例子中,将檢查每個屬性的内容,以了解對象如何存儲地面真相标簽。

資料源

DataSource 屬性包含有關資料源的資訊。此屬性包含兩個 MultiSignalSource 對象:一個用于視訊源,一個用于點雲序列源。顯示DataSource屬性的内容。

gTruth.LabelDefinitions.Hierarchy{1}.brakeLight
           
ans =
1x2 heterogeneous MultiSignalSource (VideoSource, PointCloudSequenceSource) array with propert 
SourceName
SourceParams 
SignalName 
SignalType 
Timestamp 
NumSignals
           

這些對象中存儲的資訊包括資料源的路徑、它們所包含的信号名稱以及這些信号的時間戳。顯示資料源的信号名稱。

gTruth.DataSource.SignalName
           
ans = "video_01_city_c2s_fcw_10s"
ans="lidarSequence" 
           

标簽定義

LabelDefinitions 屬性包含了一個關于标簽定義的資訊表。顯示标簽定義表。每一行都包含有關 ROI 或場景标簽定義的資訊。汽車标簽定義有兩行:一行用于在圖像信号上繪制矩形标簽,另一行用于在點雲信号上繪制立方體标簽。

gTruth.LabelDefinitions
           
ans =

  3x7 table

       Name        SignalType    LabelType       Group        Description     LabelColor      Hierarchy  
    ___________    __________    _________    ____________    ___________    ____________    ____________

    {'car'    }    Image         Rectangle    {'Vehicles'}    {0x0 char}     {1x3 double}    {1x1 struct}
    {'car'    }    PointCloud    Cuboid       {'Vehicles'}    {0x0 char}     {1x3 double}    {1x1 struct}
    {'daytime'}    Time          Scene        {'None'    }    {0x0 char}     {1x3 double}    {0x0 double}
           

層次列存儲了父ROI标簽的子标簽和屬性定義的資訊。當汽車标簽繪制為矩形時,顯示它的子标簽和屬性資訊。該标簽包含一個子标簽brakeLight,沒有屬性。

gTruth.LabelDefinitions.Hierarchy{1}
           
ans =     
   struct with fields:     
   brakeLight: [1x1 struct]           
   Type: Rectangle     Description: ''
           

顯示父車标簽的刹車燈子标簽的資訊。子标簽包含一個屬性isOn。子标簽不能有自己的子标簽。

gTruth.LabelDefinitions.Hierarchy{1}.brakeLight
           
ans = 
      struct with fields: 
      Type: Rectangle 
      Description: ''
      LabelColor: [0.5862 0.8276 0.3103]
      isOn: [1x1 struct]
           

顯示刹車燈子标簽的 isOn 屬性的資訊。這個屬性沒有預設值,是以DefaultValue字段為空。

gTruth.LabelDefinitions.Hierarchy{1}.brakeLight.isOn 
           
ans = 
struct with fields: 
DefaultValue: []
Description: ''
           

ROI标簽資料

ROILlabelData 屬性包含一個 ROILabelData 對象,其屬性包含每個信号的 ROI 标簽資料。屬性的名稱與信号的名稱相比對。顯示對象屬性名。

gTruth.ROILabelData
           
ans =
ROILabelData with properties: 
video_01_city_c2s_fcw_10s: [204x1 timetable]
lidarSequence: [34x1 timetable]
           

每個屬性都包含在每個信号時間戳處繪制的 ROI 标簽的時間表,每個标簽有一列。檢視部分視訊和雷射雷達點雲序列時間表。設定一個時間間隔,從8到8.5秒。該時間間隔對應于程式中 "為多個信号标注地面真值 "中标注的時間間隔的開始。視訊時間表比點雲序列時間表包含更多行,因為視訊包含更多标簽幀。

timeInterval = timerange(seconds(8),seconds(8.5));
videoLabels = gTruth.ROILabelData.video_01_city_c2s_fcw_10s(timeInterval,:) 
lidarLabels = gTruth.ROILabelData.lidarSequence(timeInterval,:) 
           
videoLabels = 
10x1 timetable
Time car 
8 sec {1x1 struct}
8.05 sec {1x1 struct}
8.1 sec {1x1 struct}
8.15 sec {1x1 struct}
8.2 sec {1x1 struct}
8.25 sec {1x1 struct}
8.3 sec {1x1 struct}
8.35 sec {1x1 struct}
8.4 sec {1x1 struct}
8.45 sec {1x1 struct}
           
lidarLabels = 
2x1 timetable
Time            car 
8.0495 sec {1x1 struct} 
8.3497 sec {1x1 struct}
           

檢視時間間隔内第一幀視訊的矩形車标簽。标簽資料存儲在一個結構中。

videoLabels.car{1}
           
ans = 
struct with fields: 
Position: [296 203 203 144] 
brakeLight: [1x2 struct]
           

Position(位置)字段存儲汽車标簽的位置。這個架構隻包含一個車标,是以在這種情況下,Position隻包含一個矩形邊界框。邊界框位置的形式為[x y w h],其中。

- x和y表示矩形的左上角。

- w指定矩形的寬度,也就是矩形沿x軸的長度。

- h指定矩形的高度,也就是矩形沿y軸的長度,其中:x和y指定矩形的左上角,w指定矩形的寬度,也就是矩形沿x軸的長度。

汽車标簽在這個架構上還包含兩個刹車燈子标簽。檢視brakeLight子标簽。子标簽存儲在一個結構數組中,每個子标簽在架構上繪制一個結構。

videoLabels.car{1}.brakeLight 
           
ans = 
1x2 struct array with fields: 
Position isOn
           

檢視子标簽的邊界框位置。

videoLabels.car{1}.brakeLight.Position
           
ans = 
304 245 50 46 
ans = 
435 243 54 51
           

檢視每個子标簽中isOn屬性的值。對于兩個子标簽,此屬性被設定為邏輯1(true)。

videoLabels.car{1}.brakeLight.isOn 
           
ans = logical
1 
ans = logical
1
           

現在檢視時間間隔内第一個點雲序列幀的立方體車标簽。點雲序列不支援子标簽或屬性。立方體車标簽不存儲在結構的位置字段中,而是存儲在一個M乘9的矩陣中,其中M是立方體标簽的數量。因為這個架構隻包含一個立方體标簽,在這種情況下,M為1。

lidarLabels.car{1}
           
ans = 
struct with fields: 
Position: [-1.1559 -0.7944 1.2012 12.6196 5.9278 3.0010 0 0 0]
brakeLight: []
           

1乘9的邊界盒位置的形式為[xctr,yctr,zctr,xlen,ylen,zlen,xrot,yrot,zrot],其中。

- xctr, yctr, and zctr specify the center of the cuboid. xlen, ylen, and zlen, xrot, yrot, zrot],其中:

- xlen, ylen, 和 zlen 分别指定了立方體在應用旋轉之前沿 x-, y-, 和 z-軸的長度。

- xrot、yrot和zrot分别指定了立方體沿x軸、y軸和z軸的旋轉角度。這些角度在相應軸的正向看時為順時針正值。

此圖顯示了這些值如何指定立方體的位置。

場景标簽資料

SceneLabelData 屬性包含一個 SceneLabelData 對象,其屬性包含所有信号的場景标簽資料。屬性的名稱與場景标簽的名稱相比對。顯示對象屬性名:

gTruth.SceneLabelData
           
ans = 
SceneLabelData with properties:
daytime: [0 sec 10.15 sec]
           

日間标簽适用于整個時間間隔,約為10秒。

使用 "地面真相 "标簽

本例中顯示的标簽僅用于說明目的。對于自己的标簽,在導出标簽後,可以使用它們作為對象檢測器的訓練資料。要從groundTruthMultisignal對象中收集标簽資料用于訓練,請使用gatherLabelData函數。

要共享已标記的地真資料,請共享包含groundTruthMultisignal對象的地真MAT-檔案,而不是包含應用程式會話的MAT-檔案。

未經許可,禁止轉載