最近,一段模糊了虛擬和現實邊界的黑科技影片在 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 資料丟失。
怎麼樣,你是不是已經躍躍欲試了呢?趕快行動起來吧!