国产无码免费,人妻口爆,国产V在线,99中文精品7,国产成人无码AA精品一,制度丝袜诱惑av,久久99免费麻辣视频,蜜臀久久99精品久久久久久酒店
        訂閱
        糾錯
        加入自媒體

        一文學(xué)會使用CNN進行人臉關(guān)鍵點識別

        項目概況

        該項目的目標(biāo)是預(yù)測面部圖片上關(guān)鍵點的位置。這可以用作各種應(yīng)用程序中的組件,包括:

        圖片和視頻中的人臉識別。

        面部表情的研究。

        用于醫(yī)學(xué)診斷,識別畸形面部癥狀。

        識別面部關(guān)鍵點是一個很難解決的話題。人與人的面部特征差異很大,即使在一個人內(nèi),由于 3D 姿勢、大小、位置、視角和照明環(huán)境,也會存在很多差異。盡管計算機視覺研究在解決這些問題方面取得了長足的進步,但仍有許多可以改進的領(lǐng)域。

        目錄

        介紹

        先決條件

        程序和編程

        面部關(guān)鍵點檢測的有用應(yīng)用

        介紹

        利用卷積神經(jīng)網(wǎng)絡(luò)和計算機視覺技術(shù)進行人臉關(guān)鍵點檢測,對人臉的重要區(qū)域(如眼睛、嘴角和鼻子)進行標(biāo)記,這些區(qū)域與各種任務(wù)(如人臉濾波、情感識別和姿勢識別)相關(guān)。

        它需要預(yù)測特定面部的面部關(guān)鍵點坐標(biāo),例如鼻尖、眼睛中心等。為了識別面部關(guān)鍵點,我們使用基于卷積神經(jīng)網(wǎng)絡(luò)的模型使用自動編碼器。

        卷積神經(jīng)網(wǎng)絡(luò) (CNN) 具有深層結(jié)構(gòu),允許它們提取高級信息并在識別每個重要點時提供更好的精度。卷積網(wǎng)絡(luò)旨在同時預(yù)測所有點。

        先決條件

        因為神經(jīng)網(wǎng)絡(luò)經(jīng)常需要標(biāo)準(zhǔn)化的圖片,所以它們應(yīng)該有一個恒定的大小,顏色范圍和坐標(biāo)的標(biāo)準(zhǔn)化范圍,并從 NumPy 列表和數(shù)組轉(zhuǎn)換為 Tensor 和 Keras(用于 PyTorch)。因此,需要進行一些預(yù)處理。

        程序和編程

        我正在使用 Kaggle 數(shù)據(jù)集來訓(xùn)練模型,你可以通過運行 API 命令下載它kaggle competitions download -c facial-keypoints-detection
        導(dǎo)入 NumPy 和 pandas 庫:import numpy as np # linear algebra
        import pandas as pd # data processing
        import os
        for directoryname, _, filenames in os.walk('/kaggle/input'):
           for filename in filenames:
               print(os.path.join(directoryname, filename))
        你寫入當(dāng)前目錄的任何輸出都會被存儲。下一步是為訓(xùn)練和測試數(shù)據(jù)的每個文件設(shè)置路徑,train_zip_path = "../input/facial-keypoints-detection/training.zip"
        test_zip_path = "../input/facial-keypoints-detection/test.zip"
        id_lookup_table = "../input/facial-keypoints-detection/IdLookupTable.csv"
        sample_Submission = "../input/facial-keypoints-detection/SampleSubmission.csv"
        讓我們使用 zip 文件解壓 zip 文件,然后加載數(shù)據(jù)集。import zipfile
        with zipfile.ZipFile(train_zip_path,'r') as zip_ref:
        zip_ref.extractall('')
        with zipfile.ZipFile(test_zip_path,'r') as zip_ref:
        zip_ref.extractall('')
        train_df = pd.read_csv('training.csv')
        test_df = pd.read_csv('test.csv')
        idLookupTable = pd.read_csv(id_lookup_table)
        sampleSumission = pd.read_csv(sample_Submission)
        加載數(shù)據(jù)集后,我們可以使用pandas的庫查看數(shù)據(jù)框,并列出數(shù)據(jù)集的頭部。train_df.info()

        填充 Nan 值并分離和重塑輸入值(x_train) train_df.fillna(method='ffill',inplace=True)
        在訓(xùn)練數(shù)據(jù)集中分離和重塑輸入值(x_train):使用圖像創(chuàng)建一個數(shù)組,keypoints:關(guān)鍵點將是我們數(shù)據(jù)集的一個樣本。我們的數(shù)據(jù)集將接受一個可選的參數(shù)轉(zhuǎn)換,允許我們對樣本執(zhí)行任何必要的處理。image_df = train_df['Image']
        imageArr = []
        for i in range(0,len(image_df)):
            img = image_df[i].split()
            img = ['0' if x == '' else x for x in img]
            imageArr.a(chǎn)ppend(img)
        x_train = np.a(chǎn)rray(imageArr,dtype='float')
        x_train = x_train.reshape(-1,96,96,1)
        print(x_train.shape)
        創(chuàng)建一個以圖片為輸入輸出關(guān)鍵點的CNN:輸入圖片大小為224*224px(由transform決定),輸出類分?jǐn)?shù)為136,即136/2 = 68。(我們想要的68個關(guān)鍵點)和分離目標(biāo)值keypoints_df = train_df.drop('Image',axis = 1)
        y_train = np.a(chǎn)rray(keypoints_df,dtype='float')
        print(y_train.shape)
        def visualizeWithNoKeypoints(index):
           plt.imshow(x_train[index].reshape(96,96),cmap='gray')
        def visualizeWithKeypoints(index):
           plt.imshow(x_train[index].reshape(96,96),cmap='gray')
           for i in range(1,31,2):
               plt.plot(y_train[0][i-1],y_train[0][i],'ro')
        在我們編寫了可視化函數(shù)之后,接下來,我們可以使用函數(shù)調(diào)用來可視化每個圖像import matplotlib.pyplot as plt
        fig = plt.figure(figsize=(8,4))
        fig.subplots_adjust(left=0,right=1,bottom=0,top=1,hspace=0.05,wspace=0.05)
        plt.subplot(1,2,1)
        visualizeWithNoKeypoints(1)
        plt.subplot(1,2,2)
        visualizeWithKeypoints(1)

        數(shù)據(jù)已經(jīng)預(yù)處理完畢。現(xiàn)在是創(chuàng)建訓(xùn)練模型的時候了。為了創(chuàng)建我們的 CNN 模型,我們將使用 Keras 框架。from keras.models import Sequential, Model
        from keras.layers import Activation, Convolution2D,MaxPooling2D,BatchNormalization, Flatten, Dense, Dropout
        from keras.layers.a(chǎn)dvanced_activations import LeakyReLU
        最初只從一兩個 epoch 開始,以快速評估你的模型是如何訓(xùn)練的,并確定你是否應(yīng)該改變其結(jié)構(gòu)或超參數(shù)。在訓(xùn)練時跟蹤模型的損失如何隨時間變化:它是否首先快速減少,然后減速?在訓(xùn)練多個時期并創(chuàng)建最終模型之前,使用這些初始觀察對模型進行更改并決定最佳架構(gòu)。model = Sequential()
        model.a(chǎn)dd(Convolution2D(32,(3,3),padding='same',use_bias=False, input_shape=(96,96,1)))
        model.a(chǎn)dd(LeakyReLU(alpha = 0.1))
        model.a(chǎn)dd(BatchNormalization())
        model.a(chǎn)dd(Convolution2D(32,(3,3),padding='same',use_bias = False))
        model.a(chǎn)dd(LeakyReLU(alpha=0.1))
        model.a(chǎn)dd(BatchNormalization())
        model.a(chǎn)dd(MaxPooling2D(pool_size=(2,2)))
        model.a(chǎn)dd(Convolution2D(64,(3,3),padding='same',use_bias = False))
        model.a(chǎn)dd(LeakyReLU(alpha=0.1))
        model.a(chǎn)dd(BatchNormalization())
        model.a(chǎn)dd(Convolution2D(64, (3,3), padding='same', use_bias=False))
        model.a(chǎn)dd(LeakyReLU(alpha = 0.1))
        model.a(chǎn)dd(BatchNormalization())
        model.a(chǎn)dd(MaxPooling2D(pool_size=(2, 2)))
        model.a(chǎn)dd(Convolution2D(96, (3,3), padding='same', use_bias=False))
        model.a(chǎn)dd(LeakyReLU(alpha = 0.1))
        model.a(chǎn)dd(BatchNormalization())
        model.a(chǎn)dd(Convolution2D(96, (3,3), padding='same', use_bias=False))
        model.a(chǎn)dd(LeakyReLU(alpha = 0.1))
        model.a(chǎn)dd(BatchNormalization())
        model.a(chǎn)dd(MaxPooling2D(pool_size=(2, 2)))
        model.a(chǎn)dd(Convolution2D(128, (3,3),padding='same', use_bias=False))
        # model.a(chǎn)dd(BatchNormalization())
        model.a(chǎn)dd(LeakyReLU(alpha = 0.1))
        model.a(chǎn)dd(BatchNormalization())
        model.a(chǎn)dd(Convolution2D(128, (3,3),padding='same', use_bias=False))
        model.a(chǎn)dd(LeakyReLU(alpha = 0.1))
        model.a(chǎn)dd(BatchNormalization())
        model.a(chǎn)dd(MaxPooling2D(pool_size=(2, 2)))
        model.a(chǎn)dd(Convolution2D(256, (3,3),padding='same',use_bias=False))
        model.a(chǎn)dd(LeakyReLU(alpha = 0.1))
        model.a(chǎn)dd(BatchNormalization())
        model.a(chǎn)dd(Convolution2D(256, (3,3),padding='same',use_bias=False))
        model.a(chǎn)dd(LeakyReLU(alpha = 0.1))
        model.a(chǎn)dd(BatchNormalization())
        model.a(chǎn)dd(MaxPooling2D(pool_size=(2, 2)))
        model.a(chǎn)dd(Convolution2D(512, (3,3), padding='same', use_bias=False))
        model.a(chǎn)dd(LeakyReLU(alpha = 0.1))
        model.a(chǎn)dd(BatchNormalization())
        model.a(chǎn)dd(Convolution2D(512, (3,3), padding='same', use_bias=False))
        model.a(chǎn)dd(LeakyReLU(alpha = 0.1))
        model.a(chǎn)dd(BatchNormalization())
        model.a(chǎn)dd(Flatten())
        model.a(chǎn)dd(Dense(512,activation='relu'))
        model.a(chǎn)dd(Dropout(0.1))
        model.a(chǎn)dd(Dense(30))
        model.summary()

        下一步是配置模型:model.compile(optimizer='adam',loss='mean_squared_error',metrics=['mae','acc'])
        model.fit(x_train,y_train,batch_size=256,epochs=45,validation_split=2.0)
        示例輸出:

        在整個訓(xùn)練數(shù)據(jù)集中執(zhí)行了總共 50 次迭代。我們已經(jīng)學(xué)會了如何簡單地使用 CNN 來訓(xùn)練深度學(xué)習(xí)模型。現(xiàn)在是時候使用我們的數(shù)據(jù)收集對模型進行測試了。我們必須首先準(zhǔn)備我們的測試集。test_df.isnull().a(chǎn)ny()
        x 測試:分離和重塑輸入測試值image_df = test_df['Image']
        keypoints_df = test_df.drop('Image',axis = 1)
        imageArr = []
        for i in range(0,len(image_df)):
           img = image_df[i].split()
           img = ['0' if x=='' else x for x in img]
           imageArr.a(chǎn)ppend(img)
        x_test = np.
        array(imageArr,dtype='float')
        x_test = x_test.reshape(-1,96,96,1)
        print(x_test.shape)
        我們知道要在測試數(shù)據(jù)集中分離目標(biāo)值 (y_test)y_test = np.
        array(keypoints_df,dtype='float')
        print(y_test.shape)
        現(xiàn)在,是時候預(yù)測訓(xùn)練模型的結(jié)果了:pred = model.predict(x_test)
        idLookupTable.head()

        我們已經(jīng)學(xué)習(xí)了如何簡單地使用 CNN 構(gòu)建深度學(xué)習(xí)面部關(guān)鍵點檢測模型。

        面部關(guān)鍵點檢測的一些有用應(yīng)用該技術(shù)的適用性是多種多樣的。以下只是當(dāng)今企業(yè)界中一些更有趣的面部識別應(yīng)用。1) 使用 CNN 檢測面部關(guān)鍵點并在帶有面部過濾器的應(yīng)用程序中使用它們用有趣的東西覆蓋人臉照片的面部過濾器越來越受歡迎。它們通常出現(xiàn)在社交媒體平臺上。此過濾器應(yīng)用程序中使用了面部關(guān)鍵點(或“關(guān)鍵點”)檢測技術(shù)。可以評估一個人的面部表情(以及情緒)的面部重要區(qū)域被稱為面部關(guān)鍵點。它們對于開發(fā)實時應(yīng)用程序以檢測困倦、評估生物特征和讀取人們的情緒至關(guān)重要。

        2) 虛擬現(xiàn)實和增強現(xiàn)實 (AR)幾個流行的智能手機應(yīng)用程序中使用了面部關(guān)鍵點識別。Instagram、Snapchat 和 LINE 上的面部過濾器就是一些眾所周知的例子。AR軟件可以通過識別用戶面部關(guān)鍵點,實時將圖片濾鏡正確疊加在用戶面部上。

        如果你是游戲或應(yīng)用程序設(shè)計師,如果用戶專注于將東西放置在靠近地板或桌子角落的地方,該算法的性能會好得多。由于這種架構(gòu),算法將始終在錨點附近發(fā)現(xiàn)足夠多的關(guān)鍵點。3)Snap pay(無現(xiàn)金支付)

        盡管在大多數(shù)國家/地區(qū)尚無法使用,但目前中國的大量零售商已接受面部識別支付。SnapPay 還宣布于 2019 年 10 月 16 日在北美推出面部識別支付技術(shù)。所有新興國家都正在引入這種支付方式。4) 帶面鎖的防盜門安全門或門是該技術(shù)的另一個應(yīng)用。面部識別技術(shù)可用于允許或拒絕進入你的公寓大樓、你公司的大堂,甚至火車站的檢票口。雖然這項技術(shù)在其他國家沒有廣泛使用。


        聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報。

        發(fā)表評論

        0條評論,0人參與

        請輸入評論內(nèi)容...

        請輸入評論/評論長度6~500個字

        您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

        暫無評論

        暫無評論

          人工智能 獵頭職位 更多
          掃碼關(guān)注公眾號
          OFweek人工智能網(wǎng)
          獲取更多精彩內(nèi)容
          文章糾錯
          x
          *文字標(biāo)題:
          *糾錯內(nèi)容:
          聯(lián)系郵箱:
          *驗 證 碼:

          粵公網(wǎng)安備 44030502002758號

          主站蜘蛛池模板: 亚洲天堂va| 财经| 国产无套内射又大又猛又粗又爽| 太康县| 91人人操| 欧美日韩xxx| 国产精品制度丝袜电影| 国精产品乱码一区一区三区四区| 岛国精品| 久久精品欧美一区二区三区麻豆| 灵丘县| 岛国无码av| 91视频大全| 亚洲无码人妻| 亚洲天堂中文| 阿尔山市| 景东| 嫩草亚洲小泬久久夂| 欧美成人动态图| 舟山市| 色婷久久| 影音先锋资源| 91一区二区| 18禁久久| 国产av大全| 亚洲国内自拍| 欧美午夜福利| 潍坊市| 体育| 欧美高清性| 91视频免费观看网站| 上虞市| www.成人| 新津县| 成人av中文字幕在线播放 | 成人自拍中文字幕| 91制片厂天美传媒网站进入| 国产VA网站| 一区777| 人妻少妇精品| 自治县|