www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 廠商動(dòng)態(tài) > 米爾電子
[導(dǎo)讀]Facenet-PyTorch 是一個(gè)基于 PyTorch 框架實(shí)現(xiàn)的人臉識(shí)別庫(kù)。它提供了 FaceNet 模型的 PyTorch 實(shí)現(xiàn),可以用于訓(xùn)練自己的人臉識(shí)別模型。FaceNet 是由 Google 研究人員提出的一種深度學(xué)習(xí)模型,專門用于人臉識(shí)別任務(wù)。

本文將介紹基于米爾電子MYD-LT527開發(fā)板(米爾基于全志 T527開發(fā)板)的FacenetPytorch人臉識(shí)別方案測(cè)試。

一、深度神經(jīng)網(wǎng)絡(luò)

1.簡(jiǎn)介

Facenet-PyTorch 是一個(gè)基于 PyTorch 框架實(shí)現(xiàn)的人臉識(shí)別庫(kù)。它提供了 FaceNet 模型的 PyTorch 實(shí)現(xiàn),可以用于訓(xùn)練自己的人臉識(shí)別模型。FaceNet 是由 Google 研究人員提出的一種深度學(xué)習(xí)模型,專門用于人臉識(shí)別任務(wù)。

在利用PyTorch神經(jīng)網(wǎng)絡(luò)算法進(jìn)行人臉圖像對(duì)比的實(shí)驗(yàn)設(shè)置中,我們專注于對(duì)比環(huán)節(jié),而不涉及實(shí)際項(xiàng)目的完整實(shí)現(xiàn)細(xì)節(jié)。但為了貼近實(shí)際應(yīng)用,我們可以構(gòu)想以下流程:

1)捕捉新人臉圖像:首先,我們使用攝像頭或其他圖像采集設(shè)備捕捉一張新的人臉照片。

2)加載存儲(chǔ)的人臉圖像:接著,從數(shù)據(jù)庫(kù)中加載所有已存儲(chǔ)的人臉圖像。這些圖像是之前采集并存儲(chǔ)的,用于與新捕捉到的人臉照片進(jìn)行對(duì)比。

3)構(gòu)建神經(jīng)網(wǎng)絡(luò)模型:為了實(shí)現(xiàn)對(duì)比功能,我們需要一個(gè)預(yù)先訓(xùn)練好或自定義的神經(jīng)網(wǎng)絡(luò)模型。這個(gè)模型能夠提取人臉圖像中的關(guān)鍵特征,使得相似的圖像在特征空間中具有相近的表示。

4)特征提?。豪蒙窠?jīng)網(wǎng)絡(luò)模型,對(duì)新捕捉到的人臉照片和存儲(chǔ)的每一張人臉圖像進(jìn)行特征提取。這些特征向量將用于后續(xù)的對(duì)比計(jì)算。

5)計(jì)算相似度:采用合適的相似度度量方法(如余弦相似度、歐氏距離等),計(jì)算新照片特征向量與存儲(chǔ)圖像特征向量之間的相似度。

6)確定匹配圖像:根據(jù)相似度計(jì)算結(jié)果,找到與新照片相似度最高的存儲(chǔ)圖像,即認(rèn)為這兩張圖像匹配成功。

7)輸出匹配結(jié)果:最后,輸出匹配成功的圖像信息或相關(guān)標(biāo)識(shí),以完成人臉對(duì)比的實(shí)驗(yàn)任務(wù)。

2.核心組件

MTCNN:Multi-task Cascaded Convolutional Networks,即多任務(wù)級(jí)聯(lián)卷積網(wǎng)絡(luò),專門設(shè)計(jì)用于同時(shí)進(jìn)行人臉檢測(cè)和對(duì)齊。它在處理速度和準(zhǔn)確性上都有出色的表現(xiàn),是當(dāng)前人臉檢測(cè)領(lǐng)域的主流算法之一。

