最近,一段模糊了虛擬和現實邊界的黑科技視頻在 Twitter 上爆紅,目前已經獲得了數萬點贊和轉推。
視頻中,開發者 Cyril Diagne 用自己的手機拍下身邊的綠枝、書本、衣服等物體,手機立刻把物體從畫面中摳了出來。
接下來發生的事情更加神奇:他把手機攝像頭對準電腦的屏幕,剛才摳出來的物體,竟然自動添加到了電腦正在運行的 Photoshop 上!
幾秒鐘前還在現實中的物體,竟然就這麼被複制到了虛擬的世界裏。
可能令許多攝影師、設計師朋友感到嫉妒的是,Diagne 的這一通操作是完全自動化的,並沒有用到數據線,沒碰鍵盤,也沒用鼠標做任何調整——剪貼進去的圖像,就這麼準確地出現在他用手機瞄準的畫面位置上。
Diagne 將這套非常神奇的摳圖技術命名為 AR Cut & Paste(增強現實剪切粘貼)。目前針對 Photoshop 的支持已經開發出來了,不過他也表示其它軟件也是可以支持的。
他也把 AR Cut & Paste 放到 GitHub 上開源了。從介紹和代碼中我們得以一窺,這麼有趣的技術,到底是怎麼實現的。
在摳圖的階段,AR Cut & Paste 使用的是一個名叫BASNet的深度神經網絡。
在過去,機器學習領域在利用深度卷積神經網絡進行物體識別方面,已經取得了非常不錯的結果。不過通過神經網絡進行的圖像中物體識別,主要目標是區域準確性,而非邊界準確性。
簡單來説,就是這些物體識別技術,能夠很準確地答出畫面中的物體分別是什麼:
但是想要準確畫出識別出的物體的邊框,就很難:
於是,加拿大阿爾伯塔大學的一個以華人為主的團隊,開發出了一個全新的深度神經網絡模型。
BASNet 的主要功能是進行顯著性檢測,簡單來説,就是對畫面中最顯著的物體實現準確的邊界劃定,效果就像 PS 高手人工“摳圖”一樣。
BASNet 採用了預測-優化的思路,主要使用的是 Encoder-Decoder 網絡結構,底層採用的是微軟團隊開發的殘差網絡 ResNet。
在預測部分,一個密集監督的 Encoder-Decoder 網絡負責預測預測畫面中物體的顯著性,藉助三種不同損失函數,讓神經網絡可以在像素 (pixel)、像素區域 (patch) 和全圖 (map) 這三個層級上進行顯著性判定,從而輸出更準確的結果。
在優化部分,仍然是由 Encoder-Decoder 結構組裝成一個殘差優化模塊 (RRM) ,對預測部分輸出的顯著圖進一步優化。
從下圖中可以看到,和其它同類和類似的物體識別模型相比,BASNet 的邊界劃定效果相對更加準確,和手動畫出的標準答案最為接近。
不僅如此,BASNet 對於計算性能的優化做的也不錯,可以在單一 GPU 上運行達到25幀每秒(需要你的電腦上有支持 CUDA 的 GPU)。
這篇論文在去年被計算機視覺方面的頂級學術會議 CVPR 2019 所收錄。
BASNet 的開發團隊來自於加拿大的阿爾伯塔大學計算機系。第一作者是該校機器人和視覺實驗室的秦雪彬博士,曾經就讀於山東農業大學和北京大學。
從網站上也能夠很清楚地看出,在各種圖像視頻中進行物體顯著性/邊界劃定,是秦雪彬最拿得出手的研究:
秦的團隊還推出了一個性能更加強大的模型 U^2-Net,對於複雜物體邊緣的識別準確度再上新台階。這篇新論文目前已經被《模式識別》2020年收錄。
現在我們知道了,AR Cut & Paste 是藉助了 BASNet 這一深度神經網絡實現了較為準確的摳圖。接下來,開發者 Diagne 又是怎麼實現將摳出來的圖片直接隔空從手機“放置”到電腦上,而且準確放在手機瞄準位置的呢?
這裏,Diagne 用了自己開發的一個小的玩意 ScreenPoint,簡單來説就是在一張照片(手機傳回的畫面)上確定一個錨點,然後在對應的另一張照片(電腦的畫面)上找到錨點對應的座標。
這個小工具,利用的是 OpenCV 的 SIFT 功能。
目前,AR Cut & Paste 在剪切階段的延遲大約為2.5秒,粘貼的延遲約為4秒。Diagne 也在 Twitter 上表示,還有很多方法能夠進一步降低延遲,不過他並沒有花更多時間做核心功能之外的優化。
技術實現的邏輯聽上去並沒有特別複雜,不過感謝強大的 BASNet,加上 Diagne 的腦洞,AR Cut & Paste 的實際使用效果還是很神奇的——特別是對於那些每天跟套索打交道的 Photoshop 用户來説……
看到這裏,相信你也已經按耐不住,想要自己上手玩一玩這套 AR Cut & Paste 了。
Diagne 在自己的 GitHub 提供了你需要的全部代碼和一份簡單的使用説明書。點擊文章下方的“閲讀原文”即可看到。
總的來説,AR Cut & Paste 有三個獨立的模塊,需要配合使用:手機 app、安裝在電腦上的本地服務器,以及打包好的 BASNet HTTP 服務。
手機是你的交互工具;本地服務器是手機和 Photoshop 之間數據傳輸的界面;物體檢測、邊界劃定和背景移除的操作,發生在 BASNet HTTP 服務上。
在你的本地配置 AR Cut & Paste 需要一台手機,一台 GPU 支持 CUDA 的電腦;配置過程需要你有一定的 React Native 移動應用開發支持,電腦上有 Python 或 Docker 開發環境等。
配置 Photoshop 插件遠程連接
進入 Photoshop 的偏好設置 (Preference) > 插件 (Plug-ins),打開遠程連接 (Remote Connection),並設置一個密碼。
然後在 GitHub Repo 裏找到 cyrildiagne/ar-cutpaste/server/src/ps.py,確認你的 Photoshop 設置和這個文件裏是一樣的,否則粘貼出來的會是一個空白的圖層。
打包 BASNet HTTP 服務
先克隆 cyrildiagne/basnet-http:
git clone https://github.com/cyrildiagne/BASNet-http.git
進入這個 repo,再把阿爾伯塔大學團隊的 BASNet 克隆進去。
git clone https://github.com/NathanUA/BASNet
然後下載訓練好的 BASNet 模型文件 basnet.pth(shorturl.at/FVZ19,下載地址也可以在 BASNet HTTP 打包工具的 GitHub 頁面上找到),放到 BASNet/saved_models/basnet_bsi/ 路徑下。
配置本地服務器
然後就可以開始構建服務了,可以在本地使用 Python 運行環境 virtualenv(需要Python v3.6 或以上),也可以使用 Docker,具體操作方法在 GitHub 上都有。
然後就可以運行了服務器了,記得要輸入打包好的 BASNet HTTP 服務的IP地址 (X.X.X.X),和之前第一步在 Photoshop 裏設定的遠程連接密碼 (123456):
python src/main.py \ --basnet_service_ip="http://X.X.X.X" \ --basnet_service_host="basnet-http.default.example.com" \ --photoshop_password 123456
配置手機端
手機客户端是 Diagne 自己用 React Native 開發的 app。下載代碼,安裝,將手機端 components/Server.txt 文件裏的 IP 地址指向到前一步配置的本地服務器和對應的端口即可,具體請參考 GitHub。
需要強調的是,目前 AR Cut & Paste 只是一個研究性質的原形產品,並非面向消費者的和 Photoshop 工具,所以使用須謹慎,以免不必要的 Photoshop 資料丟失。
怎麼樣,你是不是已經躍躍欲試了呢?趕快行動起來吧!