(转)用Keras实现用于提取视频特征的3维卷积网络--C3D

 

转至: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

前期准备

一、数据集:采用的是通用数据集 UCF101git

二、主要用到的库: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

相关文章
相关标签/搜索