人臉識別對動畫無效,迪士尼打造動畫專用人臉識別庫

語言: CN / TW / HK

內容導讀

人臉識別也遇到坑了,識別得了三次元,卻對二次元無效。迪士尼的技術團隊,正在開發這一演算法,以幫助動畫製作者進行後期搜尋。團隊利用 PyTorch,效率得到很大的提高。

本文由公眾號 PyTorch 開發者社群 編譯整理髮布

說到動畫,不得不提起自 1923 年就成立的商業帝國迪士尼,以動畫起家的迪士尼,至今引領著全球動畫電影的發展。

每一部動畫電影的背後,都凝結了數百人的心血與汗水。自第一部電腦3D動畫《玩具總動員》的上映,迪士尼就開啟了數字化動畫創作的征程。隨著 CGI、AI 技術的發展,迪士尼動畫電影的製作、存檔等方式也發生了極大的變化。 火遍全球的《瘋狂動物城》歷時五年製作完成

目前,迪士尼也吸收了一大批電腦科學家,他們正在用最前沿的技術,改變內容創作的方式,減輕電影幕後製作者的負擔。

百年電影巨頭,如何進行數字化內容管理

據瞭解,在華特迪士尼動畫工作室中,大約有來自 25 個不同國家的 800 多名員工,包括藝術家、導演、編劇、製片人以及技術團隊。

製作一部電影,需要經歷從靈感產生,到故事大綱撰寫,再到劇本擬定,美術設計,人物設計,配音,動畫效果,特效製作,剪輯,後期等諸多複雜流程。

截至 2021 年 3 月,僅專業製作動畫電影的華特迪士尼動畫工作室已製作並上映了 59 部長篇動畫,這些電影中的動畫形象加起來就有成百上千個。 在這裡插入圖片描述 歷史動畫角色的相關素材資料,會在續集、彩蛋、參考設計時被高頻使用

動畫師在進行續集製作、或想參考某一角色時,需要在海量的內容檔案庫中,尋找特定角色、場景或物體。為此,他們往往需要花費數小時來觀看視訊,純靠肉眼從中篩選自己需要的片段。

為了解決這個問題,迪士尼從 2016 年起,就開始了一項叫做「Content Genome」的 AI 專案,旨在建立迪士尼數字內容檔案,幫助動畫製作者快速、準確地識別動畫中的面部(無論是人物或是什麼物體)。

訓練動畫專用人臉識別演算法

數字化內容庫的第一步,是將過往作品中的內容進行檢測與標記,方便製作者以及使用者搜尋。

人臉識別技術已經比較成熟,但是,同一套方法,能否用於動畫中的面部識別呢?

Content Genome 技術團隊進行試驗之後,發現只在某些情況下可行。

他們選取《阿瓦勒公主埃琳娜》和《小獅王守護隊》兩部動畫電影作品,手動註釋了一些樣本,用正方形標出數百幀影片中的面孔。通過該手動註釋資料集,團隊驗證了基於 HOG + SVM pipeline 的人臉識別技術,在動畫面孔(尤其是類人臉和動物面孔)中的表現不佳。 在這裡插入圖片描述 手動標註出動畫形象的面部

團隊分析後確認,像 HOG + SVM 這樣的方法對於顏色,亮度或紋理變化具有魯棒性,但所使用的模型只能匹配具有人類比例的動畫角色(即兩隻眼睛,一隻鼻子和一張嘴)。

此外,由於動畫內容的背景通常具有平坦的區域和很少的細節,所以,Faster-RCNN 模型會錯誤地把簡單背景下脫穎而出的所有事物,都認作是動畫面孔。 在這裡插入圖片描述《汽車總動員》中,兩位「賽車」主角較為抽象的面部,就無法用傳統的人臉識別技術進行檢測與識別

因此,團隊認為他們需要一種能夠學習更抽象的人臉概念的技術。

團隊選擇用 PyTorch 訓練模型。團隊介紹道,通過 PyTorch,他們可以訪問最先進的預訓練模型,滿足其訓練需求,並使歸檔過程更高效。

訓練過程中,團隊發現,他們的資料集中,正樣本是足夠的,卻沒有充足的負樣本來訓練模型。他們決定使用不包含動畫面孔、但具有動畫特徵的其他影象,來增加初始資料集。

在技術上為了做到這一點, 他們擴充套件了 Torchvision 的 Faster-RCNN 實現,以允許在訓練過程中載入負樣本而無需註釋。

這也是團隊在 Torchvision 核心開發人員的引導下,為 Torchvision 0.6 做出的一項新功能。在資料集中新增負樣本示例,可以在推理時大大減少誤報,從而得到出色的結果。

用 PyTorch 處理視訊,效率提升 10 倍

實現動畫形象的面部識別之後,團隊的下一個目標是加快視訊分析流程,而應用 PyTorch 能夠有效並行化並加速其他任務。

團隊介紹道,讀取和解碼視訊也很耗時,因此團隊使用自定義的 PyTorch IterableDataset,與 PyTorch 的 DataLoader 結合使用,允許使用並行 CPU 讀取視訊的不同部分。 在這裡插入圖片描述視訊被提取的 I-frames,被分割成不同的塊(chunks),每個 CPU worker 讀取不同的塊

這樣的讀取視訊方式已經非常快了,不過團隊還嘗試只通過一次讀取就完成所有計算。於是,他們在 PyTorch 中執行了大部分 pipeline,並考慮了 GPU 的執行。每一幀只發送給 GPU 一次,然後將所有演算法應用到每一個 batch 上,將 CPU 和 GPU 之間的通訊減少到最小。

團隊還使用 PyTorch 來實現更傳統的演算法,如鏡頭檢測器,它不使用神經網路,主要執行顏色空間變化、直方圖和奇異值分解(SVD)等操作。PyTorch 使得團隊能以最小的成本將計算轉移到 GPU,並輕鬆回收多個演算法之間共享的中間結果。

通過使用 PyTorch,團隊將 CPU 部分轉移到 GPU 上,並使用 DataLoader 加速視訊閱讀,充分利用硬體,最終將處理時間縮短了 10 倍。

團隊的開發者總結道,PyTorch 的核心元件,如 IterableDataset,DataLoader 和 Torchvision,都讓團隊得以在生產環境中提高資料載入和演算法效率,從推理到模型訓練資源到完整的 pipeline 優化工具集,團隊都越來越多地選擇使用 PyTorch。