我們能用 P 圖假裝自己是 2027 的唯一倖存者嗎?

簡介 Image Inpainting, Video Inpainting 技術原理與應用限制

Rice Yang
10 min readJul 19, 2021

最近有一個蠻有名的話題,是一個來自 2027 的未來人,說自己是 2027 唯一的倖存者。簡單描述一下事情的背景:

號稱來自 2027 的 Javier,開了一個 TikTok 帳號 @unicosobreviviente 表明自己在 2027 的瓦倫西亞,並且發佈了一連串的瓦倫西亞影片。這些影片包含了許多地點,例如旅遊景點、足球場、商場、警察局、機場等,但是所有的影片裡面一個人都沒有。這個 TikTok 帳號名源於西班牙語,意思是「唯一的倖存者」。

TikTok 帳號截圖

很多人質疑這個是 P 圖的,因為要製造這些影片只要用 P 圖軟體移除所有人物就好了。但是現在的 P 圖軟體真的有厲害到這個地步嗎?如果真的能夠做到的話,為什麼現在只有他一個人能夠做到這麼好的效果呢?

我下面會介紹一些可以用來移除圖片/影片中特定物體的技術——Image/Video Inpainting,給大家瞭解一下,現在的 P 圖技術做一個相同效果的影片究竟難度如何?

Image Inpainting

Image Inpainting 是一種圖片修復技術。輸入的原始圖片會有部分區域遭到遮蔽,而 Image Inpainting 技術會試著把被遮蔽的部分利用填補上。如果被遮蔽的部分是完整的人,則填補的時候會完全移除掉被遮蔽的人。例如下面的圖:

Image Inpainting Demo。來源:NVIDIA AI Playground

現在很多 P 圖軟體都有這個技術,沒錢買軟體的朋友,GitHub 也有公開的 open source 可以自己跑跑看:

綜觀 Image Inpainting 近期的方法,可以分為 2 個種類:Patch-basedFree-Form。下面我會稍微介紹一下這兩種方法,有興趣的同學可以參考這篇:10 Papers You Must Read for Deep Image Inpainting

Patch-based Image Inpainting

DeppFiil 架構。來源:Generative Image Inpainting with Contextual Attention

Patch-based Image Inpainting,圖片中損壞部分是一個矩形框 (Patch),如上圖左邊。利用遮蔽部分與生成部分都是矩形框的特點,大部分的方法會引入 GAN 的對抗損失 adversarial loss,利用額外的判別器 Discriminator 來讓生成圖片更真實。如上圖的 DeepFill 架構,就是對生成全圖與生成區域都分別加上 Discriminator,讓整體效果更好。

關於 GAN 、對抗損失、判別器等技術細節,可以參考之前的文章《簡述 GAN 生成原理》。

在 Image Inpainting 方法中,通常會使用 Encoder-Decoder 的架構,或是加上 Skip-Connection 變成 UNet 架構,來保持原始圖片與輸出圖片的大部分區域一致性。在不同的方法中,會加入不同的特殊結構來加強特徵的傳遞,例如 DeepFill 的 Contextual AttentionShitNet 的 Shift-Layer;但大部分的方法還是仰賴 adversarial loss 的設計來提升效果。

Free-Form Image Inpainting

DeepFill v2架構,來源:Free-Form Image Inpainting with Gated Convolution

Free-Form Image Inpainting 如上圖左上角所示,處理的是任意形狀的遮蔽區域,比 Patch-based 更進一步提升了實用價值。雖然看起來這是比 Patch-based 簡單的題目,因為被遮蔽區域附近的提示相對比較多;但是對於深度學習而言,Free-Form Inpainting 其實更難處理一點。

Patch-based Inpainting 本身是適合 CNN 結構的問題,因為 CNN 卷積核本身就是矩形,遮蔽區域與已知區域會隨著卷積在 encoder 深層逐漸融合,並在 decoder 生成很好的效果。

相對的,Free-Form Inpainting的遮蔽區域不符合卷積核的形狀,對 CNN 本身是比較不友善的問題類型。因此在這類方法中,通常會設計類似 Attention 的結構來告訴卷積哪些 pixel 是重要/不重要的,來提升特徵提取的效果,例如 PartialConvDeepFill v2 的 Gated Convolution(如上圖)

Image Inpainting 的缺點

Image Inpainting 裡面雖然可以實現不錯的效果,但仍是基於「腦補」出來的結果,會出現許多不合理的地方。例如下面這張圖,雖然乍看之下效果很好,但是原本應該筆直的水池與走道出現了不合理的彎曲。如果不仰賴人為介入,純自動的 Inpainting 技術很難保證這種場景完全正確。

把人物移除的 Inpainting 結果。來源:Generative Image Inpainting — Github

另一方面,如果直接使用 Image Inpainting 在影片中的話,生成的區域會出現抖動,因為每一幀都是獨立生成的。為了解決這個問題,就需要使用 Video Inpainting

