• 基于2D-RNN的鲁棒行人跟踪


    基于2D-RNN的鲁棒行人跟踪

    读"G.L. Masala, et.al., 2D Recurrent Neural Networks for Robust Visual Tracking of Non-Rigid Bodies, EANN 2016, CCIS 629, 18-34"笔记

    首先给一些介绍Recurrent Neural Network比较好的材料:
    深度循环神经网络与LSTM模型
    理解LSTM网络
    循环神经网络
    Recurrent Neural Network

    需要注意的是
    Recurrent Neural Network, RNN, 循环神经网络
    Recursive Neural Network, RNN, 递归神经网络
    许多文章这两个都不加区分,其实还是有所不同的,见:
    如何有效的区分和理解RNN循环神经网络与递归神经网络

    循环神经网络,Recurrent Neural Network,我们下面称之为RNN,存在一个feed-back的过程,因此很适合处理序列信息,而视频数据显然就是典型的序列信息。
    可以发现展开的RNN结构和HMM结构非常相似:

    enter description here

    展开的RNN结构.jpg

    enter description here

    HMM结构示意.jpg

    所以在做跟踪问题时,RNN可以类似于HMM分为两个阶段 predict和 update

    RNN for Tracking

    首先,提取目标的特征,可以时表观、大小、位置等等,然后使用t-k到t帧中的目标预测第t帧中目标的状态,之后使用交叉相关的方法更新t+1帧中目标的状态

    其过程如下图:

    RNN for Tracking

    RNN for Tracking 框架.jpg

    文中给出的简单的RNN框架:

    enter description here

    RNN框架.jpg

    表示输入层数据,表示隐层输出数据, 表示输出层数据,context layer,即记忆层的输出,那么

    其中f是激活函数。

    目标函数为:

    显然,其中是目标在t时刻真正的状态, 是检测出的状态,e是目标运动停止时刻。

    该网络可以通过BP算法计算得到,

    网络规模具体设置后面介绍。

    不过可以发现一点,RNN的记忆层纯粹的使用上一时刻的输出作为输出,显然不大合理,虽然后续使用线性组合和激活函数对该输出做了一定的变换,但那是和第t时刻输入一起作用的。为了更好的利用前一时刻的信息,可以对上一时刻的输出做响应的编码,然后再和第t时刻的输入一起进入隐层。这种思想可以在LSTM中见到。

    2D-RNN for Tracking

    类似于NN->CNN, 2D-RNN相对与RNN而言,输入数据直接时图像,而且层与层之间不再是全链接的关系,而是使用类似卷积的形式,不过与CNN池化不同的是,输入是图像,输出也是图像。其结构如下图所示:

    enter description here

    2D-RNN结构.jpg

    至于连接区域的大小,可以通过训练过程学习获得。

    显然该结构的隐层输出和输出层输出分别为

    实验

    改论文的实验数据来自于2012伦敦奥运会三级跳决赛的视频录像,其要跟踪的就是三级跳运动员。
    数据包含10段图像序列,视频帧率29fps,时长45s左右,图像大小1280720(实际操作中resize to 12872),每10帧采一帧。每个目标使用50*50的方形框框定(这点我觉得误差太大,一点都不精确)

    简单RNN: 2500输入节点、250隐层节点、250记忆节点、2500输出节点,3层网络
    2D- RNN: 2500输入节点、2500隐层节点、2500记忆节点、2500输出节点,3层网络, k=3

    在Intel CoreTM 2 DUO CPU E 8400 @ 3.00 GHz, 4GB RAM机器上使用5-folder cross validation 对比结果如下:

    enter description here

    RNN和2DRNN对比结果.jpg

    其中 SRN 表示 Simple RNN.
    连接数的计算SRN: , 2D-RNN:

    可以发现连接数少了,学习时间短了许多,而且性能上2DRNN表现也稍微好一点。

    下图给出了RNN和2DRNN预测图,图片模糊是因为输出的是和概率有关的位置分布。

    enter description here

    1478163693921.jpg

    后面和其他方法的比较,就不说了,因为我觉得毕竟不是在同一个数据集上的结果,这么横向对比意义不大。

    Conclusion

    1. 2DRNN方法相对于RNN方法,利用了序列信息的同时保留了部分结构信息,使用卷积的方法,使连接参数的数目明显减少,降低了模型训练的复杂度。

    2. 关于性能方面,但从论文提供的数据,并没有发现2DRNN相比与RNN提高多少。

    3. 论文中的RNN和2DRNN都仅仅使用的是三层网络结构,可以猜想随着层数的增加,模型性能会得到一定提高

    4. 模型没有考虑遮挡的问题

    5. 可以对该模型进行修改,输入不仅仅时bounding of Box,可以输入表观和大小、位置等信息,然后预测目标在下一帧的状态,接着可以使用KCF进行update,应该能够满足实时性要求,而且通过RNN的使用可以缓解KCF中目标旋转、缩放等局限性。


  • 相关阅读:
    python-杂烩
    24 Python 对象进阶
    23 Python 面向对象
    22 Python 模块与包
    21 Python 异常处理
    20 Python 常用模块
    18 Python 模块引入
    2 Python 基本语法
    1 Python 环境搭建
    3 Python os 文件和目录
  • 原文地址:https://www.cnblogs.com/YiXiaoZhou/p/6027382.html
Copyright © 2020-2023  润新知