当前位置: 首页 > news >正文

【ConvLSTM第一期】ConvLSTM原理

目录

  • 🧠 一、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(张量)就是一个多维数组。

维度举例说明
0D3.14标量
1D[1, 2, 3]向量
2D[[1,2],[3,4]]矩阵
3DRGB 图像:(通道, 高, 宽)
4D(batch, 通道, 高, 宽)一批图像
5D(batch, 时间, 通道, 高, 宽)一批视频序列(ConvLSTM 的输入张量)

PyTorch 中:

x = torch.rand(2, 10, 1, 64, 64)  # 一个 batch=2 的视频序列

表示:

  • 2 个样本
  • 每个样本有 10 帧图像(时间维度)
  • 每帧是 1 通道(灰度图)
  • 每帧的大小是 64×64(空间维度)

相关文章:

  • day13 leetcode-hot100-24(链表3)
  • c++ opencv 形态学操作腐蚀和膨胀
  • OpenCV CUDA模块结构分析与形状描述符------在 GPU 上计算图像的原始矩(spatial moments)函数spatialMoments()
  • RV1126-OPENCV Mat理解
  • 基于React和TypeScript的金融市场模拟器开发与模式分析
  • 从 SWT Browser 迁移到 JxBrowser
  • C#·常用快捷键
  • kibana解析Excel文件,生成mapping es导入Excel
  • 职坐标AI算法实战:TensorFlow/PyTorch深度模型
  • Typora-macOS 风格代码块
  • K8S查看pod资源占用和物理机器IP对应关系
  • 小白的进阶之路系列之七----人工智能从初步到精通pytorch自动微分优化以及载入和保存模型
  • 【C++项目】:仿 muduo 库 One-Thread-One-Loop 式并发服务器
  • 解释滚动更新的过程,如何通过`kubectl set image`命令触发更新? 版本回滚的命令是什么?如何查看Deployment的更新历史?
  • 《Python 应用中的蓝绿部署与滚动更新:持续集成中的实践与优化》
  • 【VSCode-Qt】Docker远程连接的项目UI文件在 VSCode 上无法预览
  • 【基于SpringBoot的图书购买系统】操作Jedis对图书图书的增-删-改:从设计到实战的全栈开发指南
  • 聊聊 Metasploit 免杀
  • BPE、WordPiece 与 Unigram:三种主流子词分词算法对比
  • linux有效裁剪视频的方式(基于ffmpeg,不改变分辨率,帧率,视频质量,不需要三方软件)
  • 三明网站建设公司/推广方案
  • wordpress 注释/短视频seo厂家
  • 肇庆住房建设部网站/全网营销代运营
  • 站酷设计网站官网入口免费个人海报/免费的seo网站
  • 政府网站建设成本/广州最近爆发什么病毒
  • win7 iis7 添加网站/引流推广犯法吗