首頁(yè) > 新能源汽車

基于MATLAB&SIMULINK開(kāi)發(fā)自動(dòng)駕駛系統(tǒng)第二講之地面真值標(biāo)簽與驗(yàn)證

來(lái)源:新能源汽車網(wǎng)
時(shí)間:2022-02-22 11:01:53
熱度:

基于MATLAB&SIMULINK開(kāi)發(fā)自動(dòng)駕駛系統(tǒng)第二講之地面真值標(biāo)簽與驗(yàn)證2.1 開(kāi)始使用Ground Truth LabelerGround Truth Labeler 應(yīng)用使

2.1 開(kāi)始使用Ground Truth Labeler

Ground Truth Labeler 應(yīng)用使 能夠在視頻、圖像序列或激光雷達(dá)點(diǎn)云中交互式地標(biāo)示地面真值數(shù)據(jù)。使用該應(yīng)用程序,可以同時(shí)標(biāo)記多個(gè)信號(hào),例如從安裝在車輛上的攝像頭和激光雷達(dá)傳感器獲得的數(shù)據(jù)。

本示例通過(guò)這些步驟引導(dǎo)完成多信號(hào)地真值標(biāo)簽工作流程。

1 "加載要標(biāo)記的地面真值信號(hào)" - 將多個(gè)信號(hào)加載到應(yīng)用程序中,并配置這些信號(hào)的顯示。

1 "為多個(gè)信號(hào)標(biāo)記地面真值"--創(chuàng)建標(biāo)簽定義,并使用自動(dòng)化算法對(duì)信號(hào)進(jìn)行標(biāo)記。

2 "導(dǎo)出和探索多個(gè)信號(hào)的地面真值標(biāo)簽" - 從應(yīng)用程序中導(dǎo)出標(biāo)簽并探索數(shù)據(jù)。

可以使用這些導(dǎo)出的標(biāo)簽以及相關(guān)的信號(hào)幀,作為深度學(xué)習(xí)應(yīng)用的訓(xùn)練數(shù)據(jù)。

2.2 將接地真值信號(hào)加載到標(biāo)簽上

Ground Truth Labeler應(yīng)用提供了兩種類型信號(hào)的標(biāo)簽選項(xiàng)。

- 圖像信號(hào)是基于圖像的。可以從視頻或圖像序列等來(lái)源加載這些信號(hào)。

- 點(diǎn)云信號(hào)是基于激光雷達(dá)的信號(hào)??梢詮闹T如點(diǎn)云文件序列等來(lái)源加載這些信號(hào)。

在本例中, 將一個(gè)視頻和一個(gè)點(diǎn)云序列加載到應(yīng)用程序中。這些信號(hào)來(lái)自安裝在車輛上的攝像頭傳感器和激光雷達(dá)傳感器。這些信號(hào)代表了同一個(gè)駕駛場(chǎng)景。

2.2.1 加載時(shí)間戳

加載點(diǎn)云序列的時(shí)間戳。時(shí)間戳是一個(gè)持續(xù)時(shí)間向量,與序列在同一文件夾中。要加載時(shí)間戳,必須將此文件夾臨時(shí)添加到 MATLAB? 搜索路徑中。

pcSeqFolder = fullfile(toolboxdir('driving'),'drivingdata','lidarSequence');addpath(pcSeqFolder)

loadtimestamps.mat rmpath(pcSeqFolder)

該應(yīng)用還提供了一個(gè)選項(xiàng)來(lái)為視頻源指定時(shí)間戳。本例中使用的視頻沒(méi)有單獨(dú)的時(shí)間戳文件,所以當(dāng)加載視頻時(shí),可以直接從視頻源中讀取時(shí)間戳。

2.2.2打開(kāi)地面真值標(biāo)簽器App

要打開(kāi)Ground Truth Labeler應(yīng)用程序,在MATLAB命令提示符下,輸入此命令。

GroundTruthLabeler

該應(yīng)用程序?qū)⒋蜷_(kāi)一個(gè)空對(duì)話框。

或者,也可以從"汽車 "下的 "應(yīng)用程序"選項(xiàng)卡中打開(kāi)該應(yīng)用程序。

2.2.3 從數(shù)據(jù)源加載信號(hào)

Ground Truth Labeler 應(yīng)用使能夠從多種類型的數(shù)據(jù)源加載信號(hào)。在應(yīng)用程序中,數(shù)據(jù)源是包含一個(gè)或多個(gè)要標(biāo)記的信號(hào)的文件或文件夾。

- 對(duì)于視頻,數(shù)據(jù)源是一個(gè)包含單個(gè)視頻的 MP4 文件。

- 對(duì)于點(diǎn)云序列,數(shù)據(jù)源是一個(gè)包含點(diǎn)云數(shù)據(jù)(PCD)文件序列的文件夾。這些文件共同代表一個(gè)單一的點(diǎn)云序列。

其他數(shù)據(jù)源,如rosbags,可以包含多個(gè)信號(hào),可以加載。有關(guān)數(shù)據(jù)源和信號(hào)之間關(guān)系的更多詳情,請(qǐng)參見(jiàn)"地面實(shí)況標(biāo)注中的數(shù)據(jù)源與信號(hào)"。

加載視頻

將視頻加載到應(yīng)用程序中。

1 在應(yīng)用程序工具條上,單擊"打開(kāi)">"添加信號(hào)"。

將打開(kāi) "添加/刪除信號(hào) "對(duì)話框,將 "源類型"參數(shù)設(shè)置為 "視頻",并將"添加 "和 "刪除"選項(xiàng)設(shè)置為 "信號(hào)"。

時(shí)間戳參數(shù)設(shè)置為來(lái)自文件。

2 在文件名參數(shù)中,瀏覽該視頻文件。<matlabroot>是matlabroot函數(shù)返回的MATLAB安裝文件夾的完整路徑。

<matlabroot>/toolbox/driving/drivingdata/01_city_c2s_fcw_10s.mp4

3 點(diǎn)擊添加源。視頻加載到應(yīng)用程序中,應(yīng)用程序直接從視頻中讀取時(shí)間戳。源表顯示視頻數(shù)據(jù)源的相關(guān)信息。

加載點(diǎn)云序列

將點(diǎn)云序列加載到應(yīng)用程序中。

1 在"添加/刪除信號(hào) "對(duì)話框仍然打開(kāi)且視頻已加載的情況下,將 "源類型 "參數(shù)設(shè)置為"點(diǎn)云序列"。對(duì)話框顯示特定于加載點(diǎn)云序列的新選項(xiàng)。

2 在文件夾名稱參數(shù)中,瀏覽lidarSequence文件夾,該文件夾包含要加載的點(diǎn)云數(shù)據(jù)(PCD)文件序列。

<matlabroot>/toolbox/driving/drivingdata/lidarSequence

3 將"時(shí)間戳 "參數(shù)設(shè)置為 "來(lái)自工作區(qū)"。在 "從工作空間導(dǎo)入 "對(duì)話框中,選擇為點(diǎn)云序列加載的時(shí)間戳變量。單擊 "確定"。

4 單擊添加源。點(diǎn)云序列加載到應(yīng)用程序中,應(yīng)用程序從時(shí)間戳變量中讀取時(shí)間戳。源表顯示有關(guān)點(diǎn)云序列的數(shù)據(jù)源。

驗(yàn)證有關(guān)加載信號(hào)的信息

Add/Remove Signal(添加/刪除信號(hào))對(duì)話框底部的表格顯示了有關(guān)加載信號(hào)的信息。驗(yàn)證該表是否為加載的信號(hào)顯示此信息。

- 信號(hào)名稱列顯示應(yīng)用程序生成的信號(hào)名稱。對(duì)于視頻,信號(hào)名是數(shù)據(jù)源的文件名,前綴為video_,沒(méi)有文件擴(kuò)展名。

對(duì)于點(diǎn)云序列,信號(hào)名是源文件夾的名稱。

- 源列顯示信號(hào)數(shù)據(jù)源的完整文件路徑。

- 信號(hào)類型列顯示每個(gè)信號(hào)的類型。視頻的類型是圖像。點(diǎn)云序列的類型是點(diǎn)云。

- 時(shí)間范圍列根據(jù)加載的時(shí)間戳數(shù)據(jù)顯示信號(hào)的持續(xù)時(shí)間。這兩個(gè)信號(hào)的長(zhǎng)度約為10秒。

對(duì)于點(diǎn)云序列,如果將 "時(shí)間戳 "設(shè)置為 "使用默認(rèn)值",那么 "時(shí)間范圍 "欄就會(huì)顯示 "點(diǎn)云"。序列的值范圍是0到33秒。這個(gè)范圍是基于34個(gè)PCD文件中。文件夾。默認(rèn)情況下,應(yīng)用程序?qū)Ⅻc(diǎn)云序列的時(shí)間戳設(shè)置為從 0 到有效點(diǎn)云文件數(shù)減 1 的持續(xù)時(shí)間向量。單位以秒為單位。如果發(fā)生這個(gè)問(wèn)題,在表,選擇點(diǎn)云序列行的復(fù)選框。然后,點(diǎn)擊刪除選中,再次加載信號(hào),再次驗(yàn)證信號(hào)信息。

驗(yàn)證信號(hào)加載正確后,點(diǎn)擊確定。應(yīng)用加載信號(hào)后,打開(kāi)到最后添加的信號(hào)的第一幀,本例為點(diǎn)云序列。

2.2.4 配置信號(hào)顯示

當(dāng)?shù)谝淮渭虞d信號(hào)時(shí),應(yīng)用程序每次只顯示一個(gè)信號(hào)。要并排顯示信號(hào),首先,在應(yīng)用程序工具條的 "標(biāo)簽 "選項(xiàng)卡上,單擊 "顯示網(wǎng)格"。然后,移動(dòng)指針選擇1乘2網(wǎng)格,并單擊網(wǎng)格。

視頻和點(diǎn)云序列并排顯示。

要想一起查看視頻和點(diǎn)云序列,在信號(hào)下方的滑塊中,點(diǎn)擊播放。按鈕。視頻播放比點(diǎn)云序列更流暢,因?yàn)橐曨l在大約相同的時(shí)間內(nèi)有更多的幀,因此幀率更高。

默認(rèn)情況下,應(yīng)用程序會(huì)播放幀率最高的信號(hào)的所有幀。此信號(hào)稱為主信號(hào)。對(duì)于所有其他信號(hào),應(yīng)用程序?qū)@示與主信號(hào)當(dāng)前顯示的幀時(shí)間一致的幀。要配置哪個(gè)信號(hào)是主信號(hào),請(qǐng)使用 "播放控制設(shè)置 "對(duì)話框中的選項(xiàng)。要打開(kāi)此對(duì)話框,請(qǐng)?jiān)诨瑝K下方單擊時(shí)鐘設(shè)置按鈕 。有關(guān)使用這些選項(xiàng)控制信號(hào)幀顯示的更多詳情,請(qǐng)參閱的 "控制播放信號(hào)幀以進(jìn)行標(biāo)注"。

