論文 | I3D《Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset》Two-Stream Inflated ...

一 寫在前面

未經允許,不得轉載,謝謝~~

這篇文章是DeepMind團隊發在CVPR2017年的文章,它把視頻分類任務在HMDB-51H和UCF-101數據集上分別做到了80.9%和98.0%,還是非常值得學習一下的。

我主要從以下這三個方面整理了一下文章的核心內容:

  • 場景引入
  • Introduction: 本文基于什么樣的背景做了什么事情?
  • Action Classification Architecture: 具體使用的模型結構,又是怎么根據一個現有的2D ConvNet提出新的I3D模型,并巧妙利用原來的參數做模型的訓練?

實驗結果以及更細節的東西就不在這里介紹了,感興趣的同學自己去看原文哦~

二 場景引入

在講文章之前我們先來看一下這張圖片:


A still from `Quo Vadis`

這張圖片是從Quo Vadis這步影視作品里截取出來的,就只有這一張圖片的情況下,我們無法猜測劇情中男女主是否接下來要kiss each other,還是 they have just done so?所以說單張圖像能夠展示給我們的動作信息是非常含糊的。

但是由于現有動作識別數據集大小的限制,導致現在即使是最好的視頻識別網絡都很難完全與圖像識別分開,因為圖像領域有一個非常大的數據集ImageNet,這給圖像分析帶來很大的便利。

接下來我會講為什么說目前視頻識別研究也這么依賴于ImageNet,以及本文基于這樣的背景做了什么樣的事情。

三 Introduction

3.1 ImageNet challenge帶來的福利

ImageNet是目前計算機視覺領域最大的圖像數據集,有1500 萬由人工注釋的帶標簽的圖片,超過 2.2 萬個類別。


而圍繞這個數據集展開的ImageNet challenge誕生出了很多優秀的網絡。

比如最常見的AlexNet、VGG16這些在ImageNet上本來用于做圖片分類任務訓練出來的網絡我就可以直接用來做一個圖像特征的提取,取到fc7的輸出,作為圖像特征,然后繼續做圖像分割、圖像相似度檢測、動作識別等任務。這一步,也常常稱為warm starting(熱啟動),這個對于后面的任務效果提升非常明顯,甚至有的時候可以直接用這些模型提取到的網絡作為特征來使用。

3.2 由ImageNet Challenge帶來的啟發

ImageNet是對圖像做分類任務,那么同樣的我們就會想在視頻領域,如果我們在一個足夠大的數據集上做動作的識別任務的訓練,這樣訓練出來的模型在用于其他的任務或者說是不同的數據集的時候會不會有同樣效果的提升呢?

所以本文就想來回答這樣的一個問題,跟ImageNet這個圖像數據集相對的,我們選擇了一個Kinetics數據集。

在視頻動作識別領域,主要有這樣三個比較常用的數據集:HMDB-51、UCF-101、Kinetics

前面兩個都是小數據集,分別包含51個動作類別、101個動作類別,很多現有的方法在這兩個數據集上的分類結果都差不多,很難真正判別一個模型結構的好壞。

我們主要介紹下本文主要用到的Kinetics這個數據集

  • 整個數據集有400 human action classes,每個類別都有超過400 clips
  • Person actions(singular) : drawing,drinking,laughing;
  • Person-Person actions : hugging, kissing, shaking hands;
  • Person-Object actions : opening presents, washing dishes.moving lawn;
  • 有些動作需要特別挖掘時間信息:比如不同類型的有游泳;
  • 有些動作需要側重于物體信息,比如不同類型的樂器;

3.3 本文所做的工作

基于以上的背景,本文主要做了以下2項工作:

  1. 挑選了比較經典的視頻動作識別的方法來驗證先在大的Kinetics數據集上做預先訓練,再各自到HMDB-51和UCF101上做fine-tuning。結果證實這樣的做法確實對于分類精度的提升有較大的促進作用,但是具體對于每個模型的精度度提升多少還是由模型本身決定。

  2. 文章又做了第二件事情:提出Two-Stream Inflated 3D ConvNets(I3D)。

    • 提出了一個能很好的利用現有的image classification model(2D ConvNet)來擴充得到一個3D ConvNet;
    • 簡單來說就是對原來的網絡結構中的filters和pooling kernels都換成是3D的,這樣就可以更好的提取視頻的時序信息。又由于這樣是從2D直接過來的,還可以利用ImageNet上訓練好的網絡參數。
    • 最終本文模型在Kinetics數據集上預訓練過的模型能在HMDB-51和UCF-101上分別達到80.9%和98.0%的精度。

