我一直在研究將圖像作爲輸入的順序模型。但是,不同的是輸入圖像實際上是由按鍵確定的。
例如,訓練序列是(你可以假設音響是視頻的幀ID)如何通過keras中的密鑰加載圖像數據?
{ f1, f2, f3, ..., fn }
和相應的圖像序列是
{ M[f1], M[f2], M[f3], ..., M[fn] }
,其中M是一個地圖存儲{ fi->圖}映射。
假設下一批,我的訓練序列成爲
{ f2, f3, ..., fn+1 }
和圖像序列變得
{ M[f2], M[f3], M[f4], ..., M[fn+1] }
正如你所看到的,如果我直接在圖像序列保存到磁盤上,也有很多冗餘(在上述情況下,M [f2]到M [fn]被保存兩次)。所以似乎有必要通過鍵來引用圖像,因此imagedataloader類不能使用。
[EDIT]
我的模型是一個2級分類器需要的圖像序列作爲輸入,其中,所述圖像被映射與幀ID(音響)。在我的data_preprocess代碼中預先生成了圖像序列是正片還是負片。
正樣本可能是這樣的:
{f3, f4, f5, f6, f7} 1
{f4, f5, f6, f7, f8} 1
{f5, f6, f7, f8, f9} 1
...
雖然負樣本是這樣的:
{f1, f2, f3, f4, f5} 0
{f2, f3, f4, f5, f6} 0
{f10, f11, f12, f13, f14} 0
...
因此,它不像圖像分類問題,其中圖像正好有一固定標籤。在我的情況下,每個圖像將被多次使用,它們的正面或負面一起由整個序列決定,但不是自身。
[EDIT II]
的圖像是的N個視頻幀,並這樣存儲在磁盤上:
|-data_root/
|-Video 1/
| |-frame_1_1.jpg
| |-frame_1_2.jpg
| ...
|-Video 2/
| |-frame_2_1.jpg
| |-frame_2_2.jpg
| ...
...
...
|-Video N/
| |-frame_N_1.jpg
| |-frame_N_2.jpg
...
我想做的是,給定的場景的幀/圖像的兩個序列,模型預測這兩個場景是否屬於同一類型。
由於視頻可以含有長的時間跨度對於每個場景,我將一個場景分割的整個序列爲多個非重疊的子序列(省略視頻的索引):
Sequence of scene i: frame_1, frame_2, frame_3, ..., frame_n
Sub-sequence i_1: frame_1, frame_2, frame_3, ..., frame_10
Sub-sequence i_2: frame_11, frame_12, frame_13, ..., frame_20
Sub-sequence i_3: frame_21, frame_22, frame_23, ..., frame_30
...
然後,我隨機產生陽性樣品PI(對從相同序列產生的子序列),如:
<Pair of sub-sequences> <Labels>
P1 {sub-sequence i_4, sub-sequence i_2}, 1
P2 {sub-sequence i_3, sub-sequence i_5}, 1
... ...
對於陰性樣品,我生成對從不同場景的子序列(Ni)中的:
<Pair of sub-sequences> <Labels>
N1 {sub-sequence i_1, sub-sequence j_6}, 0
N2 {sub-sequence i_2, sub-sequence j_4}, 0
... ...
很明顯,一幀/圖像可以在不同的訓練樣本中出現多次。例如。在上述情況下,N2和P1都包含子序列i_2。因此,我選擇通過幀ID序列(fi)並且在訓練期間,通過幀ID(fi)獲取序列的相應幀/圖像來保存生成的樣本對。
我應該如何優雅地與Keras做?
你可以做通過將想法分解爲段落(簡單地說是兩條新行),很大程度上提高了您的問題的價值。你也可以用Graves(類似於這個1)旁邊的撇號類似的密鑰來包圍代碼位。代碼塊可以顯示兩條換行符,每行縮進四個空格。 –
這樣的圖像序列是否總是具有這種順序indeces的形式,或者可能有像'f1,f3,f2,f5'這樣的indeces?它們如何存儲在磁盤上?你的目錄的結構是什麼?這個預處理函數如何用於標記數據? –