加載信號(hào)并查看幀后,現(xiàn)在可以創(chuàng)建標(biāo)簽定義并給數(shù)據(jù)貼標(biāo)簽,如 "為多個(gè)信號(hào)貼標(biāo)簽地真 "中所述。

2.3 多信號(hào)的標(biāo)簽接地真值

將視頻和激光雷達(dá)點(diǎn)云序列信號(hào)加載到 "地面真值 "應(yīng)用中后, "將地面真值信號(hào)加載到標(biāo)簽 "程序中的描述,創(chuàng)建標(biāo)簽。

定義,并對(duì)信號(hào)幀進(jìn)行標(biāo)注。在本例中,只對(duì)部分信號(hào)進(jìn)行標(biāo)簽,以達(dá)到說(shuō)明的目的。

2.3.1創(chuàng)建標(biāo)簽定義

標(biāo)簽定義包含 在信號(hào)上標(biāo)記的標(biāo)簽信息。 可以在應(yīng)用程序中交互式創(chuàng)建標(biāo)簽定義,也可以通過(guò)使用labelDefinitionCreatorMultisignal對(duì)象以編程方式創(chuàng)建標(biāo)簽定義。在這個(gè)例子中, 可以在應(yīng)用程序中創(chuàng)建標(biāo)簽定義。

創(chuàng)建ROI標(biāo)簽

ROI 標(biāo)簽是與信號(hào)幀中的興趣區(qū)域 (ROI) 對(duì)應(yīng)的標(biāo)簽??梢远x這些 ROI 標(biāo)簽類型。

- 矩形/立方體--在物體(如車輛)周圍繪制邊界框標(biāo)簽。在圖像信號(hào)中, 可以將這種類型的標(biāo)簽繪制為二維矩形邊界框。在點(diǎn)云信號(hào)中,可以將此類型的標(biāo)簽繪制為三維立方體邊界框。

- 投影立方體--在圖像中的物體(如車輛)周圍繪制 3-D 界線框標(biāo)簽。

- 線條 - 繪制線性 ROI 來(lái)標(biāo)記線條,例如車道邊界。

- 像素標(biāo)簽 - 繪制像素來(lái)標(biāo)記各種類別,如道路或天空,以進(jìn)行語(yǔ)義分割。

有關(guān)這些 ROI 標(biāo)簽定義的詳細(xì)信息,請(qǐng)參見(jiàn) "ROI 標(biāo)簽、子標(biāo)簽和屬性"。創(chuàng)建一個(gè)ROI標(biāo)簽定義,用于標(biāo)記信號(hào)幀中的汽車。

1 在左側(cè)窗格的 ROI 標(biāo)簽窗格中,單擊 "標(biāo)簽"。

2 創(chuàng)建一個(gè)名為 "車 "的矩形/立方體標(biāo)簽。

3 從 "組 "列表中,選擇 "新建組 "并將組命名為 "車輛"。向組添加標(biāo)簽是可選的。

4 單擊 "確定"。車輛組名稱出現(xiàn)在 ROI 標(biāo)簽選項(xiàng)卡上,其下有標(biāo)簽 car。

在每個(gè)信號(hào)上,汽車標(biāo)簽的繪制方式不同。在視頻上,汽車被畫(huà)成一個(gè)二維矩形邊界框,類型為矩形。在點(diǎn)云序列上,汽車被畫(huà)成一個(gè)立方體類型的三維立體邊界框。

創(chuàng)建ROI子標(biāo)簽

子標(biāo)簽是與父 ROI 標(biāo)簽相對(duì)應(yīng)的 ROI 標(biāo)簽的一種類型。每個(gè)子標(biāo)簽必須屬于ROI標(biāo)簽標(biāo)簽定義,或者是ROI標(biāo)簽標(biāo)簽定義的子標(biāo)簽。例如,在駕駛場(chǎng)景中,車輛標(biāo)簽可以有前燈、車牌或車輪的子標(biāo)簽。

創(chuàng)建一個(gè)ROI子標(biāo)簽定義,用于標(biāo)注被標(biāo)注汽車的剎車燈。

1 選擇子標(biāo)簽的父標(biāo)簽。在左窗格中的 "ROI標(biāo)簽 "選項(xiàng)卡上,單擊汽車標(biāo)簽將其選中。

2 單擊子標(biāo)簽。

3 創(chuàng)建一個(gè)名為brakeLight的矩形子標(biāo)簽。不支持立方體子標(biāo)簽,因此該子標(biāo)簽僅適用于視頻信號(hào)。單擊 "確定"。

brakeLight子標(biāo)簽出現(xiàn)在汽車標(biāo)簽下的ROI Labels標(biāo)簽中。子標(biāo)簽和父標(biāo)簽具有相同的顏色。

創(chuàng)建ROI屬性

ROI屬性指定了關(guān)于ROI標(biāo)簽或子標(biāo)簽的附加信息。例如,在駕駛場(chǎng)景中,屬性可以包括車輛的類型或顏色??梢远x這些類型的 ROI 屬性。

- Numeric Value(數(shù)值)--指定一個(gè)數(shù)值標(biāo)量屬性,例如標(biāo)簽車輛的車門(mén)數(shù)量。

- 字符串 - 指定一個(gè)字符串標(biāo)量屬性,例如車輛的顏色。

- Logical - 指定一個(gè)邏輯的真或假屬性,例如車輛是否在行駛中。

- 列表 - 指定預(yù)定義字符串的下拉列表屬性,如車輛的品牌或型號(hào)。

創(chuàng)建一個(gè)屬性來(lái)描述標(biāo)記的剎車燈是亮還是滅。

1 在左側(cè)窗格中的 ROI 標(biāo)簽上,選擇制動(dòng)燈子標(biāo)簽并單擊 "屬性"。

2 在 "屬性名稱 "框中,鍵入 "isOn"。將屬性類型設(shè)置為 "邏輯"。保留默認(rèn)值

設(shè)置為 "空",然后單擊 "確定"。

3 在ROI標(biāo)簽中,展開(kāi)brakeLight子標(biāo)簽的定義,現(xiàn)在這個(gè)子標(biāo)簽的屬性框中包含了isOn屬性。現(xiàn)在這個(gè)子標(biāo)簽的屬性框中包含了isOn屬性。

創(chuàng)建場(chǎng)景標(biāo)簽

場(chǎng)景標(biāo)簽定義了場(chǎng)景中所有信號(hào)的附加信息。使用場(chǎng)景標(biāo)簽來(lái)描述條件,如照明和天氣,或事件,如車道變化。

創(chuàng)建一個(gè)場(chǎng)景標(biāo)簽以應(yīng)用于信號(hào)幀。

1 在應(yīng)用程序的左側(cè)窗格中,選擇 "場(chǎng)景標(biāo)簽 "選項(xiàng)卡。

2 單擊定義新的場(chǎng)景標(biāo)簽,然后在 "標(biāo)簽名稱 "框中,輸入名為daytime。

3 將標(biāo)簽定義的顏色改為淺藍(lán)色,以體現(xiàn)場(chǎng)景標(biāo)簽的性質(zhì)。在 "顏色 "參數(shù)下,單擊 "顏色預(yù)覽",選擇標(biāo)準(zhǔn)的淡藍(lán)色。然后,單擊 "確定 "關(guān)閉顏色選擇窗口。

4 將 "組 "參數(shù)設(shè)置為默認(rèn)的 "無(wú)",然后單擊 "確定"。場(chǎng)景標(biāo)簽窗格顯示場(chǎng)景標(biāo)簽定義。


驗(yàn)證標(biāo)簽定義

驗(yàn)證 的標(biāo)簽定義是否有這樣的設(shè)置。

1 ROI 標(biāo)簽標(biāo)簽包含一個(gè)車輛組,其汽車標(biāo)簽類型為矩形/立方體。

2 汽車標(biāo)簽包含一個(gè)名為剎車燈的子標(biāo)簽。

3 brakeLight子標(biāo)簽包含一個(gè)名為isOn的屬性。

4 "場(chǎng)景標(biāo)簽 "選項(xiàng)卡包含一個(gè)名為daytime的淡藍(lán)色場(chǎng)景標(biāo)簽。

要編輯或刪除一個(gè)標(biāo)簽定義,右鍵單擊該標(biāo)簽定義并選擇相應(yīng)的編輯或刪除選項(xiàng)。要將這些標(biāo)簽定義保存到MAT文件中,以便在未來(lái)的標(biāo)簽會(huì)話中使用,請(qǐng)?jiān)?"場(chǎng)景標(biāo)簽 "選項(xiàng)卡上點(diǎn)擊 "編輯"。

應(yīng)用工具條的標(biāo)簽選項(xiàng)卡,選擇 "保存">"標(biāo)簽定義"。

在未來(lái)的標(biāo)簽對(duì)話框中,如果需要對(duì)標(biāo)簽定義重新排序或?qū)⑵湟苿?dòng)到不同的組, 可以在標(biāo)簽定義窗格中拖放它們。

2.3.2 使用自動(dòng)化給視頻貼標(biāo)簽

使用汽車標(biāo)簽為視頻中的部分汽車貼上標(biāo)簽。要協(xié)助標(biāo)簽過(guò)程,請(qǐng)使用內(nèi)置的標(biāo)簽自動(dòng)化算法之一。

1 選擇要標(biāo)記的時(shí)間間隔。指定一個(gè)8到10秒的時(shí)間間隔,在這個(gè)時(shí)間間隔內(nèi),前面的車與被控車輛接近。在視頻下方的文本框中,按此次序輸入這些時(shí)間。

a 在 "當(dāng)前 "框中,輸入8,然后按Enter鍵。

b在 "開(kāi)始時(shí)間 "框中,鍵入8,使滑塊處于時(shí)間間隔的開(kāi)始。

c 在 "結(jié)束時(shí)間 "框中,鍵入 10。

范圍滑塊和文本框被設(shè)置為8-10秒的時(shí)間間隔。紅色標(biāo)志表示時(shí)間間隔的開(kāi)始和結(jié)束。

應(yīng)用程序僅顯示該時(shí)間間隔的信號(hào)幀,自動(dòng)化算法僅適用于該時(shí)間間隔。若要擴(kuò)大時(shí)間間隔以填滿整個(gè)播放部分,請(qǐng)單擊 "放大時(shí)間間隔"。

2 在標(biāo)簽窗口中,單擊視頻信號(hào)以選擇它。一次只能自動(dòng)選擇一個(gè)信號(hào),因此必須選擇要自動(dòng)選擇的信號(hào)。

3 選擇要自動(dòng)化的標(biāo)簽。在 "ROI 標(biāo)簽 "選項(xiàng)卡中,單擊汽車標(biāo)簽。

4 從應(yīng)用程序工具條中,選擇選擇算法 > 時(shí)空插值器。該算法通過(guò)在圖像幀之間插補(bǔ) ROI 位置來(lái)估計(jì)矩形 ROI。

時(shí)間間隔。

