如何使用深度學習和 VGG16 建立人臉和性別識別 Python 專案。
深度學習是機器學習的一個子類別,是一種三層或多層的神經網路。這些神經網路試圖透過從大量數據中學習來模擬人腦的行為。雖然單層神經網路仍然可以做出近似預測,但額外的隱藏層可以幫助優化和細化準確性。
深度學習透過在無需人工幹預的情況下執行任務來提高自動化程度。深度學習可以在數位助理、語音電視遙控器、信用卡詐欺偵測和自動駕駛汽車中找到。
** 在 GitHub 上查看完整程式碼:https://github.com/alexiacismaru/face-recognision
下載用於人臉偵測的VGG16人臉資料集和Haar Cascade XML文件,該文件將用於人臉辨識任務中的預處理。
從 VGG 人臉資料集中選擇性地載入和處理一組預定義主題的特定數量的圖像。
透過開啟與主題關聯的文字檔案並閱讀內容來迭代每個主題的檔案。這些文件中的每一行都包含一個圖像的 URL。對於每個 URL(指向圖像),程式碼嘗試使用 urllib 載入圖像並將其轉換為 NumPy 陣列。
detectMultiScale 方法可辨識影像中的人臉。然後,它會傳回它認為人臉所在的矩形的座標。對於影像中的每張臉,都會在其周圍繪製一個矩形,指示該臉的位置。每個影像的大小都調整為 224x224 像素。
將資料集拆分為訓練集和驗證集:
深度學習模型的準確性取決於訓練資料的品質、數量和上下文意義。這是建立深度學習模型時最常見的挑戰之一,而且成本高且耗時。公司使用資料增強來減少對訓練範例的依賴,以快速建立高精度模型。
資料增強是指透過從現有資料產生新資料點來人為地增加資料量。這包括對資料添加微小的變更或使用機器學習模型在原始資料的潛在空間中產生新的資料點以放大資料集。
合成數據代表不使用真實世界影像的人工生成的數據,由生成對抗網路產生。
增強源自原始影像,並進行某種微小的幾何變換(例如翻轉、平移、旋轉或添加雜訊),以增加訓練集的多樣性。
資料增強透過更多樣化的資料集提高了機器學習模型的效能,並降低了與資料收集相關的營運成本:
VGG16是一種廣泛用於影像辨識的捲積神經網路。它被認為是最好的電腦視覺模型架構之一。它由 16 層人工神經元組成,可增量處理影像以提高準確性。在VGG16中,「VGG」指的是牛津大學視覺幾何小組,而「16」指的是網路的16個加權層
VGG16用於影像辨識和新影像分類。 VGG16 網路的預訓練版本是在 ImageNet 視覺資料庫中超過一百萬張影像上進行訓練的。 VGG16 可用於判斷影像是否包含某些物品、動物、植物等。
有 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)。
動量是一種演算法,用於使用梯度的指數加權平均值來幫助加速梯度下降演算法。
均方根道具是一種自適應學習演算法,嘗試透過採用「指數移動平均值」來改進 AdaGrad。
由於 mt 和 vt 都初始化為 0(基於上述方法),因此觀察到它們有「偏向 0」的趨勢,因為 β1 和 β2 ≈ 1。此優化器透過計算解決了這個問題「偏差校正」mt 和 vt。這樣做也是為了在達到全域最小值時控制權重,以防止接近它時出現高振盪。使用的公式是:
直觀上,我們在每次迭代後適應梯度下降,使其在整個過程中保持受控且無偏差,因此得名 Adam。
現在,我們採用偏差校正權重參數 (m_hat)t 和 (v_hat)t,而不是正常的權重參數 mt 和 vt。將它們代入我們的一般方程,我們得到:
來源:Geeksforgeeks,https://www.geeksforgeeks.org/adam-optimizer/
在深度學習環境中設定影像資料預處理、增強和模型訓練。
模型的表現是透過對驗證集進行預測來評估的。這可以讓我們了解模型對未見資料的執行情況。對這些預測應用閾值,將每個圖像分類為兩個類別之一(“男性”或“女性”)。
建立混淆矩陣以可視化準確性。
對於二元分類,接收者操作特徵 (ROC) 曲線和曲線下面積 (AUC) 對於理解真陽性率和假陽性率之間的權衡很有用。
總之,透過使用深度學習和影像處理演算法,您可以建立一個 Python 專案來識別人臉並將其分類為男性或女性。
以上是使用 VGG 進行人臉和性別識別的詳細內容。更多資訊請關注PHP中文網其他相關文章!