點一下按鈕,一秒鐘後照片的背景就沒了,取而代之的是一片乾淨的透明棋盤格。感覺像變魔術,但其實沒有魔術——而且在 IMG.DIY 上,也沒有伺服器在替你幹活。下面就講講從點選到去背之間,究竟發生了什麼。

真正要做的事:判斷哪些畫素是"主體"

AI 去背到底是怎麼工作的? — visual 1
真正要做的事:判斷哪些畫素是"主體"

摳背景本質上是個"打標籤"的問題。對圖裡的每一個畫素,軟體都要回答一個問題:這是主體的一部分,還是背景的一部分?把所有畫素都判斷一遍,你就得到一張遮罩——一張黑白地圖,白色代表"保留",黑色代表"刪掉"。把遮罩蓋在原圖上,扔掉黑色區域,就得到了摳好的圖。

這件事在計算機視覺裡有個名字:影象分割。具體到摳背景,用的是顯著目標分割,也就是模型試著找出人類會認為這張照片"講的是什麼"的那個東西,把它和其餘一切分開。

模型是怎麼學會"看見"主體的

AI 去背到底是怎麼工作的? — visual 2
模型是怎麼學會"看見"主體的

模型並不是照著"抓住那個人形的東西"這類手寫規則辦事。它是一個神經網路,訓練它用的是成千上萬張圖片,每一張都由人工事先把完美的遮罩描了出來。訓練時,網路先猜一個結果,跟人工的答案一比,再把自己微調一點點,讓它錯得少一些。這樣重複幾百萬次,網路就學會了區分前景物體和周圍環境的視覺規律:邊緣、紋理變化、虛實、對比度,以及主體通常靠近畫面中心這類特徵。

IMG.DIY 上的 去背工具 用的是 U²-Net 家族的模型,正是專門幹這個的知名架構。有兩個版本可選:

  • u2netp —— 小巧快速,4MB。主體清晰、圖快的時候很好用。
  • silueta —— 更大的 43MB 模型,邊緣更乾淨,適合處理細節多的去背。

兩者都是把你的圖輸進去,穿過許多層學好的濾波器,輸出那張"保留還是刪除"的遮罩。

它為什麼在瀏覽器裡跑,而不是在伺服器上

大多數去背工具會把你的照片上傳到資料中心,用他們的硬體跑模型,再把結果傳回來。這樣也能用,但意味著你的圖片——哪怕只是短暫地——落在了別人的電腦上。

IMG.DIY 的做法不一樣。同一類神經網路直接在你的瀏覽器裡執行,靠的是兩項 Web 技術:

  • WebAssembly(WASM) 讓瀏覽器能執行編譯過的、接近原生速度的程式碼,這正是模型運算所需要的。
  • ONNX Runtime 是在這個環境裡真正執行訓練好的模型的引擎。

模型檔案下載一次,之後所有計算都在你自己的 CPU(或 GPU)上完成。你的照片從硬碟讀進來,變成一格格數字,推過網路,再重新拼成摳好的圖——全程沒有一個位元組離開你的機器。

瀏覽器內處理對你意味著什麼

這套設計帶來三個實實在在的結果。

隱私是結構性的,不是一句承諾。 很多網站都說"我們不儲存你的圖片"。而在這裡,圖片壓根沒被傳到任何地方,也就無所謂儲存不儲存。這一點對證件照、檔案、產品原型,或任何你不願交給陌生伺服器的東西,尤其重要。

它能離線用。 因為 IMG.DIY 是帶 service worker 的 PWA,工具在沒網時照常工作。去背有一個星號說明:模型第一次需要下載(前面提到的 4MB 或 43MB 檔案)。之後,你在飛機上、火車上、或者訊號很差的酒店裡,都能照摳不誤。

沒有排隊,也不用等上傳。 你不必和其他使用者搶一臺共享伺服器,也永遠不用等一張大圖上傳完。處理速度取決於你自己的裝置,一臺現代筆記本幾秒鐘就能搞定大多數圖片。

模型還搞不定的地方

理解了原理,也就知道它會在哪兒失靈。飛散的頭髮、毛髮這類又細又軟的細節確實難,因為一根髮絲比模型的把握還要細,它可能會在邊緣處猜成"背景"。低對比度的場景(灰沙發上的灰貓)幾乎沒給網路什麼可分的依據。而顏色紋理都和主體相似的雜亂背景,也會把打標籤這件事搞糊塗。

對於背景分明、主體乾淨的圖,效果非常好。對於那些難啃的情況,在邊緣手動稍微修一下就能收尾。無論哪種情況,整個過程都在你的裝置上、在一個瀏覽器標籤頁裡、幾秒鐘內完成——由一個好用的 去背工具 挑起重擔。