本文主要分享了七牛人工智能實驗室在視頻 AI 方面的一些工作,分別有兩個關鍵詞:一個是多維度融合,另外一個關鍵詞是視頻 AI 。

首先介紹一下七牛 ATLAB,幫助大家瞭解人工智能實驗室。

這個實驗室成立僅兩年的時間,主要的任務是在整個七牛雲的平臺上,爲廣大的客戶提供一些人工智能方面的服務。在 ATLAB 之前,七牛的整個多媒體服務是通過 DORA 這個產品給大家做展現。瞭解過七牛雲整個系統的人應該都知道 DORA 是一個包羅萬象的東西。之所以起名叫 DORA 是因爲希望它能像哆啦 A 夢一樣,萬能口袋裏有各種東西,給大家帶來無限的可能。整個平臺做得很大,每天的請求量大概在百億級的水平。

它的基礎架構包括三層:首先是底下會依託整個七牛的基礎服務,包括雲存儲和容器計算以及日誌服務;還有上面提供圖片和視頻 API,包括圖片的裁剪、縮放、瘦身之類的同步 API 和視頻轉覽之類的 API,爲大家提供一些音視頻的服務,這是最初 DORA 整個設計的初衷。

多維度融合賦能視頻 AI 的實踐

ATLAB 整個人工智能實驗室就是基於整個 DORA 之後,在上面繼續布了一套 AI 的引擎,裏面會包括一些鑑黃、物體檢測以及圖片相關的一些 AI 引擎和 AI 的深度學習平臺,這樣就稱它爲 DORA++ 。通過 atlab.ai 這個網址,就可以看到整個AI 引擎的 DEMO,裏面會有一些類似這樣的展示。

包括我們做了很久的圖片鑑黃服務、物體場景檢測識別服務、人臉檢測服務,還有最後是一個圖片分割的服務。現在整個 ATLAB 圖片 AI,支持了包括 11000 類的圖片分類、3000 類的檢測、20 類比較精細的鑑黃、400 類的場景以及人臉相關的服務,其中人臉識別在百萬人臉底庫中的首選識別率已經逼近 99%。

下面介紹第一個關鍵詞:視頻

我們爲什麼要做視頻?

多維度融合賦能視頻 AI 的實踐

隨着通信技術的發展,我們研究的一些事物的對象是會隨着通信技術的發展發生改變的。遙想當年還是直板機諾基亞的時候,2G GPRS 網絡的時候,QQ 能夠聊天發短信就足以滿足,因爲當時的通信技術不足以支持你發更多的信息。而到了 3G、4G 年代,大家用的更多的是微信,交流更多的是圖片和一些短視頻等,所以我們 AI 研究的對象,就開始向圖片發展。未來可能會到 5G 時代,數據傳輸速度會從原來的 10M 變成 10G 的水平,比如一些實時的視頻通話,一些直播的應用,肯定會成爲我們未來研究的很重要的對象。因此,隨着通信技術的發展,視頻總有一天會成爲整個人工智能研究比較重要的對象。

圖片 AI 就是隨着深度學習技術的發展和非常廣大的數據級的推動。視頻跟圖片相比,視頻本身有很多自己的特點,生搬硬套圖片那一套可能並不實用。

首先視頻內容的多樣性,視頻和圖片一樣具有內容的多樣性。而且有些分析的類別可能是在視頻裏纔會有的。包羅到整個生活當中的方方面面。所有生活中的內容,都可能成爲我們視頻處理的對象。

其次就是現有視頻產生的場景的複雜性,現今視頻產生的場景大概分爲:視頻監控、直播,還有一些電視臺的媒體,這三個場景是視頻比較多的情況。僅僅是在這三大場景裏面,也存在廣泛的多樣性。例如在視頻監控的場景下,由於這些視頻部署的對象不同,會導致所有部署的攝像頭,位置高度以及它關心的對象有所不同,會導致處理的複雜性。同樣的多樣性也會在直播場景,遇到比如說有主播、演唱會、球賽,包括喬布斯的發佈會之類的各種各樣的場景。這些可能是視頻處理起來比較難的一些方面。當然在媒體行業,也會有新聞、綜藝、電視劇、電影這樣不同類型的場景。

