转至:http://www.tianzsong.xyz/2018/04/08/c3d-keras/
code:https://github.com/TianzhongSong/C3D-keras
前言
C3D使用3D CNN构造了一个效果不错的网络结构,对于基于视频的问题都可以用来提取特征。 我简单复现了论文中行为识别那部分的实验。php
项目地址: C3D-keras
关于C3D的细节能够参考 Will-Lin的博客 行为识别笔记:C3D network-用于视频特征提取的3维卷积网络 或者参看 C3D原始论文。html
前期准备
一、数据集:采用的是通用数据集 UCF101。git
二、主要用到的库:Keras2.0.八、TensorFlow1.3.0、OpenCV3.2.0github
数据处理
一、先将UCF101数据集中的全部视频转换为图片保存到本地(注意:须要大约150多G的存储空间),使用 video2img.py网络
二、制做标签文档,跟 C3D官方Caffe实现一致,模型输入的视频段长度为16帧,训练集与验证集的分割与UCF101官方保持一致,每一个类别的前7我的为测试样本,后面的8~25人为训练样本。ide
模型定义
我这里使用的模型与论文中的模型并不一致,采用的是 C3D官方Caffe实现 的最新结构,该模型共有5个3D卷积层,卷积核的数量依次为6四、12八、12八、25六、256,每个3D卷积层后接一个3D最大池化层,除第一个池化层的pool_size为(2,2,1)外 其他池化层的pool_size均为(2,2,2),最后接三个全链接层,前两层全链接层的神经元个数均为2048,最后一层为101(类别输出)。权重衰减系数weight_decay设置为0.005。学习
具体细节请看models.py测试
训练
在训练过程当中咱们先将每个视频段(clip)中的每一帧resize为128x171,并在每一个clip上crop一个112x112x16的视频段做为模型输入。对于训练集,每一个clip都作一个翻转,做为一个简单的数据扩充手段。验证集只进行中心裁剪。spa
训练的epoch、学习率及学习率衰减(每4个epoch除以10)都跟原始论文保持一致,因为我只有一快GTX1080,batch_size只设置为16,太大了无法训练。.net