四 Action Classification Architectures

這個部分我們就來看下文章選擇了哪些經典且具有代表意義的視頻動作識別網絡來驗證現在大的Kinetic數據集上訓練會在小數據集上帶來促進作用,以及文章是怎么樣通過一個現有的image classification model擴充得到新的3D模型,又是怎么樣利用原來的參數并把整個模型結構嵌入到Two-Stream方法中,形成I3D的?

4.1 Current video architectures

在現有的視頻信息表示的結構中,主要有以下幾項不同的地方:

  • 卷積操作是2D(image-based)的還是3D(video-based)的;
  • 網絡輸入是只有RGB圖像,還是包括提前計算過的optical flow
  • 另外在那些2DConvNets中,又如何利用LSTM或者時間上的特征融合來做到跨幀傳播信息;

本文挑選了一些比較經典且具有代表意義的網絡模型:

  1. 2D ConvNets中:ConvNets with LSTMs on TOP
  2. 2D ConvNets中:two-stream networks with two different stream fusion
  3. 3D ConvNets中:C3D
  4. 本文:two-stream inflated 3D ConvNets(I3D)

文章實驗用到的5個模型就如下圖所示:

  • 圖(a)就是第1種情況;
  • 圖(b)就是C3D的結構示意圖;
  • 圖(c)和圖(d)就是第2種Two Stream結構,只是兩個Stream的融合方式不一樣;
  • 圖(d)就是本文新提出的I3D了。

I3D:之前的3D ConvNets由于參數比較多,但是訓練數據又少,所以網絡層數都不會太深。但是本文就想能不能利用本來已經有的一些用在圖像分類任務上的2D ConvNets, 想辦法把他們擴充成3D,然后套入到two-stream這個大的方法框架中。因為這些網絡本身就比較深,又有預先訓練好的參數可以用來初始化,所以就可以解決我們剛剛提到的參數多、訓練數據少的問題。

接下來的這張表是模型的參數大小以及模型輸入的信息:

experiment strategy: 這里除了C3D外都有在ImageNet上預先訓練好的網絡模型,為了方便對比,我們把inception-v1,并對它用不同的方式進行變換來適應各個具體的網路結構。

Inception-v1:具體的網絡結構就不講了,簡單看下構成:

Inception-v1:inception model

network architecture
network layers

4.2 The Old 1: ConvNet+LSTM

  • 圖像分類任務的高精度使得我們很想把它直接用在視頻分析上;
  • 最簡單最方便的做法是把每幀都看成是獨立的,提取圖像特征后,然后取平均作為整個視頻的特征,但是這樣的做法完全忽略了視頻的時序信息;
  • 所以像圖(a)中展示的更舒服更合理的做法就是增加一層長短時時間網絡LSTM,來學習各個幀之間的時序信息 .所以文章在Inception-V1的最后一個average-pooling后面加了一個包含512個隱含節點的LSTM,最后跟的是一個用于分類的全連接層;

4.3 The Old 2 :3D ConvNets

  • 3D ConvNets看起來應該是處理視頻分析最自然的方法;
  • 但是3D網絡比2D網絡擁有更多的模型參數,這也代表網絡更難訓練;
  • 而且因為本來就是3D的結構,所以它們看起來沒有辦法享受到ImageNet預訓練的好處;
  • C3D本身也是一個非常經典的3D convNet,我們來看一下3D convolution的示意圖,具體的細節就不展開了
  • 在實驗中也對原本的C3D的結構做了一些小的變化,這里就不再說具體的了,對這篇文章來說主要掌握到知道C3D大概是什么樣子就可以了。

4.4 The Old 3: Two-Stream Networks

1. why two-stream?

  • 像ConvNet+LSTM這樣的結構中,可能能夠提取都到高層的一些變化信息,但是對幀與幀之間低層動作信息建模是不夠的, 而這一點在action recognition中是非常重要的;
  • two-stream就從不同的角度解決了這個問題:一路是RGB幀,另一路是計算得到的光學流。這樣就對時間和空間的信息提取都比較好;
  • 這種方法在現有benchmarks上的表現都不錯,而且比較容易訓練和測試;

2. two different fusion methods

  • 圖(c): 取一幀圖像預測的結果與光學流圖像預測的結果取平均
  • 圖(d): 是在圖(c)基礎上的一種擴展,通過一個3D ConvNet對多幀的信息進行融合,取到兩個Stream的最后一個average pooling層的輸出,作為3D ConvNet部分的輸入,先是512個(3,3,3)的卷積核,然后是一個(3,3,3)的max-pooling,最后是一個全連接層;