視頻跟圖片的區別,還有最重要的一點是隻有當你看到視頻的最後一秒,你才知道這個視頻發生了什麼。像球賽這張圖展示的一樣,大多數人可能都會覺得這個球進了,但是他偏偏就都踢在橫樑上。時序性的信息是視頻獨有的,這與圖片完全不同。

多維度融合賦能視頻 AI 的實踐

最後說到的是視頻數據量的問題。視頻如果簡單一點理解,就可以看成是一連串圖片的集合。那麼我們比較了一下,現在市面上常見公開的數據級,前兩個一個是檢測的數據級、一個是分類的數據級。可見,它在一百萬量情況下的大小,大概是 100 個 G 左右,而視頻僅僅只有十幾萬的數據就可以達到 T 級的水平,也就是說視頻的數據量相對於圖片來說是爆炸式的,處理的時候也是難點。

以上是第一個關鍵詞的內容。

下面介紹第二個關鍵詞:多維度融合

我們怎麼用融合的方式去做視頻?

首先來談談,在做分類的時候,如何使用多維度的特徵這樣一個融合層次,去完成對視頻的分析。去年 6 月份,在剛開始從事視頻研究時,我們打算從視頻競賽入手開始研究視頻的一些算法。

多維度融合賦能視頻 AI 的實踐

在當時 ACM( LSVC2017 )舉辦了一個視頻分類的比賽,包含 500 個不同的類,幾十萬的視頻。那個視頻標註,就是一個視頻整段的標註,沒有把事件具體發生的片段標出來,這個難度是比較高的。當時我們的想法是我們去試水和了解我們和世界最先進的水平相差有多少的態度去參加了比賽,主要使用的方法是通過一個特徵融合的方法去完成比賽。

首先我們用了一些很深的深度學習圖片用的網絡去提了一系列特徵。

多維度融合賦能視頻 AI 的實踐

然後用了一個時序編碼,用詞袋模型推因出的 NETVLAD 的模型,核心思想是把視頻長度不同的特徵段變成等長的特徵,相當於把長度五花八門的特徵都變得一樣長,做了這樣一個編碼的工作。同時還進行了一些簡單的擴充,相當於在之前設定編碼的時候,加入了一些我們自己設計的結構。

多維度融合賦能視頻 AI 的實踐

然後設計了一些 fusion 的方法,其中一個比較有特點的是 一個 early fusion Net-VLAD,相當於我們不是在最終分類的時候纔將我們特徵的結果做一個融合,而是在特徵層面就把它進行融合,這樣融合的好處是,可以大量減少最後這一層 FC 的參數量,使整個模型推理更快。

多維度融合賦能視頻 AI 的實踐

這是最終比賽的結果,可以看到 map 從最初跑的 0.68,到最後可以達到我們提交的 0.87,通過特徵融合的方式可以極大地提高整個視頻分類的準確度的。這就是我們最終的成績,稍稍落後阿里拿了第 2 名。

雖然最終的成績還可以,但是在整個比賽過程中,我們遇到了非常多的問題。數據量特別大的時候,下載數據就花了一個星期,處理預處理又花了一個星期,整個時間非常耗時。整個視頻訓練,要讓它能夠變得更快,我們就必須要整成一套流式的訓練平臺,相當於從視頻端輸進去大家就開始訓練,然後通過多維度的工具鏈的融合,使整個訓練速度加速,這樣纔可能訓練出更好的模型。

下面介紹一下七牛雲整個的深度學習平臺。

多維度融合賦能視頻 AI 的實踐

