簡體   English   中英

使用 CNN 和 RNN 進行圖像序列訓練

[英]Image sequence training with CNN and RNN

我正在邁出學習深度學習的第一步。 我正在嘗試從視頻的圖像序列(幀)中進行活動識別。 結果,我在培訓過程中遇到了問題。

首先我需要確定我的圖像文件夾的架構:

Making Food -> p1 -> rgb_frame1.png,rgb_frame2.png ... rgb_frame200.png
Making Food -> p2 -> rgb_frame1.png,rgb_frame2.png ... rgb_frame280.png
                      ...
                      ...
                      ...
Taking  Medicine -> p1 -> rgb_frame1.png,rgb_frame2.png...rgbframe500.png

                      etc..
      

所以問題是每個文件夾可以有不同數量的幀,所以我對 model 的輸入形狀和我應該使用的時間步感到困惑。 我正在創建一個 model(如下所示),它具有時間分布的 CNN(預訓練的 VGG16)和 LSTM,它輸入所有類的所有幀和對應的標簽(在上面的例子中,制作食物將是對應的 label 到 p1等), x_train的最終形狀是(9000,200,200,3) ,其中9000對應於所有類的所有幀, 200是高度和寬度, 3是圖像的通道。 我正在將此數據重塑為(9000,1,200,200,3) ,以便用作 model 的輸入。 我想知道並擔心我沒有通過適當的時間步長,結果是錯誤的訓練,我的 val_acc ~ 98% 但是當使用不同的數據集進行測試時要低得多。 你能建議另一種更有效的方法嗎?

  x = base_model.output
  x = Flatten()(x)
  features = Dense(64, activation='relu')(x)
  conv_model = Model(inputs=base_model.input, outputs=features)    
  for layer in base_model.layers:
      layer.trainable = False
       
  model = Sequential()
  model.add(TimeDistributed(conv_model, input_shape=(None,200,200,3)))
  model.add(LSTM(32, return_sequences=True))
  model.add(LSTM(16))

據我所知,您的 model 的結構並沒有明顯糟糕。 就不同數量的幀問題而言,解決方案是根本不這樣做。 預處理您的數據以從每個操作中獲取相同數量的幀。

這里更深層次的問題很可能只是簡單的過度擬合。 您沒有具體說明,但基於您正在談論將訓練數據托管在單台計算機上的事實,我想您沒有太多的訓練數據,並且您的網絡不是在學習活動,而只是在學習識別您的訓練數據。 考慮到 VGG16 有大約 120 萬個不同的訓練示例,並且在高端 GPU 上訓練了數周,只是為了區分 1000 個類別的 static 圖像。 可以說,學習時間方面和活動應該需要類似數量的訓練數據。 您有一個好主意,以 VGG 為基礎並添加到它,這樣您的網絡就不必重新學習 static 圖像識別功能,但是從 static 圖像到您的網絡需要學習的動態視頻的概念飛躍仍然是一個很大的問題一!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM