目錄
- 🧠 一、ConvLSTM 原理詳解
- 1.1 背景
- 1.2 ConvLSTM 的結構
- 參考
ConvLSTM(Convolutional Long Short-Term Memory)是一種結合了卷積神經網絡(CNN)與循環神經網絡(RNN)中 LSTM(長短期記憶)模型的結構,專用于處理具有時序性和空間結構的數據(如視頻、時序圖像等)。
下面我將詳細講解ConvLSTM的原理與Python實現方法。
🧠 一、ConvLSTM 原理詳解
1.1 背景
傳統的 LSTM適合處理一維時間序列數據(如語音、文本),但不適合處理空間結構顯著的二維或三維數據(如圖像或視頻幀)。
LSTM 是為 一維序列(如文本、語音) 設計的,輸入形狀是:
(batch, time, features)
例如:
x = torch.rand(32, 10, 100) # 32個序列,每個10步,每步是100維向量
? 如果你把圖像當成向量輸入 LSTM,會發生什么?
- 你必須把圖像 flatten(攤平),如 64×64 變成 4096
- 這樣會 丟失空間結構(像素之間的鄰接關系)
ConvLSTM 的改進 —— 處理 3D 空間信息
ConvLSTM 通過將傳統 LSTM 中的全連接操作替換為 卷積操作,從而保留空間結構信息。
ConvLSTM 的輸入不是 (batch, time, feature),而是:
(batch, time, channels, height, width)
每一個時間步輸入的是一個圖像(或圖像幀),保留空間結構。
🔁 它在每一時間步中,不再執行全連接運算,而是對圖像執行 2D 卷積操作:
(+) 是矩陣乘法(LSTM)
(*) 是卷積操作(ConvLSTM)
1.2 ConvLSTM 的結構
在普通 LSTM 中,狀態更新公式如下:
i_t = σ(W_xi * x_t + W_hi * h_{t-1} + b_i)
f_t = σ(W_xf * x_t + W_hf * h_{t-1} + b_f)
o_t = σ(W_xo * x_t + W_ho * h_{t-1} + b_o)
g_t = tanh(W_xg * x_t + W_hg * h_{t-1} + b_g)c_t = f_t ⊙ c_{t-1} + i_t ⊙ g_t
h_t = o_t ⊙ tanh(c_t)
LSTM的單元結構如下:
為了克服LSTM在處理三維信息中的不足,ConvLSTM 將 LSTM 中的2D的輸入轉換成了3D的tensor,最后兩個維度是空間維度(行和列)。對于每一時刻t的數據,ConvLSTM 將 LSTM 中的一部分連接操作替換為了卷積操作,即通過當前輸入和局部鄰居的過去狀態來進行預測。
在 ConvLSTM 中,相應的乘法操作 * 被替換為卷積操作 ?:
i_t = σ(W_xi ? x_t + W_hi ? h_{t-1} + b_i)
f_t = σ(W_xf ? x_t + W_hf ? h_{t-1} + b_f)
o_t = σ(W_xo ? x_t + W_ho ? h_{t-1} + b_o)
g_t = tanh(W_xg ? x_t + W_hg ? h_{t-1} + b_g)c_t = f_t ⊙ c_{t-1} + i_t ⊙ g_t
h_t = o_t ⊙ tanh(c_t)
其中:
- ? 表示卷積操作
- 輸入 x_t 是一個多通道圖像(如幀)
- h_t 和 c_t 是隱藏狀態和單元狀態的張量,包含空間結構
參考
1、Tensor(張量)的解釋說明
Tensor(張量)就是一個多維數組。
維度 | 舉例 | 說明 |
---|---|---|
0D | 3.14 | 標量 |
1D | [1, 2, 3] | 向量 |
2D | [[1,2],[3,4]] | 矩陣 |
3D | RGB 圖像:(通道, 高, 寬) | |
4D | (batch, 通道, 高, 寬) | 一批圖像 |
5D | (batch, 時間, 通道, 高, 寬) | 一批視頻序列(ConvLSTM 的輸入張量) |
PyTorch 中:
x = torch.rand(2, 10, 1, 64, 64) # 一個 batch=2 的視頻序列
表示:
- 2 個樣本
- 每個樣本有 10 幀圖像(時間維度)
- 每幀是 1 通道(灰度圖)
- 每幀的大小是 64×64(空間維度)