caffe中lstm的实现以及lstmlayer的理解

2023-11-19

本文地址:http://blog.csdn.net/mounty_fsc/article/details/53114698

本文内容:

  • 本文描述了Caffe中实现LSTM网络的思路以及LSTM网络层的接口使用方法。
  • 本文描述了论文《Long-term recurrent convolutional networks for visual recognition and description》的算法实验
  • 本文不做LSTM原理介绍,不从数学角度推导反向传播,不进行Caffe详细代码分析
  • 本文基于对Caffe的代码及使用有一定的了解

涉及LSTM算法原理的部分可以参考其他文章见如 理解 LSTM 网络等。

1 简介及相关论文

LSTM为处理具有时间维度以及类似时间维度信息的RNN深度神经网络的一种改进模型,参考文献[1,2],在不少问题上能弥补CNN只能处理空间维度信息的缺陷。不同于CNN的深度体现在网络层数及参数规模上,RNN/LSTM的深度主要体现在时间节点上的深度。

Caffe中的LSTM相关代码由Jeff Donahue基于文献[1]的实验Merge而来。文献[3]中有三个关于使用LSTM的实验:(1)行为识别(介绍及代码) (2)图像描述(图像标注,介绍及代码) (3)视频描述。 三个实验难度依次递增。其中前两个实验代码开源。

论文图片

本文主要从文献[3]第一个实验出发,介绍LSTM的接口的使用。

2 行为识别实验

实验使用UCF-101 数据集。行为识别实验目的为给定一视频片段,判断出视频片段人物的行为。

2.1 算法介绍

如1.1图所示,该实验的方法为:

  1. 首先提取视频的部分帧
  2. 其次根据标注的帧预训练一个图片分类网络(基于AlexNet)
  3. 训练LSTM模型 
    • 预训练的共享的CNN提取一段视频序列(时间上相关的帧)的CNN特征
    • 以上特征输入至LSTM单元
    • 对每个LSTM单元的输出取平均得到最后的检测结果

2.2 网络模型

Caffe训练网络的网络结果如下所示: 

2.3相关术语及变量

  • N  为LSTM同时处理的独立流的个数,在该实验中为输入LSTM相互独立的视频的个数,以该实验测试网络为例,本文取 T=3

  • T  为LSTM网络层处理的时间步总数,在该实验中为输入LSTM的任意一独立视频的视频帧个数,以该实验测试网络为例,本文取 T=16

  • 因此fc-reshape层输出维度为  T×N×4096 . 4096为AlexNet中全连接层的维度,即CNN特征的维度。

  • reshape-cm的输出维度为  T×N ,即每一个帧有一个是否连续帧的标志。

  • reshape-label的维度同样为  T×N

3 Caffe 相关类及接口

3.1 相关类

主要类说明见官方文档 RecurrentLayerLSTMLayerLSTMUnitLayer

其中:

  • RecurrentLayer为一个抽象类,定义了处理时间序列的循环神经网络的通用行为
  • LSTMLayer及RNNLayer为RecurrentLayer的具体实现,后者为RNN的一般形式
  • LSTMUnitLayer在LSTMLayer内部使用,处理了部分核心计算

3.2 接口说明

由官方文档可知,一个 RecurrentLayer/LSTMLayer 的输入为三个Blob:

  • 一. 时间变化数据 x(T×N×...) 。2.3处已介绍,此实验测试网络中该维度为 16×3×4096 。注意 T N 前面。
  • 二. 序列连续性标志 cont,(T×N) 。2.3处已介绍,此实验测试网络中该维度为 16×3 ,其中0表示该图片为视频帧的开始,1表示该图片为上一帧的延续。注意不能反过来用1表示为开始,在代码实现中,开始帧视频应当“遗忘”以往的信息,所以乘以0归零了之前的数据。
  • 三. 时间不变的静态数据 xstatic,(N×...) (可选)。该项在行为识别中没有使用,而在第二个实验图片描述中有使用。如使用一张不随时间变化的图片作为第三个输入,该图片的输入维度为 N×4096 .

4 LSTMLayer

Caffe中通过展开LSTMLayer网络层,得到另一个网络从而实现LSTM,即一个LSTMLayer即为一个LSTM网络。以实验中测试网络为例,及 T=16,N=3 ,CNN特征维度为4096,LSTM特征维度为256,来介绍展开网络的各网络层及数据流动情况。

4.1 实现流程