5 單擊自動(dòng)。應(yīng)用程序會(huì)提示確認(rèn) 只想標(biāo)記視頻的一部分。單擊 "是"。視頻的自動(dòng)化會(huì)話將打開(kāi)。自動(dòng)化會(huì)話的右側(cè)窗格顯示算法說(shuō)明。

6 在時(shí)間間隔開(kāi)始時(shí),點(diǎn)擊并拖動(dòng),在幀中心的汽車周圍繪制一個(gè)汽車標(biāo)簽。對(duì)于這種算法,每幀只能畫(huà)一個(gè)標(biāo)簽。給其他汽車貼標(biāo)簽需要單獨(dú)的自動(dòng)化環(huán)節(jié)。

默認(rèn)情況下,只有當(dāng)將指針移動(dòng)到汽車標(biāo)簽上時(shí),汽車標(biāo)簽才會(huì)出現(xiàn)??蛇x地,要始終顯示標(biāo)簽,在應(yīng)用程序工具條上,將 "顯示ROI標(biāo)簽 "設(shè)置為始終。

7 將滑塊拖動(dòng)到最后一幀,并在這一幀中的同一輛車周圍繪制汽車標(biāo)簽??蛇x地,為了提高自動(dòng)化效果,在中間幀中標(biāo)注汽車。

8 單擊 "運(yùn)行"。自動(dòng)化算法將汽車標(biāo)簽應(yīng)用到中間幀中。拖動(dòng)滑塊以查看結(jié)果。如有必要,可手動(dòng)調(diào)整標(biāo)簽以提高其準(zhǔn)確性。

9 當(dāng)對(duì)結(jié)果感到滿意時(shí),單擊 "接受 "關(guān)閉會(huì)話,并將標(biāo)簽應(yīng)用到這部分視頻中。

2.3.3 使用自動(dòng)化進(jìn)行標(biāo)簽點(diǎn)云序列

使用上一步驟中相同的汽車標(biāo)簽定義來(lái)標(biāo)記點(diǎn)云序列中的汽車。為了協(xié)助標(biāo)記過(guò)程,請(qǐng)使用為以下內(nèi)容設(shè)計(jì)的內(nèi)置標(biāo)簽自動(dòng)化算法。

點(diǎn)云標(biāo)注。在這個(gè)例子中,你標(biāo)注的是被控車輛,在激光雷達(dá)點(diǎn)云序列中比前車更容易看到。

1 在應(yīng)用的底部,確認(rèn)時(shí)間范圍仍然設(shè)置為8到10秒。

2 在標(biāo)簽窗口中,點(diǎn)擊點(diǎn)云序列進(jìn)行選擇。

3 在 ROI 標(biāo)簽選項(xiàng)卡中,單擊汽車標(biāo)簽定義。

4 在應(yīng)用程序工具條的標(biāo)簽選項(xiàng)卡上,選擇選擇算法 > 點(diǎn)云時(shí)空插值器。該算法通過(guò)在時(shí)間間隔內(nèi)插值ROI位置來(lái)估計(jì)點(diǎn)云幀之間的立方體ROI。

5 單擊自動(dòng)。應(yīng)用程序會(huì)提示確認(rèn) 要只標(biāo)記部分點(diǎn)云序列。單擊 "是"。打開(kāi)點(diǎn)云序列的自動(dòng)化會(huì)話。自動(dòng)化會(huì)話的右側(cè)窗格顯示算法說(shuō)明。

6 在時(shí)間間隔的開(kāi)端,在被控車輛四周畫(huà)一個(gè)汽車標(biāo)簽。

a 使用滾動(dòng)輪或框架右上角的 "放大 "按鈕,放大汽車。也可以使用 "平移 "按鈕將汽車置于框架的中心。

b在左側(cè)窗格的ROI標(biāo)簽上,單擊汽車標(biāo)簽。拖動(dòng)灰色預(yù)覽立方體,直到它突出顯示被控車輛。

c 單擊信號(hào)框以創(chuàng)建標(biāo)簽。標(biāo)簽會(huì)卡在點(diǎn)云的高亮部分。

d 調(diào)整立方體標(biāo)簽,直到它完全包圍汽車。要調(diào)整立方體的大小,請(qǐng)單擊并拖動(dòng)其中一個(gè)立方體面。要移動(dòng)立方體,請(qǐng)按住Shift鍵并單擊并拖動(dòng)其中一個(gè)立方體面。

7 單擊立方體,按Ctrl+C復(fù)制它。然后,拖動(dòng)滑塊到最后一幀,并將立方體粘貼(Ctrl+V)到同一位置的新幀中。可選地,為了提高自動(dòng)化效果,可手動(dòng)調(diào)整復(fù)制標(biāo)簽的位置。

8單擊 "運(yùn)行"。自動(dòng)化算法將汽車標(biāo)簽應(yīng)用到中間幀。拖動(dòng)滑塊查看結(jié)果。如有必要,手動(dòng)調(diào)整標(biāo)簽以提高其準(zhǔn)確性。

9 當(dāng)對(duì)結(jié)果感到滿意時(shí),單擊 "接受 "關(guān)閉會(huì)話,并將標(biāo)簽應(yīng)用到這部分點(diǎn)云序列中。

2.3.4 用子標(biāo)簽和屬性手動(dòng)標(biāo)記

手動(dòng)為視頻中的一幀標(biāo)注剎車燈子標(biāo)簽及其isOn屬性。激光雷達(dá)點(diǎn)云信號(hào)不支持子標(biāo)簽和屬性,所以無(wú)法對(duì)點(diǎn)云序列進(jìn)行標(biāo)注。

1 在應(yīng)用程序的底部,驗(yàn)證時(shí)間范圍是否仍設(shè)置為8至10秒。如果有必要,請(qǐng)將滑塊拖動(dòng)到時(shí)間范圍的第一幀。

2 在 "ROI標(biāo)簽 "選項(xiàng)卡中,單擊 "brakeLight "子標(biāo)簽定義將其選中。

3隱藏點(diǎn)云序列。在應(yīng)用程序工具條的標(biāo)簽選項(xiàng)卡上,在 "顯示/隱藏信號(hào) "下,清除激光雷達(dá)點(diǎn)云序列的復(fù)選標(biāo)記。隱藏信號(hào)只是隱藏顯示。

應(yīng)用程序會(huì)維護(hù)隱藏信號(hào)的標(biāo)簽,仍然可以導(dǎo)出它們。

4 展開(kāi)視頻信號(hào)以填充整個(gè)標(biāo)簽窗口。

5 在視頻幀中,選擇繪制的汽車標(biāo)簽。標(biāo)簽會(huì)變成黃色。必須選擇汽車

標(biāo)簽(父ROI),然后才能為其添加子標(biāo)簽。

6為汽車?yán)L制brakeLight子標(biāo)簽??梢赃x擇將 "顯示 ROI 標(biāo)簽 "設(shè)置為 "始終",這樣就可以確認(rèn)汽車標(biāo)簽與其子標(biāo)簽之間的關(guān)聯(lián)。

7 在視頻幀上,選擇其中一個(gè)剎車燈子標(biāo)簽。然后,在右側(cè)窗格中的 "屬性和子標(biāo)簽 "窗格中,將isOn屬性設(shè)置為T(mén)rue。對(duì)另一個(gè)子標(biāo)簽重復(fù)此步驟。

2.3.5手動(dòng)標(biāo)注場(chǎng)景

將白天的場(chǎng)景標(biāo)簽應(yīng)用到整個(gè)場(chǎng)景中。

1 將時(shí)間間隔回?cái)U(kuò)到所有信號(hào)的整個(gè)持續(xù)時(shí)間。如果放大了時(shí)間間隔,請(qǐng)先單擊 "放大時(shí)間間隔"。然后,將紅色標(biāo)志拖到范圍滑塊的開(kāi)始和結(jié)束處。

2 在應(yīng)用程序的左側(cè)窗格中,選擇 "場(chǎng)景標(biāo)簽 "選項(xiàng)卡。

3 選擇日間場(chǎng)景標(biāo)簽定義。

4 在標(biāo)簽定義上方,單擊 "時(shí)間間隔"。然后,單擊添加標(biāo)簽。日間場(chǎng)景標(biāo)簽會(huì)出現(xiàn)一個(gè)復(fù)選標(biāo)記,表明該標(biāo)簽現(xiàn)在適用于時(shí)間間隔內(nèi)的所有幀。

查看標(biāo)簽摘要

隨著所有標(biāo)簽、子標(biāo)簽和屬性被應(yīng)用到信號(hào)的至少一幀,現(xiàn)在可以選擇查看地面真值標(biāo)簽的可視化摘要。在應(yīng)用程序工具條上,單擊 "查看標(biāo)簽摘要"。有關(guān)詳細(xì)信息,請(qǐng)參閱 "查看地面真值標(biāo)簽摘要"(計(jì)算機(jī)視覺(jué)工具箱)。

保存應(yīng)用程序會(huì)話

在應(yīng)用程序工具條上,選擇保存并保存應(yīng)用程序會(huì)話的 MAT 文件。保存的會(huì)話包括數(shù)據(jù)源、標(biāo)簽定義和標(biāo)簽的地面真值。它還包括的會(huì)話首選項(xiàng),例如應(yīng)用程序的布局。

現(xiàn)在,可以關(guān)閉應(yīng)用程序會(huì)話或繼續(xù)進(jìn)入 "導(dǎo)出和探索多個(gè)信號(hào)的地真標(biāo)簽 "步驟,在該步驟中導(dǎo)出標(biāo)簽。

2.4 導(dǎo)出和探索多個(gè)信號(hào)的地面真值標(biāo)簽

按照 "為多個(gè)信號(hào)貼標(biāo)簽 "程序給信號(hào)貼上標(biāo)簽后,導(dǎo)出標(biāo)簽并探索如何存儲(chǔ)它們。

2.4.1 設(shè)置

打開(kāi)包含標(biāo)記信號(hào)的 Ground Truth Labeler 應(yīng)用程序會(huì)話。 可以從 MATLAB命令行打開(kāi)會(huì)話。例如,如果將該會(huì)話保存到名為groundTruthLabelingSession,輸入此命令。

groundTruthLabelergroundTruthLabelingSession.mat

在應(yīng)用程序工具條上,選擇 "導(dǎo)出標(biāo)簽">"到工作區(qū)"。在 "導(dǎo)出到工作空間 "窗口中,使用默認(rèn)的導(dǎo)出變量名稱 gTruth,然后單擊確定。應(yīng)用程序會(huì)將 groundTruthMultisignal 對(duì)象 gTruth 導(dǎo)出到 MATLAB 工作區(qū)。該對(duì)象包含

從應(yīng)用程序會(huì)話中捕獲的地面真值標(biāo)簽。

如果沒(méi)有將groundTruthMultisignal對(duì)象導(dǎo)出到工作區(qū),請(qǐng)從變量gTruth中加載一個(gè)預(yù)定義對(duì)象。用于加載該對(duì)象的函數(shù)作為輔助文件附在本例中。如果使用自己的對(duì)象,標(biāo)簽位置等數(shù)據(jù)可能與本例中顯示的數(shù)據(jù)不同。

