使用 VGG 進行人臉和性別識別

Mary-Kate Olsen
發布: 2024-11-06 10:45:03
原創
1050 人瀏覽過

Using VGGfor face and gender recognition

如何使用深度學習和 VGG16 建立人臉和性別識別 Python 專案。

什麼是深度學習?

深度學習是機器學習的一個子類別,是一種三層或多層的神經網路。這些神經網路試圖透過從大量數據中學習來模擬人腦的行為。雖然單層神經網路仍然可以做出近似預測,但額外的隱藏層可以幫助優化和細化準確性。

深度學習透過在無需人工幹預的情況下執行任務來提高自動化程度。深度學習可以在數位助理、語音電視遙控器、信用卡詐欺偵測和自動駕駛汽車中找到。

建構 Python 專案

** 在 GitHub 上查看完整程式碼:https://github.com/alexiacismaru/face-recognision

下載用於人臉偵測的VGG16人臉資料集和Haar Cascade XML文件,該文件將用於人臉辨識任務中的預處理。

從 VGG 人臉資料集中選擇性地載入和處理一組預定義主題的特定數量的圖像。

透過開啟與主題關聯的文字檔案並閱讀內容來迭代每個主題的檔案。這些文件中的每一行都包含一個圖像的 URL。對於每個 URL(指向圖像),程式碼嘗試使用 urllib 載入圖像並將其轉換為 NumPy 陣列。

臉部偵測設定

Using VGGfor face and gender recognition

  1. 找到圖像中的一張或多張臉孔並將其放入框中。
  2. 確保人臉與資料庫一致,例如幾何、光度等。
  3. 從臉部提取可用於識別任務的特徵。
  4. 將臉孔與準備好的資料庫中的一張或多張已知面孔進行配對。

detectMultiScale 方法可辨識影像中的人臉。然後,它會傳回它認為人臉所在的矩形的座標。對於影像中的每張臉,都會在其周圍繪製一個矩形,指示該臉的位置。每個影像的大小都調整為 224x224 像素。

將資料集拆分為訓練集和驗證集:

  • 訓練集用於訓練機器學習模型。它用於學習資料中的模式、特徵和關係。該模型調整其參數以最大限度地減少對訓練資料進行的預測或分類的錯誤。
  • 驗證集評估模型在一組新資料上的表現。這有助於檢查模型對未見過的資料的泛化程度。驗證集應該是在模型訓練期間不使用的獨立集。在訓練期間混合/使用驗證集中的資訊可能會導致結果偏差。

數據增強

深度學習模型的準確性取決於訓練資料的品質、數量和上下文意義。這是建立深度學習模型時最常見的挑戰之一,而且成本高且耗時。公司使用資料增強來減少對訓練範例的依賴,以快速建立高精度模型。

資料增強是指透過從現有資料產生新資料點來人為地增加資料量。這包括對資料添加微小的變更或使用機器學習模型在原始資料的潛在空間中產生新的資料點以放大資料集。

合成數據代表不使用真實世界影像的人工生成的數據,由生成對抗網路產生。

增強源自原始影像,並進行某種微小的幾何變換(例如翻轉、平移、旋轉或添加雜訊),以增加訓練集的多樣性。

資料增強透過更多樣化的資料集提高了機器學習模型的效能,並降低了與資料收集相關的營運成本:

  • 左右翻轉:影像以 0.7 的機率隨機水平翻轉。這模擬了由於影像中主體的不同方向而導致的變化。
  • 旋轉:影像以 0.7 的機率輕微旋轉(雙向最多 10 度)。這透過模擬不同的頭部姿勢增加了資料集的變異性。
  • 灰階轉換:以0.1的機率將影像轉換為灰階。這確保了模型可以處理圖像並從圖像中學習,而不管其顏色資訊如何。
  • 取樣:sample(50) 方法從原始集合產生 50 個增強影像。這擴展了資料集,為模型提供了更多可供學習的資料。

實施 VGG16 模型

VGG16是一種廣泛用於影像辨識的捲積神經網路。它被認為是最好的電腦視覺模型架構之一。它由 16 層人工神經元組成,可增量處理影像以提高準確性。在VGG16中,「VGG」指的是牛津大學視覺幾何小組,而「16」指的是網路的16個加權層