如图所示:

  • 方框为网络层,文字为网络层类型。
  • 椭圆为数据Blob。
  • Blob  ci 为细胞状态; Blob  hi 为隐藏状态
  • 蓝色为输入数据或产生输出数据的网络层。
  • 红色为权重网络层。
  • 整体外框为基类RecurrentLayer实现的功能,子框为LSTMLayer实现的功能。
  • 输出为Blob h(1,3,256)。
  • 最后的Reduction层生产的伪损失,该网络层不起功能作用,存在的意义只是使这个网络变得完成,而“强制”反向传播。
  • 多个时间步( T1,,T16 )间的InnerProduct是共享参数的,及保证了各个时间步的权重能处理同一时间序列。因而整个网络(LSTM网络)只有三个权重Blob:图中第一个红色框中的InnerProduct层的权重 Wxc 及 偏置 bc ,后边所有红色权重层的权重 Whc (共享的,且无偏置)
  • Scale层为根据cont提供的序列连续性情况,来决定是否保持(乘1)与放弃(乘0)之前的隐藏状态 ht1

4.2 公式描述

论文图片

计算公式如下:

it:=sigmoid[Whiht1+Wxixt+bi]ft:=sigmoid[Whfht1+Wxfxt+bf]ot:=sigmoid[Whoht1+Wxoxt+bo]gt:=tanh[Whght1+Wxgxt+bg]ct:=(ft.ct1)+(it.gt)ht:=ot.tanh[ct]

注意:

  • 联系前两张图与以上公式,可以描述Caffe的LSTM实现过程
  • 以上公式的 [Wxi,Wxf,Wxo,Wxg] 为由第一个InnnerProduct层保存,及4.1中的 Wxc
  • 以上公式的 [bi,bf,bo,bg] 为由第一个InnnerProduct层保存,及4.1中的 bc
  • 以上公式的 [Whi,Whf,Who,Whg] 为由后边的InnnerProduct层保存,及4.1中的 Whc

5 总结

一个RNN/LSTM网络层可以通过从时间维度上进行展开来进行理解( 理解 LSTM 网络)。同样的,Caffe在实现LSTM时也是通过展开LSTM层来实现,等价于一个LSTM 网络层 即为一个LSTM 网络

6 图像描述实验

实验使用coco caption数据集。给定一张图片,其目标为产生一段语句对该图片进行描述。

6.1 语言模型小实验

这部分实验属于图像描述的基础实验。图像描述在该实验基础上拓展而来,且相对图像描述来说更为简单,因而先介绍该小实验。

语言模型实验为训练一个语言模型,使其能够完成: 
(1)给定一个词,如some,该模型能产生下人类语言中能搭配该词的下一个次,如some people, some apple。 
(2)在(1)的基础上,该模型能产生一个完整的语句。

链接处为作者给出的该模型的实例与教程。

6.1.1 训练

该模型的训练过程与行为检测的训练过程类似。如图所示,LSTM层的输入为两个Blob: 
(1)训练数据Blob,维度为 T×N×1000 ,其中1000为每个词的特征,即语言模型的训练数据中,一个词对应于行为识别中的一张图片(行为识别的训练数据维度为 T×N×4096 )。 
注意,此处说的维度为embedded_input_sentence的维度。而输入数据的input_sentence的维度为 T×N×8801 8801 为词典(词库)的规模 N ,即输入数据为该词在该词典中的独热向量(one-hot vector) y˜,y˜R8801 。该独热向量通过权重层Embed层产生一个 1000 维的特征向量 y,yR1000 。该Embed层等价于实现 y=Wey˜,WeR1000×8801 。由于 y˜ 为独热向量,所以也可以理解为 We 为一个查找表,每一列为一个词的特征向量。 
(2)连续性标志Blob。与行为识别类似,维度为 T×N  
这里写图片描述

6.1.2 推理

该模型的产生一个完整句子的过程推理如下图所示。

说明: 
1. 生成一个完整的句子需要反复多次调用该语言模型,即前一次的结果作为下一次的输入,直至最后的输出为语句终止符EOS 
2. 推理时的输入LSTM维度为 1×N×1000 ,如果是只产生单个语句,则为 1×1×1000

6.2 使用静态输入 xstatic

不同于行为识别实验以及语言模型小实验,图像描述实验的LSTM层使用了第三个输入参数,静态输入 xstatic 。有 xstatic LSTM层的训练模型如下图所示:

注意:

  1. 第一个输入Blob同语言模型,维度为 (20,100,1000) ,即 N=100 条语句(对应100张图片),时间步 T=20 ,每个词的特征维度为 1000
  2. 第二个输入Blob同语言模型,维度为 (20,100)
  3. 第三个输入Blob为图片CNN特征,维度为 (100,1000) ,即 N=100 张图片,每张图片特征为1000维度。注意图片的特征维度尽量与词的特征维度相同,若不同,Caffe会通过填充或截断的方式进行维度长度匹配。
  4. Caffe中的官方文档说对 x 以及 xstatic 的处理方式,及通过连接每个时间步 xt xstatic 得到新的特征 xt=[xt;xstatic] 。而由上图可知,实现上Caffe不是使用Concat层连接二者而是使用Eltwise求和二者,及 xt=[xt+xstatic]