if (~exist('gTruth','var'))

gTruth= helperLoadGTruthGetStarted;

end

顯示groundTruthMultisignal對(duì)象gTruth的屬性。該對(duì)象包含有關(guān)信號(hào)數(shù)據(jù)源、標(biāo)簽定義以及 ROI 和場(chǎng)景標(biāo)簽的信息。這些信息存儲(chǔ)在對(duì)象的單獨(dú)屬性中。

gTruth =

groundTruthMultisignal with properties:

DataSource: [1x2vision.labeler.loading.MultiSignalSource]

LabelDefinitions: [3x7 table]

ROILabelData: [1x1 vision.labeler.labeldata.ROILabelData]

SceneLabelData: [1x1 vision.labeler.labeldata.SceneLabelData]

在這個(gè)例子中, 將檢查每個(gè)屬性的內(nèi)容,以了解對(duì)象如何存儲(chǔ)地面真值標(biāo)簽。

2.4.2數(shù)據(jù)源

DataSource 屬性包含有關(guān)數(shù)據(jù)源的信息。此屬性包含兩個(gè) MultiSignalSource 對(duì)象:一個(gè)用于視頻源,一個(gè)用于點(diǎn)云序列源。顯示DataSource屬性的內(nèi)容。

ans = 1x2 heterogeneous MultiSignalSource(VideoSource, PointCloudSequenceSource) array with propert

SourceName

SourceParams

SignalName

SignalType

Timestamp

NumSignals

這些對(duì)象中存儲(chǔ)的信息包括數(shù)據(jù)源的路徑、它們所包含的信號(hào)名稱以及這些信號(hào)的時(shí)間戳。顯示數(shù)據(jù)源的信號(hào)名稱。

gTruth.DataSource.SignalName

ans = "video_01_city_c2s_fcw_10s"

ans="lidarSequence"

標(biāo)簽定義

LabelDefinitions 屬性包含了一個(gè)關(guān)于標(biāo)簽定義的信息表。顯示標(biāo)簽定義表。每一行都包含有關(guān) ROI 或場(chǎng)景標(biāo)簽定義的信息。汽車標(biāo)簽定義有兩行:一行用于在圖像信號(hào)上繪制矩形標(biāo)簽,另一行用于在點(diǎn)云信號(hào)上繪制立方體標(biāo)簽。

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}

層次列存儲(chǔ)了父ROI標(biāo)簽的子標(biāo)簽和屬性定義的信息。當(dāng)汽車標(biāo)簽繪制為矩形時(shí),顯示它的子標(biāo)簽和屬性信息。該標(biāo)簽包含一個(gè)子標(biāo)簽brakeLight,沒(méi)有屬性。

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

顯示父車標(biāo)簽的剎車燈子標(biāo)簽的信息。子標(biāo)簽包含一個(gè)屬性isOn。子標(biāo)簽不能有自己的子標(biāo)簽。

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

顯示剎車燈子標(biāo)簽的 isOn 屬性的信息。這個(gè)屬性沒(méi)有默認(rèn)值,所以DefaultValue字段為空。

gTruth.LabelDefinitions.Hierarchy{1}.brakeLight.isOn

ans =

struct with fields:

DefaultValue: []

Description: ''

ROI標(biāo)簽數(shù)據(jù)

ROILlabelData 屬性包含一個(gè) ROILabelData 對(duì)象,其屬性包含每個(gè)信號(hào)的 ROI 標(biāo)簽數(shù)據(jù)。屬性的名稱與信號(hào)的名稱相匹配。顯示對(duì)象屬性名。

gTruth.ROILabelData

ans =

ROILabelData with properties:

video_01_city_c2s_fcw_10s: [204x1 timetable]

lidarSequence: [34x1 timetable]

每個(gè)屬性都包含在每個(gè)信號(hào)時(shí)間戳處繪制的 ROI 標(biāo)簽的時(shí)間表,每個(gè)標(biāo)簽有一列。查看部分視頻和激光雷達(dá)點(diǎn)云序列時(shí)間表。設(shè)置一個(gè)時(shí)間間隔,從8到8.5秒。該時(shí)間間隔對(duì)應(yīng)于程序中"為多個(gè)信號(hào)標(biāo)注地面真值 "中標(biāo)注的時(shí)間間隔的開(kāi)始。視頻時(shí)間表比點(diǎn)云序列時(shí)間表包含更多行,因?yàn)橐曨l包含更多標(biāo)簽幀。

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}

查看時(shí)間間隔內(nèi)第一幀視頻的矩形車標(biāo)簽。標(biāo)簽數(shù)據(jù)存儲(chǔ)在一個(gè)結(jié)構(gòu)中。

videoLabels.car{1}

ans =

struct with fields:

Position: [296 203 203 144]

brakeLight: [1x2 struct]

Position(位置)字段存儲(chǔ)汽車標(biāo)簽的位置。這個(gè)框架只包含一個(gè)車標(biāo),所以在這種情況下,Position只包含一個(gè)矩形邊界框。邊界框位置的形式為[x y w h],其中。

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

- w指定矩形的寬度,也就是矩形沿x軸的長(zhǎng)度。

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

汽車標(biāo)簽在這個(gè)框架上還包含兩個(gè)剎車燈子標(biāo)簽。查看brakeLight子標(biāo)簽。子標(biāo)簽存儲(chǔ)在一個(gè)結(jié)構(gòu)數(shù)組中,每個(gè)子標(biāo)簽在框架上繪制一個(gè)結(jié)構(gòu)。

videoLabels.car{1}.brakeLight

ans =

1x2 struct array with fields:

Position isOn

查看子標(biāo)簽的邊界框位置。

videoLabels.car{1}.brakeLight.Position

ans =

304 245 50 46

ans =

435 243 54 51

查看每個(gè)子標(biāo)簽中isOn屬性的值。對(duì)于兩個(gè)子標(biāo)簽,此屬性被設(shè)置為邏輯1(true)。

videoLabels.car{1}.brakeLight.isOn

ans = logical

1

ans = logical

1

現(xiàn)在查看時(shí)間間隔內(nèi)第一個(gè)點(diǎn)云序列幀的立方體車標(biāo)簽。點(diǎn)云序列不支持子標(biāo)簽或?qū)傩?。立方體車標(biāo)簽不存儲(chǔ)在結(jié)構(gòu)的位置字段中,而是存儲(chǔ)在一個(gè)M乘9的矩陣中,其中M是立方體標(biāo)簽的數(shù)量。因?yàn)檫@個(gè)框架只包含一個(gè)立方體標(biāo)簽,在這種情況下,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, andzctr specify the center of the cuboid. xlen, ylen, and zlen, xrot, yrot, zrot],其中:

- xlen, ylen, 和 zlen 分別指定了立方體在應(yīng)用旋轉(zhuǎn)之前沿 x-, y-, 和 z-軸的長(zhǎng)度。

- xrot、yrot和zrot分別指定了立方體沿x軸、y軸和z軸的旋轉(zhuǎn)角度。這些角度在相應(yīng)軸的正向看時(shí)為順時(shí)針正值。

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

場(chǎng)景標(biāo)簽數(shù)據(jù)

SceneLabelData 屬性包含一個(gè) SceneLabelData 對(duì)象,其屬性包含所有信號(hào)的場(chǎng)景標(biāo)簽數(shù)據(jù)。屬性的名稱與場(chǎng)景標(biāo)簽的名稱相匹配。顯示對(duì)象屬性名

gTruth.SceneLabelData

ans =

SceneLabelData with properties:

daytime: [0 sec 10.15 sec]

日間標(biāo)簽適用于整個(gè)時(shí)間間隔,約為10秒。

使用 "地面真值 "標(biāo)簽

本例中顯示的標(biāo)簽僅用于說(shuō)明目的。對(duì)于自己的標(biāo)簽,在 導(dǎo)出標(biāo)簽后,可以使用它們作為對(duì)象探測(cè)器的訓(xùn)練數(shù)據(jù)。要從groundTruthMultisignal對(duì)象中收集標(biāo)簽數(shù)據(jù)用于訓(xùn)練,請(qǐng)使用gatherLabelData函數(shù)。

要共享已標(biāo)記的地真數(shù)據(jù),請(qǐng)共享包含groundTruthMultisignal對(duì)象的地真MAT-文件,而不是包含應(yīng)用程序會(huì)話的MAT-文件。

2.5 地面真實(shí)標(biāo)簽中的來(lái)源與信號(hào)

在 Ground Truth Labeler 應(yīng)用中,源是包含要加載的數(shù)據(jù)的文件或文件夾。信號(hào)是指來(lái)自該源的、 要標(biāo)記的數(shù)據(jù)。一個(gè)源可以包含一個(gè)或多個(gè)信號(hào)。

在許多情況下,一個(gè)信號(hào)源只包含一個(gè)信號(hào)??紤]一個(gè)AVI視頻文件。信號(hào)源是AVI文件,信號(hào)是 從該文件中加載的視頻。其他只有一個(gè)信號(hào)的信號(hào)源包括Velodyne?數(shù)據(jù)包捕獲(PCAP)文件和包含圖像或點(diǎn)云序列的文件夾。

rosbag等源可以包含多個(gè)信號(hào)。考慮一個(gè)名為 cal_loop.bag 的 rosbag。該rosbag包含從安裝在車輛上的四個(gè)傳感器獲得的數(shù)據(jù)。源是rosbag文件。rosbag中的信號(hào)是sensor_msgs主題,對(duì)應(yīng)于四個(gè)傳感器的數(shù)據(jù)。這些主題有這些名稱。

- /center_camera/image_color - 從中心攝像機(jī)獲得的圖像序列。

- /left_camera/image_color - 從左側(cè)攝像頭獲取的圖像序列。

- /right_camera/image_color - 從右側(cè)攝像頭獲取的圖像序列。

- /velodyne_points - 從Velodyne激光雷達(dá)傳感器獲得的點(diǎn)云序列。

這張圖描述了信號(hào)源與其四個(gè)信號(hào)之間的關(guān)系。

2.6 Ground Truth Labeler的鍵盤(pán)快捷鍵和鼠標(biāo)動(dòng)作2.6.1 標(biāo)簽定義任務(wù)執(zhí)行在 "ROI 標(biāo)簽定義 "窗格中,瀏覽 ROI 標(biāo)簽及其組。上箭頭或下箭頭在 "場(chǎng)景標(biāo)簽定義 "窗格中,瀏覽場(chǎng)景標(biāo)簽及其組。按住Alt鍵,按向上箭頭或向下箭頭。在組內(nèi)重新排列標(biāo)簽或在組間移動(dòng)標(biāo)簽。點(diǎn)擊并拖動(dòng)標(biāo)簽重新排列組別點(diǎn)擊并拖動(dòng)組

2.6.2 幀導(dǎo)航和時(shí)間間隔設(shè)置

在幀之間導(dǎo)航并更改信號(hào)的時(shí)間間隔。這些控件位于應(yīng)用程序的底部窗格中。

