AI一鍵去紋身,幾秒鐘讓你看見明星「真面目」
有些時候,我們需要把一些人身上的紋身覆蓋掉,以避免引人效仿。有的時候人們只是單純地好奇,想知道一些大明星如果沒有紋身會是什么樣子。來自印度的機器學習研究者 Vijish Madhavan 最近開源的一個機器學習工具 SkinDeep 滿足了我們的需求。
網友們也使用這一工具去處理了一些畫了重度紋身的人物照片,效果還不錯。
該項目的作者 Vijish Madhavan 在看完加拿大歌手賈斯汀 · 比伯的 MV《Anyone》后,萌生了做這個項目的計劃。賈斯汀 · 比伯在化妝師的幫助下花了好幾個小時的時間才把他的一身紋身覆蓋掉。
MV 視頻的效果非常完美,因為制作視頻輸出是非常困難的,因此項目作者選擇圖像來處理。該項目的起點是深度學習能否勝任這項工作,與 photoshop 相比又如何?

項目地址:
https://github.com/vijishmadhavan/SkinDeep
有人會問,為什么不把紋身直接 PS 掉?Photoshop 可以產生非常好的效果,但問題是使用 Photoshop 需要專業知識,如果用 PS 處理紋身的話,你可能需要花費幾個小時的時間去修飾整個圖像。
我們先來看一下效果如何?阿倫 · 艾弗森(美國籃球運動員)的紋身就是用這個模型去掉的。

下圖中第一行為輸入圖像,第二行為輸出圖像,輸出結果明顯感覺到紋身被去除了。

臉部有大量密集紋身的圖像,還有其他裝飾,AI 的紋身去除效果也非常好:

與專業圖像處理軟件 photoshop 相比,效果也不錯:

看起來 SkinDeep 的效果還不錯,但如果紋身是彩色的,還會有一些殘留的痕跡。
項目介紹
根據作者介紹,完成這個項目需要大量的圖像對,因為沒有合適的數據集,很多時候訓練內容采用合成數據來完成,具體來說:
首先將 APDrawing 數據集圖像對與一些背景去掉紋身設計的圖像疊加在一起,使用 Python OpenCV 實現;
繪制數據集有線條藝術對,可以模擬紋身線條,這將有助于模型學習和刪除這些線條;
APDrawing 數據集只有頭像,對于全身圖像,項目作者采用了以前的項目 ArtLine,并將輸出與輸入圖像疊加在一起;


ImageDraw.Draw 與森林綠色(forest green colour)色碼一起使用,并隨機放置在身體圖像上,類似于 fast.ai 中的 Crappify ;
Photoshop 也被用來在需要彎曲和角度改變的對象上放置紋身。

這一項目是由 Fast.AI 庫構建的,你需要安裝 fastai 1.0.61 版(及其依賴庫),以及 PyTorch 1.6.0,不支持更高的版本。
嘗試這一項目的最快方法就是在 Colab 上:
https://colab.research.google.com/github/vijishmadhavan/SkinDeep/blob/master/SkinDeep.ipynb
它的輸出限制為 500 像素。
限制
去紋身的機器學習模型雖然看起來并不復雜,但在現實世界千奇百怪的情況下,有時仍然會出現一些「貼圖錯誤」的情況。該項目的構建者表示,由于缺乏數據集支持,所以用于訓練的數據集容量有限。另外,如果有人紋了彩色紋身,恐怕人工智能目前還是認不出來的。

如果這個效果被做成網站,或者成為美顏 app 的一個濾鏡,那就太好了。最后,SkinDeep 能不能反過來給人加紋身呢?「試穿」的效果或許會火起來。