Pytorch impelementation for Temporal Segment Networks (TSN) in ECCV 2016
原始版本实现,我只是稍微做了改动,自己训练了模型。
这个版本不需要光流,只用到了RGBDiff,需要训练光流的模态需要去使用dense flow提取光流。
增加了光流的实验(update)。
pytorch 0.4 有无GPU都可以使用,但是无GPU可能会很慢。
ffmpeg 可以直接 sudo apt-get install ffmpeg安装,用来把视频转换成图片存储,读写会快一些,代码,我使用的帧率是10FPS,为了节约存储空间的话可以调低一点。
UCF101 数据集,下好放在./raw/data/下面,如果外网比较慢的话,可以从我分享的百度云上下载。
训练和测试都只用到了split1,全都用上的应该能进一步提升。
Modality | Top1 Accuracy | Top5 Accuracy |
---|---|---|
RGB1 | 77.37% | 93.55% |
RGB2 | 78.19% | 94.48% |
RGBDiff1 | 71.53% | 89.93% |
RGBDiff2 | 72.11% | 92.86% |
Fusion RGB1+RGBDiff1 | 81.52% | 95.70% |
Fusion RGB2+RGBDiff2 | 82.37% | 96.56% |
Fusion RGB1+RGBDiff2 | 83.06% | 96.17% |
Fusion RGB2+RGBDiff1 | 80.15% | 95.35% |
Fusion RGB1+RGB2 | 77.48% | 92.97% |
Fusion RGBDiff1+RGBDiff2 | 34.55% | 67.27% |
因为双流结合有点类似于集成学习,为了对比到底是多模态起了作用还是集成模型起了作用,我增加了对比实验。从对比中可以看出,集成两个相同的模型反而正确率有所下降,特别是RGBDiff下降的十分厉害,这非常奇怪,其中的原因还有待进一步研究。说明RGB和RGBDiff这两个模态还是能互补的。
下一步将增加光流模态的对比和在更大数据集上的实验,如果哪位有Kinetics的百度云请分享一下,小弟感激不尽,自己去下载实在是太慢了。。。
update:新一轮的评估,支持了在视频的基础上直接操作,不用把视频先处理成图片。
Modality | Top1 Accuracy | Top5 Accuracy |
---|---|---|
RGB | 79.46% | 93.34% |
RGBDiff interval=1 | 72.56% | 90.77% |
RGBDiff interval=2 | 76.87% | 93.10% |
FLow interval=1 | 66.51% | 88.77% |
FLow interval=2 | 66.77% | 89.11% |
RGB+RGBDiff | 84.67% | 96.67% |
RGB+Flow | 82.69% | 95.98% |
NOTE:Fusion的时候都是默认interval=2.interval的意思是在视频中取帧的间隔。
update:新一轮的评估,支持更大的数据集something something
Modality | Top1 Accuracy | Top5 Accuracy |
---|---|---|
RGB | 21.6% | 49.3% |
RGBDiff | 26.5% | 55.6% |
RGBDiff+RGB | 32.2% | 61.7% |
环境配好了之后需要下载我的预训练模型:
下载好了之后直接运行test.py ,python test.py 即可得到RGB和RGBDiff两个分支融合的结果。
也可以单独测试单个分支,python main.py --evaluate --resume [模型路径] --modality [RGB/RGBDiff],或者直接去对应的修改一下config.py里面的参数。
只需要下载好对应的数据集,然后修改好合适的参数即可在自己的数据集上训练。
训练时间:UCF101 split1 ,GTX 2080Ti上大概两个小时。