点一下按钮,一秒钟后照片的背景就没了,取而代之的是一片干净的透明棋盘格。感觉像变魔术,但其实没有魔术——而且在 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 文件)。之后,你在飞机上、火车上、或者信号很差的酒店里,都能照抠不误。

没有排队,也不用等上传。 你不必和其他用户抢一台共享服务器,也永远不用等一张大图上传完。处理速度取决于你自己的设备,一台现代笔记本几秒钟就能搞定大多数图片。

模型还搞不定的地方

理解了原理,也就知道它会在哪儿失灵。飞散的头发、毛发这类又细又软的细节确实难,因为一根发丝比模型的把握还要细,它可能会在边缘处猜成"背景"。低对比度的场景(灰沙发上的灰猫)几乎没给网络什么可分的依据。而颜色纹理都和主体相似的杂乱背景,也会把打标签这件事搞糊涂。

对于背景分明、主体干净的图,效果非常好。对于那些难啃的情况,在边缘手动稍微修一下就能收尾。无论哪种情况,整个过程都在你的设备上、在一个浏览器标签页里、几秒钟内完成——由一个好用的 抠图工具 挑起重担。