FaceNet:由Google研究人員提出的一種深度學(xué)習(xí)模型,專門用于人臉識(shí)別任務(wù)。FaceNet通過(guò)將人臉圖像映射到一個(gè)高維空間,使得同一個(gè)人的不同圖像在這個(gè)空間中的距離盡可能小,而不同人的圖像距離盡可能大。這種嵌入表示可以直接用于人臉驗(yàn)證、識(shí)別和聚類。

米爾基于全志T527開發(fā)板

3.功能

支持人臉檢測(cè):使用MTCNN算法進(jìn)行人臉檢測(cè),能夠準(zhǔn)確識(shí)別出圖像中的人臉位置。

支持人臉識(shí)別:使用FaceNet算法進(jìn)行人臉識(shí)別,能夠提取人臉特征并進(jìn)行相似度計(jì)算,實(shí)現(xiàn)人臉驗(yàn)證和識(shí)別功能。

二、安裝facenet_pytorch庫(kù)

1.更新系統(tǒng)

更新ubuntu系統(tǒng),詳情查看米爾提供的資料文件

2.更新系統(tǒng)軟件

apt-get update

3.安裝git等支持軟件

sudo apt-get install -y python3-dev python3-pip libopenblas-dev libssl-dev libffi-dev git cmake

4.安裝Pytorch支持工具

# 克隆 PyTorch 源代碼

git clone --recursive https://github.com/pytorch/pytorch

# 進(jìn)入 PyTorch 目錄

cd pytorch

# 安裝 PyTorch (需要根據(jù)你的需求選擇 CUDA 版本,如果不需要 GPU 支持則不需要 --cuda 參數(shù))

pip3 install --no-cache-dir torch -f https://download.pytorch.org/whl/torch_stable.html

# 測(cè)試 PyTorch 安裝

python3 -c "import torch; print(torch.__version__)"

5.安裝facenet_pytorch

pip3 install facenet_pytorch

三、CSDN參考案例

1.代碼實(shí)現(xiàn)

############face_demo.py#############################

import cv2

import torch

from facenet_pytorch import MTCNN, InceptionResnetV1


# 獲得人臉特征向量

def load_known_faces(dstImgPath, mtcnn, resnet):

  aligned = []

  knownImg = cv2.imread(dstImgPath) # 讀取圖片

  face = mtcnn(knownImg) # 使用mtcnn檢測(cè)人臉,返回人臉數(shù)組


  if face is not None:

    aligned.append(face[0])

  aligned = torch.stack(aligned).to(device)

  with torch.no_grad():

    known_faces_emb = resnet(aligned).detach().cpu()

    # 使用ResNet模型獲取人臉對(duì)應(yīng)的特征向量

  print("\n人臉對(duì)應(yīng)的特征向量為:\n", known_faces_emb)

  return known_faces_emb, knownImg

# 計(jì)算人臉特征向量間的歐氏距離,設(shè)置閾值,判斷是否為同一張人臉


def match_faces(faces_emb, known_faces_emb, threshold):

  isExistDst = False

  distance = (known_faces_emb[0] - faces_emb[0]).norm().item()

  print("\n兩張人臉的歐式距離為:%.2f" % distance)

  if (distance < threshold):

    isExistDst = True

  return isExistDst


if __name__ == '__main__':

  # help(MTCNN)

  # help(InceptionResnetV1)

  # 獲取設(shè)備

  device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')

  # mtcnn模型加載設(shè)置網(wǎng)絡(luò)參數(shù),進(jìn)行人臉檢測(cè)

  mtcnn = MTCNN(min_face_size=12, thresholds=[0.2, 0.2, 0.3],

                          keep_all=True, device=device)

  # InceptionResnetV1模型加載用于獲取人臉特征向量

  resnet = InceptionResnetV1(pretrained='vggface2').eval().to(device)


  MatchThreshold = 0.8 # 人臉特征向量匹配閾值設(shè)置


  known_faces_emb, _ = load_known_faces('yz.jpg', mtcnn, resnet) # 已知人物圖

  faces_emb, img = load_known_faces('yz1.jpg', mtcnn, resnet) # 待檢測(cè)人物圖

  isExistDst = match_faces(faces_emb, known_faces_emb, MatchThreshold) # 人臉匹配

  print("設(shè)置的人臉特征向量匹配閾值為:", MatchThreshold)

  if isExistDst:

     boxes, prob, landmarks = mtcnn.detect(img, landmarks=True)

     print('由于歐氏距離小于匹配閾值,故匹配')