6.3 图像描述实验

图像描述实验是在语言描述实验的基础上,增加图像的CNN特征作为LSTM的静态输入特征。

文献[1]提出三个组合方式,如下图所示:

1)第一种为一层LSTM,为最朴素的方法。 
2)第二种为两层LSTM,静态输入在第一个LSTM层。 
3)第三种为两层LSTM,静态输入在第二个LSTM层。最后取的是该种方法。

参考文献

[1] Hochreiter, Sepp, and Schmidhuber, Jürgen. “Long short-term memory.” Neural Computation 9, no. 8 (1997): 1735-1780.

[2] Zaremba, Wojciech, and Sutskever, Ilya. “Learning to execute.” arXiv preprint arXiv:1410.4615 (2014).

[3] Donahue, J., et al. “Long-term recurrent convolutional networks for visual recognition and description.” Computer Vision and Pattern Recognition IEEE, 2015.


另外,对于caffe中lstmlayer的理解,可以参考一下:

I have a question about caffe-lstm.
There are members N_ and T_ in class LstmLayer ( I found default value of N_ is 1 ) and their comments are batch size and length of sequence. I am not sure if that means: there are N_ independent sequences and each one of them has T_ frames. For example, If I have 5 videos and each one has 100 frames. I must set N_ = 5 and T_ = 100. Like this, if I have only one video with 100 frames, I must set N_ = 1 and T_ = 100.
But if I have 5 videos with different frames, say, video1 has 100 frames, video2 has 90 frames, videos3 has 96 frames, video4 has 88 frames, video5 has 99 frames, I feel N_ must be set 1 and use 'clip' to solve this training. If N_ is not 1, there is no solution.

Above is my understand about the members in LstmLayer class. Could you tell me if that is right? Thanks!

@junhyukoh
Owner
junhyukoh commented  on 23 Sep 2015

You are understanding the role of N_ and T_ correctly.
There are one general solution and another solution for some cases:

  1. Use N_=1 and clip appropriately as you said.
    This is actually very inefficient because the model cannot process different streams in parallel.

  2. If you are using softmax loss as loss function, you can put 5 videos with different frames into streams (N=5) by fixing T as the maximum length (say T=100) and filling extra input frames with zeros (x_99=0, x_100=0 for 98-length video).
    In order to remove unnecessary losses caused by extra frames, you can specify ignore_label: -1 in theloss_param and provide -1 as labels for the extra time steps.
    This will set loss/gradient to 0 for the extra time steps.

I think Caffe should support a mask indicator for all loss layers so that we can selectively ignore losses for specific examples/time steps.

https://github.com/junhyukoh/caffe-lstm/issues/5

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

caffe中lstm的实现以及lstmlayer的理解 的相关文章

  • 活动报名|如何使用70万预算从头训练千亿语言大模型

    王业全 北京智源人工智能研究院认知模型团队负责人 清华大学博士 中国中文信息学会情感计算专委会委员 2022年被评为AI 2000全球最具影响力人工智能学者 自然语言处理领域 主要从事语言大模型 自然语言处理方面的研究工作 代表成果有 FL

