我正在使用模仿學習來教汽車如何在 Gazebo 中駕駛。我使用來自汽車上的攝像頭的影像作為資料,并使用該幀的相應速度命令作為其標簽。
我將所有這些資料從 python 腳本保存到一個文本檔案中,它的格式為 "[[image]], dtype=uint8), ['velcmd1', ... 'velcmd6'] ,還有更多的條目遵循與第一個相同的格式,如下所示。
"[[0, 0, 0, ..., 0, 0, 0], [0, 0, 0, ..., 0, 0, 0], ..., [0, 0, 0, ..., 0, 0, 0]], dtype=uint8), ['0.295245', '0.0', '0.0', '0.0', '0.0', '0.0']]", "[[0, 0, 0, ..., 0, 0, 0],
我需要將其從字串格式轉換為兩種各自的資料型別,一種作為表示影像的陣列,另一種作為作為標簽的串列。我已經能夠通過執行一些難看的 string.split() 和 string.replace() 來將兩者分開,并且我已經能夠將標簽放入格式中,其型別列印如下:
[0.295245, 0.0, 0.0, 0.0, 0.0, 0.0]
<class 'list'>
我通過使用 ast.literal_eval() 評估標簽的字串來做到這一點。
對于影像,我可以將其轉換為以下格式:
[[0, 0, 0, ..., 0, 0, 0], [0, 0, 0, ..., 0, 0, 0], [0, 0, 0, ..., 0, 0, 0], ..., [0, 0, 0, ..., 0, 0, 0], [0, 0, 0, ..., 0, 0, 0], [0, 0, 0, ..., 0, 0, 0]]
<class 'str'>
但是,它仍然是一個字串,并且 ast.literal_eval() 會引發一個格式錯誤的字串 ValueError。我在這里嘗試了最后兩個解決方案Malformed String ValueError ast.literal_eval() with String representation of Tuple
我改為嘗試手動創建一個陣列,然后將值附加到這個陣列,這給出
['0, 0, 0, ..., 0, 0, 0', '0, 0, 0, ..., 0, 0, 0', '0, 0, 0, ..., 0, 0, 0', '..., 0, 0, 0, ..., 0, 0, 0', '0, 0, 0, ..., 0, 0, 0', '0, 0, 0, ..., 0, 0, 0']
<class 'list'>
但是,現在各個條目是字串,而不是陣列本身。
當我過去訓練神經網路時,影像資料的形式是:
[[ 32 31 30 ... 100 101 103]
[ 30 30 30 ... 100 101 103]
[ 30 30 31 ... 101 101 102]
...
[ 34 34 32 ... 87 87 87]
[ 30 30 29 ... 100 100 98]
[ 30 29 30 ... 100 99 100]]
<class 'numpy.ndarray'>
如何將影像的原始字串從文本檔案轉換為最終形式?
注意:訓練資料并不全是 0(黑色),它只是被二值化了,所以顯示的條目是黑色的。
uj5u.com熱心網友回復:
我找到的用于跟蹤影像標簽的解決方案:只有 6 個不同的標簽,因此我沒有嘗試將影像保存在標簽旁邊的某處,而是為每個標簽創建了六個不同的檔案夾。然后,如果 velcmd1 是輸出影像的標簽,我將它與所有其他將使用 velcmd1 標記的影像一起放在檔案夾中。
我正在使用:
cv.imwrite(path uniqueidentifier, img)
這樣就不需要跟蹤每個影像的特定標簽。它們只是組合在六個檔案夾中,因此不會因強制影像為字串而丟失資料。
uj5u.com熱心網友回復:
您的解決方案有效,因為每個影像只有一個標簽。如果每個檔案需要多個標簽,則必須將同一影像放在多個檔案夾中,這會很快占用磁盤空間。
作為替代方案,您可以創建一個資料庫,將標簽與影像檔案的路徑相關聯。然后,你仍然可以直接保存為圖片.png,.jpeg等,并與他們相關聯的標簽。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/402890.html
標籤:
上一篇:從.h5檔案中提取模型結構