else:

    print('由于歐氏距離大于匹配閾值,故不匹配')

此代碼是使用訓(xùn)練后的模型程序進(jìn)行使用,在程序中需要標(biāo)明人臉識(shí)別對(duì)比的圖像。

2.實(shí)踐過(guò)程

第一次運(yùn)行時(shí)系統(tǒng)需要下載預(yù)訓(xùn)練的vggface模型,下載過(guò)程較長(zhǎng),后面就不需要在下載了運(yùn)行會(huì)很快。如圖所示:

3.程序運(yùn)行異常唄終止

運(yùn)行程序,提示killed,系統(tǒng)殺死了本程序的運(yùn)行,經(jīng)過(guò)多方面的測(cè)試,最終發(fā)現(xiàn)是識(shí)別的圖片過(guò)大,使得程序?qū)?nèi)存消耗過(guò)大導(dǎo)致。后將圖片縮小可以正常運(yùn)行了。

以下是對(duì)比圖像和對(duì)比結(jié)果。

gitHub開源代碼

首先下載代碼文件

代碼庫(kù)中,大致的介紹了facenet算法的訓(xùn)練步驟等。

代碼實(shí)現(xiàn)

以下是facenet的python代碼,注意需要更改下面的一條程序"cuda" False,因?yàn)閠527使用的是cpu,芯片到時(shí)自帶gpu但是cuda用不了,因?yàn)閏uda是英偉達(dá)退出的一種計(jì)算機(jī)架構(gòu)。

import matplotlib.pyplot as plt

import numpy as np

import torch

import torch.backends.cudnn as cudnn

from nets.facenet import Facenet as facenet

from utils.utils import preprocess_input, resize_image, show_config

#--------------------------------------------#

# 使用自己訓(xùn)練好的模型預(yù)測(cè)需要修改2個(gè)參數(shù)

# model_path和backbone需要修改!

#--------------------------------------------#

class Facenet(object):

_defaults = {

#--------------------------------------------------------------------------#

# 使用自己訓(xùn)練好的模型進(jìn)行預(yù)測(cè)要修改model_path,指向logs文件夾下的權(quán)值文件

# 訓(xùn)練好后logs文件夾下存在多個(gè)權(quán)值文件,選擇驗(yàn)證集損失較低的即可。

# 驗(yàn)證集損失較低不代表準(zhǔn)確度較高,僅代表該權(quán)值在驗(yàn)證集上泛化性能較好。

#--------------------------------------------------------------------------#

"model_path" : "model_data/facenet_mobilenet.pth",

#--------------------------------------------------------------------------#

# 輸入圖片的大小。

#--------------------------------------------------------------------------#

"input_shape" : [160, 160, 3],

#--------------------------------------------------------------------------#

# 所使用到的主干特征提取網(wǎng)絡(luò)

#--------------------------------------------------------------------------#

"backbone" : "mobilenet",

#-------------------------------------------#

# 是否進(jìn)行不失真的resize

#-------------------------------------------#

"letterbox_image" : True,

#-------------------------------------------#

# 是否使用Cuda

# 沒(méi)有GPU可以設(shè)置成False

#-------------------------------------------#

"cuda" : False,

}

@classmethod

def get_defaults(cls, n):

if n in cls._defaults:

return cls._defaults[n]

else:

return "Unrecognized attribute name '" + n + "'"

#---------------------------------------------------#

# 初始化Facenet

#---------------------------------------------------#

def __init__(self, **kwargs):

self.__dict__.update(self._defaults)

for name, value in kwargs.items():

setattr(self, name, value)

self.generate()

show_config(**self._defaults)

def generate(self):

#---------------------------------------------------#

