
按照 "為多個信号貼标簽 "
小明師兄:MATLAB開發自動駕駛第四課-多信号的地面真相标簽zhuanlan.zhihu.com
程式給信号貼上标簽後,導出标簽并探索如何存儲它們。
設定
打開包含标記信号的 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-檔案。
未經許可,禁止轉載