Netflix 如何透過影像處理及深度學習從影集中挑選精緻縮圖來提升點擊?

YL-Tsai
14 min readJul 25, 2020

--

文章出處:AVA: The Art and Science of Image Discovery at Netflix

source

在Netflix中,Content Platform Engineering 以及 Global Product Creative 團隊了解縮圖在使用者尋找新影集、電影時佔有舉足輕重的地位,Netflix一向以挑選優質影集,大量分析使用者觀影喜好,甚至自己製作影集內容而聲名遠播,而在發展個性化推薦的這一塊,Netflix鎖定了影集縮圖,他們的做法是直接從影集本身收集靜態圖片,以提供更靈活的縮圖選項。

商業目的

過往的縮圖通常由製片團隊或是製片編輯提供,而這樣的縮圖也是從製片團隊的專業知識中選出來,然而,這些縮圖是最能刺激使用者點擊觀看該影集的縮圖嗎? Netflix在早期率先挑戰了這個觀點,在不同於製片團隊選出的縮圖中,更多形式的縮圖有沒有可能提高使用者點擊以及觀看次數?

在Netflix的這項A/B Test: Selecting the best artwork for videos through A/B testing中,他們確實驗證了這個觀點,這彷彿打開了潘朵拉的盒子,使得挖掘出更多影集中的精美縮圖,變得富有商業價值,例如:

  1. 各群使用者們在縮圖點擊上是否有偏好的角色表情?
  2. 各群使用者們在縮圖點擊上是否有偏好的色調?
  3. 縮圖是否能夠涵蓋更多表示(例如 帥氣、美麗、聰明等),進而對具有特定喜好的使用者進行縮圖顯示?

AVA

為了回答上述這樣的問題,Netflix打算建立一個演算法,作為高質量縮圖的候選名單,或許在現階段還做不到全自動選縮圖,最後還是必須透過人工篩選,但試想,一季10集的怪奇物語就有約86,0000張圖片,如果有一套算法可以將這些圖片縮減到 1%,也僅剩860張,這時候還要人工篩選就容易得多了,以下4張是Netflix AVA選出的Best moments:

Netflix AVA 從4個影集中挑出來的Best moments,source

這件事怎麼做呢? 首先必須先為每張圖片上各式各樣的標籤,接著用一個監督式排序算法,以人類認知的美感(aesthetic)作為特徵,將圖片排序,接著再挑出前N張作為候選圖(creative/editorial candidates),以下兩張圖是Netflix AVA挑選出畫片符合聰明的畫面,以及AVA演算法的架構圖:

Netflix AVA演算法挑出來的Best moments,標籤為聰明,source
Netflix AVA演算法的簡約版架構圖,source

Frame Annotation

Data Engineering

在資料工程上,Netflix主要使用Archer來進行分散式運算,讓整個算法工作能夠規模化:

Archer採用分散式的架構讓算法工作能夠部分地規模化,source

圖片貼標上,Netflix團隊設計成3種主要的Metadata,分別是Visual Metadata, Contextual Metadata以及Composition Metadata,除此之外,還必須對不適當的畫面進行過濾(Filters for Maturity)。

Visual Metadata

單張畫面的圖片標籤,能夠看到包含亮度,畫面編號,運鏡模式,對比,運動模糊,以及顯色,source

這類的標籤主要集中在pixel level的貼標,例如從像素中計算出平均亮度,對比程度,代表色(Dominant Color)以及是否有運動模糊(Motion blur),透過這樣的特徵我們能夠得知該畫面是否是對比強烈的,亮色系畫面還是暗色系畫面,運動模糊也是捕捉Best moments的重要特徵,觀眾們總不會希望縮圖糊糊的不專業吧XD,這裡作者也進行的一些研究,試圖拆解出各個步驟可能的做法

  1. 亮度 : 我們能夠將pixel從RGB空間轉換到HSV空間,並以平均值/中位數,來做為代表。
  2. 對比程度 : 根據對比度其中一項的定義,我們能夠將圖片先轉為灰階,接著取出灰階圖片的標準差做為代表。
  3. 運動模糊 : 能夠先透過將圖片做快速傅立葉轉換來進行模糊偵測,再以光流分析的方法,分析一段影片序列,並貼出移動方向,又或者透過人工標注的方式,訓練一個偵測運動模糊的CNN模型直接對當個畫面進行運動模糊偵測
  4. 代表色 : 對整張圖做Kmans的運算來得到代表色