# 載入模型與權(quán)值

#---------------------------------------------------#

print('Loading weights into state dict...')

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

self.net = facenet(backbone=self.backbone, mode="predict").eval()

self.net.load_state_dict(torch.load(self.model_path, map_location=device), strict=False)

print('{} model loaded.'.format(self.model_path))

if self.cuda:

self.net = torch.nn.DataParallel(self.net)

cudnn.benchmark = True

self.net = self.net.cuda()

#---------------------------------------------------#

# 檢測(cè)圖片

#---------------------------------------------------#

def detect_image(self, image_1, image_2):

#---------------------------------------------------#

# 圖片預(yù)處理,歸一化

#---------------------------------------------------#

with torch.no_grad():

image_1 = resize_image(image_1, [self.input_shape[1], self.input_shape[0]], letterbox_image=self.letterbox_image)

image_2 = resize_image(image_2, [self.input_shape[1], self.input_shape[0]], letterbox_image=self.letterbox_image)

photo_1 = torch.from_numpy(np.expand_dims(np.transpose(preprocess_input(np.array(image_1, np.float32)), (2, 0, 1)), 0))

photo_2 = torch.from_numpy(np.expand_dims(np.transpose(preprocess_input(np.array(image_2, np.float32)), (2, 0, 1)), 0))

if self.cuda:

photo_1 = photo_1.cuda()

photo_2 = photo_2.cuda()

#---------------------------------------------------#

# 圖片傳入網(wǎng)絡(luò)進(jìn)行預(yù)測(cè)

#---------------------------------------------------#

output1 = self.net(photo_1).cpu().numpy()

output2 = self.net(photo_2).cpu().numpy()

#---------------------------------------------------#

# 計(jì)算二者之間的距離

#---------------------------------------------------#

l1 = np.linalg.norm(output1 - output2, axis=1)

plt.subplot(1, 2, 1)

plt.imshow(np.array(image_1))

plt.subplot(1, 2, 2)

plt.imshow(np.array(image_2))

plt.text(-12, -12, 'Distance:%.3f' % l1, ha='center', va= 'bottom',fontsize=11)

plt.show()

return l1

代碼實(shí)現(xiàn)

此代碼調(diào)用的簽名的代碼,但其可以直接的去調(diào)用圖片進(jìn)行人臉識(shí)別。

from PIL import Image

from facenet import Facenet

if __name__ == "__main__":

model = Facenet()

while True:

image_1 = input('Input image_1 filename:')

try:

image_1 = Image.open(image_1)

except:

print('Image_1 Open Error! Try again!')

continue

image_2 = input('Input image_2 filename:')

try:

image_2 = Image.open(image_2)

except:

print('Image_2 Open Error! Try again!')

continue

probability = model.detect_image(image_1,image_2)

print(probability)

程序運(yùn)行

運(yùn)行程序后首先顯示的是程序的配置信息,然后可以輸入圖像對(duì)比檢測(cè)的內(nèi)容。以下是圖像識(shí)別的效果和對(duì)比的準(zhǔn)確率。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

2025年8月26日,?Elexcon深圳國(guó)際電子展?在?深圳會(huì)展中心(福田)1號(hào)館?(展臺(tái)號(hào):1L30)盛大舉行。作為全球電子產(chǎn)業(yè)鏈的重要盛會(huì),展會(huì)匯聚創(chuàng)新技術(shù)與行業(yè)解決方案。米爾電子MYIR攜RZ系列核心板、開發(fā)板等...

關(guān)鍵字: 核心板 開發(fā)板 MCU

隨著大語(yǔ)言模型(LLM)技術(shù)的快速迭代,從云端集中式部署到端側(cè)分布式運(yùn)行的趨勢(shì)日益明顯。端側(cè)小型語(yǔ)言模型(SLM)憑借低延遲、高隱私性和離線可用的獨(dú)特優(yōu)勢(shì),正在智能設(shè)備、邊緣計(jì)算等場(chǎng)景中展現(xiàn)出巨大潛力。