任務(wù)執(zhí)行轉(zhuǎn)到下一幀右箭頭轉(zhuǎn)到上一幀左箭頭到最后一格? - PC。結(jié)束? - Mac。按住Fn,然后按右箭頭去第一幀? - PC: 首頁(yè)? - Mac。按住Fn,然后按左箭頭在時(shí)間間隔框和框架導(dǎo)航按鈕中導(dǎo)航Tab時(shí)間間隔設(shè)置在活動(dòng)的時(shí)間間隔框內(nèi)按 Enter 鍵(開(kāi)始時(shí)間、當(dāng)前時(shí)間或結(jié)束時(shí)間)。

2.6.3 標(biāo)簽窗口

執(zhí)行標(biāo)簽操作,如添加、移動(dòng)和刪除感興趣區(qū)域(ROI)。ROI可以是像素標(biāo)簽,也可以是非像素ROI標(biāo)簽,包括直線、矩形、立方體和投影立方體。

任務(wù)執(zhí)行撤銷貼標(biāo)動(dòng)作Ctrl+Z重做貼標(biāo)動(dòng)作Ctrl+Y選擇所有非像素ROICtrl+A選擇特定的非像素ROIHold Ctrl and click the ROIs you want to select切割選定的非像素ROICtrl+X將選定的非像素ROI復(fù)制到剪貼板上。Ctrl+C粘貼復(fù)制的非像素ROI- 如果子標(biāo)簽被復(fù)制,則子標(biāo)簽和它的父標(biāo)簽都會(huì)被粘貼。- 如果復(fù)制了父標(biāo)簽,則只粘貼父標(biāo)簽,不粘貼其子標(biāo)簽。有關(guān)詳細(xì)信息,請(qǐng)參見(jiàn) "使用子標(biāo)簽和屬性來(lái)標(biāo)記地面真值數(shù)據(jù)"(計(jì)算機(jī)視覺(jué)工具箱)。Ctrl+V在選定的非像素ROI標(biāo)簽之間切換。只能在相同類型的標(biāo)簽之間進(jìn)行切換。例如,如果 選擇一個(gè)矩形ROI, 只能在其他矩形ROI之間切換。Tab or Shift+Tab移動(dòng)繪制的非像素ROI標(biāo)簽。Hold Ctrl and press the up, down, left or right arrows統(tǒng)一調(diào)整矩形ROI的尺寸。Ctrl+Plus (+) or Ctrl+Minus (-)刪除選定的非像素ROIDelete復(fù)制所有像素ROICtrl+Shift+C切斷所有像素ROICtrl+Shift+X粘貼復(fù)制或剪切的像素ROI。Ctrl+Shift+V刪除所有像素ROICtrl+Shift+Delete填充所有或所有剩余像素Shift+click

2.6.4 調(diào)整立方體大小和移動(dòng)

繪制立方體來(lái)標(biāo)注激光雷達(dá)點(diǎn)云。關(guān)于如何有效地使用這些快捷鍵來(lái)標(biāo)注激光雷達(dá)點(diǎn)云的例子,請(qǐng)參見(jiàn)"為物體探測(cè)標(biāo)注激光雷達(dá)點(diǎn)云"。

要啟用這些快捷鍵, 必須先在點(diǎn)云框內(nèi)點(diǎn)擊選擇它。

任務(wù)執(zhí)行在將立方體應(yīng)用到點(diǎn)云之前,在所有維度上均勻地調(diào)整其大小。按住A,向上移動(dòng)滾輪增大尺寸或向下移動(dòng)滾輪減小尺寸。在將立方體應(yīng)用于點(diǎn)云之前,僅沿X維度調(diào)整其大小。按住X,向上移動(dòng)滾輪以增大尺寸或向下移動(dòng)滾輪以減小尺寸。在將立方體應(yīng)用到點(diǎn)云之前,只沿y維度調(diào)整其大小。按住Y鍵,向上移動(dòng)滾輪以增大尺寸或向下移動(dòng)滾輪以減小尺寸。在將立方體應(yīng)用于點(diǎn)云之前,僅沿Z維度調(diào)整其大小。按住Z鍵,向上移動(dòng)滾輪以增大尺寸,向下移動(dòng)滾輪以減小尺寸。將立方體應(yīng)用于點(diǎn)云后,調(diào)整其大小。點(diǎn)擊并拖動(dòng)其中一個(gè)立方體面移動(dòng)一個(gè)立方體按住Shift鍵,點(diǎn)擊并拖動(dòng)其中一個(gè)立方體面。立方體將沿著所選面的尺寸進(jìn)行轉(zhuǎn)換。同時(shí)移動(dòng)多個(gè)立方體按照以下步驟進(jìn)行操作。1 按住Ctrl鍵,點(diǎn)擊你想移動(dòng)的立方體。2 按住Shift鍵,點(diǎn)擊并拖動(dòng)所選立方體中的一個(gè)面。立方體會(huì)沿著所選面的維度進(jìn)行轉(zhuǎn)換。

多線圖

在框架上繪制ROI線標(biāo)簽。ROI線標(biāo)簽是多條線,也就是說(shuō)它們是由一條或多條線段組成的。

任務(wù)執(zhí)行將一條多段線提交到幀中,不包括當(dāng)前活動(dòng)的線段。繪製多段線時(shí),按Enter鍵或右鍵。將一條多段線提交給框架,包括當(dāng)前活動(dòng)的線段。在繪制多段線時(shí)雙擊。新的線段將在 雙擊的位置被提交。刪除之前在多段線中創(chuàng)建的線段。Backspace取消繪圖并刪除整個(gè)多段線Escape

2.6.5 多邊形繪圖

繪制多邊形來(lái)標(biāo)記框架上的像素。

任務(wù)執(zhí)行將一個(gè)多邊形提交到幀中,不包括當(dāng)前活動(dòng)的線段。繪制多邊形時(shí),按 Enter 或右鍵。多邊形通過(guò)在之前提交的點(diǎn)和多邊形的第一個(gè)點(diǎn)之間形成一條線來(lái)關(guān)閉。將一個(gè)多邊形提交到幀中,包括當(dāng)前活動(dòng)的線段。繪制多邊形時(shí)雙擊。在雙擊的點(diǎn)和多邊形中的第一個(gè)點(diǎn)之間形成一條線,多邊形就會(huì)關(guān)閉。從多邊形中刪除之前創(chuàng)建的線段。Backspace取消繪圖并刪除整個(gè)多邊形Escape

2.6.6 縮放、平移和旋轉(zhuǎn)任務(wù)執(zhí)行放大或縮小圖像框架向上移動(dòng)滾輪可放大或向下移動(dòng)可縮小。如果畫(huà)面處于平移模式,則不支持縮放。要啟用縮放,在框架的右上角,單擊 "平移 "按鈕以禁用平移,或單擊其中一個(gè)縮放按鈕。放大圖像框架的特定部分在框架的右上角,單擊 "放大 "按鈕,然后在框架內(nèi)單擊并拖動(dòng),在 要放大的部分周圍繪制一個(gè)框。不支持放大點(diǎn)云的特定部分。平移整個(gè)圖像框按上、下、左或右箭頭。放大或縮小點(diǎn)云框架。在顯示屏的左上角,單擊 "放大 "或 "縮小 "按鈕。然后,向上(放大)或向下(縮小)移動(dòng)滾輪?;蛘?,向上或向右(放大)或向下或向左(縮?。┮苿?dòng)光標(biāo)。所有模式(平移、縮放和旋轉(zhuǎn))都支持放大和縮小。在點(diǎn)云框架上平移按住Shift鍵,然后按上、下、左或右箭頭旋轉(zhuǎn)一個(gè)點(diǎn)云框架按住R鍵,點(diǎn)擊并拖動(dòng)點(diǎn)云框架。注:只允許偏航旋轉(zhuǎn)。

2.6.7 應(yīng)用程序會(huì)話任務(wù)執(zhí)行保存當(dāng)前任務(wù)Ctrl+S

2.7 控制信號(hào)幀的回放以進(jìn)行標(biāo)簽化處理

Ground Truth Labeler應(yīng)用可以同時(shí)標(biāo)注多個(gè)圖像或激光雷達(dá)點(diǎn)云信號(hào)。當(dāng)播放信號(hào)或在幀之間導(dǎo)航時(shí),可以控制哪個(gè)

通過(guò)改變信號(hào)顯示的幀率來(lái)顯示每個(gè)信號(hào)的幀數(shù)。

2.7.1 信號(hào)幀

所標(biāo)注的信號(hào)是由幀組成的。每一幀都有一個(gè)與之相關(guān)的離散時(shí)間戳,但應(yīng)用程序?qū)⒚恳粠暈椋踭0,t1)的持續(xù)時(shí)間,其中。

- t0是當(dāng)前幀的時(shí)間戳。

- t1是下一幀的時(shí)間戳。

當(dāng)為應(yīng)用中顯示的幀打上標(biāo)簽時(shí),該標(biāo)簽適用于該幀的持續(xù)時(shí)間。

幀之間的時(shí)間間隔是時(shí)間單位,如秒。這個(gè)時(shí)間間隔就是信號(hào)的幀速率。將信號(hào)的時(shí)間戳指定為持續(xù)時(shí)間向量。每個(gè)時(shí)間戳對(duì)應(yīng)于一個(gè)幀的開(kāi)始。

2.7.2 主信號(hào)

當(dāng)將多個(gè)信號(hào)加載到一個(gè)新的應(yīng)用程序會(huì)話中時(shí),默認(rèn)情況下,應(yīng)用程序會(huì)將具有最高幀率的信號(hào)指定為主信號(hào)。當(dāng) 回放信號(hào)或在幀之間導(dǎo)航時(shí),應(yīng)用程序?qū)@示主信號(hào)的所有幀。

在應(yīng)用程序中, 只能標(biāo)記主信號(hào)時(shí)間范圍內(nèi)的信號(hào)。當(dāng)查看主信號(hào)中的一幀時(shí),應(yīng)用程序會(huì)顯示該時(shí)間戳處的所有其他信號(hào)的幀。在這種情況下,當(dāng)在幀之間導(dǎo)航時(shí),來(lái)自幀率較低的信號(hào)的幀有時(shí)會(huì)重復(fù)。

考慮一個(gè)包含兩個(gè)信號(hào)的應(yīng)用會(huì)話:一個(gè)視頻v,和一個(gè)激光雷達(dá)點(diǎn)云序列pc。

- 視頻的幀率為每秒4幀,每幀持續(xù)時(shí)間為0.25秒。該信號(hào)為主信號(hào)。

- 點(diǎn)云序列的幀率為每秒2.5幀,每幀持續(xù)時(shí)間為0.4秒。

本圖顯示了本方案中第一秒內(nèi)顯示的幀。

在時(shí)間0時(shí),應(yīng)用程序會(huì)顯示每個(gè)信號(hào)的初始幀:v1代表視頻,pc1代表點(diǎn)云序列。當(dāng)單擊 "下一幀 "按鈕時(shí),時(shí)間會(huì)跳轉(zhuǎn)到0.25秒。

