亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于TensorFlow的人臉識別系統(tǒng)設(shè)計

        2021-09-10 17:02:12趙澤軍蘭雁
        客聯(lián) 2021年2期
        關(guān)鍵詞:人臉識別深度學(xué)習(xí)

        趙澤軍 蘭雁

        【摘 要】近幾年深度學(xué)習(xí)大火,而人臉識別又是深度學(xué)習(xí)的典型代表。TensorFlow是深度學(xué)習(xí)的一個平臺,主要通過搭建卷積神經(jīng)網(wǎng)絡(luò)系統(tǒng)來對圖片樣本進(jìn)行特征識別、分類訓(xùn)練,進(jìn)而達(dá)到人臉的識別。本系統(tǒng)調(diào)用了OpenCV計算機(jī)視覺庫中的功能函數(shù),通過USB攝像頭實(shí)時截取人臉圖像,然后進(jìn)行Haar特征識別以及Adaboost分類器的分類訓(xùn)練,最后打開攝像頭,將捕捉到的人臉與訓(xùn)練好的圖片進(jìn)行對比,從而達(dá)到人臉識別的效果。

        【關(guān)鍵詞】深度學(xué)習(xí);人臉識別;卷積神經(jīng)網(wǎng)絡(luò);OpenCV;TensorFlow

        人臉識別本質(zhì)是用一個幾何特征矢量來表示人臉,并根據(jù)模式識別中層次聚類的思想設(shè)計分類器,達(dá)到識別目的。調(diào)用OpenCV庫中的功能函數(shù)來截取視頻中的圖像幀數(shù)據(jù),并進(jìn)行一系列預(yù)處理,完成圖片的灰度化以及統(tǒng)一圖片的大小和格式,然后再將這些圖片輸入到搭建好的卷積神經(jīng)網(wǎng)絡(luò)中進(jìn)行訓(xùn)練,訓(xùn)練完成后將生成一個訓(xùn)練模型,此模型便是人臉識別時的評估標(biāo)準(zhǔn)。

        一、模塊功能及結(jié)構(gòu)劃分

        系統(tǒng)共分為四個部分,分別為:實(shí)時人臉截取模塊、圖片預(yù)處理模塊、CNN搭建和訓(xùn)練模塊以及人臉檢測模塊。

        實(shí)時人臉截取模塊主要負(fù)責(zé)采集人臉圖片。管理員輸入要采集的人員姓名,后臺生成以該姓名為名稱的文件夾,然后使用USB攝像頭獲取視頻數(shù)據(jù),利用OpenCV的功能函數(shù)定位人臉部分,截取一幀的圖像數(shù)據(jù)保存到該文件夾下,當(dāng)采集數(shù)量達(dá)到設(shè)定的數(shù)量后,攝像頭關(guān)閉。

        圖片預(yù)處理模塊主要負(fù)責(zé)圖片灰度化、像素歸一化、圖片大小規(guī)格化以及為每一類圖片夾指定一個唯一的標(biāo)簽,便于后面的訓(xùn)練。

        CNN搭建和訓(xùn)練模塊主要完成搭建神經(jīng)網(wǎng)絡(luò)、劃分訓(xùn)練集和驗(yàn)證集、深度學(xué)習(xí)訓(xùn)練以及訓(xùn)練模型的保存,有了訓(xùn)練模型后就能進(jìn)行人臉識別了。

        人臉檢測模塊主要調(diào)用攝像頭來獲取人臉圖片,讀入之前訓(xùn)練成熟的網(wǎng)路模型來進(jìn)行人臉識別。

        二、項(xiàng)目原理

        (一)人臉識別分類器

        1.Haar特征

        Haar特征分為三類:邊緣特征、線性特征、中心特征和對角線特征,組合成特征模板。特征模板內(nèi)有白色和黑色兩種矩形,并定義該模板的特征值為白色矩形像素和減去黑色矩形像素和(在opencv實(shí)現(xiàn)中為黑色-白色)。Haar特征值反映了圖像的灰度變化情況。例如:臉部的一些特征能由矩形特征簡單的描述,如:眼睛要比臉頰顏色要深,鼻梁兩側(cè)比鼻梁顏色要深,嘴巴比周圍顏色要深等。但矩形特征只對一些簡單的圖形結(jié)構(gòu),如邊緣、線段較敏感,所以只能描述特定走向(水平、垂直、對角)的結(jié)構(gòu)。

        2.矩形特征個數(shù)的計算

        在實(shí)際中,Haar特征可以在檢測窗口中由放大+平移產(chǎn)生一系列子特征,但是白:黑區(qū)域面積比始終保持不變。那么這些通過放大+平移的獲得的子特征到底總共有多少個?Rainer Lienhart在他的論文中給出了完美的解釋:假設(shè)檢測窗口大小為W*H,矩形特征大小為w*h,X和Y為表示矩形特征在水平和垂直方向的能放大的最大比例系數(shù):。在檢測窗口Window中,一般矩形特征(upright rectangle)的數(shù)量為:

        3.積分圖

        當(dāng)有了大量的矩形特征用于訓(xùn)練和檢測時,接下來的問題是如何計算Haar特征值。Viola等人提出了利用積分圖求特征值的方法。一個區(qū)域的像素值,可以利用該區(qū)域的端點(diǎn)的積分圖來計算。在積分圖中,ii(1)表示區(qū)域A的像素值,ii(2)表示區(qū)域A+B的像素值,ii(3)表示區(qū)域A+C的像素值,ii(4) 表示區(qū)域A+B+C+D的像素值。而:

        區(qū)域D的像素值=區(qū)域A+B+C+D的像素值+區(qū)域A的像素值-區(qū)域A+B的像素值-區(qū)域A+C的像素值.

        即:

        區(qū)域D的像素值=ii(4) + ii(1) - ii(2) - ii(3)

        由此,可用積分圖快速得到一個區(qū)域的像素值。

        4.Adaboost分類器

        在確定了訓(xùn)練子窗口中的矩形特征數(shù)量和特征值后,需要對每一個特征,訓(xùn)練一個弱分類器。Adaboost算法基本原理就是將多個弱分類器(弱分類器一般選用單層決策樹)進(jìn)行合理的結(jié)合,使其成為一個強(qiáng)分類器。具體說來,整個Adaboost迭代算法分為3步:

        (1)初始化訓(xùn)練數(shù)據(jù)的權(quán)值分布。如果有N個樣本,則每一個訓(xùn)練樣本最開始時都被賦予相同的權(quán)重:1/N。

        (2)訓(xùn)練弱分類器。具體訓(xùn)練過程中,如果某個樣本點(diǎn)已經(jīng)被準(zhǔn)確地分類,那么在構(gòu)造下一個訓(xùn)練集中,它的權(quán)重就被降低;相反,如果某個樣本點(diǎn)沒有被準(zhǔn)確地分類,那么它的權(quán)重就得到提高。然后,權(quán)重更新過的樣本集被用于訓(xùn)練下一個分類器,整個訓(xùn)練過程如此迭代地進(jìn)行下去。

        (3)將各個訓(xùn)練得到的弱分類器組合成強(qiáng)分類器。各個弱分類器的訓(xùn)練過程結(jié)束后,加大分類誤差率小的弱分類器的權(quán)重,使其在最終的分類函數(shù)中起著較大的決定作用,而降低分類誤差率大的弱分類器的權(quán)重,使其在最終的分類函數(shù)中起著較小的決定作用。換言之,誤差率低的弱分類器在最終分類器中占的權(quán)重較大,否則較小。

        (二)卷積神經(jīng)網(wǎng)絡(luò)

        1.輸入層

        在處理圖像的卷積神經(jīng)網(wǎng)絡(luò)中,它一般代表了一張圖片的像素矩陣。通常為(length * width *channel)。 三維矩陣的深度代表了圖像的彩色通道(channel)。比如黑白圖片的深度為1,而在RGB色彩模式下,圖像的深度為3。從輸入層開始,卷積神經(jīng)網(wǎng)絡(luò)通過不同的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)將上一層的三維矩陣轉(zhuǎn)化為下一層的三維矩陣,直到最后的全連接層。

        2.卷積層

        卷積層主要進(jìn)行的操作是對圖片進(jìn)行特征提取,隨著卷積層的深入它提取到的特征就越高級。對于一張輸入圖片,將其轉(zhuǎn)化為矩陣,矩陣的元素為對應(yīng)的像素值,對于一張大小為5×5的圖像,使用3×3的感受野進(jìn)行移動長度為1的非零填充卷積,可以得到大小為3×3的特征平面,此后卷積核會先向右移動,再向下移動,直到最后和每一個值完成了運(yùn)算。每當(dāng)圖像進(jìn)行了一次卷積之后,它的輸出都會發(fā)生對應(yīng)的改變。若輸入為5x5,在尺寸為3x3的卷積核和步長為1的作用下,最后得到的輸出圖像特征的尺寸不再是5,而是5-3+1=3。所以經(jīng)過了卷積層之后,輸出尺寸會發(fā)生相應(yīng)的變化。

        3.池化層

        池化層的作用是把卷積層得到的特征平面的數(shù)據(jù)量降低。池化之后的圖像大小雖然發(fā)生了變化,但是圖像的大致輪廓并沒有丟失,而且生成的平面作為下次卷積的輸入,在卷積核不變的情況下相當(dāng)于增加了卷積核對于圖片信息的提取能力。池化有平均值池化和最大值池化,最大池化層(max pooling)使用最大值操作,是被使用得最多的池化層結(jié)構(gòu)。

        三、實(shí)現(xiàn)過程

        (一)gain_face.py(截取人臉圖像)

        該腳本主要運(yùn)用OpenCV來獲取人臉圖像,圖片來源可以是一段保存好的視頻,也可以通過USB攝像頭實(shí)時捕捉。若通過攝像頭捕捉人臉,則需預(yù)先設(shè)定圖片捕捉數(shù)量,詢問用戶姓名。cv2.CascadeClassifier("E:\haarcascade_frontalface_alt2.xml")告訴OpenCV使用人臉識別分類器(給定haarcascade_frontalface_alt2.xml的路徑),然后循環(huán)從視頻里讀取一幀數(shù)據(jù),調(diào)用cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)將當(dāng)前幀轉(zhuǎn)換為灰度圖像,圖像灰度化后可以降低計算量,便于后面計算特征,然后調(diào)用classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=2, minSize=(32, 32))進(jìn)行人臉檢測,其中scaleFactor=1.2是圖像縮放比例, minNeighbors=2為兩個檢測有效點(diǎn),這樣OpenCV截取的人臉灰度圖將會保存到以各姓名命名的文件夾下,當(dāng)達(dá)到我們設(shè)定的圖片數(shù)量后,程序會退出循環(huán)并銷毀攝像頭。

        (二)load_dataset.py(圖像數(shù)據(jù)預(yù)處理)

        上一步我們得到了不同的人的人臉灰度圖,這一步就是來處理這些灰度圖像。過程中調(diào)用了cv2.resize(constant_image,(height,width))來統(tǒng)一圖片大小,將所有圖片的規(guī)格統(tǒng)一成了64x64??紤]兩個數(shù)組,一個是數(shù)據(jù)集,另一個是標(biāo)注集,數(shù)據(jù)集存放處理過后的圖像,標(biāo)記集存放圖像路徑,最后為每一類圖像(每一個人)指定一個唯一的標(biāo)簽,便于后面訓(xùn)練。

        (三)face_train.py(模型訓(xùn)練)

        1.準(zhǔn)備訓(xùn)練數(shù)據(jù)

        首先導(dǎo)入訓(xùn)練需要的庫TensorFlow和Keras,TensorFlow的版本我們選擇1.13.1,然后定義一個數(shù)據(jù)加載類,用于準(zhǔn)備訓(xùn)練數(shù)據(jù),在這個類里我們設(shè)置了訓(xùn)練集、驗(yàn)證集和測試集, 然后導(dǎo)入load_dataset.py的方法,將上一步處理過的圖片加載到這三個集中。這一步的代碼為train_images, valid_images, train_labels,valid_labels=train_test_split(images,labels,test_size=0.3,random_state=random.randint(0, 100)),然后根據(jù)keras庫要求的維度順序重組訓(xùn)練數(shù)據(jù)集,為減少計算量,我們將像素進(jìn)行歸一化處理,代碼為:train_images /= 255

        valid_images /= 255

        test_images /= 255

        2.搭建CNN網(wǎng)絡(luò)模型

        到現(xiàn)在為止,訓(xùn)練數(shù)據(jù)就準(zhǔn)備完成了。接下來開始搭建CNN網(wǎng)絡(luò)模型,我們用model = Sequential()構(gòu)建一個空的網(wǎng)絡(luò)模型,它是一個線性堆疊模型,各神經(jīng)網(wǎng)絡(luò)層會被順序添加,然后順序地添加CNN網(wǎng)絡(luò)需要的各層,部分代碼為:

        model.add(Convolution2D(32, 3, 3, border_mode='same',

        input_shape=dataset.input_shape))? # 1 2維卷積層: 32個過濾器,每個像素是3x3

        model.add(Activation('relu'))? # 2 激活函數(shù)層

        model.add(MaxPooling2D(pool_size=(2, 2)))? # 3 池化層

        model.add(Dropout(0.25))? # 4 Dropout層

        model.add(Convolution2D(64, 3, 3, border_mode='same'))? # 5 2維卷積層

        model.add(Activation('relu'))? # 6 激活函數(shù)層

        model.add(Flatten())? # 7 Flatten層

        model.add(Dense(512))? # 8 全連接層

        model.add(Activation('relu'))? # 9 激活函數(shù)層

        model.add(Dropout(0.5))? # 10 Dropout層

        model.add(Dense(nb_classes))? # 11 全連接層

        model.add(Activation('softmax'))? # 12 分類層 輸出最終結(jié)果

        3.開始訓(xùn)練

        模型搭建后,接下來就開始訓(xùn)練了。定義一個訓(xùn)練函數(shù)def train(),采用SGD+momentum的優(yōu)化器進(jìn)行訓(xùn)練,生成一個優(yōu)化器對象,這里代碼為sgd = SGD(lr=0.01,decay=1e-6,momentum=0.9,nesterov=True),用model.compile(loss='categorical_crossentropy',optimizer=sgd,metrics=['accuracy'])完成實(shí)際的模型配置工作,然后用model.fit_generator()構(gòu)建生成器訓(xùn)練模型,訓(xùn)練完成后將會生成一個aggregate.face.model.h5文件,該文件就是后面人臉識別時的判決模型。

        (四)face_recongnition.py(識別人臉)

        現(xiàn)在我們已經(jīng)有了訓(xùn)練成熟的模型,在這個腳本里,首先導(dǎo)入aggregate.face.model.h5模型,然后利用OpenCV打開攝像頭捕捉人臉,在一系列灰度處理、像素處理后,將獲得的實(shí)時人臉圖片與導(dǎo)入的模型進(jìn)行對比,最后給出文字提示這是誰。部分代碼為:

        image = frame[y: y + h, x: x + w]

        faceID = model.face_predict(image) # 截取臉部圖像提交給模型

        cv2.putText() # 給出文字提示

        四、結(jié)語

        本系統(tǒng)設(shè)計源于生活,有很好的實(shí)用性。項(xiàng)目的重點(diǎn)有二,一是圖像數(shù)據(jù)的處理,二是CNN模型的訓(xùn)練。在數(shù)據(jù)處理中,必須將人臉圖像灰度化,否則計算強(qiáng)度很大,效率將大幅度降低;圖片的規(guī)格要統(tǒng)一,像素要?dú)w一化處理,這樣才能最大化計算效率,訓(xùn)練精度也會提高。模型訓(xùn)練是此項(xiàng)目的重中之重,由于項(xiàng)目初衷在于實(shí)現(xiàn)任意數(shù)量人臉的識別,所以這里設(shè)定了多層卷積層和池化層,目的是提高訓(xùn)練精度。訓(xùn)練過程中,訓(xùn)練數(shù)量是一個值得考慮的因素,太少則達(dá)不到訓(xùn)練效果,太多則會出現(xiàn)訓(xùn)練過擬合現(xiàn)象,但只要經(jīng)過多次測試,找到合適的訓(xùn)練數(shù)量,就能達(dá)到一個較為理想的訓(xùn)練效果。

        【參考文獻(xiàn)】

        [1]許佳勝,李欣,孫宏凱. 人臉識別技術(shù)概述[J].科技風(fēng).2020(04)

        [2]黨永成. 人臉識別技術(shù)綜述及分析[J].電子技術(shù)與軟件工程.2018(03)

        [3]景晨凱,宋濤,莊雷. 基于深度卷積神經(jīng)網(wǎng)絡(luò)的人臉識別技術(shù)綜述[J].計算機(jī)應(yīng)用與軟件.2018(01)

        [4]張延安,王宏玉,徐方. 基于深度卷積神經(jīng)網(wǎng)絡(luò)與中心損失的人臉識別[J].科學(xué)技術(shù)與工程.2017(35)

        [5]陳華官. 基于端到端深度卷積神經(jīng)網(wǎng)絡(luò)的人臉識別算法[D].浙江大學(xué).2017

        [6]黃發(fā)揚(yáng). 淺談基于神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)算法的人臉識別技術(shù)[J].智能建 筑.2018(10)

        [7]張廣才,何繼榮,高文朋. 基于深度學(xué)習(xí)的人臉識別研究[J].無線互聯(lián)科技.2019(19)

        [8]徐政超. 基于深度學(xué)習(xí)的人臉識別技術(shù)研究[J].信息系統(tǒng)工程.2019(10).

        猜你喜歡
        人臉識別深度學(xué)習(xí)
        人臉識別 等
        揭開人臉識別的神秘面紗
        基于(2D)2PCA-LBP 的人臉識別方法的研究
        電子制作(2017年17期)2017-12-18 06:40:55
        人臉識別在高校安全防范中的應(yīng)用
        電子制作(2017年1期)2017-05-17 03:54:46
        有體驗(yàn)的學(xué)習(xí)才是有意義的學(xué)習(xí)
        電子商務(wù)中基于深度學(xué)習(xí)的虛假交易識別研究
        MOOC與翻轉(zhuǎn)課堂融合的深度學(xué)習(xí)場域建構(gòu)
        大數(shù)據(jù)技術(shù)在反恐怖主義中的應(yīng)用展望
        深度學(xué)習(xí)算法應(yīng)用于巖石圖像處理的可行性研究
        基于深度卷積網(wǎng)絡(luò)的人臉年齡分析算法與實(shí)現(xiàn)
        軟件工程(2016年8期)2016-10-25 15:47:34
        久久久麻豆精亚洲av麻花 | 醉酒后少妇被疯狂内射视频| 日韩AV无码一区二区三| 无码中文字幕专区一二三| 日韩一区二区中文天堂| 无码精品国产一区二区三区免费| 亚洲看片lutube在线观看| 亚洲91av| 日韩最新av一区二区| 午夜av天堂精品一区| 国产成人综合亚洲看片| 最好看2019高清中文字幕视频| 爱v天堂在线观看| 久久精品女同亚洲女同| 免费视频成人片在线观看| 亚洲国产精品无码久久电影| 精品久久久亚洲中文字幕| 日本一二三区免费在线| 中文字幕久久熟女蜜桃| 免费一区二区三区在线视频| 人妻一区二区三区免费看| 日韩人妖视频一区二区| 末发育娇小性色xxxx| 99精品热6080yy久久| 国产精品第一区亚洲精品| 中文无码人妻有码人妻中文字幕| 中文字幕在线观看亚洲日韩 | 日本va中文字幕亚洲久伊人| 亚洲av无码一区二区三区天堂古代| 无码人妻一区二区三区在线视频| 亚洲熟女国产熟女二区三区| 在线日本看片免费人成视久网| 免费观看激色视频网站| 免费国产99久久久香蕉| 丝袜美腿亚洲综合在线播放| 无码人妻aⅴ一区二区三区| 亚洲av无码av在线播放| 杨幂二区三区免费视频| 先锋影音人妻啪啪va资源网站| 无码人妻丰满熟妇区毛片| 国产精彩刺激对白视频|