写这个读书笔记,一方面是为了了解他人的研究,另一方面希望学习科技论文的写作方法,提升自己写paper的水平。
原文链接:https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Du_Hierarchical_Recurrent_Neural_2015_CVPR_paper.pdf
下面对文章每个部分的结构和内容进行分析
摘要:整个摘要可分为四个部分
1. 第一句话,“Human actions can be represented by the trajectories of skeleton joints”这句话的作用应该是在介绍问题的背景,介绍一下文章是在做什么问题。对比了其他一些文章,很多都是用一句话说明一下背景,有的是用一句话说明了某某方法有什么优势;有的仅仅是说某某问题变得很火;这篇文章摘要第一句说“人体运动可以用骨骼关节的轨迹来描述”,意在说明文章是要基于skeletal data来做人体动作识别。但是个人认为这句话略显突兀,尤其是别的领域的人,但看这一句并不一定明白作者意图,并没有把任务(task)交代清楚。
2. 第二部分,“Traditional methods......”介绍了传统方法,或者说之前的研究都是怎么处理这个问题的。这里说前人方法一般是用“hand-crafted features”以及“well-designed classifier”来识别人体动作。这个"hand-crafted features"在其他文章中有所了解,“well-designed classifier”还不懂是什么。
3. 第三部分,“In this paper......”介绍本文用了什么方法,一般都会对比着前人的工作,比如:与xxx不同,我们的方法是xxx;我们的方法是xxx,超越了xxx的限制(即比前人方法好在哪里);我们的方法扩展了xxx概念 等等。这样做的目的应该是突出自己方法的特点。本文先说,不同于之前以整个骨骼(whole skeleton)作为输入的方法,我们先根据生理结构把人体骨骼分为5个部分,然后分别把他们输入到五个子网络(subnets),最终骨骼序列(skeleton sequences)的表示(representation)输入单层感知机(single-layer perceptron),感知机上时序积累的结果是最终的输出(temporally accumulated output)。对于感知机还不是很了解,这里猜测这个时序积累是一种把skeleton sequences中多帧信息结合在一起的手段,这样才能表征动作。
4.第四部分,实验结果简介,与别的方法对比了,在数据集上跑的结果超过了state-of-the-art方法。这里说了我们与五种其他RNN模型以及一些非RNN模型进行了对比。
Introduction部分:
第一段,先说动作识别很重要,在某某某领域有广泛的应用;然后一句话提到传统的做法是怎样的,接下来表明传统方法的不足,为下文介绍自己的方法做铺垫。接着就开始具体介绍问题的背景,介绍人体可以用骨骼关节(skeleton joints)表示,分成几个部分,并且现在的技术已经能高效的提供这种表示方法下的数据(depth sensor以及skeleton estimation算法可以高效的提供视频中人体关节的三维坐标),因此,时机成熟,这种基于骨骼的动作识别应该被好好研究。
第一段已经做好了铺垫,第二段开始介绍skeleton based action recognition领域中其他人都用过什么方法,并且每介绍一个方法就会加一句话指出这个方法的不足,以便后文凸显自己方法的优势。
第三段顺理成章地开始介绍自己的方法是大概怎么做的,这一段是简短的介绍,简单说了模型是hierarchical RNN模型,用Fig1展示了网络结构,并且用一句话说明在这个网络中,低层次的身体结构的时序信息是用BRNN来建模并且合并成高层次的人体结构。第四段详细介绍模型:人体可以分成五部分,四肢及躯干。人体动作也是这些body part的动作组合而得。五个身体部分在网络的第一层输入到五个BRNN中,接下来,为了模拟相邻身体部位的联系,躯干的representation和四肢的分别合并起来,于是就剩下四个representation了,每一个都是四肢之一与躯干合并得到的。第三层是把合并后的四个representation输入到四个BRNN,接着再用这四个输出拼出上身和下身,再同样方法得到全身的representation,再输入一个BRNN中,接着是一个dense layer加一个soft max分类器。最后一个BRNN使用了LSTM来解决训练时梯度消失的问题。
第四段首先介绍自己实验部分将自己的模型与五个其他的RNN模型对比,在三个数据库上进行了实验,取得了好的结果。然后简介自己的贡献。
第五段简介了文章接下来的布局,每个部分都是什么内容。这种介绍不是所有的paper都有,似乎不是什么重要的内容,不知道写这个有什么用。
Related Work:
第一段简介都会介绍哪些方面工作,接下来分别介绍三方面的相关工作,结构很清晰。接下来的三个部分组织方式都是:一句话介绍一个工作,连续介绍好多工作,最后一句话指出这个方式的不足之处。其中第三个部分介绍和本文模型同属一类的基于RNN的工作,最后一句指出这些方法的不足之处在于仅仅把RNN当作sequence classifier,以及自己模型与这些方法的差别是在于加入了feature learning以及在使用RNN的时候引入了不同的层级(hierarchy)。本文related work写的很规矩,大部分文章也都是差不多这个思路来写related work,但是在介绍每一个别人的工作时,要能一句话指出关键的贡献与方法。
第三部分.Our Model:
第三部分是技术部分,详细介绍模型。第一段是对这一部分的小结,说明会先回顾一下RNN和LSTM,接着会介绍自己的模型及其变体。
3.1介绍RNN与LSTM
第一段:第一段介绍RNN,先用一两句话点明RNN特点“与feed forward network不同之处在于有feedback loop,通过这种结构,RNN可以建模来处理有前后关系的时间序列”,然后就开始上公式,公式后就是千篇一律的where...来解释公式各个部分都是什么。
第二、三段:这两段介绍LSTM。第二段第一句承上启下,表明RNN难以训练,需要使用LSTM来解决这个问题,引出下面内容。接下来用几句话简介LSTM,包括:LSTM取代了RNN的非线性单元;LSTM由一个cell以及输入门、遗忘门、输出门组成。第三段又给出了LSTM公式,LSTM完整介绍完毕。
(3)-(7)为LSTM的公式
第四段:此段介绍双向递归神经网络(BRNN)。第一句表明为什么要提出这个模型“为了使得时间序列中每一个点能同时参考到未来和过去的信息,提出了这种双向传递的RNN模型”。然后依然像前面介绍模型一样,几句话简介BRNN。包括:BRNN有前向传播和反向传播两个隐藏层;这两层共享一个输出层;想在BRNN中使用LSTM只要把非线性单元换成LSTM即可。
从这几段可以看出,在介绍一个模型的时候,一般都是先来一句话引出,这句话可能是对比一个其他常见的模型指出其不同点、这个模型提出的目的等等;接着就是几句话来简介这个模型,比如模型的功能特点、结构组成等等;简介之后就是公式介绍。
3.2技术部分,介绍作者自己的模型
第一段:先从直观的角度来分析task,引入作者处理问题的角度,指出人体可分为五个部分,简单动作分析局部即可,复杂动作是身体局部动作的组合。之后一句话指出“我们提出了一个分层级的RNN网络(hierarchical bidirectional RNN)”,最后一句话对比那些利用“hand-crafted features”分类的方法,指出了“我们的方法是end-to-end的”。
这一段引入了作者处理人体动作的角度,即把人体分为五个部分,人体动作或者是局部的动作,或者是局部动作的组合。这实际上是为后文的网络结构的介绍在做铺垫。但是第一段的最后两句话信息量较小,在介绍完处理问题的角度后,如果指出“我们的网络就是基于这种hierarchical的思路搭建的”会显得更加紧凑,意思明确,这里再次强调自己是end-to-end似乎没什么必要。
第二、三段:第二段结合图片介绍网络结构,其实和introduction的介绍大同小异,内容是一样的,没有公式。第三段是打补丁的,在第二段搭建的网络结构基础上,介绍了网络哪里用了LSTM及其原因,是在补充网络的细节。
3.3网络的训练
实际上这一部分才是给出了模型的公式,这一部分按照网络结构的顺序,给出了输入、BRNN层,输出连接层(fusion layer)、全连接层、soft max输出、以及最终loss的表达式,最后提到用BPTT来把loss最小化。
展开来讲:第一段简要概括“训练模型需要一个前向传播和一个后向传播”,然后用两个小标题“forward pass”和“backward pass”来分别介绍前向传播和后向传播。
前向传播介绍的就是输入网络的数据如何一步步从输入走向输出的。整个网络的数据传播过程包括:
1.向BRNN层输入数据:在t时刻,向第i个BRNN层输入的公式如下
其中(8)是BRNN的前向层(forward layer),(9)是反向层(backward layer),W和b分别是待训练的权重(weights)和偏置(biases),tanh是激活函数。
2.向fusion层输入数据:本文的模型是将人体分块再聚合的,因此经过BRNN处理后的人体各部分的表示(representation)要经过fusion层进行合并,假设合并的是第k个和第j个局部,那么合并之后输入到下一个BRNN层(之前是第i个BRNN层,现在是第i+1层BRNN)的公式如下
其中是连接符(concatenation operator),文中并未说明这个concatenation是如何实现的,看到代码才能知道。
3.向最后一层BRNN输入,因为最后一层使用了LSTM所以要按照之前提到的LSTM的公式来处理
4. 最后一层BRNN的输出输入到全连接层得到
5.最终的输出、分类概率、loss函数。全连接层的输出是将T帧(frame)加起来得到的
之后采用softmax得到分类概率
而最终的loss函数如下
其中Ωm代表一个序列(一段视频);Ω代表所有序列,即整个训练集;M是训练集样本数量;r是Ωm的正确标签;
后向传播(backward pass)内容很短,只是提到用back-propagation through time以及随机梯度下降来训练模型。
3.4模型的五种变体
本文的这个模型使用了很多机制,比如BRNN、将人体分成五个局部并一层一层合并起来等等,这一部分提出的模型的五种变体就是在做对比实验,来确定这些操作是否真的是有用的。
首先HBRNN-L代表本文提出的模型的完整版,-L表示使用了LSTM,H表示hierarchical,也就是说模型是将人体部位通过不同层次合并起来,而BRNN就是之前提到的双向RNN,下面五种变体都是在这个完整版模型上进行修改得到的。
五种变体模型分别是:
1.HURNN-L,这里U指的是unidirectional,也就是说没有使用双向RNN而是使用了单向RNN。
2.DBRNN-L,D指的是deep,这个模型与HBRNN-L的区别就是没有把人体分成五个局部,而是一股脑整个输进了网络。
3.DURNN-L,在DBRNN-L基础上将BRNN换成单向的unidirectional RNN。
4.DURNN-T,为了验证LSTM的作用,将DURNN-L中的LSTM换成了tanh激活函数。
5.DBRNN-T,很明显,是把DURNN-T中的BRNN换成了unidirectional RNN
4.实验部分
第一段中规中矩,简要概括了实验部分的内容。包括:在某某数据集上对比了我们的模型、模型的变体以及其他人的模型的表现,并且讨论了我们模型的过拟合问题和计算效率。
4.1数据集的介绍
各数据集的介绍,中规中矩,无需赘述。
4.2数据预处理以及参数设置
第一段结合图片介绍了不同数据集中人体都是用哪些关节来表示的,以及对不同数据集的不同人体关节图是分别如何划分成五个人体部分的。(如下图)
第二段介绍的是对数据的处理,由于人体动作和绝对坐标无关,作者将每一个人体骨骼都进行了标准化。人体所在的每个坐标系中心都设定为上图绿色椭圆圈出的三个点的坐标的平均值,也就是人体的中心。
第三段采取了一个叫做Savitzky-Golay smoothing filter的操作,来提高数据的信噪比,操作如下,下标i,i-1等等指的是帧数,即第i帧、第i-1帧等等,这个操作是将相邻几帧的人体关节坐标进行了一下加权平均。我对这个的理解是,人体运动速度有限,在相邻的几帧身体不会发生太明显的变化,因此如果某一帧的某个关节坐标定位错了,通过与相邻几帧的坐标进行加权平均,可以缩小这个错误。从权值上也可以看出,第i帧的权重最高,i+1和i-1次之,i+2和i-2再次之,也就是说,越近邻的帧对于坐标的修正意义越大,越远的越小。
第四段的内容是:由于人体关节运动轨迹是平滑的,相邻帧变化不大,因此为了减小计算量,对每个视频序列采取等间隔抽样来获得训练数据而不是把每一帧都输入网络。接着提到了具体每个数据集是否采取抽样训练,以及都以什么频率抽样。
第五段开始介绍模型的参数设定,结合了一个表格,介绍了在三个数据集上六个模型的参数设定,并解释了表格中的各种标记都表示什么。
最后一段指出所有对比模型的结果都是直接从别人的paper中得到的。
4.3 实验结果及分析
这部分对每个数据集分别进行分析。
MSR Action3D数据集:第一段前部先介绍如何划分数据集,剩下的部分就是对比各种算法的准确率。第二段指出各个机制的加入提高了准确率,验证了这些机制是有用的。接着作者放出了一个confusion matrix,统计了每一个类别的样本被分到各个类别的比例,并且在第三段进行了详细的分析。第三段的分析很具体,针对confusion matrix分析了为什么有些样本被错误的分类了。第三段指出,主要是一些很像的类别会被错误的分类,例如“PickUpAndThrow”和“Bend”常常被弄混,区分这些动作仅靠关节的坐标是非常具有挑战性的,我觉得这个说的比较有道理也可能没道理,同一个动作,不同人做可能会有显著的差别,如果两个很像的动作之间的差别可能还不如同一个动作两个人做的差别大,就会导致分类困难,只能达到一个tradeoff,只要能有两个动作有足够高的相似度,这种困难就会发生。
Berkeley MHAD:这个数据集的结果没有过多分析,先介绍如何划分数据集,然后对比了一下各个模型的准确率,垮了夸自己的模型有效。
HDM05:除了基本的数据集实验方法设定与准确率对比,作者在这个数据集上也做了和MSR3D一样的confusion matrix,并且具体分析了模型分错的类别是一些相似度极高的类别。
4.4 讨论
这部分讨论了两件事,一个是过拟合与欠拟合,另一个是计算效率
过拟合与欠拟合:作者指出,从实验结果可以看出加了LSTM机制的模型更容易过拟合,而仅仅使用tanh激活函数的模型容易欠拟合,作者分析这是因为只是用tanh的模型中出现的梯度消失问题引发了拟合不足。为了解决-L(加了LSTM的)模型的过拟合,作者尝试加入了输入噪声(input noise)、权重噪声(weight noise)以及训练步数截断(early stopping)机制,最终效果最好的是权重噪声。为了解决-T(仅用tanh激活函数的)模型的欠拟合问题,作者尝试了调整学习率、加入不同等级的输入噪声和权重噪声,但是没有说哪个表现更好。
计算效率:作者用Berkeley MHAD数据集来讨论HBRNN-L模型的计算效率。介绍了模型跑多少epoch准确率达到多少以及训练时间等等。还指出了HURNN-L和HBRNN-L效果相差不大,但是计算效率胜出一筹,适合在线应用。根据准确率的对比,BRNN的确有效(差的不多),但是计算效率就比URNN逊色一筹了。
5. 总结与展望
第一段总结了文章,第二段再次指出相似的类别难以区分,并期望以后通过结合更多的特征能够解决这一问题。