Video Inpainting

Video Inpainting。圖片來源:Deep Video Inpainting — GitHub

相對於 Image Inpainting,Video Inpainting 是對於整個影片做處理。以上圖為例,Video Inpainting 可以把整個人物從影片裡面移除,同時保留背景不出現跳動等破綻。因為 Video 中可用的線索比 Image 還要多,畢竟這一幀需要補上的內容可能就在前後幀裡面;所以問題難易度而言,Video InpaintingImage Inpainting 簡單的多。

早在 2016,Microsoft 的論文 Temporally Coherent Completion of Dynamic Video 就已經用非深度學習方法提出了經典方案。該論文利用光流法來提取運動訊息,並假設遮蔽物移除後的區域,光流結果應該是近乎平滑的。該方法需要多次的迭代,每次的迭代都會利用 Nearest Neighbor Field(NNF) Estimation 試圖找到合適的填充顏色,最終讓影片裡面遮住的每一幀的光流在遮蔽處都是平滑的。

這個方法雖然可以達到不錯的效果,但是缺點是非常的耗時,因為它在每一次迭代都需要對每幀重新計算光流。另一個問題就是它完全是 Rule-based 的方法,因此沒有辦法像深度學習一樣具有很好的腦補生成能力。

VINet 架構,來源:Deep Video Inpainting

2019 的 VINet 將前述的論文改進為深度學習的版本。該方法引入光流網路 PWCNetencoder-decoder 架構中,讓整個網路變成可導的 end-to-end 生成網路。再引入 Conv-LSTM,讓 VINet 能夠學到更好的時序特徵。

另一篇 Deep Flow-Guided Video Inpainting 則更進一步,在生成流程同時使用兩種填充方法:光流傳導法、圖片填充法,並動態決定哪些 pixel 該使用哪一種方法,達到了更好的效果。下面是該方法的 Youtube 展示影片:

順便附上 GitHub:

Video Inpainting 的缺點

Video Inpainting 雖然在移除小物體時已經能夠達到很好的效果,但是在移除大面積物體時還是會有破綻。特別是當移除物遮住了其他物體且無法透過前後幀補足時,破綻就會特別明顯。如下圖,上面的紅色區域是欲移除的蜘蛛人,因為高速的鏡頭運動以及周圍雜物干擾,導致下面的填充結果出現了不合理的碎片。

Video Inpainting 的破綻。截圖自 Deep Flow-Guided Video Inpainting — Youtube

Inpainting 技術能夠讓所有人消失嗎?

上面介紹了許多能夠對圖片或影片移除人物的方法,這些方法能夠自動化處理大部分的特效,只留下少部分的區域需要精修。如果有一個豪華的團隊,在部分的影片裡面的確是可以做到同樣的效果。

但是,@unicosobreviviente 的影片有些效果是上述技術無法克服的,必須仰賴大量的人工,例如大量的人潮,以及鏡面的反光。

截圖來自於 TikTok

回想前面提到的, Video Inpainting 的假設前提是:「移除物的附近光流應該是平滑的」。這種假設在鏡面世界裡就很容易出現破綻,因為鏡面本身就不是完全平坦的,隨著鏡頭的移動會必然加上少許假設之外的光流變化。如果在這個場景使用了 Video Inpainting 技術,可以預想幾乎在每一幀的多處地方都需要人為的精密後製。

總結一下我的看法。我認為只要有足夠的資源——拍攝時間、電腦資源、剪輯人力——的話,這些影片是可以用 In painting 做出來的。以下針對這三種資源來分別解釋:

  1. 拍攝時間:目前的 Inpainting 技術還沒有辦法處理大面積的移除,因此後期肯定需要大量的人力。為了儘量減少後期人力,最好的方式是拍攝的時候就能夠錄到較少的人。如果是在熱鬧的景點拍攝,可能要拍攝足夠長的時間才能夠等到這個時機。
  2. 電腦資源:這裡說的資源主要是 GPU。GPU 是目前所有 Inpainting 方法都需要的計算硬體。為了達到 @unicosobreviviente 每天都發至少一部影片的效率,勢必需要大量的 GPU 減少計算時間。
  3. 剪輯人力:Inpainting 技術本身就需要人為手動加上遮蔽,這部分是需要人力的。並且技術本身的 badcase 並不少,除了上面說的鏡面場景之外,大面積人潮、影子、水花、動態號誌、螢幕等都是 Inpainting 技術可能無法處理的場景。為了克服這些場景,需要足夠的剪輯師才能達到目前的發片速率。

最後,其實除了 Image/Video Inpainting 技術之外,還有另一種技術能夠製作出完全無人的瓦倫西亞。但這種技術就等到下次再說了。

--

--

Rice Yang
Rice Yang

Written by Rice Yang

A Tech Manager in AI. Experienced in NVIDIA, Alibaba, Pony.ai. Familiar with Deep Learning, Computer Vision, Software Engineering, Autonomous Driving

No responses yet