欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
使用OpenCV內置深度學(xué)習人臉模塊,幾行代碼輕松完成人臉檢測和識別

作者:馮遠滔(OpenCV China),王成瑞(北京郵電大學(xué)),鐘瑤瑤(北京郵電大學(xué))

    最新發(fā)布的OpenCV 4.5.4版本收錄了一個(gè)基于深度學(xué)習神經(jīng)網(wǎng)絡(luò )的人臉模塊(以下稱(chēng)“OpenCV DNN Face”),包括人臉檢測(使用模型YuNet,由OpenCV China團隊貢獻)和人臉識別(使用模型SFace,由北京郵電大學(xué)鄧偉洪教授課題組貢獻)。

    使用OpenCV DNN Face的API,只需幾行代碼便可以完成整個(gè)人臉檢測和人臉識別處理,極大的方便了開(kāi)發(fā)。

# 人臉檢測
img = cv.imread('path/to/image')
faceDetector = cv.FaceDetectorYN.create('/path/to/model''', img.shape[:2])
faces = faceDetector.detect(image)
# 人臉識別
recognizer = cv.FaceRecognizerSF.create(recog_model_path, '' )
aligned_face = recognizer.alignCrop(img, faces[1][0])
feature = recognizer.feature(aligned_face)
cosine_score = recognizer.match(feature1, feature2, 0)

    在相應的數據集上對OpenCV DNN Face的兩個(gè)模型分別進(jìn)行測試:

  • 人臉檢測模型YuNet在WIDER Face數據集的驗證集中達到了0.856(AP_easy),0.842(AP_medium),0.727(AP_hard);

  • 人臉識別模型SFace在LFW數據集上達到了99.60%的準確率 (https://docs.opencv.org/master/d0/dd4/tutorial_dnn_face.html中有更詳細的測試結果,以及此人臉模塊的一些使用說(shuō)明)。

     根據OpenCV最新公開(kāi)的OpenCV Zoohttps://github.com/opencv/opencv_zoo的基準測試結果:

  • 當輸入圖像尺寸為160x120時(shí),YuNet在i7-5930K@3.50GHz上達到689FPS,在樹(shù)莓派4B上可達160FPS;

  • SFace在輸入圖像尺寸為112x112,同樣的平臺下分別為115FPS和10FPS。

    YuNet僅為337K,SFace為37MB,二者均為輕量模型,非常適合移動(dòng)端應用。

OpenCV DNN Face的實(shí)現代碼:

https://github.com/opencv/opencv/tree/master/modules/objdetect

C++和Python的例子face_detect和face_match:

https://github.com/opencv/opencv/tree/master/samples/dnn

    下面筆者分別介紹一下OpenCV DNN Face中的人臉檢測和人臉識別。

OpenCV基于深度學(xué)習的人臉檢測FaceDetectorYN

    人臉檢測是返回一張圖像中人臉的位置(x1, y1)和大小(w, h),如下圖所示(原圖片來(lái)自于WIDER Face數據集)。

    YuNet是廣受好評的人臉檢測庫libfacedetection所使用的模型。它的網(wǎng)絡(luò )結構設計參考了經(jīng)典的SSD[1]以及MobileNet[2],其結構示意圖可以在

https://netron.app/?url=https://raw.githubusercontent.com/ShiqiYu/libfacedetection.train/master/tasks/task1/onnx/yunet.onnx查看。

    YuNet是基于anchor的人臉檢測器,分別在4種尺度的特征圖上生成正方形anchor,可檢測的最小人臉是10x10,最大人臉是256x256。參考MobileNet,我們使用了Depth-wise卷積代替部分卷積,從而減少模型參數和模型體積。我們使用人臉檢測數據集WIDER Face[3]作為訓練和測試數據集,使用EIoU損失函數[4]作為訓練YuNet的損失函數,從而提高對人臉的定位能力。除了人臉的定位之外,我們還額外標注了人臉的5個(gè)關(guān)鍵點(diǎn)(左右眼,鼻尖,左右嘴角),為模型增加了關(guān)鍵點(diǎn)檢測的多任務(wù)能力。

    上圖展示了FaceDetectorYN的使用流程。如果輸入圖像的尺寸是一致的,例如視頻輸入流,那么實(shí)例化FaceDetectorYN時(shí)指定尺寸(width, height),即可使用detect()方法檢測人臉。如果輸入圖像的尺寸不一致,例如網(wǎng)上搜集的圖片,那么實(shí)例化FaceDetectorYN時(shí)可任意指定尺寸,在使用detect()方法前需要調用setInputSize()方法先指定正確的輸入圖像尺寸。

C++下人臉檢測API(FaceDetectorYN類(lèi))的使用方式:

 1// 第一步:導入相關(guān)頭文件
2#include <opencv2/imgproc.hpp> // cv::imread
3#include <opencv2/objdetect.hpp>  // cv::FaceDetectorYN & cv::FaceRecognizerSF
4using namespace cv;
5
6int main()
7
{
8// 第二步:讀取圖像
9Mat img = imread('path/to/image');
10// 第三步:初始化FaceDetectorYN
11Ptr<FaceDetectorYN> faceDetector = FaceDetectorYN::create(modelPath, '', img.size());
12// 第四步:檢測人臉并將結果保存到一個(gè)Mat中
13Mat faces;
14faceDetector->detect(image, faces);
15// faces是一個(gè)nx15的二維Mat,每一行分別是:
16// [x1, y1, w, h, x_re, y_re, x_le, y_le, x_nt, y_nt, x_rcm, y_rcm, x_lcm, y_lcm, score]
17// 其中,x1, y1是人臉框左上角坐標,w和h分別是人臉框的寬和高;{x, y}_{re, le, nt, rcm, lcm}分別是人臉右眼瞳孔、左眼瞳孔、鼻尖、右嘴角和左嘴角的坐標;score是該人臉的得分。
18}

Python下人臉檢測API的使用方式:

1import numpy as np # 請在import cv2前先import numpy以避免一些問(wèn)題
2import cv2 as cv
3
4img = cv.imread('path/to/image')
5faceDetector = cv.FaceDetectorYN.create('/path/to/model''', img.shape[:2])
6
7faces = faceDetector.detect(image)
8# 如果沒(méi)有檢測出人臉,則faces為NoneType而非一個(gè)空的numpy數組。這是由于OpenCV的Python bindings導致的。
9# 如果檢測出人臉,則faces為一個(gè)len=2的Tuple,其中faces[1]為nx15的二維numpy數組(排列方式同上)。

OpenCV基于深度學(xué)習的人臉識別FaceRecognizerSF

    人臉識別是利用人的臉部特征信息進(jìn)行身份鑒別的技術(shù)。廣義的人臉識別包括人臉圖像采集與檢測、人臉圖像預處理、人臉特征提取、特征比對與分類(lèi)等一系列技術(shù)。

人臉預處理

    將檢測到的人臉輸入人臉識別模型前,通常需要先進(jìn)行人臉對齊。人臉對齊利用檢測部分提取到的關(guān)鍵點(diǎn),與給定關(guān)鍵點(diǎn)之間計算變換矩陣,使用仿射變換對人臉進(jìn)行變換,以減輕人臉尺度、姿態(tài)等對人臉特征提取的性能的影響。

C++下人臉對齊部分API(FaceRecognizerSF類(lèi))的使用方式:

// 初始化FaceRecognizerSF
Ptr<FaceRecognizerSF> faceRecognizer = FaceRecognizerSF::create(recog_model_path, '');

// 在人臉檢測部分的基礎上, 對齊檢測到的首個(gè)人臉(faces.row(0)), 保存至aligned_face。
Mat aligned_face;
faceRecognizer->alignCrop(image, faces.row(0), aligned_face);

Python下人臉對齊部分API的使用方式:

# 初始化FaceRecognizerSF
recognizer = cv.FaceRecognizerSF.create(recog_model_path, '' )

# 在人臉檢測部分的基礎上, 對齊檢測到的首個(gè)人臉(faces[1][0]), 保存至aligned_face。
aligned_face = recognizer.alignCrop(img, faces[1][0])

人臉特征提取

    狹義的人臉識別模型僅作用于人臉特征提取過(guò)程。近年來(lái),深度學(xué)習促進(jìn)了人臉識別的發(fā)展,深度人臉識別模型也因其優(yōu)越的性能得到了廣泛應用[5]。深度人臉識別模型的訓練離不開(kāi)大規模訓練集、高效的神經(jīng)網(wǎng)絡(luò )結構和訓練損失函數。深度人臉識別模型在經(jīng)過(guò)良好訓練后,可以將預處理過(guò)的人臉圖像轉換為深度人臉特征用于后續的特征匹配。

    OpenCV DNN Face所集成的深度人臉識別模型是由超球面損失函數監督、在百萬(wàn)名人數據集上訓練的MobileNet輕量模型。將百萬(wàn)名人數據集[6],在使用基于元學(xué)習的自適應標簽噪聲清洗算法[7]進(jìn)行數據清洗后,用于訓練人臉識別模型,提高了人臉識別模型的性能。

    模型結構使用了MobileNet[8],其利用深度可分離卷積減小了模型體積與計算量,是一種適用于移動(dòng)設備的輕量級深度卷積神經(jīng)網(wǎng)絡(luò )。訓練損失函數使用了SFace[9], SFace在超球面上施加由S型曲線(xiàn)控制的類(lèi)內和類(lèi)間約束以有裕度地減小類(lèi)內距離而增大類(lèi)間距離,從而訓練出對訓練噪聲魯棒的深度人臉模型,提高了人臉識別模型的性能。

    人臉識別模型以尺寸為3*112*112的人臉圖像對齊作為輸入,輸出維度為128維的人臉特征。

C++下特征提取部分API(FaceRecognizerSF類(lèi))的使用方式:

// 在上文的基礎上, 獲取對齊人臉的特征feature。
Mat feature;
faceRecognizer->feature(aligned_face, feature);

Python下特征提取部分API的使用方式:

# 在上文的基礎上, 獲取對齊人臉的特征feature。
feature = recognizer.feature(aligned_face)

人臉特征比對

    對于不同人臉圖像的人臉特征,經(jīng)過(guò)人臉特征比對求出特征之間的距離,以確定不同人臉圖像是否屬于同一身份。當使用consine距離時(shí),值越大,則人臉越相似身份越接近;當使用normL2距離時(shí),值越小,則人臉越相似身份越接近。

C++下特征比對部分API(FaceRecognizerSF類(lèi))的使用方式:

// 在上文的基礎上, 比對兩張人臉的特征feature1,feature2以確認身份。
// 使用consine距離作為指標

double cos_score = faceRecognizer->match(feature1, feature2, FaceRecognizerSF::DisType::FR_COSINE);
if(cos_score >= cosine_similar_thresh) { 
    // the same identity 
else {
    // different identities


// 使用normL2距離作為指標
double L2_score = faceRecognizer->match(feature1, feature2, FaceRecognizerSF::DisType::FR_NORM_L2);
if(L2_score <= l2norm_similar_thresh) {
    // the same identity 
else {
    // different identities

Python下特征比對部分API的使用方式:

# 在上文的基礎上, 比對兩張人臉的特征feature1,feature2以確認身份。
# 使用consine距離作為指標

cosine_similarity_threshold = 0.363
cosine_score = recognizer.match(feature1, feature2, 0) 
if cosine_score >= cosine_similarity_threshold: 
    # 'the same identity'
else:
    # 'different identities' 

# 使用normL2距離作為指標
l2_similarity_threshold = 1.128
l2_score = recognizer.match(feature1, feature2, 1)
if l2_score <= l2_similarity_threshold: 
    # 'the same identity'
else:
    # 'different identities' 

參考文獻

[1] Liu, Wei, Dragomir, Anguelov, Dumitru, Erhan, Christian, Szegedy, Scott, Reed, Cheng-Yang, Fu, and Alexander C, Berg. 'Ssd: Single shot multibox detector.' . In ECCV, 2016.

[2] Howard, Andrew G, Menglong, Zhu, Bo, Chen, Dmitry, Kalenichenko, Weijun, Wang, Tobias, Weyand, Marco, Andreetto, and Hartwig, Adam. 'Mobilenets: Efficient convolutional neural networks for mobile vision applications'. In arXiv:1704.04861, 2017.

[3] Yang, Shuo, Ping, Luo, Chen Change, Loy, and Xiaoou, Tang. 'WIDER FACE: A Face Detection Benchmark.' . In CVPR, 2016.

[4] Peng, Hanyang, and Shiqi, Yu. 'A Systematic IoU-Related Method: Beyond Simplified Regression for Better Localization'. In TIP, 2021.

[5] Mei Wang and Weihong Deng. Deep face recognition: A survey. In Neurocomputing, 2021.

[6] Yandong Guo, Lei Zhang, Yuxiao Hu, Xiaodong He, and Jianfeng Gao. Ms-celeb-1m: A dataset and benchmark for large-scale face recognition. In ECCV, 2016.

[7] Yaobin Zhang, Weihong Deng, Yaoyao Zhong, Jiani Hu, Xian Li, Dongyue Zhao, and Dongchao Wen. Adaptive Label Noise Cleaning with Meta-Supervision for Deep Face Recognition. In ICCV, 2021.

[8] Andrew G. Howard, Menglong Zhu, Bo Chen, Dmitry Kalenichenko, Weijun Wang, Tobias Weyand, Marco Andreetto and Hartwig Adam. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications. In arXiv:1704.04861, 2017.

[9] Yaoyao Zhong, Weihong Deng, Jiani Hu, Dongyue Zhao, Xian Li, and Dongchao Wen. SFace: sigmoid-constrained hypersphere loss for robust face recognition. In TIP, 2021.


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
平安夜,Python送你一頂圣誕帽 @微信官方
超有趣!手把手教你使用樹(shù)莓派實(shí)現實(shí)時(shí)人臉檢測
人工智能-OpenCV Python實(shí)現人臉識別(人臉檢測)
使用OpenCV Python進(jìn)行人臉識別
使用opencv進(jìn)行實(shí)時(shí)人臉 眼睛 微笑檢測
使用 OpenCV 進(jìn)行面部和眼睛檢測
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久