行为识别阅读笔记(paper+code):Real-time Action Recognition with Enhanced Motion Vector CNNs_AUTO1993的博客-程序员秘密

技术标签: 运动向量  行为识别  双流法  

行为识别阅读笔记(paper+code):Real-time Action Recognition with Enhanced Motion VectorCNNs

这篇文章是发表在CVPR2016上的一篇文章,这篇文章主要是对双流法进行了改进,双流法的诟病就是采用optimal flow作为temporal network的输入,因此速度巨慢,无法达到实时的目的,而这篇文章使用motion vector 替代optimal flow,极大地提高了双流法的速度,从UCF101和THUMOS14数据集上的测试效果来看准确率虽有点不及双流法,但速度却是得到巨大的提高。废话少说,先附上代码链接再说文章内容。

代码链接:https://github.com/zbwglory/MV-release

一、       大致算法框架

从网络框架开始介绍能快速了解文章算法思路,以及创新之处或者改进之处。

对比双流法,比较大的改进之处有两点:

(1)利用视频编码提取motion vectors,以motion vectors代替optimal flow;

(2)由于提取的motion vector存在大量的噪声,所以data输入质量肯定不及optimal flow,由于motion vector和optimal flow是内在相关的,因此为了达到与optimal flow同样的效果,在对temporalnetwork训练的时候,使用光流辅助训练temporal network,具体的训练策略文章给出了有三种:


下面具体讲解一些文章比较重要的内容。

二、      Motion vector

运动向量用于表示image block的运动模式,在描述局部运动是类似于optimal flow。然而运动向量的目的并不是用于尽可能准确的描述两个macro blocks的temporal 关系,而是利用相邻帧之间的temporal redundancy来对视频进行视频压缩。运动向量是block-level的,而光流是pixel-level的,因此运动向量包含的运动信息都是比较粗糙的,缺乏像素级的精细运动信息。此外,运动向量中包含着大量的噪声运动信息,这是因为视频压缩算法在压缩视频需要来考虑到编码速率和压缩率,所以信息难免粗糙,包含大量噪声信息。下图是运动向量与光流的对比,可以看出,运动向量包含噪声运动信息,而且比光流要粗糙的多。直接将运动向量代替光流,那效果肯定蹭蹭的往下降,作者实验发现,直接使用运动向量在UCF101上测试,准确率下降了7%。


此外,并不是所有帧图像中都包含运动向量。一个视频可以看作是一组图片(groupof pictures,GOP),一个典型的GOP包含三类帧:I-frame,P-frame和B-frame。I-frame是基于自身编码的帧内编码帧,不包含运动信息。而其他两类帧包含运动信息,I-frame会影响CNN训练效果,作者使用上一帧的运动向量替代I-frame。

三、EnhancedMotion Vector CNNs

作者认为运动向量和光流存在着某种共性。两者都可以在单帧图像上提取,而且都包含局部区域的运动信息。只不过两者包含的运动信息的粗糙程度不同而已。因此作者认为可以使用optical flow CNN (OF-CNN)上学习的特征或知识迁移到motion vectors (MV-CNN)。OF-CNN和MV-CNN具有相同的网络结构。在训练的阶段,使用光流来提高运动向量的效果,在测试阶段不使用。作者给出了三种knowledge transferring的训练策略,如上图示。

Teacher Initialization:使用OF-CNN训练好的权重初始化MV-CNN,然后训练MV-CNN;


最后网络训练的损失函数是:


值得注意的是,Teacher CNN是已经训练好的,因此在对Teacher CNN监督训练的时候,其网络权值是不变的。

整篇文章的思路就是这样的,最后贴一下文章在UCF101上的实验结果。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/auto1993/article/details/78315175

智能推荐

C语言大写字母Z是几,c语言大小写字母怎么转化?_weixin_39760721的博客-程序员秘密

在C语言中,小写字母转换为大写字母的方法是将小写字母的ASCII码值减去32(例:A=a-32);大写字母转换为小写字母的的方法是将大写字母的ASCII码值加上32(例:a=A+32)即可。在 C 语言中区分字母的大小写,利用 ASCII 码中大写字母和小写字母之间的转换关系(差值为 32),可以将小写字母转换为大写字母;或者将大写字母转换为小写字母。教程推荐:《c语言教程视频》编写程序实现,从键...

《计算机网络》谢希仁期末复习最全思维导图(着重标出必考知识点)----第一章(概述)~第九章(无线网络和移动网络)_计算机网络谢希仁第四章思维导图_0k-ok的博客-程序员秘密

