機器之心原創,作者:邱陸陸。
作為(偽)AI 行業從業者,之心編輯部裡的小夥伴們自認都能夠以不錯的置信度人工識別「人工智慧與人工智障」。但是,當我把下面這張愛奇藝 app 的截圖放在大家面前時,編輯部的「識別器」們紛紛表示,這次置信度不高。
熱門視訊裡,「彈幕蓋臉」幾乎是必然事件,然而這個視訊裡,密密麻麻的彈幕都彷彿被李健老師的氣場所折服,非常準確地「繞開」了他英俊的臉。偶爾還會有一些小失誤,但這樣的失誤反而顯得更像是演算法而不是人工做出來的。
在學界,一個眾所周知的事實是,儘管在目標檢測任務裡,數家巨頭研究團隊都在論文中報告出了「超越人類」的結果,影象分割任務似乎仍然給研究者們留下了不小的進步空間。谷歌今年 2 月發表的 DeepLabv3+,在利用 3 億張內部資料做預訓練的前提下,在 PASCAL VOC 2012 資料分割資料集上拿到了當前的最佳效果(state-of-the-art),IOU 89%。在 Cityscapes 資料集上,這個數字僅僅是 82.1%。
給定這樣的研究水平,影象分割技術已經可以用於業界了嗎?愛奇藝應用裡看起來非常可觀的「人臉與背景分割」,究竟是基於人工智慧還是基於人工?帶著全編輯部的一籮筐問題,我們一路輾轉,聯絡到了愛奇藝技術產品中心,並且捉到了這項名為「AI 彈幕蒙版」專案的演算法負責人,愛奇藝技術產品中心研究員,馮巍。他給了我們非常詳盡的答案。
問題一:是不是分割?是什麼分割?
首先是我們最關心的問題還是:這個「彈幕蒙版」究竟是人工智慧還是人工:
是不是影象分割?是!是哪一種影象分割?語義分割(semantic segmentation)!
更確切地說,是一個有兩個類別的語義分割:影象裡每一個畫素都會被分配到「前景」類別或者「背景」類別,然後系統會基於分割結果生成對應的蒙版檔案。
演算法正是基於谷歌 DeepLabv3 模型,技術團隊也嘗試過 FCN 等其他分割模型,但是 DeepLab 的模型效果確實有突破。
馮巍也向我們展示了一些在綜藝和影視劇場景下的分類結果。
v.qq.com/x/page/z135…(中國新說唱彈幕蒙版效果)
為什麼會想要用影象分割做「彈幕蒙版」?
愛奇藝團隊的影象分割技術作為技術儲備已經儲備了相當長時間了,初衷是想用於短視訊的背景替換。
所謂背景替換,就是把使用者錄製的短視訊裡的人像摳出來,換到另一個不同的背景裡。但是從技術角度來講,單張影象分割效果合格不等於視訊分割效果合格:分割結果在視訊前後幾幀影象中稍有不連續,就會造成幀間分割邊緣不停地抖動,而這樣的分割不連貫是非常影響使用者體驗的。
那麼有沒有要求比背景替換低一點的場景?有,比如那就是保留原始背景,在原始背景和分割出來的人像層中間插入動態背景。這樣分割邊緣和原始背景仍然在一起,誤差就不那麼明顯。這也是彈幕蒙版的來源了。
「技術 ready 了之後我們就一直在不同業務部門 demo 自己的各種能力,這樣產品的同學就能想出很多好的點子。」馮巍說。
實際上,彈幕蒙版裡用到的深度學習模型不只是分割,還有識別。在對視訊進行分割前,「景別識別模型」會先對每一幀影象進行一次識別,判斷當前幀屬於近景還是遠景。
這個景別識別任務,目的是判斷影象是否是特寫或近景鏡頭畫面,這樣的影象才會進入到分割模型中生成蒙版,而遠景畫面則不會生成蒙版,彈幕會像原來一樣覆蓋整個畫面。這樣一來,幀間蒙版抖動的問題就得到了很好的解決。
值得一提的是,這個景別識別分類器也是一個已有技術積累換了個場景再利用的例子:之前這個分類器主要用於愛奇藝的智慧輔助後期製作等功能。
分割結束之後,系統會進一步利用「腐蝕」和「膨脹」等影象形態學處理演算法對分割模組輸出的前景區域進行精細的剪裁,並根據應用場景的需要刪掉畫面佔比小的前景區域。
經過這一系列的處理之後,才進入到蒙版檔案的生成、壓縮等生產流程。
問題二:需不需要自己標資料?標了多少資料?
答案是需要!標了數萬張。
通用的分割模型都是用 MS COCO 等通用資料集進行的訓練,直接用在綜藝場景上效果就非常一般了。
「場景切換和舞臺光是兩個通用分割模型很難處理好的問題。所以我們自己挑了數萬張典型場景的影象,標註團隊前後花了三週時間。」馮巍說。
訓練集和測試集的分佈一致性也得到了很好的保證:「我們第一個上線彈幕蒙版功能的節目是《中國新說唱第二季》,所以我們就用《中國新說唱第一季》以及同一個拍攝團隊創作的《熱血街舞團》做了訓練集。」
值得一提的是,因為系統最終並不需要蒙版的分割「精細到頭髮絲」,所以標註工作也相對於一般的語義分割標註也更為容易一些,馮巍展示了一些補充訓練集裡的樣例,「並不需要精細到畫素,用直線把人物部分框出來就行了」。
通用語義分割模型使用專用資料集做了全盤精調之後,IOU 從 87.6% 提升到 93.6%。
問題三:效率怎麼樣?快嗎?貴嗎?
推理階段,一臺 GPU 分割 1 分鐘的視訊,大約需要數分鐘,仍然在 O(1) 時間之內。
實際生產中,系統也經常遇到比較嚴苛的時間需求。「《中國新說唱》的製作團隊有一定的保密要求,比如節目週六八點要上線,我們可能四點鐘才能拿到片子。所以我們通過視訊分片數來控制生產服務的併發,並在所有分片完成後再通過訊息佇列通知業務層,每個分片的生產有單獨的狀態監控和重試機制。最終系統同時使用了 多臺 GPU,處理一段 90 分鐘的視訊大概需要 40 分鐘。」
團隊也在測試將彈幕蒙版用於晚會直播等實時場景中了。
問題四:有什麼「升級」打算?除了防止「彈幕蓋臉」之外還能做什麼?
首先,防止「彈幕蓋臉」也存在升級版,比如從語義分割升級到例項分割,把「所有人的防擋彈幕」變成「你愛豆的專屬防擋光環」。
影象分割任務也分為好幾種,語義分割只要求系統把所有影象裡的「人」都分到「類別人」裡就好。除此之外,還有需要將不同人物分入不同類別的「例項分割」(instance segmentation)以及連背景都不放過的「全景分割」(panoptic segmentation)。
愛奇藝的技術團隊也在研究基於 MaskRCNN 的例項分割,輔以愛奇藝的長項:明星人臉識別,嘗試做「粉絲專屬彈幕蒙版」。
「舉個例子,如果你喜歡吳亦凡,那麼其他明星出來的時候,彈幕還是會把他們擋住,只有吳亦凡出來的時候,彈幕會繞過他。」聽起來是非常符合粉絲心理學的設計了。
還有一種是擴充一下語義分割裡類別的邊界。比如,能不能分出鏡頭焦距內的畫素和焦距外的畫素。
這個想法也來自於實際需求:「《延禧攻略》裡,分割模型不光會識別出佔了鏡頭主要位置的主角,和主角一起出現的、角落裡一個在焦外的、完全虛化了的小太監的背影也會被分割出來。而其實後面這部分是不需要的,分出來反而影響使用者體驗。」換言之,系統真正想要分割的是鏡頭的「焦內」和「焦外」,但是因為現在並沒有進行這一類特定分割任務的模型,所以就用「有人物出現的部分」作為「焦內」的指代了。那些指代得沒那麼好的情況,也仍然是一個需要解決的問題,開發一些新的分割門類,或許是一個解決方案,但是這就不是數萬張精調資料能夠就解決的問題了。
而就算是語義分割本身,也還能擴充出很多不一樣的應用場景,例如,商品的識別,也大有用處。
「比如一個手機廠商贊助了某一個節目,但是它並不是我們平臺的贊助商,我們就需要把商標打碼,或者把商品抽取出來替換掉。這個工作現在還是編輯手工完成的。」
除此之外,還有跟蹤演算法和分割演算法的結合、用於移動端的模型加速與模型壓縮等等……聽起來,技術產品中心的研究員們的工作排期已經排到 8102 年了!
回到編輯部和小夥伴們交流完愛奇藝的做法,一點共同的體會是:彈幕蒙版的最終產品效果非常好,一言以蔽之,可以說是擺正對模型效果的期望,「量力而行」。
儘管分割模型還只是個正確率 80% 左右的「寶寶」,但是如果不刻意「刁難」它,而是選擇一些不精細分割到頭髮絲也不影響使用的簡單場景,再輔以一系列工程化的做法(例如用識別模型排除場景裡困難的情況、通過圖形學方法進一步優化分割效果),最終系統仍然能有上佳的成品效果。
雖然深度學習的思想是端到端的,但是需要正視的問題是,現實永遠比訓練集更復雜,在「一步登天」的模型出現之前,把「登天」的過程像「把大象放進冰箱」一樣分成三步,拿到一個可用的版本後再用迭代的方法解決新問題,是不是也是一個不錯的選擇?