上面一套最開始傳統模型發佈的流程,它就包括整個數據級的整理、下載、標註,再做一些預處理,手工搭平臺,再訓練最終交付出去。我們的深度學習平臺,就是將上面過程中可以自動化的事情,全部用自動化的手段實現,這樣導致整個的訓練過程,可以減少大概 80% 的人力和 50% 的時間。這是比賽時候就想做的事情,整個融合的工具鏈的入口是我們開發的 VOTT 標註的平臺,在這個平臺上可以很方便地標註各種視頻片段的信息和一些視頻類別的標籤,然後通過這個進度條拖、拽等,可以很方便地找到你想標註的內容。

多維度融合賦能視頻 AI 的實踐

然後就是整套大規模的流式訓練平臺。整個平臺我們拆成了四個部分:第一個部分是一些視頻解碼,存儲解碼等;第二個部分是一些特徵提取的功能;第三個部分是模型訓練;第四個部分是模型的融合。整個把它拆分成了四個完全獨立的部分,它們之間互不相干,數據進來之後就可以進行源源不斷的流式訓練。

整個存儲和編碼解碼用的是 ALLUXIO 和 NVIDIA 提供的 NVVL 工具。這個工具的好處是:它可以調用 GPU 上的解碼器,將視頻解碼的信息直接存儲在 GPU 上,省去了從 CPU 到 GPU 的拷貝過程,從而加快了整個訓練的過程。

特徵提取集羣,是將原始的視頻轉化成我們要的例如單幀圖像,多幀圖像和光流之類的訓練用的素材,然後拿來訓練。同時我們發現圖像對視頻的表述,是比較侷限的。有些時候還需要聲音、文本這樣的信息,這些額外信息的加入也可以提高我們訓練的效果,所以一併把它們放在集羣裏。

這次最新的 CVPR 的比賽中,我們只花了七天七模型就完成了整個比賽,結果也不算太好,就拿了個第三名。七天七模型主要包括 TSN I3D non-local 等視頻專用的模型,就不再是之前圖片相關的網絡,我們的技術報告鏈接在圖片上,可以通過這個就詳細地瞭解模型的一些情況和技術報告。

有了這個快速訓練模型的能力之後,我們在視頻分析可以去哪裏落地。於是就會跟很多客戶討論,你們對視頻有什麼需求和要求,他們提到有一個視頻通用結構化的需求。這個需求是指,有時候需要對視頻裏面的內容進行一些搜索,搜索裏面一些敏感的人、敏感的事、或者是一些特定的物體。但肯定不能每次搜索的時候,就把整個視頻全部拉回來跑一遍,畢竟這個成本是不能承受的。那麼就需要把一個視頻轉成一個通用的結構化的可以搜索的一些東西去做這麼一件事。

多維度融合賦能視頻 AI 的實踐

不同的客戶,對於視頻結構化的需求有不同的理解。比如一些媒體的客戶,內容很合適他們的硬性要求,他對於裏面出現的一些比如涉黃的內容,是比較敏感的,他需要這樣一個東西;還有一些敏感人物是不能出現的,這是特別硬性的要求;另外還有一個要求,就是希望視頻可以分門別類的分在提前預先設定好的類別下面。

之前這些事情都是人做的,比如《奔跑吧兄弟》就希望分在綜藝的類別下,這是用戶的需求。如果在安防的監控場景下,需求就可能是希望能夠在杭州市全部的攝像頭裏面找到某一輛紅顏色的車。這就需要做一個快速的搜索,同時把無關的信息全部壓縮掉,不必存這麼多視頻,只要存下解構化的信息就可以,能不能從這些解構化的信息裏面做一些預測,這是用戶的需求。所以整個的需求,會分成很多種類型。

怎麼樣描述一個視頻?比方說《葉問》這個電影,可以從幾個方面找到它。

首先,搜索功夫片或者甄子丹這個人,都可能會搜到他。另外還有一個是一句非常有名的臺詞 “ 我要打十個 ”,可能也會搜索到。你搜索一個視頻,可能從視頻整體去搜索到它,或者從關鍵人物可以描述它,或者通過一些動作或者事件也可以找到它。這三個層級都是視頻結構化需要做的事情,所以提出這樣一個多層級的視頻結構化架構。裏面會有整段視頻的結構化,還有一些關鍵人物的結構化和事件行爲的結構化。

