不懂视频分类?ResNet3D帮你搞定

本文来自:blog.aistudyclub.com

随着短视频应用火爆全网,现在各种短视频已经占据了全网50%以上的流量,那么如何对短视频分类就成了一个问题。目前,我们使用卷积网络可以有效的对图片进行分类,同时精度也比较高。那么神经网络是否可以对视频分类呢?答案是肯定的,本文带你使用ResNet3D网络来完成视频分类任务。

本文对ResNet3D论文解读和复现,ResNet3D网络主要内容出自以下两篇论文:

《Can Spatiotemporal 3D CNNs Retrace the History of 2D CNNs and ImageNet?》

《Would Mega-scale Datasets Further Enhance Spatiotemporal 3D CNNs》

论文项目地址:
https://github.com/kenshohara/3D-ResNets-PyTorch

1.目标

这里我们先简单介绍一下第一篇论文《Can Spatiotemporal 3D CNNs Retrace the History of 2D CNNs and ImageNet?》的目标。我们已经知道CNN网络在CV领域已经取得了巨大的成功,在大量的图片数据集下,比如ImageNet数据集,CNN网络可以取得较高的精度。那么使用目前已有的视频数据集,将现有的CNN网络的2维卷积核调整为3维卷积核,是否有充足的数据可以满足CNN网络的训练需求?文中主要使用ResNet3D网络对此进行了验证。

第二篇论文《Would Mega-scale Datasets Further Enhance Spatiotemporal 3D CNNs》是在第一篇的基础上进行的工作,其目标是希望验证超大规模的数据集是否可以增强CNN网络的性能。

2.工作内容

在第一篇论文中,论文作者发现只有在Kinetics400这种大规模数据集上,ResNet系列模型才能很好的收敛。在UCF101、HMDB-51和ActivityNet上模型都会出现过拟合的情况,很难训练出高精度的模型。在Kinetics400数据上,随着模型的深度增加,比如在ResNet152之后,精度提升就很微弱了。这里说明了如果有大规模的数据集是可以使用3D的CNN网络进行训练的。既然有了大规模数据集训练好的模型,就可以在小规模的数据集上进行微调训练,作者取得了不错的结果。


第二篇论文在第一篇论文的基础上,对不同的大规模数据集进行融合,得到了不同的组合超大规模的数据集,分别训练出不同层数ResNet3D网络。保存模型权重可以作为预训练权重,在小规模数据集上进行微调训练,在不同数据集和模型上都得到了不同程度的精度提升。

3.模型结构

通常做图像分类使用的ResNet网络的卷积核一般只是在2D图像上做滑动窗口,计算特征图,卷积核的形状一般为[out_channel, in_channel, W, H]。而在视频分类任务中一般对网络输入的是视频中的一段序列,比如16帧或32帧,这样在原有WH维度上又增加了一个时间T的维度,卷积核的形状为 [out_channel, in_channel, T, W, H]。这时,卷积核不止在2D平面上滑动,还需要在第三个维度T上移动,提取帧之间的关联特征。这样就需要对2D的ResNet进行改造,将其改造为3D的ResNet网络。ResNet3D保持原有的ResNet的整体架构不变,替换每个block中的basicblock或bottleneckblock中的卷积核为Conv3D,同时池化层也需要替换为3D池化。


整体网络结构描述如下:


4.训练方法

第一篇论文中在Kinetics400数据集上训练使用宽和高均为112像素,16帧的RGB图像作为输入样本。同时使用5种不同尺寸的裁剪方式对图像进行随机裁剪,同时添加了随机水平翻转,进行数据增强。使用交叉熵作为损失函数,同时使用SDG优化器,设置正则化系数为0.001,动量系数设置为0.9,起始学习率为0.1。如果在10个epochs之后,验证集的损失没有减小,则学习率除以10。在小数据集上进行模型微调时设置SDG优化器学习率为0.001,同时正则化系数设置为1e-5。同时作者在多次实验得出结论:在训练时,冻结前4个block,只微调第5个block和全连接层的权重可以得到更好的结果。

第二篇论文在第一篇论文训练策略的基础上进行了调整,因为是使用超大规模数据集对模型进行微调,所以其他参数不变,只是将SGD优化器的起始学习率设置为0.003,正则化系数和动量系数保持0.001和0.9。

5.实验结果

通过在多种超大规模数据集和多种模型结构组合训练得出以下结果。


本次复现的条件和目标如下,

预训练模型:K+M数据集上的ResNet50预训练权重

数据集:UCF-101

目标:Top1为92.9%

6.论文复现

项目地址:
https://github.com/txyugood/Paddle-3D-ResNets

1.下载解压数据集
数据集地址数据集地址:
https://aistudio.baidu.com/aistudio/datasetdetail/48916

mkdir dataset/
unzip UCF-101.zip -d dataset/

2.视频转换为图片

mkdir /home/aistudio/dataset/UCF-101-jpg/
cd Paddle-ResNets/ && python generate_video_jpgs.py /home/aistudio/dataset/UCF-101 /home/aistudio/dataset/UCF-101-jpg/ ucf101

3.转换pytorch预训练模型

pip install torch==0.4.1
cd Paddle-ResNets/model/ && python convert_to_paddle.py

4.训练网络
在训练过程中进行clips准确率验证,并保存clips准确率最高的模型,最终clips准确率90%。

训练方法:

  • 训练时开启4进程读取,将数据集分为4块,batch_size 为128,以异步方式读取数据进行模型训练。

  • 每次迭代总训练时间为2.3秒左右,数据读取时间为1.8秒左右,

  • CPU使用率已接近100%,内存占用在80-90%之间。

  • GPU使用率50%,可见训练瓶颈在CPU读取数据部分,若CPU和内存扩容,还可以继续提升训练速度。

  • 训练使用的优化器为Momentum,学习率0.003,momentun=0.9 L2Decay为0.001.

  • 数据增强方式选择RandomResizedCrop方式。

  • 按照论文中提到的方法,冻结Resnet50网络的conv1、conv2、conv3和conv4,只训练conv5和fc层。

cd Paddle-ResNets/ && python train.py

5.验证网络
按照论文的方法将视频以16帧为一个clip进行分割,最后计算一个视频的所有clips的平均值作为视频的分类结果。

最后会生成val.json文件供计算top-1准确率使用。这里与pytorch版本代码逻辑一致。

cd Paddle-ResNets/ && python test.py

6.计算准确率
Top-1准确率为93.55% 超过论文中的92.9%。

cd Paddle-ResNets/ && python eval_accuracy.py
load ground truth
number of ground truth: 3783
load result
number of result: 3783
calculate top-1 accuracy
top-1 accuracy: 0.9355009251916468
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容