随机推荐

  • shell脚本读取csv数据迁移文件

    前言 仅记录学习笔记 如有错误欢迎指正 最近 这段时间一直在忙数据迁移的问题 现在碰见的问题是需要将目标服务器上的文件导入到本地库 思路 我们需要的数据不多 但是服务器上特别多 所以通过查询目标文件的目录位置和文件名称 导出为csv文件 之
  • Vue + ElementUI 实现批量删除功能

    第一步 在el table 组件绑定 selection change事件 第二步 在调用父组件的子组件中添加当表格项发生变化时会触发事件函数 selectionChange val 在method 函数中添加如下代码 selectionC
  • 从零基础开始开发自己的第一个微信小程序

    文章目录 内容介绍 小程序开发步骤 注册微信小程序账号 下载开发工具搭建开发环境 创建工程编写代码 手机上查看效果 工程里的文件作用介绍 总结 内容介绍 通过本篇blog 你可以熟悉从零开始 搭建小程序开发环境 并运行起自己的第一个小程序
  • QT中slot,signal,emit讲解

    Qt中的类库有接近一半是从基类QObject上继承下来 信号与反应槽 signals slot 机制就是用来在QObject类或其子类间通讯的方法 作为一种通用的处理机制 信号与反应槽非常灵活 可以携带任意数量的参数 参数的类型也由用户自定
  • 条码编码-Code39

    近来在研究条码的实现 遇到一些坑 现在把自己遇到的一些情况分享一下 世界上约有225种以上的条形码 一般较流行的有 39码 EAN码 UPC 码 128码 以及专门用於书刊管理的ISBN ISSN等 我们先从Code39码开始 Code39
  • 电子设计竞赛之备战

    一 学习框架 1 单片机编程 C语言 用来采集各种传感器的数据 控制各种电机 多写程序多看书 单片机学习的四个层次 1 完成单片机开发板的学习 理解单片机的工作 能看懂单片机程序 2 能够照着芯片手册 datasheet 试着编写各类芯片的
  • Tomcat启动Alias name [null] does not identify a key entry报错分析,涉及从公钥(CER)+私钥(KEY)转换为jks证书的方法

    先说原因是什么 之前百度 谷歌 CSDN上也搜过 搜到最多的答案是server xml中缺少指定keyAlias xxx 但是试了以后会发现还是报这个错 只是报错由Alias name null does not identify a ke
  • 【app测试】adb常用指令及华为卸载预置软件

    adb基础指令 1 adb devices 显示当前运行的全部Android设备 2 adb s 设备编号 对某一设备执行命令 3 adb install APK路径 安装应用程序 r表示replace覆盖安装 连接了多台设备时 需要指定设
  • ubuntu 12.04下双网卡绑定实现负载和冗余

    有一个需求是ubuntu下双网卡绑定 上连交换机已配置好 现在需要配置服务器 以下是配置过程 apt get install ifenslave 2 6 modprobe bonding 自动加载 编辑以下文件 vi etc mod 添加如
  • 「2020年大学生电子设计竞赛分享」电源题,省一等奖!

    点击上方 大鱼机器人 选择 置顶 星标公众号 福利干货 第一时间送达 01 到底参不参赛 嗡嗡嗡 随着手机的一声振动 锁屏弹出了消息提醒 没看全文 依稀瞄到2020 TI杯 几个字眼我便知道自己将面临一个艰难的抉择 庚子年春 突如其来的新型
  • 芜湖,前端这波起飞!

    前天加完班 回家路上翻了下粉丝群 发现群里最近在疯传一份叫 前端offer收割机养成指南 的资料 本来感觉这个title看起来有点离谱 结果没想到仔细一看 这份资料竟然真的有点东西 内容收纳的很全 而且融合了很多今年的新玩意 据我所知有人靠
  • BSD、Apache、MIT、GPL、LGPL几种常见的开源协议

    转载地址 https www cnblogs com Vito2008 p 4806677 html 1 BSD开源协议 original BSD license FreeBSD license Original BSD license B
  • u盘安装ubuntu问题:卡在引导界面不动

    问题 一直卡在如图界面不动 分析 既然一直提示syslinux 那我们就看看他是什么东西吧 原因 syslinux分区引导记录问题 解决方案1 安装bootice软件 将制作好的启动盘插入电脑 用bootice更改syslinux引导记录
  • 8.10:如何在Python中判断文件类型?

    在计算机科学领域中 文件类型判断是一个非常基础和重要的问题 不同类型的文件需要采取不同的处理方式 因此在处理文件时 我们需要准确地判断文件类型 Python作为一门流行的编程语言 提供了许多方法来判断文件类型 在本文中 我们将介绍几种常见的
  • @vitejsplugin-vue requires vue (>=3.2.13) or @vuecompiler-sfc to be present in the dependency tree

    运行项目的时候 首先会提示要安装 vue compiler sfc 但是安装后运行项目成功但是页面是空白并且报错 VUE HMR RUNTIME is not defined 摸索了半天 查看到package json依赖文件 没有vue
  • RTX线程通信之——线程标志

    文章目录 Thread Flags 概念 RTX线程标志API 案例 LED灯同步闪亮 小结 参考资料 Thread Flags In a real application we need to be able to communicate
  • mbedtls 入门第四课--移植mbedtls到VS和ESP8266--8266SDK SHA256移植

    承接上篇 我们初步了解了mbedtls的文件路径以及文件作用以后就是想着如何将mbedtls移植到各种平台 博主这里只有两种移植方法 第一是将代码移植到VS中 第二个是将代码移植到博主跑动的比较多的小众SOC ESP8266 移植到ESP8
  • 【华为OD机试】五子棋迷(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 题目描述 张兵和王武是五子棋迷 工作之余经常切磋棋艺 这不 这会儿又下起来了 走了一会儿 轮张兵了 对
  • 技术积累 — Keil 查看内存占用/优化代码

    原文链接 转自Sugar的专栏 转载文章 若有不妥 通知后我会立即删除 一 查看内存占用 1 使用Keil编辑代码时 编译成功后 双击红色框框位置 就会弹出 map文件 2 那么map文件中能够读出哪些信息呢 Program Size Co
  • caffe中lstm的实现以及lstmlayer的理解

    本文地址 http blog csdn net mounty fsc article details 53114698 本文内容 本文描述了Caffe中实现LSTM网络的思路以及LSTM网络层的接口使用方法 本文描述了论文 Long ter