最近看了李沐讲论文系列朱毅老师讲的I3D论文精读(视频笔记),这里记录一下。

1.针对的问题

  1.之前的视频数据集都太小,导致大多数流行的动作识别基准都很小,且即使不同模型效果有好有坏也难以区分。

  2.在I3D提出之前,视频一直没有明确的前端运行架构,之前捕获时序信息的方法主要有三种。1.向模型中添加一个循环层,例如LSTM,但这种方法在之前这些数据集上,表现并不是非常好。2.3D卷积神经网络,输入是视频段,卷积核是三维的,再二维信息的基础上还要额外处理时间维度,这导致参数量变得很大,另外也没能使用到ImageNet预训练的好处。3.双流网络,时间信息通过计算出来的光流表示。还有一种结合了3D卷积和双流的方法,这种方法同样使用双流,不过在最后输出的时候不像3D卷积网络一样加权平均,而是使用了一个3D卷积。

2.主要贡献

  这篇论文主要有两个贡献:1.一个inflated 3D network(I3D),把2D模型扩张到3D模型,这样就不用专门设计一个视频理解的网络了,可以使用2D里已经设计好的网络,比如VGG、ResNet直接把它扩张到3D就可以了,甚至利用一些巧妙的方式把预训练模型利用起来,这样不仅设计简单,而且可以省掉很多预训练的麻烦;2.提出了一个新的数据集——Kinetics数据集,刚开始提出的时候只有400类,后面又推出了kinetic 600/700,分别对应600类和700类,视频的数量也从最开始的30万涨到了50多万,最后60多万,类比均衡,难度适中,不算特别大。

3.方法

  e为I3D模型,结构与3D卷积网络类似,不过结合了光流,最后进行加权平均,这里主要介绍一些细节部分。inflate和bootstrap操作是精华部分。

  1.Inflate,其实就是把一个2D网络直接变成一个3D网络,对于一个2D网络,只要遇到一个2D的卷积kernel, 就把它变成一个3D的kernel,遇到一个2D的pooling层,就变成一个3D的pooling层,其他结构都不变,这样就不需要重新设计网络。

  2.bootstrap,如果输入是一张图片x,2D网络是w,则输出是wx,将图片反复复制粘贴,变成一个视频则为nx,将所有的2Dfilter在时间维度也复制粘贴n次,变成nw,则输出变成nwx,所以需要做一些rescaling,也就是在所有的filter上除以n,则最终输出变成wx,也就与2D网络对应起来了(感兴趣的同学可以看一下老师实现的代码,具体实现在539行init_weights函数,先将2D网络的参数下载下来,然后通过collect_params这个函数就可以得到所有2D网络的参数,都存在weights2d这个变量里,然后将3D网络的所有参数也保存到weights3d变量,566行是一个assert操作,因为2D网络和3D网络的结构一样,也就是层数应该一样,从581行开始的for循环就是将2D网络的参数转移给3D网络,585行的就是bootstrap操作)

  3.如何控制池化层,从而使得感受野处于一个合适的范围,在inflate inception-V1时,conv层直接从7×7变为7×7×7,在maxpooling操作时并不是简单的将3×3变为3×3×3,因为作者发现时间维度最好不要做下采样,因为本来时间维度可能就不是长,所以这里是把3×3变为1×3×3,stride从2×2变为1×2×2,不过只是对于前面两个maxpooling,后面的依旧做了下采样。inception module直接inflate。

最新文章

  1. Git 操作本地分支与远程分支
  2. 下载模板,上传EXCEL
  3. NYOJ 51-管闲事的小明
  4. Vim常见快捷键汇总
  5. unicode下各种类型转换CString、string
  6. 配置Delphi工具菜单 转
  7. Pro/TOOLKIT入门教程汇总
  8. Summer Holiday
  9. Java设计模式(一)工厂模式
  10. 判断二叉树是否BST
  11. mysql 查询导出(txt,csv,xls)
  12. Loj 2320.「清华集训 2017」生成树计数
  13. .Net Core 中间件之主机地址过滤(HostFiltering)源码解析
  14. web跨域请求
  15. [C#]时间格式和字符串的相互转换
  16. C#中的out、ref、params详解
  17. Selenium 定位页面元素 以及总结页面常见的元素 以及总结用户常见的操作
  18. 移动端图片轮播—swipe滑动插件
  19. 分布式架构核心RPC原理
  20. linux中args工具

热门文章

  1. API 文档
  2. git---全局设置用户名、密码、邮箱
  3. CentOS7 搭建 PXE 安装系统
  4. centos 换源
  5. 跨平台Docker篇
  6. Linux-jar操作脚本
  7. pip设置镜像
  8. bpmn的依赖注入
  9. 错误 C2664 “int fputs(const char *,FILE *)”: 无法将参数 1 从“char”转换为“const char *”解决方法
  10. React使用高阶组件与Hooks实现权限拦截教程