- 對(duì)于視頻,應(yīng)用程序會(huì)顯示下一幀,v2。

- 對(duì)于點(diǎn)云序列,應(yīng)用程序再次顯示pc1。

應(yīng)用程序重復(fù)點(diǎn)云幀,因?yàn)橄乱粠c(diǎn)云幀,pc2,不會(huì)開(kāi)始,直到

0.4秒。要顯示此幀,必須將 "當(dāng)前時(shí)間 "參數(shù)設(shè)置為0.4秒,或者再次單擊 "下一幀 "按鈕,導(dǎo)航到0.5秒的時(shí)間。

當(dāng)你想顯示和標(biāo)注所有信號(hào)的所有幀時(shí),請(qǐng)保留幀率最高的信號(hào)作為主信號(hào)。

2.7.3 改變主信號(hào)

在加載信號(hào)后, 可以從 "播放控制設(shè)置 "對(duì)話框中更改主信號(hào)。要打開(kāi)這個(gè)對(duì)話框,在滑塊下方,點(diǎn)擊時(shí)鐘設(shè)置按鈕。然后,選擇主信號(hào),將主信號(hào)更改為加載到應(yīng)用程序中的不同信號(hào)。當(dāng)將主信號(hào)更改為幀率較低的信號(hào)時(shí),來(lái)自幀率較高的信號(hào)的幀有時(shí)會(huì)被跳過(guò)。

考慮上一節(jié)所述的應(yīng)用會(huì)話,除了用點(diǎn)云序列作為主信號(hào)。

當(dāng)從pc2跳到pc3時(shí),應(yīng)用程序會(huì)完全跳過(guò)v3。只有當(dāng)將 "當(dāng)前時(shí)間 "設(shè)置為[0.5,0.75)范圍內(nèi)的時(shí)間時(shí),才能看到v3。

當(dāng)想只在同步時(shí)間標(biāo)記信號(hào)時(shí),指定幀率最低的信號(hào)作為主信號(hào)。

開(kāi)始標(biāo)注后更改主信號(hào)會(huì)影響現(xiàn)有的場(chǎng)景標(biāo)簽。例如,假設(shè)將一個(gè)場(chǎng)景標(biāo)簽應(yīng)用于主信號(hào)的整個(gè)時(shí)間范圍。如果 改變主信號(hào),時(shí)間范圍就會(huì)改變。如果新的主信號(hào)具有更長(zhǎng)的持續(xù)時(shí)間,那么場(chǎng)景標(biāo)簽就不再適用于整個(gè)時(shí)間范圍。

如果 將新信號(hào)加載到應(yīng)用會(huì)話中,而該信號(hào)的幀率高于現(xiàn)有信號(hào),則應(yīng)用不會(huì)自動(dòng)將新信號(hào)指定為主信號(hào)。只有在第一次將信號(hào)加載到會(huì)話中時(shí),應(yīng)用程序才會(huì)選擇一個(gè)主信號(hào)。要將新信號(hào)指定為主信號(hào) 信號(hào),從 "播放控制設(shè)置 "對(duì)話框中的主信號(hào)列表中選擇該信號(hào)。

2.7.4 顯示所有時(shí)間戳

在 "播放控制設(shè)置 "對(duì)話框中, 可以選擇所有時(shí)間戳來(lái)顯示所有信號(hào)。選擇此選項(xiàng)可以驗(yàn)證和可視化加載的幀。不要選擇此選項(xiàng)進(jìn)行標(biāo)注。

當(dāng) 顯示所有時(shí)間戳?xí)r,幀之間的導(dǎo)航是不均勻的,并且多個(gè)信號(hào)的幀是重復(fù)的。

考慮前幾節(jié)中描述的應(yīng)用會(huì)話,除了顯示所有時(shí)間戳。本圖顯示了顯示的幀。

2.7.5 指定時(shí)間戳

可以指定自己的時(shí)間戳向量,并使用這些時(shí)間戳作為應(yīng)用程序用于在幀之間導(dǎo)航的時(shí)間戳。在"播放控制設(shè)置 "對(duì)話框中,選擇 "來(lái)自工作區(qū)的時(shí)間戳",單擊 "來(lái)自工作區(qū) "按鈕,并從MATLAB工作空間中指定一個(gè)持續(xù)時(shí)間向量。。

2.7.6 框架顯示和自動(dòng)化

當(dāng) 選擇一個(gè)信號(hào)進(jìn)行自動(dòng)化時(shí),在自動(dòng)化會(huì)話中,應(yīng)用程序?qū)@示所選信號(hào)在指定時(shí)間間隔內(nèi)的所有幀。因?yàn)?一次只能自動(dòng)處理一個(gè)信號(hào),所以應(yīng)用程序會(huì)以該信號(hào)的幀速率播放信號(hào)幀。

2.8 標(biāo)簽激光雷達(dá)點(diǎn)云用于物體探測(cè)

通過(guò)Ground Truth Labeler應(yīng)用, 可以對(duì)從激光雷達(dá)傳感器獲得的點(diǎn)云數(shù)據(jù)進(jìn)行標(biāo)注。要對(duì)點(diǎn)云進(jìn)行標(biāo)注, 需要使用立方體,立方體是在點(diǎn)云中的點(diǎn)周圍繪制的三維邊界框??梢允褂昧⒎襟w標(biāo)簽來(lái)創(chuàng)建用于訓(xùn)練物體探測(cè)器的地面真實(shí)數(shù)據(jù)。這個(gè)例子將引導(dǎo) 使用立方體標(biāo)記激光雷達(dá)點(diǎn)云數(shù)據(jù)。

2.8.1 設(shè)置激光雷達(dá)點(diǎn)云標(biāo)簽

將點(diǎn)云序列加載到應(yīng)用程序中,并定義一個(gè)立方體標(biāo)簽。

1 打開(kāi) "地面真值標(biāo)簽器 "應(yīng)用程序。在 MATLAB 命令提示符下,輸入此命令。

GroundTruthLabeler

2 在應(yīng)用程序工具條上,選擇打開(kāi) > 添加信號(hào)。

3 在 "添加/刪除信號(hào) "對(duì)話框中,將 "源類型 "設(shè)置為 "點(diǎn)云序列"。

4 在 "文件夾名稱 "參數(shù)中,瀏覽包含點(diǎn)云序列的 lidarSequence 文件夾。Matlabroot 是 的 MATLAB 安裝文件夾的完整路徑,如由

matlabroot函數(shù)。

matlabroot/toolbox/driving/drivingdata/lidarSequence

5 單擊添加源加載點(diǎn)云序列,使用默認(rèn)的時(shí)間戳。然后,單擊 "確定 "關(guān)閉 "添加/刪除信號(hào) "對(duì)話框。應(yīng)用程序?qū)@示序列中的第一個(gè)點(diǎn)云。

6 在應(yīng)用程序左側(cè)的 ROI 標(biāo)簽窗格中,單擊 "標(biāo)簽"。

7 創(chuàng)建一個(gè)名為汽車的矩形/立方體標(biāo)簽。單擊 "確定"。

本圖顯示了遵循這些步驟后的GroundTruth Labeler應(yīng)用程序設(shè)置。

2.8.2 縮放、平移和旋轉(zhuǎn)框架

縮放、平移和三維旋轉(zhuǎn)選項(xiàng)可幫助在點(diǎn)云中定位和標(biāo)記感興趣的對(duì)象。使用這些工具放大并居中于第一個(gè)點(diǎn)云框架中的被控車輛。被控車輛位于點(diǎn)云的原點(diǎn)。

1在框架的右上角,點(diǎn)擊放大按鈕。

2點(diǎn)擊被控車輛,直到你放大到足以看到構(gòu)成它的點(diǎn)。

可選地, 可以使用平移按鈕或旋轉(zhuǎn)3D按鈕來(lái)幫助 查看更多的被控車輛點(diǎn)。要查看查看或旋轉(zhuǎn)點(diǎn)云的其他選項(xiàng),請(qǐng)單擊旋轉(zhuǎn)3D按鈕,然后右鍵單擊點(diǎn)云框架。提供的選項(xiàng)與pcshow功能提供的選項(xiàng)相同。

2.8.3 隱藏地面

點(diǎn)云數(shù)據(jù)包含了來(lái)自地面的點(diǎn),這可能會(huì)增加隔離被控車輛點(diǎn)的難度。應(yīng)用提供了一個(gè)選項(xiàng),通過(guò)使用segroundFromLidarData功能來(lái)隱藏地面。

將地面點(diǎn)從點(diǎn)云中隱藏起來(lái)。在應(yīng)用工具條上,在Lidar選項(xiàng)卡上,點(diǎn)擊隱藏地面。此設(shè)置適用于點(diǎn)云中的所有幀。

此選項(xiàng)僅將地面從顯示器中隱藏起來(lái),不會(huì)從點(diǎn)云中刪除地面數(shù)據(jù)。它不會(huì)從點(diǎn)云中刪除地面數(shù)據(jù)。如果在點(diǎn)云中標(biāo)注了包含隱藏地面點(diǎn)的部分,當(dāng) 導(dǎo)出地面真值標(biāo)簽時(shí),這些地面點(diǎn)就是該標(biāo)簽的一部分。

要配置地面隱藏算法,請(qǐng)單擊 "地面設(shè)置",并調(diào)整 "隱藏地面 "對(duì)話框中的選項(xiàng)。

標(biāo)簽立方體

使用立方體標(biāo)簽為被控車輛貼上標(biāo)簽。

1 在左側(cè)的ROI標(biāo)簽窗格中,單擊汽車標(biāo)簽。

2 通過(guò)點(diǎn)擊lidarSequence標(biāo)簽選擇激光雷達(dá)點(diǎn)序列框架。

要啟用標(biāo)簽鍵盤(pán)快捷鍵,必須先選擇信號(hào)框。

3 將指針移動(dòng)到被控車輛上,直到灰色的預(yù)覽立方體將被控車輛的點(diǎn)包圍起來(lái)。包圍在預(yù)覽立方體中的點(diǎn)會(huì)以黃色高亮顯示。

要調(diào)整預(yù)覽立方體的大小,按住A鍵并向上或向下移動(dòng)鼠標(biāo)滾輪。

可選地,要僅在x-、y-或z方向上調(diào)整預(yù)覽立方體的大小,可在按住x、y或z鍵的同時(shí)分別上下移動(dòng)滾輪。

4 單擊信號(hào)框,繪制立方體。由于應(yīng)用工具條上默認(rèn)選擇了 "收縮以適應(yīng) "選項(xiàng),因此立方體會(huì)收縮以適應(yīng)其中的點(diǎn)。