透過快速傅立葉轉換來偵測畫面中的模糊程度,source
透過CNN來預測輸入圖片的運動模糊場,並反向解模糊,source
透過一階段式的CNN模型來推論輸入圖片是否有運動模糊,以及運動模糊的位置(右),source

Contextual Metadata

這類的標籤主要描述了上下文的語境,主要包含了在一段影片中演員的動作,表情,物件的位置移動,以及導演的運鏡特徵,透過這一類特徵,我們能夠了解演員的表情變化,導演/編劇對這個畫面的安排以及想傳遞的內容,一些例子如下:

Contextual meta data的標籤包含了,目前畫面的人數,個人膚色,個人裸露程度等,source

人臉偵測

透過人臉辨識,能夠知道目前畫面中有誰,這些人是第一男女主角還是第二男女主角,或是其他配角,總共有幾個人?在畫面中,人臉佔比多大? 是正臉還是側臉? — 人臉辨識我們透過透過Facenet在少量圖片的情況下達成傳統的Adaboost也能夠進行facial landmark detection,而且大概只抓的準正臉,結合兩者我們可以同時貼標是否是正臉,是誰,畫面中幾個人,是否是男女主角等訊息。

表情偵測

表情偵測運用在這樣的場景下,作者覺得很有意思,由於影片的特性和實際場景不同,根據導演的運鏡手法可以有臉部特寫,半身特寫,這種時候捕捉臉部表情變得相對容易而有意義:

facenet進行人臉辨識,就算有半邊臉有超大陰影,或是大角度的側臉,仍然可以被識別出來,source

運動偵測、攝影機運鏡類型辨識

透過光流分析,我們可以建立出一個運動向量場(motion vector fields),這個運動向量場就是一個絕佳的特徵來辨識運鏡類型,筆者自己私心猜測,best moment應該都是相對靜止的,前後可能存在些許的zoom in及zoom out,或是場景切換(scene changed)

影集 : 黑鏡中的畫面利用光流分析來描述運動向量場,source
論文中,透過光流產生的運動向量場來作為input data,並推論目前的運鏡模式,左圖表示了三個攝影機的自由度,右圖表示了運鏡模式符合的運動向量場pattern,source
  1. 物件偵測 : 在許多影集中,會有所謂象徵物,這些物件不是主角,但卻是影集內的重要象徵,例如西劇紙房子中的達利面具韓劇今生是第一次的貓咪
在某些影集中(事實上還蠻常見的),有人以外的象徵物,能夠透過任何一種物件偵測模型進行訓練,左圖source 右圖source

Composition Metadata

這類標籤描述了構圖上的特徵,既然要選出Best moments,當然就要選出要好看的畫面,好看的畫面就是導演/劇組的know how了,想必在Netflix內部關於構圖有更多的特徵,這裡Netflix倒是說明了幾項:

  1. 也就是3分法(rule-of-third),好看的畫面通常人會在三分線上,或是中間線上,這裡也順便附上筆者自己的Netflix畫面,是不是看到很多縮圖主角都在三分線附近?
  2. 是否使用了景深(depth of field),也就是所謂的人像模式,導演通常喜歡透過聚焦的方式領導觀眾的視線,實作上我們可以透過Personlab對畫面中的人做segmentation切割出人與背景,接著在對人與背景做傅立葉轉換的模糊偵測,來得知目前畫面中是否有聚焦的情況發生。
  3. 畫面是否具有對稱性。
將畫面畫上三分線,並且做人物的segmentation,如此一來能夠計算人物是否在三分線附近,source
透過PersonLab作基於人的segmentation,上圖為PersonLab演算法在coco dataset上得結果,source

Filters for Maturity

不適當畫面的過濾,包含了裸露程度,18禁畫面,暴力畫面,犯罪畫面等等,針對這些畫面作為負樣本進行訓練,若仔細看Netflix提供的這張圖,確實有一個算法正在計算目前每個畫面的裸露程度。

仔細看左下的標籤,確實有MaturityProbability這個標籤,source

實作上若以裸露程度來進行思考的話,同樣地我們能夠透過facial landmark先取得臉部輪廓位置,接著透過kmeans取得臉部顯色(Dominate color)作為該人物主要膚色,接著再以personlab的segmentation切出整個人的輪廓,最後拿整個人在畫面上的像素質和該人物的主要膚色進行比較,來推估裸露程度

以目前我們所描述到的來說,單個畫面可能產生的標記可以用以下json表示:

