iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
AI & Data

從RAG到EmoRAG:讓AI真正聽懂你的心聲系列 第 8

第8天:OpenCV與DeepFace圖像情緒辨識

  • 分享至 

  • xImage
  •  

前言:

在做情緒人臉辨識(Landmark detection)這塊,現有的人臉識別API有分成Dlib、FaceNet或DeepFace。
在這裡想用可以載入多種預訓練模型的DeepFace嘗試,當然預訓練模型不如從頭構建的模型靈活,但是可以更敏捷的套用。這篇文章引用了DeepFace的經典《 DeepFace:縮小人臉驗證與人類水平表現的差距》2014,有興趣的人可以去看原文。

PS.
這三種API的優缺點比較可見邦友文章:30天AI人臉辨識技術全攻略:從零開始到實戰應用 DAY12
另外,想見FaceNet的人可以在人臉辨識(Face recognition) 解析與實作見到高品質的檢測結果。

Deepface

DeepFace 是一個由 Facebook AI Research 和特拉維夫大學於 2014 年提出的深度學習系統,旨在縮小人臉驗證(Face Verification)性能與人類水平之間的差距。
DeepFace和其他人臉識別API都是多階段方法,主要特色在於結合了精確的 3D 臉部對齊和DNN來學習人臉特徵。
(引用自《 DeepFace:縮小人臉驗證與人類水平表現的差距》2014)
• 訓練數據:DeepFace 在當時最大的帶標籤人臉數據集 SFC(Social Face Classification)上進行訓練,該數據集包含來自 4,030 個身份的 440 萬張帶標籤人臉圖像。大規模數據集是支撐其複雜網路架構的關鍵。
• 損失函數:網路是針對多類人臉識別任務進行訓練,使用 K 路 Softmax 作為輸出層,並使用交叉熵損失(Cross-entropy loss)進行最小化。
• 驗證性能:DeepFace 在 LFW(Labeled Faces in the Wild)資料集上取得了 97.35% 的準確度(使用多模型集成和非限制協議),將當時最優方法的錯誤率降低了超過 27%,接近人類水平的性能。
• 計算效率:DeepFace 系統在單核 Intel 2.2GHz CPU 上運行,整體處理一張圖像約需 0.33 秒,其中特徵提取(前饋網路)耗時 0.18 秒,3D 對齊耗時 0.05 秒。

以下要介紹
• DeepFace特色:對齊機制
網路架構(Siamese network)


對齊機制


DeepFace 系統採用了多階段且複雜的對齊方式,特別強調使用顯式 3D 臉部建模來處理非受限環境下的人臉變異。
DeepFace 的對齊管道(Alignment Pipeline)包括以下步驟:

  1. 2D 對齊 (2D Alignment)
    對齊過程從檢測到的臉部開始,透過以下步驟進行初始對齊:
    (a) 初始特徵點檢測: 系統首先在檢測到的臉部上定位 6 個初始特徵點(fiducial points),這些點集中在眼睛中心、鼻尖和嘴巴位置 [71(a), 75, 129(a)]。
    (b)相似度變換: 使用這些點來計算一個相似度變換矩陣 $T_{2d}$,用於將圖像近似地進行縮放 (scale)、旋轉 (rotate) 和平移 (translate),留下一個 2D 對齊的剪裁(Bounding Box)。
    (c) 2D 對齊裁剪上的67 個基準點及其對應的 Delaunay Triangulation,也就是把點連接封閉的區域切割成大小均勻分配的三角形。
    (d)一個理想的 3D 臉部模型,根據圖像中人臉的實際角度和位置,繪製或投影到 2D 平面上的結果。

    • 局限性: 2D 相似度變換無法彌補**平面外旋轉(out-of-plane rotation)**帶來的影響,這在非受限條件下尤其重要。
  2. 3D 對齊(Frontalization,正面化)
    (e)為了解決平面外旋轉和姿態(pose)問題,DeepFace 引入了基於 3D 模型的方法:
    ◦ 更多特徵點檢測: 在 2D 對齊後的圖像上,定位額外的 67 個特徵點 [76, 129(c)]。
    ◦ 3D 模型擬合: 系統使用一個通用 3D 形狀模型(generic 3D shape model)(來自 USF Human-ID 資料庫的平均 3D 掃描結果)。透過這 67 個檢測到的 2D 特徵點,系統擬合一個仿射 3D-to-2D 攝影機 $P$。
    ◦ 利用擬合的攝影機 $P$ 和 3D 參考點,對 2D 圖像進行扭曲(warp)。
    ◦ 分段仿射變換(piece-wise affine transformation)$T$ 被用來將 2D 特徵點(源)扭曲到到3D 模型引導的目標點(target)。
    (f) 這種扭曲是透過 Delaunay Triangulation 導引的,它基於 67 個特徵點 [78, 129(c), 129(f)]。
    (g) 最終結果是**「最終正面化裁剪」 (final frontalized crop)** [71(g), 129(g)],它將人臉扭曲到一個 3D 正面模式。
    (h)生成3D 正面模式

  3. 對齊的重要性
    準確的基於模型的對齊(model-based alignment)。
    • 減少變異: 對齊步驟旨在將人臉圖像正規化,補償姿態和非剛性表情帶來的變化。
    • 定制網路架構: 網路架構(特別是局部連接層 L4、L5、L6)是基於輸入圖像已高度對齊的事實進行定制的。DeepFace 相信一旦對齊完成,人臉每個區域的位置在像素級別上是固定的。
    • 性能影響: 實驗證明了 3D 對齊的重要性:僅使用 2D 對齊時,準確度為 $94.3%$;而加入 3D 正面化後,DeepFace 的單模型(DeepFace-single)準確度顯著提升至 $95.92%$(無監督)到 $97.00%$(受限協議)。