關(guān)鍵字: 開發(fā)板 大語(yǔ)言模型 邊緣計(jì)算

本文中,小編將對(duì)單片機(jī)予以介紹,如果你想對(duì)它的詳細(xì)情況有所認(rèn)識(shí),或者想要增進(jìn)對(duì)它的了解程度,不妨請(qǐng)看以下內(nèi)容哦。

關(guān)鍵字: 單片機(jī) 開發(fā)板 Keil

在數(shù)字化浪潮席卷全球的今天,F(xiàn)PGA技術(shù)正成為驅(qū)動(dòng)創(chuàng)新的核心引擎。2025年8月21日,深圳將迎來(lái)一場(chǎng)聚焦FPGA技術(shù)與產(chǎn)業(yè)應(yīng)用的盛會(huì)——2025安路科技FPGA技術(shù)沙龍。本次沙龍以“定制未來(lái) 共建生態(tài)”為主題,匯聚行業(yè)...

關(guān)鍵字: FPGA 核心板 開發(fā)板

在智能視覺(jué)技術(shù)不斷發(fā)展的今天,多路攝像數(shù)據(jù)的處理與傳輸已成為眾多應(yīng)用場(chǎng)景的核心需求。從智能安防監(jiān)控領(lǐng)域的全面覆蓋,到工業(yè)視覺(jué)處理網(wǎng)關(guān)的精準(zhǔn)檢測(cè),再到車載環(huán)視融合平臺(tái)的實(shí)時(shí)駕駛輔助以及智慧社區(qū)AI防控的快速響應(yīng),多路攝...

關(guān)鍵字: 開發(fā)板 網(wǎng)關(guān) 核心板

因此,我們可以在米爾RK3576開發(fā)板上運(yùn)行opencv代碼,來(lái)完成一些視覺(jué)內(nèi)容,充分發(fā)揮該板的性能。要先編譯opencv需要一些預(yù)先的準(zhǔn)備工作首先更新軟件包并安裝必要的依賴:

關(guān)鍵字: 開發(fā)板 OpenCV

代碼段(.text)少于3KB低內(nèi)存消耗支持 INT8/FP32/FP16 模型,實(shí)驗(yàn)性地支持 FP8 模型,支持 keras h5 或 tflite 模型轉(zhuǎn)換支持多種芯片架構(gòu)的專用指令優(yōu)化: ARM SIMD/NEON...

關(guān)鍵字: 開發(fā)板 單片機(jī)

2025年7月17日,第九屆瑞芯微開發(fā)者大會(huì)(RKDC!2025)在福州海峽國(guó)際會(huì)展中心開幕。米爾電子作為瑞芯微IDH生態(tài)合作伙伴受邀出席此次盛會(huì)。米爾不僅為廣大用戶帶來(lái)米爾基于RK35系列處理器的核心板和開發(fā)板/工控機(jī)...

關(guān)鍵字: 核心板 開發(fā)板 工控機(jī)

本文將介紹基于米爾電子MYD-YM62X開發(fā)板(米爾基于TI AM62開發(fā)板)的部署流媒體服務(wù)實(shí)現(xiàn)監(jiān)控功能方案的開發(fā)測(cè)試。摘自優(yōu)秀創(chuàng)作者-HonestQiao

關(guān)鍵字: 流媒體 開發(fā)板 USB攝像頭

為了充分的應(yīng)用該開發(fā)板,結(jié)合T536處理器的特點(diǎn),這里進(jìn)一步的進(jìn)行軟件開發(fā),充分利用開發(fā)板的硬件資源,完成業(yè)務(wù)產(chǎn)品的需求。這里以物聯(lián)網(wǎng)多協(xié)議網(wǎng)關(guān)應(yīng)用為研究為目的,首先建立基礎(chǔ)的從各個(gè)硬件設(shè)讀取硬件端口的數(shù)據(jù),并且通過(guò)SO...

關(guān)鍵字: 開發(fā)板 物聯(lián)網(wǎng)關(guān) 處理器
關(guān)閉