要想對(duì)點(diǎn)云的標(biāo)簽進(jìn)行更多控制,請(qǐng)?jiān)趹?yīng)用工具條上單擊 "卡入集群"。當(dāng) 在選擇此選項(xiàng)的情況下進(jìn)行標(biāo)注時(shí),立方體會(huì)通過(guò)使用segmentLidarData功能卡接到最近的點(diǎn)云集群。要配置點(diǎn)云集群,請(qǐng)單擊 "集群設(shè)置 "并在對(duì)話框中調(diào)整選項(xiàng)。要在幀之間導(dǎo)航時(shí)查看點(diǎn)云簇,請(qǐng)?jiān)诖藢?duì)話框中選擇 "查看簇"。在回放信號(hào)期間,點(diǎn)云簇的可視化將被禁用。

修改立方體標(biāo)簽

繪制完立方體標(biāo)簽后,可以調(diào)整立方體的大小或移動(dòng)立方體,使標(biāo)簽更精確。例如,在前面的過(guò)程中,"縮小以適應(yīng) "選項(xiàng)將立方體標(biāo)簽縮小以適應(yīng)探測(cè)到的被控車輛點(diǎn)。實(shí)際的被控車輛比這個(gè)立方體稍大。擴(kuò)大尺寸的這個(gè)立方體,直到它更準(zhǔn)確地反映被控車輛的尺寸。

1 要啟用點(diǎn)云標(biāo)簽鍵盤(pán)快捷鍵,請(qǐng)確認(rèn)選擇lidarSequence標(biāo)簽。

2 在信號(hào)框中,單擊繪制的立方體標(biāo)簽。拖動(dòng)面來(lái)展開(kāi)立方體。

3 移動(dòng)立方體,直到它在被控車輛上居中。按住Shift鍵,拖動(dòng)立方體的面。

2.8.4 將立方體應(yīng)用于多個(gè)框架

在幀之間標(biāo)注對(duì)象時(shí),可以復(fù)制立方體標(biāo)簽并粘貼到其他幀。

1 選擇被控車輛的立方體,按Ctrl+C復(fù)制。

2 在應(yīng)用程序的底部,單擊 "下一幀 "按鈕以導(dǎo)航到下一個(gè)框架。

3 按Ctrl+V將立方體粘貼到幀上。

還可以使用自動(dòng)化算法將一個(gè)標(biāo)簽應(yīng)用于多個(gè)幀。該應(yīng)用程序提供了一個(gè)內(nèi)置的時(shí)間插值算法,用于標(biāo)記中間幀中的點(diǎn)云。

2.8.5 配置顯示

該應(yīng)用程序?yàn)榕渲眯盘?hào)幀的顯示提供了其他選項(xiàng)。

2.8.4.1更改彩色地圖

為了對(duì)點(diǎn)云顯示進(jìn)行額外的控制,在Lidar選項(xiàng)卡上, 可以更改colormap選項(xiàng)。也可以通過(guò)改變Colormap Value參數(shù)來(lái)改變colormap值,該參數(shù)有以下選項(xiàng)。

- Z高度 - Colormap值沿Z軸增加。在尋找高于地面的物體(如交通標(biāo)志)時(shí)選擇此選項(xiàng)。

- Radial Distance(徑向距離)--Colormap值會(huì)在遠(yuǎn)離點(diǎn)云原點(diǎn)的地方增加。在尋找遠(yuǎn)離原點(diǎn)的物體時(shí)選擇此選項(xiàng)。

2.8.4.2 改變視圖

在應(yīng)用程序工具條的激光雷達(dá)選項(xiàng)卡上,"相機(jī)視圖 "部分包含了用于更改查看點(diǎn)云的視角的選項(xiàng)。這些視圖以點(diǎn)云原點(diǎn)為中心。

這就是被控車輛的假定位置??梢詮倪@些視圖中選擇。

- 鳥(niǎo)瞰圖 -- 從被控車車的正上方查看點(diǎn)云。

- 追逐視圖--從被控車輛后方幾米處查看點(diǎn)云。

- 被控視圖--從被控車輛內(nèi)部查看點(diǎn)云。

這些視圖假定車輛沿著點(diǎn)云的正x方向行駛。如果車輛以不同的方向行駛,請(qǐng)?jiān)?"被控方向 "參數(shù)中設(shè)置適當(dāng)?shù)倪x項(xiàng)。

在驗(yàn)證 的點(diǎn)云標(biāo)簽時(shí),請(qǐng)使用這些視圖。在標(biāo)注時(shí)避免使用這些視圖。相反,使用默認(rèn)視圖,并通過(guò)使用平移、縮放和旋轉(zhuǎn)選項(xiàng)來(lái)定位要標(biāo)記的對(duì)象。

2.9 創(chuàng)建用于加載自定義Ground Truth數(shù)據(jù)源的類

在Ground Truth Labeler應(yīng)用中, 可以對(duì)來(lái)自圖像和點(diǎn)云數(shù)據(jù)源的信號(hào)進(jìn)行標(biāo)記。這些數(shù)據(jù)源包括視頻、圖像序列、點(diǎn)云序列、Velodyne數(shù)據(jù)包捕獲、視頻、圖像和點(diǎn)云數(shù)據(jù)。

(PCAP)文件和rosbags。要加載應(yīng)用程序不原生支持的數(shù)據(jù)源,可以創(chuàng)建一個(gè)類來(lái)將該源加載到應(yīng)用程序中。

此示例展示了如何使用預(yù)定義的數(shù)據(jù)源類之一,將數(shù)據(jù)源的信號(hào)加載到Ground Truth Labeler應(yīng)用程序中:vision.labeleler.loading.PointCloudSequenceSource類。該應(yīng)用程序使用這個(gè)特定的類

以從文件夾中加載點(diǎn)云數(shù)據(jù) (PCD) 或多邊形 (PLY) 文件的序列。

要開(kāi)始使用,請(qǐng)打開(kāi)vision.labeleler.loading.PointCloudSequenceSource 類。使用該類描述的屬性和方法來(lái)幫助 編寫(xiě)自己的自定義類。

edit vision.labeler.loading.PointCloudSequenceSource

2.9.1 自定義類文件夾

Ground Truth Labeler應(yīng)用程序僅在這些文件處于+vision/的情況下才會(huì)識(shí)別數(shù)據(jù)源類。

MATLAB搜索路徑上的+labeler/+loading文件夾。

vision.labeler.loading.PointCloudSequenceSource類和其他預(yù)定義的數(shù)據(jù)源類都存儲(chǔ)在這個(gè)文件夾中。

matlabroot/toolbox/vision/vision+vision/+labeler/+loading

在這個(gè)路徑中,matlabroot是你的MATLAB文件夾的根目錄。

將你創(chuàng)建的數(shù)據(jù)源類保存到這個(gè)文件夾中。或者,創(chuàng)建你自己的+vision/

+labeler/+loading文件夾,將其添加到MATLAB搜索路徑,并將你的類保存到這個(gè)文件夾中。

2.9.2 類別定義

數(shù)據(jù)源類必須繼承自vision.labeleler.loading.MultiSignalSource類。查看vision.labeleler.loading.PointCloudSequenceSource 類的類定義。

classdef PointCloudSequenceSource <vision.labeleler.loading.MultiSignalSource

當(dāng)把一個(gè)點(diǎn)云序列信號(hào)加載到Ground Truth Labeler應(yīng)用中時(shí),應(yīng)用會(huì)創(chuàng)建一個(gè)類的實(shí)例,即PointCloudSequenceSource對(duì)象。在將此信號(hào)標(biāo)記在

app,當(dāng)導(dǎo)出標(biāo)簽時(shí),導(dǎo)出的groundTruthMultisignal對(duì)象會(huì)存儲(chǔ)這個(gè)

PointCloudSequenceSource對(duì)象的DataSource屬性中。

在定義你的數(shù)據(jù)源類時(shí),用你的自定義數(shù)據(jù)源類的名稱來(lái)代替PointCloudSequenceSource。

2.9.3 類屬性

數(shù)據(jù)源類必須定義這些抽象的常量屬性。

- 名稱 - 一個(gè)字符串標(biāo)量,指定數(shù)據(jù)源的類型。

- 描述 - 描述該類的一個(gè)字符串標(biāo)量。

在Ground Truth Labeler應(yīng)用中,當(dāng)你從 "添加/刪除信號(hào) "對(duì)話框中加載信號(hào)時(shí),Name字符串會(huì)作為一個(gè)選項(xiàng)出現(xiàn)在Source Type參數(shù)中。本圖顯示了ision.labeleler.loading.PointCloudSequenceSource類的Name字符串。

描述字符串不會(huì)出現(xiàn)在對(duì)話框中。但是,名稱和描述字符串在這個(gè)類的實(shí)例中被存儲(chǔ)為只讀屬性。

這段代碼顯示了類的名稱和屬性字符串。vision.labeleler.loading.PointCloudSequenceSourceClass。

properties (Constant)

Name = "PointCloud Sequence"

Description = "A PointCloud sequence reader"

end

在定義的數(shù)據(jù)源類時(shí),定義名稱和描述屬性值以匹配 的自定義數(shù)據(jù)源的名稱和描述。還可以定義任何特定于加載 的數(shù)據(jù)源的附加私有屬性。vision.labeleler.loading.PointCloudSequenceSource 類的特定數(shù)據(jù)源屬性在本示例中沒(méi)有顯示,但 可以在類文件中查看它們。

自定義加載面板的方法

在數(shù)據(jù)源類中,customizeLoadPanel方法控制了應(yīng)用程序的 "添加/刪除信號(hào) "對(duì)話框中加載信號(hào)的面板的顯示。這個(gè)面板是使用uipanel函數(shù)創(chuàng)建的Panel對(duì)象。該面板包含從數(shù)據(jù)源加載信號(hào)所需的參數(shù)和控件。

本圖顯示了vision.labeleler.loading.PointCloudSequenceSource類的加載面板。在 "源類型 "列表中,當(dāng)選擇點(diǎn)云序列時(shí),應(yīng)用程序會(huì)調(diào)用customizeLoadPanel方法,并加載到 點(diǎn)云序列的面板。

這段代碼顯示了vision.labeleler.loading.PointCloudSequenceSource類的customizeLoadPanel方法。該方法使用uicontrol函數(shù)來(lái)定義面板中的文本、按鈕和參數(shù)。

function customizeLoadPanel(this,panel) this.Panel = panel;

computePositions(this);

this.FolderPathText = uicontrol('Parent',this.Panel,... 'Style','text',...

'String', 'Folder Name: ',... 'Position',this.FolderPathTextPos,... 'HorizontalAlignment','left',... 'Tag','fileText');

this.FolderPathBox = uicontrol('Parent',this.Panel,... 'Style','edit',...

'String', '',...

'Position', this.FolderPathBoxPos,... 'Tag', 'fileEditBox');

this.FolderTextBox = uicontrol('Parent',this.Panel,... 'Style','Text',...

'String', 'only PCD/PLY files are supported.',... 'Position',this.FolderTextPos,...

'Tag', 'fileText');

this.FolderBrowseButton = uicontrol('Parent',this.Panel,... 'Style','togglebutton',...

'String', 'Browse',...

'Position',this.FolderBrowseButtonPos,... 'Callback',@this.browseButtonCallback,... 'Tag','browseBtn');

