為什麼同一張臉,人臉辨識會說「不像同一個人」
從微博「沈騰判若兩人」熱搜看人臉辨識的運作邏輯:模型怎麼算相似度、閾值怎麼決定、為什麼高修圖場景會讓系統失靈。
微博熱搜上「沈騰和昨天是一個人嗎」燒了一整天,網友在吵同一個演員隔天出現,怎麼看都像換了張臉。觀眾的眼球和演算法的判斷在這裡正式分岔——你覺得判若兩人,但你手機裡那套每天替你解鎖螢幕、幫相簿把同一個朋友歸在同一本的人臉辨識系統,給出的可能是完全相反的答案。這條熱搜真正有意思的地方不在八卦,而在它意外戳中了人臉辨識一個很少被認真看待的問題:當我們說「這是同一個人」的時候,機器到底用什麼標準在判斷?而這個標準,又是怎麼在某些情境下徹底失靈?
一句話講清楚
人臉辨識不是拿兩張照片「看看像不像」,而是把每張臉換算成一串數字(一組特徵向量),再用這兩串數字之間的距離或角度來決定「夠不夠像」。所謂「是不是同一個人」,其實是一個可調整的數字門檻,不是一個絕對答案。
為什麼這件事值得在意
人臉辨識早就不是實驗室裡的技術,它藏在你解鎖手機、過海關、登入銀行 App、相簿自動分類的每一刻。一個看起來客觀的「是同一個人/不是同一個人」,背後其實是一連串可調參數。理解這套系統怎麼運作、在什麼條件下會出錯,你才會知道哪些場合可以信任它、哪些場合它給的答案其實很脆弱——尤其是當它被用在對人下判斷的時候。
機器是怎麼判斷「同一張臉」的
可以把人臉辨識模型想像成一個只會量尺寸的測量員。它不會看你的神韻、氣場、走路的節奏,它做的是先把你的臉擺正(對齊),再把五官的相對位置、距離、角度壓縮成一組數字座標,學界與工程界稱之為 embedding(特徵向量),常見的維度是 128 或 512。兩張臉「像不像」,就是看它們換算出來的這兩組數字在空間裡靠不靠近。
這套流程有幾個環節,每一個都可能讓同一個人的臉被算到不同的位置上:
- 光照與色溫:攝影棚的冷白光(約 5500K 以上)和戶外的暖黃光(3000K 左右),會讓同一張臉在 RGB 色彩空間裡移動一大段距離。理論上 embedding 應該對色溫穩定,但手機前鏡頭的影像處理(自適應白平衡、HDR 拼接)常常破壞這個穩定性,把同一張臉推向不同的位置。
- 年齡、疲勞、水腫:一天之內的浮腫不至於移動骨骼,但會改變顴骨到下顎的陰影分布,連帶影響臉部關鍵點(雙眼、鼻尖、嘴角這些基準座標)的偵測準確度。當關鍵點位置誤差超過幾個像素,對齊階段就會把臉轉到一個非標準角度,後面抽出來的特徵自然就跟基準照對不齊。
- 妝容與修圖:這才是「判若兩人」最常見的原因。直播濾鏡、後製磨皮會把皮膚紋理(高頻細節)整段抹平,而這些細節恰恰是 ArcFace 這類模型用來區分長相相近者的關鍵訊號。磨皮拉到極限,等於把模型最重要的分辨維度直接歸零。
- 拍攝器材差異:單眼、手機、監視器拍出來的同一張臉,在感光元件的濾色、馬賽克還原演算法、鏡頭變形校正上都不一樣。跨器材比對的誤差,常常比跨表情還大。
所以當網友覺得「不像同一個人」,模型未必同意。這不是誰對誰錯,而是兩套感知系統看的是不同層次的特徵——人類看的是高層次的整體印象,模型看的是中層的幾何與紋理統計。
主流模型怎麼算「相似度」
現在還在生產環境裡跑的幾套人臉辨識方案,對「同一張臉」這件事其實沒有單一答案,只有不同的取捨。
| 模型/方案 | 特徵向量維度 | 常用比對門檻 | 對光照/角度敏感度 | 對遮蔽的穩定性 | 授權型態 |
|---|---|---|---|---|---|
| ArcFace(InsightFace) | 512 | 相似度 ≥ 0.50 視為同人 | 中 | 中高 | 開源+商用條款 |
| Facenet(Google,2015) | 128 | ≥ 0.70(用距離反比) | 高 | 中 | 開源 |
| DeepFace(Meta) | 128~4096 | 依後端而異 | 中高 | 中 | 開源參考 |
| ArcFace 變體(R100/R50) | 512 | ≥ 0.50 | 中 | 高 | 開源 |
| 商用雲端 API(含前置對齊) | 不公開 | 宣稱 99.x% 準確 | 低(多角度訓練) | 高 | 按 call 計費 |
幾個關鍵數字值得記住:
- 0.50 是 ArcFace 的入門門檻。低於這個相似度,模型就認為兩張臉「可能是不同人」。但這個數字是在 LFW(Labeled Faces in the Wild,一個相對乾淨的公開資料集)上調出來的,遇到高修圖、高相似度的場景,誤判率會明顯上升。
- 維度越高不等於越準。Facenet 的 128 維在乾淨資料集上表現很好,但對遮蔽(口罩、墨鏡、特效妝)的穩定性輸給後來的 ArcFace 與其殘差變體。維度只是容量,真正決定勝負的是訓練資料的分布,以及模型用的目標函式(ArcFace 用的是一種角度邊際損失)。
- 比對門檻是可調的旋鈕,不是物理常數。同一家雲端 API,用在金融身分驗證時會把門檻拉到 0.7 以上,寧可錯殺(把真人誤判成不是本人,代價只是再驗一次);用在社群自動標籤時會壓到 0.4 以下,寧可漏抓(把兩個人誤判成同一人,這才是痛點)。所以「AI 認不認得同一個人」這個問題,答案永遠是「看你能承受哪一種錯」。
- 訓練資料的族群偏置直接決定誰會被誤判。多數公開模型在白人男性臉上的準確度最高,在亞洲女性、混血臉孔上的誤判率明顯偏高。娛樂圈這個子域又疊加了「五官比例高度相似」這個放大因子,等於把偏置再乘上一層。
為什麼娛樂圈恰好是系統的盲區
「沈騰和昨天是一個人嗎」這條熱搜之所以能燒,本質上戳中了人臉辨識一個很少被正視的設計假設:模型把「同一個人在不同條件下」當作同一類,把「不同人在相同條件下」當作不同類。問題是,娛樂圈恰恰是這個假設反過來的世界。
具體會踩到的幾個點,每一個都對應到一個可以量化的失誤:
- 同一個演員,不同造型:戲服、老年妝、特效妝會讓同一個人的特徵向量漂移到接近另一個人的位置。換句話說,模型在劇組裡比在一般大眾裡更容易「認錯自己」。一個演員演二十年的同一個角色,他的特徵軌跡可能橫跨好幾個人的範圍。
- 相似五官的高密度人群:演藝圈本來就挑選特定的五官比例(高對稱性、特定比例的下顎),這會讓這群人的特徵向量在空間裡高度聚集。兩個不同藝人之間的相似度,可能就壓在 0.4 到 0.5 的灰色地帶,模型根本分不開。
- 修圖流程的齊一化:當所有官方照都過同一套美白、瘦臉、放大眼睛的濾鏡,等於對所有人套用同一個非線性變換,結果是人與人之間的距離被壓縮,模型更難區分。
- 表情的標準化:明星合照、紅毯照幾乎都是「標準微笑臉」,這會進一步抹平個體差異,因為表情本身也是特徵向量裡的一個重要維度。
這就是為什麼「他到底是不是昨天那個人」會變成話題——不是觀眾眼花,而是大眾的視覺直覺與機器的量化判斷,在這個高修圖、高相似的子空間裡第一次產生大規模、可重現的分歧。
你可以這樣自己驗證
如果你想知道一套人臉辨識系統到底有多脆弱,可以試這幾個方法:
- 同一張臉、不同角度:拿正面照、側臉十五度、側臉三十度、仰頭、低頭各比一次。如果判定結果跳來跳去,代表這個系統的「辨識」其實很依賴正臉時的幾何屬性。
- 左右鏡像:把同一張臉水平翻轉再比對。理論上鏡像臉的辨識結果應該不變,如果明顯不同,代表系統對微小的非對稱過度敏感。
- 調光與色溫:把同一張照片分別調成冷白光、暖黃光、低對比、高對比再比對。人類對色溫相對穩定,但系統往往因為訓練集的光照分布偏斜,在不同色溫下給出差距很大的結果。
- 修圖前後:把同一張臉做不同程度的磨皮再比對。如果輕度磨皮就讓結果大幅改變,代表系統過度依賴皮膚紋理,這跟人類看重整體神韻的辨識機制是相反的。
- 跨族群:拿一組不同族群的臉去比對,看系統是否對某一群體系統性地更易誤判。如果出現明顯的群體性偏差,這個系統就不該用在任何嚴肅場景。
實際照這套方法壓測幾款現成方案,結果相當一致:對角度與修圖極度敏感,跨族群的系統性偏差也普遍存在。這不是單一產品的問題,而是「把整體印象壓成一串數字再比距離」這件事本身的局限。
維護的隱性成本
順帶一提,辨識系統不是架好就結束,它會隨時間衰退。藝人會整型、會老化、會換造型團隊,系統裡那張基準照每隔半年到一年就得重新錄一次,否則基準漂移會讓原本能認得的人漸漸被誤判。這個「重新建檔」的節奏,必須寫進維運排程,而不是等出包才補救——這也是一般使用者最容易忽略的一層:你以為它一直在認你,其實它在悄悄忘記你。
那個答案,要怎麼看
回頭看這條熱搜,它真正的價值不在八卦,而在於逼我們面對一個現實:「同一個人」從來不是一個客觀常數,而是一組可調參數的輸出。觀眾用整體神韻判斷,覺得不像;模型用特徵向量的相似度判斷,可能覺得像也可能覺得不像,全看門檻設在哪、模型怎麼訓練、餵了什麼分布的資料。兩邊都沒錯,因為他們在解不同的問題。
對一般使用者來說,記住一個原則就夠了:人臉辨識在「統計平均」上可靠,但對任何一次單一的判斷,它都不是絕對答案。手機解鎖、相簿分類這種出錯代價低的場景可以放心用;但只要這個判斷會影響一個人的權益(金融、門禁、實名驗證),就應該有人工複核這一道關,並且接受較高的「寧可錯殺再驗一次」。
「沈騰和昨天是一個人嗎」這條熱搜,真正值得記住的或許不是誰像不像誰,而是它提醒了我們:人類辨認彼此靠的是動態、情境化的整體印象,而現行的人臉辨識系統給出的是另一套維度的答案。下一次當一個系統告訴你「這不是同一個人」或「這就是同一個人」,與其直接相信或反駁,不如去問那個答案背後的門檻、訓練資料,以及它的偏差藏在哪裡。