Google Street View 是 Google Maps 中的一項技術,提供全球眾多公共道路的街景級互動全景影像。2008 年,Google 建立了一套自動模糊人臉與車牌的系統,以保護使用者隱私。本章將設計一個類似 Google Street View 的模糊系統。

需求釐清#
以下是候選人與面試官之間的典型對話:
候選人: 這個系統的商業目標是保護使用者隱私,這樣理解正確嗎?
面試官: 是的。
候選人: 我們要設計一個系統,偵測 Street View 影像中所有人臉與車牌,並在展示給使用者前進行模糊處理。使用者可以回報未正確模糊的影像,這樣假設合理嗎?
面試官: 是的,這些假設都合理。
候選人: 我們是否有標註好的資料集?
面試官: 假設我們已抽樣 100 萬張影像,其中的人臉與車牌已由人工標註。
候選人: 資料集中可能缺少特定種族的人臉,導致模型對種族、年齡、性別等屬性產生偏差,這樣假設合理嗎?
面試官: 很好的觀察。為簡化起見,今天不聚焦於公平性與偏差問題。
候選人: 我認為延遲不是主要考量,因為系統可以離線偵測物件並進行模糊處理,這樣理解正確嗎?
面試官: 是的。我們可以在處理新影像的同時,向使用者展示現有影像。
問題摘要: 設計一個 Street View 模糊系統,自動模糊車牌與人臉。訓練資料集包含 100 萬張已標註人臉與車牌的影像。系統的商業目標是保護使用者隱私。
將問題框架化為 ML 任務#
定義 ML 目標#
- 商業目標: 透過模糊 Street View 影像中可見的車牌與人臉來保護使用者隱私
- ML 目標: 準確偵測影像中的目標物件(object detection)
若 ML 系統能準確偵測這些物件,就能在展示影像前對其進行模糊處理。
本章以「物件」(objects)統稱「人臉與車牌」,以簡化描述。
指定系統的輸入與輸出#
- 輸入: 包含零個或多個物件的影像
- 輸出: 物件的位置(bounding boxes)

選擇合適的 ML 類別#
物件偵測系統有兩項核心任務:
- 預測每個物件的位置 — 回歸問題(regression),因為位置以 $(x, y)$ 座標等數值表示
- 預測每個 bounding box 的類別(如狗、貓等)— 多類別分類問題(multi-class classification)
傳統的物件偵測架構分為 one-stage 與 two-stage 網路。近年基於 Transformer 的架構如 DETR 也展現出優異成果,但本章主要探討 two-stage 與 one-stage 架構。
Two-stage 網路#
Two-stage 網路使用兩個獨立模型:
- 區域提議網路(Region Proposal Network, RPN): 掃描影像,提議可能包含物件的候選區域
- 分類器(Classifier): 處理每個候選區域,將其分類為物件類別

常見的 two-stage 網路包括:R-CNN、Fast R-CNN 與 Faster R-CNN。
One-stage 網路#
One-stage 網路將兩個階段合而為一,使用單一網路同時生成 bounding boxes 與物件類別,無需明確的區域提議步驟。

常見的 one-stage 網路包括:YOLO 與 SSD 架構。
One-stage 與 Two-stage 比較#
| 特性 | Two-stage | One-stage |
|---|---|---|
| 速度 | 較慢(兩個元件依序執行) | 較快 |
| 準確度 | 通常較高 | 通常較低 |
本案例的資料集為 100 萬張影像,以現代標準而言並不算龐大,因此使用 two-stage 網路不會過度增加訓練成本。我們先以 two-stage 網路作為起點;當訓練資料量增加或需要更快的推論速度時,再考慮切換至 one-stage 網路。
資料準備#
資料工程#
本問題可用的資料包括:
- 標註資料集(Annotated dataset)
- Street View 影像
標註資料集#
根據需求,我們有 100 萬張已標註的影像。每張影像包含一組 bounding boxes 及對應的物件類別。
| 影像路徑 | 物件 | Bounding boxes |
|---|---|---|
| dataset/image1.jpg | human face, human face, license plate | [10,10,25,50], [120,180,40,70], [80,95,35,10] |
| dataset/image2.jpg | human face | [170,190,30,80] |
| dataset/image3.jpg | license plate, human face | [25,30,210,220], [30,40,30,60] |
表 3.1:標註資料集的部分資料
每個 bounding box 由 4 個數值組成:左上角 X 座標、Y 座標、寬度、高度。
Street View 影像#
這些是資料蒐集團隊收集的 Street View 影像,ML 系統會處理這些影像以偵測人臉與車牌。
| 影像路徑 | 位置 (lat, lng) | Pitch, Yaw, Roll | 時間戳記 |
|---|---|---|---|
| tmp/image1.jpg | (37.432567, -122.143993) | (0,10,20) | 1646276421 |
| tmp/image2.jpg | (37.387843, -122.091086) | (0,10,-10) | 1646276539 |
| tmp/image3.jpg | (37.542081, -121.997640) | (10,-20,45) | 1646276752 |
表 3.2:Street View 影像的中繼資料
特徵工程#
特徵工程階段先進行標準前處理(如縮放與正規化),再透過資料增強(data augmentation)擴充資料集。
資料增強#
資料增強是將原始資料進行微幅修改以產生新樣本的技術。隨著資料集規模增加,模型能學習到更複雜的模式。此技術在資料不平衡時尤其有用,可增加少數類別的樣本數。
常見的影像增強技術包括:
- 隨機裁切(Random crop)
- 隨機飽和度調整(Random saturation)
- 垂直或水平翻轉(Vertical / horizontal flip)
- 旋轉與/或平移(Rotation / translation)
- 仿射變換(Affine transformations)
- 調整亮度、飽和度或對比度