網路架構(Siamese network)

DeepFace 模型架構是一個九層深度神經網路(DNN),專為處理經過 3D 對齊的臉部圖像而客製化設計。該架構包含了超過 1.2 億個參數,其中超過 95% 的參數來自於局部連接層和全連接層。
該架構可以分為三個主要部分:低級特徵提取(C1-C3)、客製化局部連接(L4-L6)和高層全連接(F7-F8)。
以下是 DeepFace 網路架構的詳細描述:


  1. 輸入層
    • 輸入內容:輸入是經過 3D 對齊(frontalized)的臉部圖像。
    • 尺寸:3 聲道(RGB)人臉影像,尺寸為 152 乘 152 像素。
  2. 低級特徵提取層(C1, M2, C3)
    這前三層的目的是提取低級特徵,例如簡單的邊緣和紋理。由於 DeepFace 的輸入圖像已經過精確的 3D 對齊,這些層被視為一個前端的自適應預處理階段。
    • C1(捲積層 1):具有 32 個 大小為 11×11×3 的濾波器(Filters)。
    • M2(最大池化層 2):一個 3×3 最大池化層,步幅(stride)為 2。
    ◦ 池化策略:DeepFace 僅在第一個卷積層之後應用最大池化。這是因為多次池化會導致網路損失關於詳細臉部結構和微紋理的精確位置資訊,而這對於對齊後的臉部圖像至關重要。僅應用一次池化可以增加對微小對齊誤差的魯棒性。
    • C3(捲積層 3):另一個卷積層,具有 16 個 大小為 9×9×16 的濾波器。
  3. 客製化局部連接層(L4, L5, L6)
    這些後續層是 DeepFace 架構的關鍵,體現了它利用高度對齊輸入的定制化設計。
    • 層類型:這些層是局部連接層(Locally Connected Layers),而非標準卷積層。
    • 權重共享:與卷積層不同,局部連接層不會共享權重。特徵圖中的每個位置都會學習一組不同的濾波器。
    • 定制化原因:由於對齊影像的不同區域具有不同的局部統計數據,空間平穩性假設(spatial stationarity assumption,即權重共享的前提)不再成立。例如,眼睛和眉毛之間的區域與鼻子和嘴巴之間的區域相比,具有更高的辨別能力和非常不同的外觀。
    • 參數數量:這些局部連接層對網路的巨大參數數量(超過 1.2 億)貢獻甚多,這只有在 DeepFace 擁有大型標籤數據集的情況下才能負擔訓練。
  4. 高層全連接層(F7, F8)
    最頂部的兩層是全連接層,用於捕獲臉部圖像中遠處特徵之間的相關性。
    • F7(全連接層 7 / 嵌入層):這是網路中的第一個全連接層。
    ◦ 用途:該層的輸出 F7 被用作 DeepFace 的原始人臉表徵特徵向量(即嵌入)。
    ◦ Dropout:Dropout 正則化方法僅應用於第一個全連接層。
    • F8(全連接層 8 / 分類層):
    ◦ 輸出:輸出饋送到一個 K 路 Softmax 函數,其中 $K$ 是訓練集中身份的數量(類別)。
    ◦ 訓練目標:網路是針對多類人臉識別任務進行訓練,透過最小化交叉熵損失來最大化正確類別的機率。
  5. 通用配置
    • 激活函數(Non-linearity):在每個卷積層、局部連接層和全連接層之後(除了 Softmax 輸出層),都使用 ReLU(Rectified Linear Unit) 激活函數 $\max(0, x)$。這使得整個網路產生高度非線性且稀疏(sparse)的特徵。
    • 總參數:網路包含超過 1.2 億個參數。

實作

實作目標: 實作Deepface專案初始和資料集準備
人臉訓練模型:參考自Real-time-Face-recognition
測試圖片:
Einstein_Angry.png
生氣的愛因斯坦
Einstein_laughing.png
開心的愛因斯坦
(來源:gemini生成)

下載流程:

實作放在colab


上一篇
第7天:文字EmoRAG基礎測試與評估
系列文
從RAG到EmoRAG:讓AI真正聽懂你的心聲8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言