The wind stop at autumn water. I stop at you.(风止于秋水,我止于你)说明:基本上所有的知识点都概括了,可以脱离厚厚的课本,适合期末复习和构建计算机网络的系统认识,结合谢希仁老师的《计算机网络》每章的重点课后习题(不是全部!不是全部!每章也就10来道题,下面括号里面的就是必须要做的习题),效果会更好。第一章:概述()第二章:物理层()第三章:数据链路层()第四章:网络层()第五章:运输层()第六章:应...

Spring中用到的设计模式_困知勉行1985的博客-程序员秘密

1.模板模式Spring IOC容器的初始化过程->AbstractApplicationContext.java抽象类 -> refresh()方法,就是一个模板方法

Tina编译常见问题(openssl,libssl依赖)_openssl和libssl_芋圆-钰源的博客-程序员秘密

=====================(从文章中间开始为正确安装的解决方案)======(1)# xz -d Python-2.7.11.tar.xz# tar xvf Python-2.7.11.tar# cd Python-2.7.11/# ./configure # make && make install(2):~$ sudo apt-get

PIT systick_lvtingting2007的博客-程序员秘密

说起PIT周期中断定时器,那就是一句话,So easy!写这个模块的教程简直是太轻松了,PIT的功能就是它名字本身的字面意思,如果非要深究严谨的说的话,就是周期中断或触发定时器。我们常用的就是它的周期中断功能,其实他还可以作为周期定时触发功能,至于触发什么,当然是DMA或PDB啦!PIT工作原理即使你不用固件库来编程,PIT也绝对是不会让你望而却步的一个东西,打开技术文档看看它的寄

AI中台是什么?_陪学的博客-程序员秘密

中台为什么要AI?中台的作用是将重复的服务共享,快速构建满足个性化要求的业务,让业务好用!重复共享性,正是AI技术落地所急需要解决的问题,只有通过共享、复用,才能实现降低成本、快速应用。因此,建设AI中台就是围绕这个目的和初衷,将可重复使用的AI模型、服务沉淀共享,快速组合、组装、产出满足个性化智能业务要求,AI 中台是用来构建大规模智能服务的基础设施,是一套完整的人工智能模型全生命周期管理平台和服务体系。它提供模型设计训练、模型/算法库、复用标注管理、模型监控服务等能力支持。

随便推点

GNU_linux编程指南读书笔记2 --输入 输出_weixin_33802505的博客-程序员秘密

一 使用文件描述符1 打开关闭文件描述符open creat 使用他们需包含头文件<sys/types.h> <sys/stat.h>和<fcntl.h>int open(const char *pathname,int flags)int creat(const char *pathname,int flags,mode_t mode)pathname:路径名...

动态分区式存贮区管理算法实现_普通网友的博客-程序员秘密

设计一个动态分区式存贮区管理程序,要求支持不同的放置策略。如首次、最佳、最坏。说明:(1)分区描述器rd:主存大小假设为maxsize(单位为rd的大小)。flag size next  (2)主程序结构如下:          输入放置策略               申请一块内存作为主存          循环

输出图形(循环程序,任意字符) 三角形、矩形、平行四边形、菱形_在一个程序中输出以下四种不同的图案_Redmaple925的博客-程序员秘密

接触C有一段时间了,看多好次输出各种图形的练习题,自己也曾经编写过,今天整理在一起,为了给自己留下记录,也为了跟同样在学习路上的朋友们一起交流;代码采用主函数、分函数结构实现以下功能1、选择性输出 想要的图形 以及 图形大小2、循环功能,主动选择退出3、键盘任意输入,只有符合要求的输入(0~4)被执行,其他均为非法输入,返回程序,重新选择4、屏蔽输入结束时的“回车”,用函数...

数据预处理篇---修改图片名和后缀_心惠天意的博客-程序员秘密

修改图片后缀将图片的后缀jpeg改成jpgimport osimport stringdirName = "D:/dataset/second_project/raw_data/discriminate/HZH/20210916/" #最后要加双斜杠,不然会报错li = os.listdir(dirName)for filename in li: newname = filename newname = newname.split(".")

第1章-MFC程序运行流程_Bigfish_k的博客-程序员秘密

#include <windows.h>#include <stdio.h>LRESULT CALLBACK WinSunProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter);i

推荐文章

热门文章

相关标签