双流网络two stream network学习笔记草稿(待整理)

卷积神经网络比较擅长学习局部的特征,而非物体移动的规律
先将运动信息抽取好(光流),再让CNN去学习这种(运动信息到动作分类间的)映射
空间流的输入是单帧图片,而时间流的输入是一系列的光流信息
最后将两个flow得到的概率取加权平均,就得到最终的结果

光流——观察者和场景之间各种物体之间的运动
描述视频里各个物体之间是怎么运动的

如何同时学到两种信息——外观信息和时序(运动)信息
一:提出光流网络
2,在数据量有限的情况下在只有多帧密集光流下训练的网络也能取得良好的效果
3、多任务学习,在视频数据量不足的情况下用同一个网络在两个不同的数据集上进行训练,也能取得良好的效果


视频天生就能实现数据增强
使用late fusion,也就是在logits层面去做合并
之前的early fusion是在中间层进行合并

基于时空学习演变成了3D网络,基于轨迹的学习,演变出了光流法
直接用CNN从视频中学习时空信息效果并不佳,输入一系列单独的视频帧和输入堆叠的图片效果差不多(差)


双流
空间流的输入是单帧图片,从静止图像中做动作识别,其实和图像分类没有本质区别,很多动作和对应物体紧密相连,所以从静止图像中提取信息对动作识别有很大帮助。而且空间网络可以从ImageNet上进行预训练,然后再在小的数据集上进行微调。其backbone为alexnet

而时间流的输入是一系列的光流信息
从数学上将光流分解为竖起和水平两个方向的位移
图像输入和预测出来的光流大小是一样的,每个像素点都可能运动,如果不运动的话运动幅度为0,因为每个像素点都有值,所以叫密集的光流dense optical flow.每两张图会得到一个光流。视频帧数为L则光流数为L-1
如何使用光流:
1、让算出的光流通过一个2D网络,跟图像分类没区别。之前的手工特征处理运用了多个帧之间的光流信息来学习运动信息,所以此处也将多个光流信息叠加到一起

光流叠加
1、直接叠加,将它们resize到需要的相同尺寸后直接stack起来。网络每次取输入都是在同样的位置上取的光流,每次对一张光流图来说都找的是同一点往哪走了
2、轨迹叠加,对于一个点产生了一个位移后下一次继续跟踪它下一步的位移
前者效果会优于后者
3、双向光流 给定L个光流图,将前1/2拿来计算前向光流,后1/2计算后向光流,然后将其叠加

给定L+1帧,得到L个光流图,输入到时间流网络的数据为H*W*2L的张量
时间流网络的架构和空间流差不多,只是第一层的输入维度的channel为2L
光流图的叠加,先是水平方向的位移,再是竖直方向的位置
最后的输出,以UCF101为例,共101个类别,那么时间流和空间流最后的输出维度都是1*101,最后将它们相加取平均,最后再做argmax操作,得分最高的就是最终的结果

实现细节,测试时不论视频多长,都等间距地取25帧,取出的帧先做10 crop,一张图取4个边角和中心,然后再将图像反过来再取一次,一张图就变成10张,对光流也是一样的取的这25帧,从25帧开始连续取11帧,抽得光流,将光流送给时间流网络。最后把所有结果取平均,当空间流和时间流都取完平均后将这两个流的结果取平均(late fusion).测试时像3D网络用的是30view,不同的算法测试方法不尽相同,对比时要考虑这些因素

https://www.bilibili.com/video/BV1mq4y1x7RU

视频看到37min 21s

posted @ 2022-08-24 21:30  飞向天边  阅读(407)  评论(0编辑  收藏  举报