昨天在介紹 Netflix 的 video annotators 時,你有沒有覺得其中的大型視覺語言模型很神奇?(雖然在這個充斥各種大型模型的時代,好像也沒有真的那麼神奇了),就算打不贏,我們還是可以來看看這個模型背後的原理是什麼!我們今天就來一探究竟吧!
Netflix 在訓練所有模型時,都需要將影片內容經過前處理,例如之前介紹過的 match cutting 手法,他們在訓練模型之前,需要先將影片做 shot segmentation 和 shot deduplication。
因此,他們會需要偵測場景變換,將影片分割成一個一個小片段,以供後續的處理步驟更有效率。另外,語音偵測可以作為場景變換偵測的輔助資訊。例如,當對話結束、音樂風格發生變化,或是出現新的音效時,通常暗示著場景的轉換。
根據這些線索,Netflix 除了能將影片分割之外,也可以作為搜尋影片的內容。舉例而言,使用者可以使用文字查詢來搜尋特定場景(如「在巴黎鐵塔前的場景」),或是包含特定對白的片段(例如「主角說『我愛你』的片段」)。這些技術有助於他們製作影片預告片,或是各種行銷素材。
這些線索可以進一步用於建立 video annotators,因為他們需要先搜尋一些案例,以幫助分類模型學習(還不了解細節的,請參考[昨天的文章]](https://ithelp.ithome.com.tw/articles/10359396)哦!)。
以上這些情境,都可能涉及成千上萬個電影或電視劇,絕對不可能是人工一個一個觀看挑選的。那他們是怎麼做的呢?我們接下來會連續三天,介紹 Netflix 處理影片的方式,分為以下三個主題:
這些方法可以提供內容創作效率,透過場景變換、語音和影片內搜尋技術的結合,讓內部使用者更方便地瀏覽和搜尋影片內容,以提高內容創作效率,用於輔助影片剪輯、配音、字幕生成等後期製作流程。
讓我們開始吧!
Netflix 的目標是希望當用戶輸入「文字」時,能夠找到相對應的「影像」。為了達到這個目的,他們使用 contrastive learning 來訓練文字和影像之間的 embedding space,這個方法能夠有效地學到物體、場景、情緒、動作等等內容,甚至除了 frame-level 的影像以外,也能夠學到「影片」和「文字」之間的關係。
Contrastive learning 是一種 self-supervised learning 的方法,目的是透過比較樣本之間的相似性和差異性來訓練模型,根據正樣本(相似樣本)和負樣本(不相似樣本),讓模型在 embedding space 中,可以將正樣本拉近,並同時將負樣本推遠。
Contrastive learning 通常透過 CNN 或 RNN 來訓練,其中最核心的關鍵是 loss function 和一般常使用的不同,他們會使用 contrastive loss 或 triplet loss,藉此來學習各種樣本之間的相似和差異性。
我曾經在我的 Instagram 做過詳細的圖文介紹介紹,說明這兩個公式的計算原理哦,有興趣的朋朋歡迎參考。
Netflix 在訓練時,希望能夠最大化正樣本的 cosine similarity,並且最小化負樣本之間的 cosine similarity,經過訓練之後,他們已經可以達到原本預期的效果,如下所示。
圖片來源:[1]
訓練完成之後,相關的文字和圖片會在 embedding space 被投影到相似的位置上。
當用戶輸入想要查詢的文字,如「big room with a table」時,即可找到相對應的圖片。
圖片來源:[1]
另外,除了圖片,他們發現如果使用 mean-pooling 的方式,計算 video embedding 的話,也能夠用同樣的方式訓練出文字和影片的配對。
今天簡單介紹 Netflix 的一個內部使用工具——in-video search,幫助他們在搜尋影片素材時,能夠更加方便。希望你喜歡!
謝謝讀到最後的你,如果喜歡這系列,別忘了按下喜歡和訂閱,才不會錯過最新更新。
如果有任何問題想跟我聊聊,或是想看我分享的其他內容,也歡迎到我的 Instagram(@data.scientist.min) 逛逛!
我們明天見!
Reference
[1] https://netflixtechblog.com/building-in-video-search-936766f0017c