只有多維的技術相融合,才能完成多維度視頻結構化這件事情。首先視頻整體結構化就需要視頻整理分類的能力;視頻人物結構化,就需要有人,有檢測跟蹤的能力;事件檢測化,就需要檢測裏面的事件和鏡頭分割的能力,有了這樣的能力以後,才能完成整個多維的結構化的事情。

產品在這裏不一一列舉,直接跳到我們做的一些視頻結構化的 DEMO。

多維度融合賦能視頻 AI 的實踐

第一個是視頻中人臉結構化的 DEMO。這是給電視臺做的,需求是把裏面的人全部結構化,方便後續搜索。經過整理下來的功能,第一是要實現人臉的檢測和上傳,把人臉的信息存下來;第二是要識別裏面一些敏感人物,包括一些政治人物;第三是要把普通的人物,即不敏感的人歸到一起,只要做這三個功能。

多維度融合賦能視頻 AI 的實踐

最終結果是這樣的,這是在這個視頻裏面找到的人;這些綠色區域,就是這個人出現在視頻當中的時間。如果當你需要很方便地去看這個人在視頻中出現的片段,只需要把這個鼠標點到跟它相關的內容上面,就會自動地播放跟這個人相關的事件和工作。這是整個視頻人臉結構化的項目。

多維度融合賦能視頻 AI 的實踐

第二個是我們做了一個點球事件識別的 DEMO。可以看到這個曲線就表示的是這個事件,這個視頻上點球的概率是多少。當出現點球的時候,這個事情會超過這個紅線,是一個預測值,超過這個紅線的時候就會知道點球事件發生了。我們訓練模型經過測試之後,整場球賽可以把點球都找出來,誤檢很少,整個的效果還可以。

但是大家看到這個點球 DEMO 會覺得,點球 DEMO 有點 low,因爲只能告訴你這個時候發生的點球,唯一能做的是把整個賽季的視頻跑遍,然後做成一個點球合集,然後一直看。爲什麼會導致這個東西好像沒什麼用呢?

經過分析我們發現,一場很好的球賽,它不僅僅包括球場上的一些事件,還要包括整個教練員的排兵佈陣,包括一些明星球員的超神的發揮和一些球隊與球隊之間的歷史和恩怨等。整個事件加在一起,纔會是一場比較精彩的球賽。而只有足球事件是可以用視頻結構化的方法得到,而剩下的這些東西,則需要一些知識圖譜和自然語言處理的東西,我們必須要把多維的信息融合起來,才能得到一個完整的東西。

多維度融合賦能視頻 AI 的實踐

所以我們就重新設計了一個點球的架構,將爬蟲爬到的關於足球的知識,經過數據清洗跟合併之後,建成了球星人臉庫和知識圖譜。當處理視頻的時候,不僅檢測球場上的事件,還對球場上的人進行識別,通過與球星人臉庫和知識圖譜的相互調用,就會得到一些歷史的數據。之後就將歷史數據跟球場事件做一個綜合的展示。這樣就相當於有多維度的信息了。我們第二個版本可以達到的效果是:當梅西踢點球的時候,就可以在左上角顯示出來他是誰、他是哪個國家的、他之前踢進了多少球、這樣整個演示的內容就顯得豐滿一些。

通過我們一年多來的一些實踐,我們認爲單獨的內容可能沒有很好地解決實際當中視頻的需求,我們需要結合各種各樣多維度的包括知識、技術、能力、產品之類的內容,去把它打一個包,才能整體地解決一些視頻上的問題。所以在我們未來的產品架構裏面,會帶上學習引擎,同時也會帶上我們各種識別引擎,還有我們自己視頻的一些引擎,經過合力才能成爲一個比較好的視頻產品。

我們一直堅信視頻肯定是未來的大勢所趨,總有一天所有的智能分析都要走上視頻的道路,希望七牛雲在這方面做的產品,可以給大家一個更好的視頻的 AI 的體驗。

原文發佈於微信公衆號 - Golang語言社區(Golangweb)

相關文章