本文内容:
- 本文描述了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图所示,该实验的方法为:
- 首先提取视频的部分帧
- 其次根据标注的帧预训练一个图片分类网络(基于AlexNet)
- 训练LSTM模型
- 预训练的共享的CNN提取一段视频序列(时间上相关的帧)的CNN特征
- 以上特征输入至LSTM单元
- 对每个LSTM单元的输出取平均得到最后的检测结果
2.2 网络模型
Caffe训练网络的网络结果如下所示:
2.3相关术语及变量
NN
3 Caffe 相关类及接口
3.1 相关类
主要类说明见官方文档 RecurrentLayer、LSTMLayer、LSTMUnitLayer。
其中:
- RecurrentLayer为一个抽象类,定义了处理时间序列的循环神经网络的通用行为
- LSTMLayer及RNNLayer为RecurrentLayer的具体实现,后者为RNN的一般形式
- LSTMUnitLayer在LSTMLayer内部使用,处理了部分核心计算
3.2 接口说明
由官方文档可知,一个 RecurrentLayer/LSTMLayer 的输入为三个Blob:
- 一. 时间变化数据x,(T×N×...)x,(T×N×...).
4 LSTMLayer
Caffe中通过展开LSTMLayer网络层,得到另一个网络从而实现LSTM,即一个LSTMLayer即为一个LSTM网络。以实验中测试网络为例,及T=16,N=3T=16,N=3,CNN特征维度为4096,LSTM特征维度为256,来介绍展开网络的各网络层及数据流动情况。
4.1 实现流程
如图所示:
- 方框为网络层,文字为网络层类型。
- 椭圆为数据Blob。
- Blob cici
4.2 公式描述
计算公式如下:
注意:
- 联系前两张图与以上公式,可以描述Caffe的LSTM实现过程
- 以上公式的[Wxi,Wxf,Wxo,Wxg][Wxi,Wxf,Wxo,Wxg]
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×1000T×N×1000
6.1.2 推理
该模型的产生一个完整句子的过程推理如下图所示。
说明:
1. 生成一个完整的句子需要反复多次调用该语言模型,即前一次的结果作为下一次的输入,直至最后的输出为语句终止符EOS
2. 推理时的输入LSTM维度为1×N×10001×N×1000
6.2 使用静态输入xstaticxstatic
不同于行为识别实验以及语言模型小实验,图像描述实验的LSTM层使用了第三个输入参数,静态输入xstaticxstaticLSTM层的训练模型如下图所示:
注意:
- 第一个输入Blob同语言模型,维度为(20,100,1000)(20,100,1000)
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.