this.TimeStampsText = uicontrol('Parent',this.Panel,... 'Style','text',...

'String', 'Timestamps: ',... 'Position',this.TimeStampsTxtPos,... 'HorizontalAlignment', 'left',... 'Tag', 'timeStampTxt');

this.TimeStampsDropDown= uicontrol('Parent', this.Panel,...

'Style', 'popupmenu',...

'String', ["Use Default", "From Workspace"],... 'Position',this.TimeStampsDropDownPos,... 'Callback', @this.timeStampsDropDownCallback,... 'Tag', 'timeStampSourceSelectList');

this.TimeStampsNote = uicontrol('Parent',this.Panel,... 'Style','text',...

'String', 'Default timestamps =(0:numPointClouds-1) s',... 'Position', this.TimeStampsNotePos,... 'HorizontalAlignment','left',...

'Tag', 'timeStampNote');

end

在開(kāi)發(fā)該方法或其他數(shù)據(jù)源方法時(shí),可以使用靜態(tài)方法loadPanelChecker來(lái)預(yù)覽 的自定義數(shù)據(jù)源的加載對(duì)話框的顯示和功能。這個(gè)方法不需要打開(kāi)一個(gè)應(yīng)用程序會(huì)話來(lái)使用它。例如,將loadPanelChecker方法與vision.labeleler.loading.PointCloudSequence類一起使用。

vision.labeleler.loading.PointCloudSequenceSource.loadPanelChecker

2.9.4 獲取負(fù)載面板數(shù)據(jù)和負(fù)載數(shù)據(jù)源的方法

在 "添加/刪除信號(hào) "對(duì)話框中,瀏覽一個(gè)信號(hào),設(shè)置必要的參數(shù),并點(diǎn)擊添加信號(hào)源后,應(yīng)用程序會(huì)相繼調(diào)用這兩個(gè)方法。

- getLoadPanelData--獲取輸入面板的數(shù)據(jù)。

- loadSource--將數(shù)據(jù)加載到app中。

本圖顯示了這些方法與添加源頭按鈕之間的關(guān)系,當(dāng)通過(guò)加載點(diǎn)云序列信號(hào)時(shí),通過(guò) vision.labeleler.loading.PointCloudSequenceSource類。

當(dāng)定義一個(gè)自定義的數(shù)據(jù)源時(shí),必須定義getLoadPanelData方法,它將返回這些輸出。

- sourceName - 數(shù)據(jù)源的名稱

- sourceParams - 一個(gè)包含加載數(shù)據(jù)源所需信息的字段的結(jié)構(gòu)。

這段代碼顯示的是

vision.labeleler.load.PointCloudSequenceSource類。該方法將sourceName設(shè)置為在對(duì)話框的文件夾名稱參數(shù)中輸入的名稱,將sourceParams設(shè)置為一個(gè)空結(jié)構(gòu)。如果將Timestamps參數(shù)設(shè)置為From Workspace并加載了時(shí)間戳,那么

應(yīng)用程序用這些時(shí)間戳填充這個(gè)結(jié)構(gòu)。

function [sourceName, sourceParams] = getLoadPanelData(this);sourceName = string(this.FolderPathBox.String); sourceParams = struct();

end

還必須在自定義數(shù)據(jù)類中定義loadSource方法。該方法必須將從 getLoadPanelData 方法返回的 sourceName 和 sourceParams 作為輸入。該方法還必須填充這些屬性,這些屬性存儲(chǔ)在應(yīng)用程序創(chuàng)建的數(shù)據(jù)源對(duì)象實(shí)例中。

- SignalName - 數(shù)據(jù)源中每個(gè)信號(hào)的字符串標(biāo)識(shí)符。

- SignalType -vision.labeleler.loading.SignalType枚舉的數(shù)組,定義了數(shù)據(jù)源中每個(gè)信號(hào)的類型。

- 時(shí)間戳 - 數(shù)據(jù)源中每個(gè)信號(hào)的時(shí)間戳的向量或單元格陣列

- SourceName - 數(shù)據(jù)源的名稱

- SourceParams - 一個(gè)包含加載數(shù)據(jù)源所需信息的字段的結(jié)構(gòu)。

這段代碼顯示了vision.labeleler.loading.PointCloudSequenceSource類的loadSource方法。該方法執(zhí)行這些操作。

1 檢查點(diǎn)云序列的擴(kuò)展名是否正確,并將讀取點(diǎn)云所需的信息保存到fileDatastore對(duì)象中。

2 設(shè)置數(shù)據(jù)源對(duì)象的時(shí)間戳屬性。

- 如果時(shí)間戳是從工作區(qū)變量中加載的(Timestamps = From workpace),那么該方法將Timestamp設(shè)置為存儲(chǔ)在sourceParams輸入中的時(shí)間戳。

- 如果時(shí)間戳是從點(diǎn)云序列本身導(dǎo)出的(Timestamps = Use Default),那么該方法將Timestamp設(shè)置為秒的持續(xù)時(shí)間向量,有一個(gè)

每個(gè)點(diǎn)云的秒數(shù)。

3 驗(yàn)證加載的點(diǎn)云序列。

4 將SignalName屬性設(shè)置為數(shù)據(jù)源文件夾的名稱。

5 將SignalType屬性設(shè)置為點(diǎn)云信號(hào)類型。

6 將 SourceName 和 SourceParams 屬性設(shè)置為 SourceName 和 SourceParams。

分別為:

function loadSource(this, sourceName,sourceParams)

% Load file

ext = {'.pcd','.ply'};

this.Pcds = fileDatastore(sourceName,'ReadFcn', @pcread, 'FileExtensions',ext);

% Populate timestamps

if isempty(this.Timestamp)

if isfield(sourceParams, 'Timestamps')

setTimestamps(this, sourceParams.Timestamps); else

this.Timestamp= {seconds(0:1:numel(this.Pcds.Files)-1)'};

end else

if ~iscell(this.Timestamp)this.Timestamp = {this.Timestamp};

end

end

import vision.internal.labeler.validation.* checkPointCloudSequenceAndTimestampsAgreement(this.Pcds,this.Timestamp{1});

% Populate signal names and types

[~, folderName, ~] =fileparts(sourceName);

this.SignalName = makevalidName(this, string(folderName),"pointcloudSequence_");this.SignalType = vision.labeler.loading.SignalType.PointCloud;

this.SourceName= sourceName; this.SourceParams = sourceParams;

end

2.9.5 讀取幀的方法

最后一個(gè)必須定義的方法是readframe方法。該方法從數(shù)據(jù)源中存儲(chǔ)的信號(hào)中讀取一個(gè)幀。每次導(dǎo)航到一個(gè)新的幀時(shí),應(yīng)用程序都會(huì)調(diào)用這個(gè)方法。Timestamp屬性中特定時(shí)間戳的索引被傳遞給這個(gè)方法。

這段代碼顯示了 vision.labeleler.loading.PointCloudSequenceSource 類的 readframe 方法。該方法通過(guò)使用pcread函數(shù)從點(diǎn)云序列中讀取幀。

function frame = readframe(this,signalName, index) if ~strcmpi(signalName, this.SignalName)

frame = []; else

frame = pcread(this.Pcds.Files{index});

end

end

還可以定義任何特定于加載數(shù)據(jù)源的附加私有屬性。vision.labeleler.loading.PointCloudSequenceSource類的特定源方法在本例中沒(méi)有顯示,但 可以在類文件中查看它們。

2.9.6 使用預(yù)定義的數(shù)據(jù)源類

這個(gè)例子展示了如何使用vision.labeleler.loading.PointCloudSequenceSource類來(lái)幫助 創(chuàng)建自己的自定義類。這個(gè)表格顯示了完整的數(shù)據(jù)源類列表,可以將其作為 自己的類的起點(diǎn)。

ClassData Source Loaded by ClassCommand to View Class Source Codevision.labeler.loading.V ideoSourceVideo fileeditvision.labeler.loading.vision.labeler.loading.I mageSequenceSourceImage sequence foldereditvision.labeler.loading.vision.labeler.loading.V elodyneLidarSourceVelodyne packet capture (PCAP) fileeditvision.labeler.loading.vision.labeler.loading.R osbagSourceRosbag fileeditvision.labeler.loading.vision.labeler.loading.P ointCloudSequenceSourcePoint cloud sequence foldereditvision.labeler.loading.vision.labeler.loading.C ustomImageSourceCustom image formateditvision.labeler.loading.

原文標(biāo)題:基于MATLAB&SIMUlink開(kāi)發(fā)自動(dòng)駕駛系統(tǒng)第二講之地面真值標(biāo)簽與驗(yàn)證

  1. 打造全新中端新能源品牌,奇瑞能擺脫“低端廉價(jià)”的標(biāo)簽?
    2022-02-15
  2. FF91訂單數(shù)造假東窗事發(fā),留給賈躍亭的時(shí)間還有多少?
    2022-02-08
  3. 這六個(gè)強(qiáng)烈的市場(chǎng)信號(hào),給2021年新能源汽車行業(yè)畫(huà)下句點(diǎn)
    2022-01-25
  4. 2022年春節(jié)高速免費(fèi)時(shí)間來(lái)了,自駕返鄉(xiāng)千萬(wàn)要記住這幾點(diǎn)
    2022-01-24
  5. 2022中國(guó)商用車產(chǎn)業(yè)大會(huì)傳遞信號(hào):到2035年,50%以上商用車將實(shí)現(xiàn)新能源化
    2022-01-20
  6. 嵐圖汽車:學(xué)會(huì)做時(shí)間的朋友
    2022-01-13
  7. 2022年整個(gè)新能源汽車大盤(pán)將愈發(fā)膨脹,留給愛(ài)馳調(diào)整的時(shí)間還有多少?
    2022-01-04
  8. 我們可能都低估了無(wú)人駕駛普及的時(shí)間
    2021-12-29
  9. 芒果pro開(kāi)啟預(yù)售,雷丁新車型還是擺脫不了“老頭樂(lè)”的標(biāo)簽?
    2021-12-23
  10. 日產(chǎn)公關(guān)選人毒辣,王力宏人設(shè)崩塌,35小時(shí)的代言時(shí)間,開(kāi)創(chuàng)了日拋型代言
    2021-12-20
  11. 圍獵之勢(shì)或?qū)⒂萦?,賈躍亭完成“造車夢(mèng)”的時(shí)間不多了
    2021-12-16
  12. 廣西:12月1日起,擴(kuò)大新能源貨車擴(kuò)大通行范圍和延長(zhǎng)通行時(shí)間
    2021-12-02
  13. 特斯拉不到一周時(shí)間漲價(jià)兩次,是不是太任性了?
    2021-11-30
  14. 電動(dòng)汽車充電一般充多長(zhǎng)時(shí)間?電動(dòng)汽車電池的正確充電時(shí)間
    2021-11-30
  15. 國(guó)產(chǎn)輪胎質(zhì)量碾壓歐美產(chǎn)品,卻被貼低端標(biāo)簽,65%中國(guó)市場(chǎng)被霸占!
    2021-11-26