對於某些增強操作(如旋轉或翻轉),ground truth bounding boxes 也必須同步變換,否則標註資訊將與影像不一致。
資料增強可分為兩種形式:
- 離線(Offline): 訓練前預先增強影像
- 線上(Online): 訓練過程中即時增強影像
| 比較項目 | 離線增強 | 線上增強 |
|---|---|---|
| 訓練速度 | 較快(無需額外增強) | 較慢 |
| 儲存空間 | 需要額外空間 | 不需額外空間 |
面試中更重要的是能討論不同方案的取捨,而非選擇哪一種。本案例採用離線資料增強。
圖 3.6 展示資料集準備流程。經過前處理(縮放、正規化)與影像增強後,影像數量從 100 萬增加至 1000 萬。

模型開發#
模型選擇#
如前文所述,我們選用 two-stage 網路。圖 3.7 展示典型的 two-stage 架構。

架構包含以下元件:
卷積層(Convolutional Layers)#
卷積層 處理輸入影像,輸出特徵圖(feature map)。
區域提議網路(RPN)#
RPN 提議可能包含物件的候選區域:
- 以神經網路為基礎架構
- 輸入為卷積層產生的特徵圖
- 輸出為影像中的候選區域
分類器(Classifier)#
分類器決定每個候選區域的物件類別:
- 輸入為特徵圖與候選區域
- 為每個區域指派物件類別
- 通常基於神經網路實作
在 ML 系統設計面試中,通常不需要深入討論這些神經網路的具體架構細節。
模型訓練#
神經網路訓練通常涉及三個步驟:前向傳播(forward propagation)、損失計算(loss calculation)與反向傳播(backward propagation)。更多資訊請參考。
物件偵測模型需要在兩項任務上表現良好:
- 預測的 bounding boxes 與 ground truth 高度重疊 — 回歸任務
- 各物件類別的預測機率準確 — 分類任務
回歸損失(Regression Loss)#
衡量預測 bounding boxes 與 ground truth 的對齊程度,使用 Mean Squared Error (MSE),記為 $L_{r e g}$:
$L_{r e g}=\frac{1}{M} \sum_{i=1}^M\left[\left(x_i-\hat{x}_i\right)^2+\left(y_i-\hat{y}_i\right)^2+\left(w_i-\hat{w}_i\right)^2+\left(h_i-\hat{h}_i\right)^2\right]$
其中:
- $M$:預測總數
- $x_i$:ground truth 左上角 $x$ 座標
- $\hat{x}_i$:預測左上角 $x$ 座標
- $y_i$:ground truth 左上角 $y$ 座標
- $\hat{y}_i$:預測左上角 $y$ 座標
- $w_i$:ground truth 寬度
- $\hat{w}_i$:預測寬度
- $h_i$:ground truth 高度
- $\hat{h}_i$:預測高度
分類損失(Classification Loss)#
衡量各偵測物件的預測機率準確度,使用 log loss(cross-entropy),記為 $L_{c l s}$:
$L_{c l s}=-\frac{1}{M} \sum_{i=1}^M \sum_{c=1}^C y_c \log \hat{y}_c$
其中:
- $M$:偵測到的 bounding boxes 總數
- $C$:物件類別總數
- $y_i$:偵測 $i$ 的 ground truth 標籤
- $\hat{y}_i$:偵測 $i$ 的預測類別標籤
最終損失函數#
結合分類損失與回歸損失,以平衡參數 $\lambda$ 加權:
$L=L_{c l s}+\lambda L_{r e g}$
評估#
Intersection Over Union (IOU)#
物件偵測模型通常需要偵測影像中 $N$ 個不同物件。為衡量整體效能,我們分別評估每個物件,再取平均。

圖 3.8 顯示模型偵測了 6 個 bounding boxes,但實際僅有 2 個物件實例。如何判斷預測的 bounding box 是否正確?這需要理解 IOU 的定義。
IOU(Intersection Over Union) 衡量兩個 bounding boxes 的重疊程度:

- IOU = 1 表示預測與 ground truth 完全對齊(理想情況,實務中罕見)
- IOU 越高,預測越準確
- 通常設定 IOU 閾值來判定偵測是否正確:高於閾值為 true positive,低於閾值為 false positive
例如 IOU 閾值設為 0.7,表示與 ground truth 重疊達 0.7 以上的偵測視為正確偵測。
離線指標#
模型開發是迭代過程,我們使用離線指標快速評估新模型效能。常用指標包括:
- Precision(精確率)
- Average Precision(AP)
- Mean Average Precision(mAP)
Precision#
所有影像中,正確偵測佔全部偵測的比例。高 precision 代表系統的偵測結果更可靠。
$\text{Precision}=\frac{\text{Correct detections}}{\text{Total detections}}$
計算 precision 需要先選定 IOU 閾值。以圖 3.10 為例:

以三個不同 IOU 閾值計算 precision:
- IOU 閾值 = 0.7: 6 個偵測中有 2 個 IOU 超過 0.7 $\text{Precision}_{0.7}=\frac{2}{6}=0.33$
- IOU 閾值 = 0.5: 3 個偵測的 IOU 超過 0.5 $\text{Precision}_{0.5}=\frac{3}{6}=0.5$
- IOU 閾值 = 0.1: 4 個正確偵測 $\text{Precision}_{0.1}=\frac{4}{6}=0.67$
Precision 隨 IOU 閾值變化而不同,難以用單一閾值的 precision 來衡量模型整體效能。Average Precision 可解決此限制。
Average Precision (AP)#
計算多個 IOU 閾值下的 precision 並取平均:
$AP=\int_0^1 P(r) dr$
其中 $P(r)$ 為 IOU 閾值 $r$ 下的 precision。
上述公式可用離散求和近似。例如在 Pascal VOC2008 基準 中,AP 以 11 個均勻分布的閾值計算:
$AP=\frac{1}{11} \sum_{n=0}^{n=10} P(n)$
AP 總結了模型對特定物件類別(如人臉)的整體 precision。若要衡量模型在所有物件類別的整體 precision,則需使用 mAP。
Mean Average Precision (mAP)#
所有物件類別的 AP 平均值,總結模型整體效能:
$mAP=\frac{1}{C} \sum_{c=1}^C AP_c$
其中 $C$ 為模型偵測的物件類別總數。
mAP 是物件偵測系統常用的評估指標。標準基準所使用的閾值可參考。
線上指標#
根據需求,系統需要保護個人隱私。衡量方式包括:
- 使用者回報與投訴數量
- 由人工標註員抽樣檢查未正確模糊的影像比例
- 衡量偏差與公平性的指標(如不同種族和年齡群組的人臉模糊效果是否一致),但此項超出本次範圍
離線指標: 使用 mAP(整體 precision)與 AP(各類別 precision)。 線上指標: 主要指標為使用者回報數。
服務部署#
重疊的 Bounding Boxes#
物件偵測演算法經常產生重疊的 bounding boxes,因為 RPN 會在每個物件周圍提議多個高度重疊的候選框。推論時需要將這些候選框縮減為每個物件一個 bounding box。
常用解決方案為 Non-Maximum Suppression(NMS) 演算法。
NMS#
NMS 是一種後處理演算法,用於選擇最合適的 bounding boxes:
- 保留高信心度的 bounding boxes
- 移除重疊的 bounding boxes

NMS 是 ML 系統設計面試中常見的考題,建議深入理解其原理與實作。
ML 系統設計#
圖 3.12 展示模糊系統的整體 ML 系統設計。

批次預測管線(Batch Prediction Pipeline)#
根據需求,延遲不是主要考量,因此可採用批次預測(batch prediction)預先計算物件偵測結果。
前處理(Preprocessing)
對原始影像進行前處理(縮放、正規化等),詳見特徵工程章節。
模糊服務(Blurring Service)
對每張 Street View 影像執行以下操作:
- 提供影像中偵測到的物件列表
- 透過 NMS 元件精煉偵測結果
- 對偵測到的物件進行模糊處理
- 將模糊後的影像儲存至物件儲存(Object Storage)
前處理與模糊服務分離設計的原因:
- 前處理傾向於 CPU-bound 處理
- 模糊服務依賴 GPU 運算
- 分離後可獨立擴展各服務,並更有效利用 CPU 與 GPU 資源
資料管線(Data Pipeline)#
負責處理使用者回報、產生新的訓練資料,並準備訓練資料供模型使用。
Hard Negative Mining: 從模型預測錯誤的範例中刻意建立負樣本,加入訓練資料集。重新訓練後,模型對這類困難案例的表現應會提升。
其他討論主題#
若時間允許,可進一步討論:
- Transformer-based 物件偵測架構與 one-stage / two-stage 模型的差異及優缺點
- 分散式訓練技術以處理更大規模的資料集
- 歐洲 GDPR(General Data Protection Regulation)對系統的影響
- 評估人臉偵測系統的偏差
- 如何持續微調模型
- 如何使用 Active Learning 或 Human-in-the-Loop ML 選擇訓練資料