參與:Panda
你是否曾在看視頻時呼喚過計數君?近日,谷歌和 DeepMind 公佈的一篇 CVPR 2020 論文利用機器學習方法打造了一種機器計數君,可以非常便利地統計視頻中重複過程的出現次數;尤其值得注意的是,谷歌不僅公佈了論文,還發布了演示視頻、代碼、模型以及一個新構建的相關數據集 Countix。本文為谷歌 AI 博客對這項研究的解讀介紹。
項目:
https://sites.google.com/view/repnet
論文:
http://openaccess.thecvf.com/content_CVPR_2020/papers/Dwibedi_Counting_Out_Time_Class_Agnostic_Video_Repetition_Counting_in_the_CVPR_2020_paper.pdf
Countix 數據集:
https://storage.googleapis.com/deepmind-media/Datasets/countix.tar.gz
Colab Notebook:https://colab.research.google.com/github/google-research/google-research/blob/master/repnet/repnet_colab.ipynb
我們的日常生活中存在各種各樣的重複過程,有的是自然週期,比如月相變化或心跳和呼吸節律;也有的重複過程是人為的,比如生產線或交通中的重複模式。
重複過程不僅普遍存在,而且其中還藴含着可通過巧妙的方式提取出來的見解:在重複多次發生的事件背後,也許還隱藏着什麼底層原因;在重複的場景中也許隱藏着某種漸進的變化趨勢,這也許能幫助我們理解這個場景。
有時候,重複過程能為我們提供清晰明確的「動作單元(action units)」,即構成一個動作的且具有語義含義的分段。舉個例子,如果一個人正在切洋葱,其動作單元就是切下洋葱片的重複操作動作。這些單元可能成為更復雜動作的指示並可能允許我們無需人工標註這些單元,就能在更細粒的時間尺度上自動分析更多這樣的動作。
基於上述原因,如果能集成可理解一般重複模式的系統,則以長期觀察和理解世界為目標的感知系統將會大獲助益。
谷歌的 CVPR 2020 論文《Counting Out Time: Class Agnostic Video Repetition Counting in the Wild》在這一研究方向上邁出了重要一步。這篇論文提出了一種可理解多種重複過程的單一模型 RepNet——其中涵蓋人類鍛鍊或使用工具、動物奔跑、鳥類扇動翅膀、鐘擺擺動等多種不同的重複過程。之前的重複過程研究大都使用了週期一致性約束來分析有同一動作的不同視頻,以便能細粒度地理解它們。谷歌這篇論文則採用了一種不同方案:一種能識別單個視頻中的重複模式的系統。
RepNet
RepNet 模型的輸入是包含重複動作的視頻,而且這些重複動作可以屬於多種不同類別(包括在訓練期間未曾見過的類別);而其返回的結果是在視頻中找到的重複時間段。
過去,執行重複計數的常見思路是直接比較幀的像素密度,但現實世界的視頻可能存在相機移動、視野中物體遮擋、比例尺發生巨大變化、形狀變化等情況,因此學習不受這些噪聲影響的特徵是非常必要的。為了做到這一點,當然要用機器學習。
具體來説,谷歌以端到端的方式訓練了一個機器學習模型,可以直接估計重複的時間段。該模型由三部分組成:一個幀編碼器、一箇中間表徵(稱為時間自相似度矩陣)、一個時間段預測器。
首先來看幀編碼器,其使用了 ResNet 架構作為每幀模型,以為視頻的每一幀生成嵌入。選擇 ResNet 架構的原因是其已經在許多圖像和視頻任務上得到了成功應用。將視頻的每一幀傳遞給基於 ResNet 的編碼器會得到一個嵌入序列。
接下來就該計算時間自相似度矩陣(TSM)了,即比較視頻中每一幀的嵌入與其它每一幀的嵌入,返回的矩陣可幫助後續模塊輕鬆分析,進而對重複過程計數。這個過程能讓視頻幀流中的自相似性顯現出來,從而可幫助實現時間段估計,如下所示:
TSM 處理地球日夜循環圖像的方式演示。
然後,對每一幀,再根據 TSM 中的相似度序列使用 Transformer 來直接預測重複的時間段和週期性(即該幀是否屬於該週期過程)。一旦有了時間段,就可以用週期段的幀數除以週期時間段長度來獲得每幀計數。歸總起來,就可以預測出視頻中的重複數量。
RepNet 模型概況
時間自相似度矩陣
上面展示的日夜循環的時間自相似度矩陣(TSM)示例是一個固定時間段長度重複的理想場景。而對於真實世界視頻,TSM 往往能揭示出視頻中讓人着迷的結構。下面展示了三個示例:跳躍運動差不多算是一個固定週期長度的理想週期動作了;對比之下,由於動能損失,彈跳小球的彈跳高度會在重複過程中逐漸下降。而某人挖鏟混凝土的視頻前後都有一段無運動的片段。這三個行為對應的學習到的 TSM 也有明顯差別,這需要模型關注場景中的細微變化。
跳躍運動(恆定週期長度;視頻來自 Kinetics),彈跳小球(下降式週期,Kinetics),挖鏟混凝土(視頻中存在非週期性片段,PERTUBE 數據集)
在 RepNet 中使用 TSM 作為中間層的一大優勢是 Transformer 的後續處理是在自相似度空間中完成的,而不是在特徵空間中完成。這會鼓勵向未曾見過的類別泛化。舉個例子,只要動作的重複速度是相似的,跳躍和游泳等非常不同的動作所得到的 TSM 也是相似的。這使得該模型可以在某些類別的動作上訓練之後再泛化用於未曾見過的類別。
數據
訓練上述模型的方法之一是收集一個大規模的包含重複活動的視頻數據集且其中帶有良好標註的重複次數。但這種方法存在兩方面的困難。第一,需要有人檢查大量視頻以識別出其中帶有重複動作的視頻。之後,每個視頻都必須標註上一個動作重複的次數。儘管對於特定的任務而言,標註者可以跳過某些幀(舉個例子,在分類跳躍運動這樣的視頻時),但他們仍然需要看完整個視頻才能統計出跳躍運動的執行次數。
針對這一難題,谷歌採取的做法是引入一個合成數據生成過程,可以使用可能不包含重複動作的視頻生成帶有重複的視頻。具體做法是隨機選取一個視頻片段並將其重複任意次數,然後再在兩段加上原視頻的前後部分。
這種合成數據生成流程可以基於任何視頻生成帶有重複的視頻
儘管這一流程可以生成帶有重複過程且看起來自然的視頻,但對於深度學習方法來説還是過於簡單,因為深度學習可以通過查找偽影而非學習識別重複而學會欺騙。針對這個問題,谷歌的策略是執行極端的數據增強,他們稱之為「相機運動增強(camera motion augmentation)」。這種方法會對視頻進行修改,從而在視頻進行過程中使用 2D 仿射運動模擬平滑移動的相機。
左圖:一個由隨機視頻生成合成帶重複視頻的示例。右圖:一個使用相機運動增強合成的視頻示例,這對於模型來説難度更大,但能更好地泛化用於真實的重複視頻上。(視頻均來自 Kinetics)
評估
現在可以在合成的重複視頻上訓練模型了,但是所得到的模型必須要能泛化用於帶有重複過程的真實視頻才行。為了在真實視頻上評估訓練所得到的模型的性能,谷歌從 Kinetics 數據集收集了大約 9000 段視頻,並構建了一個新的數據集。這些視頻根基於 YouTube 上的數據多樣性,涵蓋許多動作類別,並且具有豐富多樣的場景。然後,谷歌為這些視頻標註了視頻中動作的重複次數。為了鼓勵對這一領域的進一步研究,谷歌已經公開發布了這一起名為 Countix 的數據集。
應用
不依賴類別的計數模型具有許多有用的應用場景。以單個模型使用的 RepNet 可以統計許多不同領域的視頻中的重複次數:
RepNet 可以計數多種領域活動的重複次數,比如切洋葱、地球晝夜週期甚至運動中的獵豹。
RepNet 可用於評估來自超聲心動圖的心跳節律,即便其在訓練期間並未見過這樣的視頻:
預測得到的心跳速率:45bpm(左邊)和 75bpm(右邊)真實的心跳速率分別為 46-50 bpm 和 78-79 bpm。RepNet 對來自不同設備的數據的心跳速率預測非常接近該設備實際測得的心跳速率。
RepNet 還可用於監控重複活動中的速度變化。下面展示了這樣的速度變化也可用於其它設置中,以便進行質量控制或過程控制。
在視頻中可以看到 RepNet 計數了在激光顯微鏡下觀察到的加速細胞振盪,即便其在訓練期間並未見過這樣的視頻。
左圖:一個人進行「登山者」鍛鍊。右圖:使用主成分分析得到的 RepNet 嵌入的 1D 投影,這裏是該人在鍛鍊過程中改變速度的時刻。