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

Recurrent Neural Networks
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结构非常相似:

展开的RNN结构.jpg

HMM结构示意.jpg

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

RNN for Tracking

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

其过程如下图:

RNN for Tracking 框架.jpg

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

RNN框架.jpg

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

其中f是激活函数。

目标函数为:

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

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

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

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

2D-RNN for Tracking

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

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 对比结果如下:

RNN和2DRNN对比结果.jpg

其中 SRN 表示 Simple RNN.

连接数的计算SRN: , 2D-RNN:

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

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

1478163693921.jpg

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

Conclusion

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

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

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

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

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


基于2D-RNN的鲁棒行人跟踪的更多相关文章

  1. 解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法

    摘要:本文提出了两个用于无监督的具备可解释性和鲁棒性时间序列离群点检测的自动编码器框架. 本文分享自华为云社区<解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法&g ...

  2. CVPR2020:基于自适应采样的非局部神经网络鲁棒点云处理(PointASNL)

    CVPR2020:基于自适应采样的非局部神经网络鲁棒点云处理(PointASNL) PointASNL: Robust Point Clouds Processing Using Nonlocal N ...

  3. SIFT+HOG+鲁棒统计+RANSAC

    今天的计算机视觉课老师讲了不少内容,不过都是大概讲了下,我先记录下,细讲等以后再补充. SIFT特征: 尺度不变性:用不同参数的高斯函数作用于图像(相当于对图像进行模糊,得到不同尺度的图像),用得到的 ...

  4. H∞一般控制问题的鲁棒叙述性说明

    Robust Control System:反馈控制有承受一定类不确定能力的影响,这一直保持在这种不确定的条件(制)稳定.动态特性(灵敏度)和稳态特性(逐步调整)的能力. 非结构不确定性(Unstru ...

  5. 如何编写高质量的 JS 函数(2) -- 命名/注释/鲁棒篇

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/sd2oX0Z_cMY8_GvFg8pO4Q作者:杨昆 上篇<如何编写高质量的 JS 函数 ...

  6. 【论文阅读】Beyond OCR + VQA: 将OCR融入TextVQA的执行流程中形成更鲁棒更准确的模型

    论文题目:Beyond OCR + VQA: Involving OCR into the Flow for Robust and Accurate TextVQA 论文链接:https://dl.a ...

  7. Robust Locally Weighted Regression 鲁棒局部加权回归 -R实现

    鲁棒局部加权回归 [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 作为一个初学者,水平有限,欢迎交流指正. 算法参考文献: (1) Robust L ...

  8. 基于Linux-3.9.4内核的GDB跟踪系统调用实验

    382 + 原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 一.实验环境 win10 -> VMware -> Ubuntu1 ...

  9. DIY一个基于树莓派和Python的无人机视觉跟踪系统

    DIY一个基于树莓派和Python的无人机视觉跟踪系统 无人机通过图传将航拍到的图像存储并实时传送回地面站差点儿已经是标配.假设想来点高级的--在无人机上直接处理拍摄的图像并实现自己主动控制要怎么实现 ...

随机推荐

  1. new Array(n) 的坑 密集数组和稀疏数组

    今天写Vue时遇到一个奇怪问题,需要监控网页上的input 是否都有值 // var blanks = new Array(number); // blanks的监控属性 var emptyNumbe ...

  2. Python中模块安装文件的创建及使用

    在Python编程中,我们常常需要自己编写模块,当模块文件写好了,就需要创建安装文件,方便模块的发布. 此时,常用的方法,就是使用Python distutils(代表distribution uti ...

  3. MySQL日志

    在MySQL中共有4中日志:错误日志.二进制日志.查询日志和慢查询日志 一.错误日志 错误日志名 host_name.err,并默认在参数DATADIR指定的目录中写入日志文件.可使用 --log-e ...

  4. Sicily 1150: 简单魔板(BFS)

    此题可以使用BFS进行解答,使用8位的十进制数来储存魔板的状态,用BFS进行搜索即可 #include <bits/stdc++.h> using namespace std; int o ...

  5. 微信小程序开发工具的数据,配置,日志等目录在哪儿? 怎么找?

    原文地址:http://www.wxapp-union.com/portal.php?mod=view&aid=359 本文由本站halfyawn原创:感谢原创者:如有疑问,请在评论内回复   ...

  6. 常用js函数封装

    see them... // 获取网址的get参数 var GET = function(name) { var reg = new RegExp("(^|&)" + na ...

  7. 开发维护大型 Java 项目的建议

    假设你是正在开发和维护一个包含2000个类并使用了很多框架的Java开发者.你要如何理解这些代码?在一个典型的Java企业项目小组中,大部 分能够帮你的高级工程师看起来都很忙.文档也很少.你需要尽快交 ...

  8. js将多个方法添加到window对象上的多种方法

    方法一:(最简单也是最笨的方法) window.a = function(){}window.b = function(){}window.c = function(){} 方法二:(利用jq的ext ...

  9. iOS动画效果和实现

    动画效果提供了状态或页面转换时流畅的用户体验,在iOS系统中,咱们不需要自己编写绘制动画的代码,Core Animation提供了丰富的api来实现你需要的动画效果. UIKit只用UIView来展示 ...

  10. C# oracle odp.net 32位/64位版本的问题

    问题如下: 系统是win7 64位,技术 asp.net mvc 4, 数据库 oracle 11g. 由于某些原因只能使用 32的 ODP.NET ( Oracle Data Provider ), ...