{
'frame_idx': 36,
'visual_brightness' : ,
'visual_constrast' : ,
'visual_motion_blur' : ,
'visual_dominate_color' : ,
'context_actor_1' :
{'name' : ,
'emotion' : ,
'face_ratio_by_frame' : ,
'is_leading_man': ,
'is_leading_male': ,
'skintone' : ,
'maturity_probability':
},
'context_actor_2' :
{'name' : ,
'emotion' : ,
'face_ratio_by_frame': ,
'is_leading_man': ,
'is_leading_male': ,
'skintone' : ,
'maturity_probability':
'}

'context_shot_type' : ,
'context_obj_1':,
{
'name' : ,
'obj_ratio_by_frame' :
}

'composition_nearby' :
'composition_is_depth_of_field' :
}

Image Ranking

針對每個畫面進行標注之後,接下來就是排序算法的訓練了,關於排序訓練的細節這裡就不細究,以下是Netflix的兩張展示結果:

Actors

演員在Best moments這樣的目標下扮演著相當關鍵的角色,Netflix這裡採用的做法是,對候選畫面(有人臉,而且不模糊的)註,畫面進行人臉分群,這樣的做法下,能夠在未知演員陣容的情況下,得知相對重要的畫面。

另一方面則是透過監督式學習的方式進行人臉辨識,進行識別出演員,接著比對是否是男一,女一,還是男二,女二,在畫面中目前出現了什麼樣的組合?是否是主要主角都在的畫面等等,下圖也顯示出部分的訓練結果,下圖三個畫面因為人物表情欠佳,運動模糊,而無法排進Best moments:

左一和左三由於表情欠佳,中間由於運動模糊,導致了較差的排名結果,source

Frame Diversity

創意以及視覺多樣性是一種非常主觀的感受,在這方面的描述上,首先要先了解編劇團隊的畫面安排約略有哪些方式,接著想辦法透過影像出來的方式捕捉到這些手法,這裡提到,像是camera shot types,與上面的運鏡手法不同的是,這樣的做法是看單個畫面中的人物是近全身,半身,或是只有臉部特寫,若這些圖是所謂的Best moments,則可以將其進行貼標,變成全身的best moments,半身的best moments,以及特寫的best moments,作為縮圖的標籤。

對於best moments能夠有多維度的標籤,諸如演員情緒,或是shot type,左(long shot),中(medium shot),右(extreme close-up) source

結論

在此篇文章中,我們對Netflix如何處理自家的影片資料有了一個大概的認識,透過影像處理,深度學習,以及畫面美學,拍攝手法領域的結合,能夠挑選出更多的Best moments,提供了對不同使用者顯示不同縮圖的彈性,並且有AB Test的支持,工程團隊也能夠得知這些功夫能夠為公司帶來多少收益,從這樣的案例分析我們也能夠發現,影像辨識,深度學習,能夠作為一種自動化判斷的手段,但是具體來說要做什麼樣的目標,要怎麼做,非常需要領域知識,不然你怎麼知道一個臉部辨識的深度學習算法,還能夠推測出導演對這個畫面的安排呢,作為一個相關領域的從業人員,作者帶著大家再次體驗到了結合領域知識的威力。

寫在最後

本篇是作者的<案例分析系列>,第一篇分析,說真的把工作所學到的技巧用來分析生活中的日常,各大龍頭的演算法設計,還真的挺有趣的,如果你喜歡這個系列,也請多拍幾次手,鼓勵作者寫更多喔!

下班每天從忠孝新生搭著捷運回家,腦袋一片空白,赫然想到,Google相簿的Best moments回顧,裡面似乎一定也有類似本篇文章的技術含在其中啊!

Reference

  1. AVA: The Art and Science of Image Discovery at Netflix
  2. HSV
  3. Contrast
  4. OpenCV Fast Fourier Transform (FFT) for blur detection in images and video streams

6. Introduction to Motion Estimation with Optical Flow

7. MotionBlur-detection-by-CNN

8. Learning a Convolutional Neural Network for Non-uniform Motion Blur Removal

9. Most dominant color in RGB image — OpenCV / NumPy / Python

10. Face Recognition using Tensorflow

11. dlib/python_examples/face_landmark_detection.py

12. Emotion-detection

13. A Robust Method for Camera Motion Estimation in
Movies Based on Optical Flow

14. PersonLab : Person Pose Estimation and Instance Segmentation with a Bottom-Up, Part-Based, Geometric Embedding Model

--

--

YL-Tsai

Machine Learning Engineer with 4y+ experience | Exploring the data world | Recommendation, Search, Ad System.