(轉)用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

相關文章
相關標籤/搜索