0. 前言
- 相關資料:
- 論文基本信息
- 領域:視頻理解 訓練加速
- 作者單位:FAIR&得克薩斯大學奧斯汀分校
- 發表時間:2019.12
- 這工作對我們這種算力不夠的人非常有幫助,也開源了,爲啥沒啥人討論呢。
- 可能做視頻算法的,除了我們,都是有錢人吧……
- 人生第一次訓練Kinetics-400,就是現在了嗎……
1. 要解決什麼問題
- 現在的視頻相關模型訓練時間太久。
- 128卡在Kinetics-400上訓練Slowfast也要一天多……
- high resolution models(指的應該是3D CNN模型,如I3D、SlowFast) 性能好,但訓練時間長。
- low resolution models(指的應該是2D CNN模型,如TSN、TSM)訓練時間較短,但性能差。
2. 用了什麼方法
- 提出了一個multigrid的訓練模型的方法。
- 該方法的目標是加快訓練速度,且不損失太多精度。
- 一個結論:在訓練過程中,輸入數據的shape不用一定是固定的。
- 總體思路:
- coarse-to-fine,即從粗糙到精細。
- 主要需要平衡“預處理每個mini-batch數據的計算量”與“不同輸入數據尺寸導致的模型計算量”。
- 方法基本流程
- 簡單說,就是在訓練過程中不斷變換輸入數據的尺寸。
- 假設輸入數據爲
(batch_size, t, h ,w ,c)
。 - 訓練過程中,
batch_size, t, h ,w
都會不停的變換。- 剛剛提到,總體思路是從粗糙到精細。所謂粗糙就指的是
h, w
較小,精細指的是h, w
較大。
- 剛剛提到,總體思路是從粗糙到精細。所謂粗糙就指的是
- 另外,隨着在改變整體shape的時候,一般要求總計算量(FLOPs)不會變化太大。
- 一些基本概念:
- sampling grids: 按我的理解就是,當
batch_size, t, h, w
這些數值固定後,就是一個sampling grid。- 一個sampling grid就代表一次對video的重採樣(resample)。
- 對於上面沒一個維度,都有兩個量化數值,span/stride,前者表示所有可取的值,後者表示採樣間隔。
- 相同的input size可能會是不用的 sampling grid。
- grid scheduling:
- 感覺意思差不多就是training schedule,在訓練過程中變化
batch_size, t, h, w
這些維度。
- 感覺意思差不多就是training schedule,在訓練過程中變化
- sampling grids: 按我的理解就是,當
- 具體實現方式:
- multigrid training的一個重要部分就是如何選擇 sampling grids
- 本質就是怎麼在訓練過程中變換
batch_size, t, h, w
這幾個維度。
- 本質就是怎麼在訓練過程中變換
- 文中提出了 short cycles, long cycles, long+short cycles,如下圖所示。
- multigrid training的一個重要部分就是如何選擇 sampling grids
3. 效果如何
- 在Kinetics-400上,用128GPU,訓練backbone爲ResNet50的SlowFast模型。
- 橫座標所謂的wall-clock time猜測就是總訓練時間(剛開始看,baseline訓練20小時完事了,震驚了,結果仔細一看,128GPU……)。
- 圖中所謂的
1x
這些指的是 epochs 的數量,1x
就是指與baseline相同。 - 對於1x的epochs,baseline/short cycle/long cycle/short-long cycle的訓練時間分別是20/8/5/5小時……
- 在Kinetics-400上,用1GPU訓練I3D模型。
- 訓練時間從6.7天減少到2天……
- 在Something-Something-V2/Charades上也嘗試使用multigrid訓練,效果都可以
- 從而證明這種方法對各類數據集都有效。
- 從而證明這種方法對各類數據集都有效。
4. 還存在什麼問題
-
感覺是比較工程化的項目(我喜歡),也沒有太多“爲什麼”,做了這麼多試驗就是有效。
-
等有機會,要在ava上也試試。