兩個Two-Stream模型都是端到端的方式進行訓練的;

4.5 The New: Two-Stream Inflated 3D ConvNets

方法的優越性:

  • 通過把2D ConvNet擴充成3D的ConvNet可以在參數初始化的時候用原來在ImageNet上預訓練的參數做初始化;
  • 還用了比較好的two-stream方法;

4.5.1 inflating 2D ConvNets into 3D

  • 直接將那些在圖像分類上表現優異的模型擴充成3D模型;
  • 在現有的2D architecture基礎上將里面的2維卷積核的過濾器filters以及pooling kernels,通常為square:(N,N),擴充成cublic:(N,N,N)

4.5.2 Bootstrapping 3D filters from 2D filters

直接擴充容易,但是要怎么使用原來訓練好的模型參數來做初始化呢?

我們可以想象一下把一個幀圖像沿著時間軸復制n次,除了幀與幀之間沒有變化之外,這其實就是一個video,我們稱之為boring video

那么我們要達到在這個boring video上做卷積操作后得到的feature map與原來的初始圖像做卷積操作后得到的feature map一模一樣。

解決方法就是將原來(N,N)的卷積核沿著t的方向復制N遍,得到(N,N,N), 再將這(N,N,N)的卷積核中每個值都除以N做個rescaling就可以滿足這個需求了。

我用(3,3,3)的kernel做了如下證明,實在懶得打字了,and忽略下我丑丑的字ヾ(?°?°?)??


證明
  • 因為我們證明了convolution layer按照這樣的方法可以保證在時間軸上是constant的,所以relu,maxpool這些層也都能保留原來的模型特性。

4.5.3 Pacing receptive field growth in space,time and network depth

怎么選擇convolution stride和pooling操作在時間維度上的擴充問題;這兩個都是影響feature receptive field的主要因素。

幾乎所有的image models對待空間平面(horizontial和vertical),不管是pooling kernels的大小還是convolution stride的大小在這2個維度上都是一樣的,(2,2) (3,3) (7,7)都是這樣的;

但是在考慮時間維度的時候,完全對稱的接受域并不一定是最好的,這個由frame rate,image dimension共同決定;

  • time grows more quickly than space: 可能會破壞物體邊緣信息,從而影響早期物體特征檢測;
  • time grows more slowly than space: 可能就不能很好的捕捉場景動態信息,影響動作的檢測;
  • 所以本文在將Inceptin-V1擴充的時候,并不是簡單的做對稱維度:
  • 擴充后的Inception-V1模型結構:


  • 可以看到是原來的Inception-v1結構變換而來的,原來的convolution以及pool全部都成了3D的;
  • 大多數保持了對稱的特征,例如第一個(7,7)變成(7,7,7),stride也由原來的(2,2)變成了(2,2,2)
  • 但是少數做了改變,比如前面的兩個max-pool,并不是(2,2,2),而是(1,2,2)這樣能夠更好的保留時間信息;還有最后的這個avg-pool,并不是(7,7,7)而是(2,7,7)。

4.5.4 Two 3D Streams

  • 現在我們看到的這個3D ConvNet已經可以比較好的提取時間和空間信息了;

  • 但是two-stream這個方法對于動作識別來說還是非常有幫助的;

  • 所以最后又將這個3D ConvNet設計成two stream的方式,具體的結構圖如下所示,對左右兩個網絡分開訓練,然后最后對它們各自的預測結果做一個平均。

    I3D

4.5.5 Implementation Details

主要講了網絡訓練測試的一些細節,介紹幾個關鍵的點:

  • 除了C3D-like之外都用在ImageNet上預訓練過的Inception-v1做參數的初始化;
  • 所有的網絡,除了最后一層conv,其余都加BN層和relu層;
  • 網絡模型是現在大的這個Kinetic數據集上訓練110k個step,然后再在Hmdb-51和UCF101上各自進行fine-tuning。

五 Experiment

文章主要做了兩部分的實驗:

  1. experimental comparion of architectures
  2. experimental evalution of feature

這部分內容就不再介紹了~~

六 寫在最后

花了2天的時間閱讀和理解文章以及做整個文章的梳理工作,覺得還ok的話點個贊呀嘻嘻~
?(ゝω???)

感謝閱讀~

有問題歡迎簡信交流。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容