VGG16用於影像辨識和新影像分類。 VGG16 網路的預訓練版本是在 ImageNet 視覺資料庫中超過一百萬張影像上進行訓練的。 VGG16 可用於判斷影像是否包含某些物品、動物、植物等。

VGG16架構

Using VGGfor face and gender recognition

有 13 個卷積層、5 個 Max Pooling 層和 3 個 Dense 層。這導致 21 個層具有 16 個權重,這意味著它有 16 個可學習參數層。 VGG16 將輸入張量大小設為 224x244。此模型著重於具有步幅為 1 的 3x3 濾波器的捲積層。它始終使用與步幅為 2 的 2x2 濾波器的 maxpool 層相同的填充。

Conv-1 層有64 個過濾器,Conv-2 有128 個過濾器,Conv-3 有256 個過濾器,Conv 4 和Conv 5 有512 個過濾器,以及三個全連接層,其中前兩個層各有4096 個通道,第三個層各有4096 個通道執行1000 路ILSVRC 分類並包含1000 個通道(每個類別一個)。最後一層是 soft-max 層。

開始準備基礎模型。

為了確保模型能夠正確分類影像,我們需要使用額外的層來擴展模型。

全域平均池化 2D 層將從 VGG16 獲得的特徵圖壓縮為每個圖的單一 1D 向量。它簡化了輸出並減少了參數總數,有助於防止過度擬合。

密集層是增加的一系列完全連接(密集)層。每層包含指定數量的單元(1024、512 和 256),這些單元是根據常見實踐和實驗選擇的。這些層進一步處理 VGG16 提取的特徵。

最後的密集層(輸出層)使用適合二元分類的 sigmoid 活化(我們的兩個類別是「女性」和「男性」)。

亞當優化

Adam 最佳化演算法是隨機梯度下降過程的擴展,用於根據訓練資料迭代更新網路權重。當處理涉及大量數據或參數的大型問題時,該方法非常有效。它需要更少的記憶體並且效率更高。

此演算法結合了兩種梯度下降方法:動量和均方根傳播 (RMSP)。

動量是一種演算法,用於使用梯度的指數加權平均值來幫助加速梯度下降演算法。

Using VGGfor face and gender recognition

均方根道具是一種自適應學習演算法,嘗試透過採用「指數移動平均值」來改進 AdaGrad。

Using VGGfor face and gender recognition

由於 mt 和 vt 都初始化為 0(基於上述方法),因此觀察到它們有「偏向 0」的趨勢,因為 β1 和 β2 ≈ 1。此優化器透過計算解決了這個問題「偏差校正」mt 和 vt。這樣做也是為了在達到全域最小值時控制權重,以防止接近它時出現高振盪。使用的公式是:

Using VGGfor face and gender recognition

直觀上,我們在每次迭代後適應梯度下降,使其在整個過程中保持受控且無偏差,因此得名 Adam。

現在,我們採用偏差校正權重參數 (m_hat)t 和 (v_hat)t,而不是正常的權重參數 mt 和 vt。將它們代入我們的一般方程,我們得到:

Using VGGfor face and gender recognition

來源:Geeksforgeeks,https://www.geeksforgeeks.org/adam-optimizer/

在深度學習環境中設定影像資料預處理、增強和模型訓練。

  • epochs:epochs 的數量指定整個訓練資料集將透過神經網路向前和向後傳遞多少。此模型將遍歷訓練資料 10 次。 epoch 是學習機器要學習的資料集的完整呈現。
  • batch_size:此參數定義一次透過網路傳播的樣本數。在這裡,我們使用的批次大小為 30,這意味著模型將一次拍攝 30 張影像,對其進行處理,更新權重,然後繼續處理下一批 30 張影像。

模型的表現是透過對驗證集進行預測來評估的。這可以讓我們了解模型對未見資料的執行情況。對這些預測應用閾值,將每個圖像分類為兩個類別之一(“男性”或“女性”)。

建立混淆矩陣以可視化準確性。

對於二元分類,接收者操作特徵 (ROC) 曲線和曲線下面積 (AUC) 對於理解真陽性率和假陽性率之間的權衡很有用。

結論

總之,透過使用深度學習和影像處理演算法,您可以建立一個 Python 專案來識別人臉並將其分類為男性或女性。

以上是使用 VGG 進行人臉和性別識別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板