I3D Finetune UCF101

上个月主要是基于TensorFlow使用4卡训练,用Kinetics400数据集预训练的I3D模型,对UCF101 split1进行finetune,从训练精度和效率上做了很多零碎的实验,稍微总结一下实验结果:

1、首先只使用RGB帧,基本上训几个epoch就能达到95.7%,这个问题不大,学习率合适即可。四卡大概两三小时就训出来了。

2、投了一些时间在TensorFlow的多机多卡的加速上,由于公司都是使用集群,所以真实的端口和IP尤其重要,注意区分容器的端口和IP。另外表示使用dataset API的话,速度比队列快,然后多进程,预取都要用上,尽可能把内存小的操作放在前面速度更快,速度太慢可以考虑cache。用htop观察CPU,同时watch nvidia-smi观察GPU实时占用率,看看是不是IO卡训练速度,当然也可以使用前面说的timeline。

3、tf.train.MonitoredTrainingSession()是个好东西啊,写代码更简洁了。

4、实现了快速的video IO(即读入video然后on the fly的做decoding)!!!!这个很重要!!!在大数据集下(如Kinetics400或者Kinetics600)on the fly decode比先把video转成frames再来处理会高效而且方便很多,不需要先解码视频存成帧在硬盘。Kinetics400视频大概130+G,处理成RGB帧估计要1T以上,不仅浪费存储而且预处理总是费时间的。我也在不断优化tf代码,现在on the fly的训练速度基本上和解码存帧差不多甚至更快。关键发现在于opencv > videoFileclip, nvvl>= ffmpeg ,经同事提醒才知道opencv解码真心快。虽然在后面三个也分别实现了,甚至考虑了cache,浪费了一点时间。

5、使用video IO 训UCF101,当然也是更快的复现了95.7%的精度咯~

至此,I3D与UCF101算是告一段落了。

总结完,想到今年在三星中国研究院打activitynet18的时候,当时使用的还是自己改的caffe,然后预取RGB和optical Flow存硬盘里,才能进行训练,而且需要SSD。现在想想,当时真的应该早点学TensorFlow写video IO,然后跑3D CONV,一劳永逸。不过话说回来,以当时的资源情况。也只能把2D玩到极限,caffe的速度还是挺快的,不过由于存图太多(大概一两亿图片,现在感觉是肯定卡了IO,实际速度应该更快),存储需要太大,三星买了两个4T硬盘,现在想想觉得其实如果实现了快速video IO,本是不需要买的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 教程一:视频截图(Tutorial 01: Making Screencaps) 首先我们需要了解视频文件的一些基...
    90后的思维阅读 4,749评论 0 3
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,003评论 3 119
  • 曾经有人问我你怎么去看生死,当时我想了想给他讲了一个故事! 在一次聚众讲道时,佛祖问西游四人:人生有多长? 沙僧...
    戒掉ai阅读 785评论 0 2
  • 古田四路。 四月的尾巴开始散发出毕业的味道,周六申论划完最后一个句号,一个星期的时间,可期的日子里开始了毕业论文,...
    吴少年啊阅读 604评论 0 2
  • 愿一个人好好生活,安静独处,不希望有人打扰,直到慢慢老去,身体回归泥土
    爱吃小花生阅读 274评论 0 0