今天搞了搞那个叫I3D的东西,主要是想试试看处理视频方面的东西效果怎么样。
一开始嘛肯定得找代码和模型。这玩意儿不像图片处理那么普及,感觉资源没那么多。我先是在网上搜了一圈,看看大家都是在哪儿找的。看到有人说一些代码托管平台上有,还有些专门的模型网站。
找了一阵,发现确实有几个地方能下到代码,比如一些研究机构或者个人分享的实现。主要还是看人家基于PyTorch或者TensorFlow实现的那个版本。 我选了个看起来用的人多点的,感觉坑能少点。
找模型权重
光有代码不行,还得有预训练好的模型权重。不然自己从头训,那数据量和时间,我可没那条件。他们说官方在那个啥Kinetics数据集上训过,效果我就去找这个权重文件下载。
这个过程还行,没太费劲。一般在代码的说明文档里会给个链接,或者告诉你去哪里下。有时候网络不太下载得有点慢,得多等等。把权重文件下回来,这算是关键一步了。
配置环境跑起来
接下来就是搭环境了。这步也挺常见的,就是装Python,装PyTorch(或者TensorFlow,看你选的哪个代码),还有一堆依赖包,像什么numpy、opencv之类的,处理视频肯定少不了。
有时候版本不对付,还得折腾一下。特别是显卡驱动、CUDA版本、PyTorch版本,这几个得匹配好,不然跑不起来或者报错。我这回运气还行,没遇到太大的版本兼容问题,按着代码仓库里的要求装,基本一次成功了。
环境弄好了,就把代码跑起来,加载模型和权重。这一步得小心点,路径、代码里的参数,得对上号,不然它找不到模型文件或者权重文件,肯定报错。
处理自己的数据
然后就是准备自己的视频数据了。I3D模型吃的是视频片段,不是单张图片。所以得先把视频处理成它需要的格式。
我主要做了几件事:
- 先把视频抽帧,不能把所有帧都喂进去,太大了,一般是隔几帧抽一帧。
- 然后把抽出来的帧统一大小,比如缩放到224x224像素。
- 再做一些归一化处理,就是把像素值弄到差不多的范围里。
- 把这些处理好的帧序列打包起来,作为一个输入样本。
这块儿挺烦人的,每个视频都得这么弄一遍,得写个脚本来批量处理。数据处理不后面模型效果也上不去。
看效果
数据准备就可以跑了。我是先试试看效果,就跑了个推理,看看它能不能认出来视频里是干啥的。加载上预训练权重,把处理好的视频数据喂给它,看输出的分类结果。
效果嘛还行,毕竟是预训练过的,对于一些常见的动作捕捉得还可以。要是想用在特定场景,还得在自己的数据上再微调一下模型才行,直接用预训练模型有时候不够准。
跑通I3D这个流程,主要就是找对代码和权重,把环境配然后就是处理数据比较麻烦。折腾了半天,总算是能跑起来看到点结果了,也算没白忙活。 后面如果需要,可能还得深入研究下怎么微调模型,让它更适合我的具体任务。
还没有评论,来说两句吧...