日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

譯者 | 朱先忠

審校 | 重樓

在當(dāng)今這個數(shù)據(jù)驅(qū)動的世界里,保護(hù)個人的隱私和匿名是至關(guān)重要的事情。從保護(hù)個人身份到遵守GDPR(General Data Protection Regulation,即《通用數(shù)據(jù)保護(hù)條例》,為歐盟制訂的條例)等嚴(yán)格法規(guī),對各種媒體格式的人臉匿名化高效可靠解決方案的需求前所未有。

簡介

在本文提供的這個實(shí)戰(zhàn)項(xiàng)目中,我們將探索并比較人臉模糊算法相關(guān)的幾種解決方案,并開發(fā)了一個用于比較評估這幾種算法的網(wǎng)絡(luò)應(yīng)用程序。

首先,讓我們來介紹這樣一個應(yīng)用程序的系統(tǒng)需求:

  • 保護(hù)隱私
  • 駕馭監(jiān)管環(huán)境:隨著監(jiān)管環(huán)境的快速發(fā)展,世界各地的行業(yè)和地區(qū)都在實(shí)施更嚴(yán)格的規(guī)范,以保護(hù)個人身份信息。
  • 訓(xùn)練數(shù)據(jù)保密性:機(jī)器學(xué)習(xí)模型在多樣化和準(zhǔn)備充分的訓(xùn)練數(shù)據(jù)上蓬勃發(fā)展。然而,共享此類數(shù)據(jù)通常需要謹(jǐn)慎的匿名化。

總體來看,這個實(shí)戰(zhàn)項(xiàng)目可以劃分成兩個基本部分:

  • 人臉檢測
  • 面部模糊技術(shù)

人臉檢測

為了解決匿名化挑戰(zhàn),首先要解決的問題是定位圖像中存在人臉的區(qū)域。為此,我測試了三個用于圖像檢測的模型。

Haar Cascade算法

流行人臉檢測與模糊算法,王者究竟是誰?實(shí)戰(zhàn)揭秘

圖1:類哈爾特征算法(來源——原始論文)

Haar Cascade是一種機(jī)器學(xué)習(xí)方法,用于圖像或視頻中的人臉等對象的檢測。它通過利用一組被稱為“類哈爾特征”(圖1)的訓(xùn)練特征進(jìn)行操作,這些特征是簡單的矩形濾波器,專注于圖像區(qū)域內(nèi)像素強(qiáng)度的變化。這些特征可以捕捉人臉中常見的邊緣、角度和其他特征。

訓(xùn)練過程包括為算法提供正面樣本(包含人臉的圖像)和負(fù)面樣本(不包含人臉的圖片)。然后,該算法通過調(diào)整特征的權(quán)重來學(xué)習(xí)區(qū)分這些樣本。經(jīng)過訓(xùn)練后,Haar Cascade本質(zhì)上變成了一個分類器的層次結(jié)構(gòu),每個階段都逐步完善檢測過程。

為了實(shí)現(xiàn)人臉檢測,我使用了一個預(yù)先訓(xùn)練的Haar Cascade模型,該模型是在人臉的前向圖像上訓(xùn)練的。關(guān)鍵實(shí)現(xiàn)代碼如下所示:

 
import cv2
face_cascade = cv2.CascadeClassifier('./configs/haarcascade_frontalface_default.xml')

def haar(image):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
    print(len(faces) + " total faces detected.")
    for (x, y, w, h) in faces:
        print(f"Face detected in the box {x} {y} {x+w} {y+h}")

MTCNN算法

流行人臉檢測與模糊算法,王者究竟是誰?實(shí)戰(zhàn)揭秘

圖2:MTNN算法中的人臉檢測過程(來源——原始論文:)

MTNN(Multi-Task Cascaded Convolutional.NETworks,多任務(wù)級聯(lián)卷積網(wǎng)絡(luò))是一種復(fù)雜且高度準(zhǔn)確的人臉檢測算法,超過了前面的Haar Cascades算法的能力。MTCNN算法設(shè)計在具有不同面部大小、方向和照明條件的場景中表現(xiàn)出色,它利用了一系列神經(jīng)網(wǎng)絡(luò),每個神經(jīng)網(wǎng)絡(luò)都適合執(zhí)行面部檢測過程中的特定任務(wù)。

  • 第一階段——提案生成:MTNN通過一個小型神經(jīng)網(wǎng)絡(luò)生成大量潛在的人臉區(qū)域(邊界框)來啟動這一過程。
  • 第二階段——細(xì)化:在第一階段生成的候選信息在此步驟中進(jìn)行篩選。算法中的第二個神經(jīng)網(wǎng)絡(luò)用來評估所提出的邊界框,調(diào)整它們的位置,以便與真實(shí)面部邊界更精確地對齊。這有助于提高準(zhǔn)確性。
  • 第三階段——識別和定位面部特征點(diǎn):該階段負(fù)責(zé)識別面部標(biāo)志,如眼角、鼻子和嘴巴。然后,使用神經(jīng)網(wǎng)絡(luò)來精確定位這些特征。

MTNN算法引入的級聯(lián)架構(gòu)使其能夠在過程的早期快速丟棄沒有人臉的區(qū)域,將計算集中在包含人臉概率較高的區(qū)域。與Haar Cascades算法相比,它能夠處理不同比例(縮放級別)的人臉和旋轉(zhuǎn),非常適合復(fù)雜場景下的應(yīng)用。然而,這種算法的計算強(qiáng)度源于其基于神經(jīng)網(wǎng)絡(luò)的順序方法。

為了實(shí)現(xiàn)MTNN,我使用了MTCNN庫。關(guān)鍵實(shí)現(xiàn)代碼如下所示:

import cv2
from mtcnn import MTCNN
detector = MTCNN()

def mtcnn_detector(image):
    faces = detector.detect_faces(image)
    print(len(faces) + " total faces detected.")
    for face in faces:
        x, y, w, h = face['box']
        print(f"Face detected in the box {x} {y} {x+w} {y+h}")

YOLOv5算法

流行人臉檢測與模糊算法,王者究竟是誰?實(shí)戰(zhàn)揭秘

圖3:YOLO目標(biāo)檢測過程(來源——原始論文)

YOLO(You Only Look Once)算法是一種用于檢測包括人臉在內(nèi)的大量對象的算法。與前代產(chǎn)品不同,YOLO通過神經(jīng)網(wǎng)絡(luò)進(jìn)行單次檢測,使其更快、更適合實(shí)時應(yīng)用程序和視頻場景??傮w來看,使用YOLO檢測媒體中人臉的過程可以分為四個部分:

  • 圖像網(wǎng)格劃分:輸入圖像被劃分為單元格網(wǎng)格。每個單元負(fù)責(zé)預(yù)測位于其邊界內(nèi)的對象。對于每個單元,YOLO算法預(yù)測邊界框、對象概率和類概率。
  • 邊界框預(yù)測:在每個單元格中,YOLO算法預(yù)測一個或多個邊界框及其相應(yīng)的概率。這些邊界框表示潛在的對象位置。每個邊界框由其中心坐標(biāo)、寬度、高度以及對象存在于該邊界框內(nèi)的概率來定義。
  • 類別預(yù)測:對于每個邊界框,YOLO預(yù)測對象可能屬于的各種類別(例如,“臉”、“車”、“狗”)的概率。
  • 非極大值抑制(NMS):為了消除重復(fù)的邊界框,YOLO應(yīng)用了NMS子算法。該過程通過評估冗余邊界框的概率來丟棄冗余邊界框,并與其他框重疊,只保留最可靠和不重疊的邊界框。

YOLO算法的主要優(yōu)勢在于它的速度。由于它通過神經(jīng)網(wǎng)絡(luò)在一次前向傳遞中處理整個圖像,因此它比涉及滑動窗口或區(qū)域建議的算法快得多。然而,這種速度可能會與精度略有權(quán)衡,尤其是對于較小的對象或擁擠的場景。

YOLO算法可以通過在人臉特定數(shù)據(jù)上對其進(jìn)行訓(xùn)練并修改其輸出類別以便僅包括一個類別(“臉”)來適應(yīng)人臉檢測。為此,我使用了基于YOLOv5算法構(gòu)建的一個名叫“yoloface”的開源庫。關(guān)鍵實(shí)現(xiàn)代碼如下所示:

import cv2
from yoloface import face_analysis
face=face_analysis()

def yolo_face_detection(image):
    img,box,conf=face.face_detection(image, model='tiny')
    print(len(box) + " total faces detected.")
    for i in range(len(box)):
        x, y, h, w = box[i]
        print(f"Face detected in the box {x} {y} {x+w} {y+h}")

面部模糊(Face blurring)

在識別出圖像中潛在人臉周圍的邊界框后,下一步是對其進(jìn)行模糊處理以刪除這些邊界標(biāo)識。對于這個任務(wù),我開發(fā)了兩個實(shí)現(xiàn)版本。用于演示這個任務(wù)的參考圖像如圖4所示。

流行人臉檢測與模糊算法,王者究竟是誰?實(shí)戰(zhàn)揭秘圖4:參考圖片(Ethan Hoover引自提供免費(fèi)高清圖片素材資源的Unsplash網(wǎng)站)

高斯模糊(Gaussian Blur)

流行人臉檢測與模糊算法,王者究竟是誰?實(shí)戰(zhàn)揭秘圖5:具有高斯模糊的模糊參考圖像

高斯模糊是一種用于減少圖像噪聲和污跡細(xì)節(jié)的圖像處理技術(shù)。這在人臉模糊領(lǐng)域尤其有用,因?yàn)樗梢詮膱D像的這一部分中刪除細(xì)節(jié)。這種算法計算每個像素附近的像素值的平均值。該平均值以被模糊的像素為中心,并使用高斯分布進(jìn)行計算,從而為附近的像素賦予更多權(quán)重,而為遠(yuǎn)處的像素賦予更少權(quán)重。其結(jié)果是生成一個減少高頻噪聲和精細(xì)細(xì)節(jié)的軟化圖像。應(yīng)用高斯模糊的結(jié)果如前面圖5所示。

高斯模糊采用三個參數(shù):

1. 要模糊的圖像部分。

2. 內(nèi)核大?。河糜谀:僮鞯木仃嚒]^大的內(nèi)核大小會導(dǎo)致更強(qiáng)的模糊。

3. 標(biāo)準(zhǔn)偏差:值越高,模糊效果越強(qiáng)。

f = image[y:y + h, x:x + w]
blurred_face = cv2.GaussianBlur(f, (99, 99), 15)  #你可以調(diào)整模糊參數(shù)
image[y:y + h, x:x + w] = blurred_face

像素化(Pixelization)

流行人臉檢測與模糊算法,王者究竟是誰?實(shí)戰(zhàn)揭秘圖6:帶像素化的模糊參考圖像

像素化是一種圖像處理技術(shù),其中圖像中的像素被替換為單一顏色的較大塊。這種效果是通過將圖像劃分為單元格網(wǎng)格來實(shí)現(xiàn)的,其中每個單元格對應(yīng)于一組像素。然后,將該單元中所有像素的顏色或強(qiáng)度作為該單元中全部像素的顏色的平均值,并將該平均值應(yīng)用于該單元中的所有像素。此過程可創(chuàng)建簡化的外觀,從而降低圖像中精細(xì)細(xì)節(jié)的級別。應(yīng)用像素化的結(jié)果如圖6所示。正如你所觀察到的,像素化使識別一個人的身份變得非常復(fù)雜。

像素化算法使用一個主要的參數(shù),該參數(shù)決定了一個特定區(qū)域應(yīng)該有多少分組像素。例如,如果我們有一個包含人臉的圖像的(10,10)部分,它將被10x10像素組所取代。越小的數(shù)字結(jié)果越模糊。

f = image[y:y + h, x:x + w]
f = cv2.resize(f, (10, 10), interpolation=cv2.INTER_NEAREST)
image[y:y + h, x:x + w] = cv2.resize(f, (w, h), interpolation=cv2.INTER_NEAREST)

實(shí)驗(yàn)結(jié)果與評估

我將從兩個角度評估不同的上述算法:實(shí)時性能分析和特定的圖像場景。

實(shí)時性能

使用相同的參考圖像(如圖4所示)的情況下,我計算了每個人臉檢測算法在圖像中定位人臉邊界框所需的時間。結(jié)果數(shù)據(jù)基于每種算法的10個測量值的平均值。模糊算法所需的時間可以忽略不計,在評估過程中不會考慮。

流行人臉檢測與模糊算法,王者究竟是誰?實(shí)戰(zhàn)揭秘圖7:每個算法檢測人臉?biāo)璧钠骄鶗r間(秒)花銷

可以觀察到,YOLOv5由于其通過神經(jīng)網(wǎng)絡(luò)的單程處理而實(shí)現(xiàn)了最佳性能(速度)。相比之下,像MTNN這樣的方法需要通過多個神經(jīng)網(wǎng)絡(luò)進(jìn)行順序遍歷。這進(jìn)一步使算法的并行化過程復(fù)雜化。

基于場景的性能

為了評估上述算法的性能,除了參考圖像(圖4)外,我還選擇了幾張?jiān)诟鞣N場景中測試算法的圖像:

1. 參考圖像(圖4)

2. 一群人靠得很近——以評估算法捕捉不同人臉大小的能力,有些更近,有些更遠(yuǎn)(圖8)

3. 側(cè)視人臉——測試算法檢測不直視相機(jī)的人臉的能力(圖10)

4. 翻轉(zhuǎn)的人臉,180度——測試算法檢測旋轉(zhuǎn)180度人臉的能力(圖11)

5. 翻轉(zhuǎn)人臉,90度——測試算法檢測側(cè)向旋轉(zhuǎn)90度人臉的能力(圖12)

流行人臉檢測與模糊算法,王者究竟是誰?實(shí)戰(zhàn)揭秘圖8:尼古拉斯·格林提供的在Unsplash網(wǎng)站上的人群相片

流行人臉檢測與模糊算法,王者究竟是誰?實(shí)戰(zhàn)揭秘圖9:Naassom Azevedo提供的在Unsplash網(wǎng)站上的多重面孔照片

流行人臉檢測與模糊算法,王者究竟是誰?實(shí)戰(zhàn)揭秘圖10:Unsplash網(wǎng)站上的來自Kraken Images的側(cè)面圖

流行人臉檢測與模糊算法,王者究竟是誰?實(shí)戰(zhàn)揭秘圖11:將圖4照片翻轉(zhuǎn)180度

流行人臉檢測與模糊算法,王者究竟是誰?實(shí)戰(zhàn)揭秘圖12:將圖4照片翻轉(zhuǎn)90度

Haar Cascade算法

Haar Cascade算法通常在匿名人臉方面表現(xiàn)良好,只有少數(shù)例外。它成功地檢測到了參考圖像(圖4)和“多張臉”場景(圖9)。在“人群”場景(圖8)中,它可以很好地處理任務(wù),盡管有些人臉沒有被完全檢測到或距離更遠(yuǎn)。Haar Cascade算法遇到了人臉不直接面對相機(jī)(圖10)和旋轉(zhuǎn)人臉(圖11和12)的挑戰(zhàn),無法完全識別人臉。

流行人臉檢測與模糊算法,王者究竟是誰?實(shí)戰(zhàn)揭秘圖13:Haar Cascade算法的運(yùn)算結(jié)果

MTCNN算法

MTCNN算法設(shè)法實(shí)現(xiàn)了與Haar Cascade算法非常相似的結(jié)果,具有相同的優(yōu)勢和劣勢。此外,MTNN算法很難檢測到圖9中膚色較深的人臉。

流行人臉檢測與模糊算法,王者究竟是誰?實(shí)戰(zhàn)揭秘圖14:MTCNN算法的運(yùn)算結(jié)果

YOLOv5算法

YOLOv5算法產(chǎn)生的結(jié)果與Haar Cascade算法和MTCNN算法略有不同。它成功地檢測到人們沒有直視相機(jī)的一張臉(圖10),以及旋轉(zhuǎn)了180度的臉(圖11)。然而,在“人群”圖像(圖8)中,它并沒有像前面提到的算法那樣有效地檢測更遠(yuǎn)的人臉。

流行人臉檢測與模糊算法,王者究竟是誰?實(shí)戰(zhàn)揭秘圖15:YOLOv5算法的運(yùn)算結(jié)果。

隱私問題

在解決圖像處理中的隱私挑戰(zhàn)時,需要考慮的一個關(guān)鍵方面是在保持圖像自然外觀的同時,在使人臉無法識別之間保持微妙的平衡。

高斯模糊

高斯模糊有效地模糊了圖像中的面部區(qū)域(如圖5所示)。然而,它的成功取決于用于模糊效應(yīng)的高斯分布的參數(shù)。在圖5中,很明顯,面部特征仍然是可辨別的,這表明需要更高的標(biāo)準(zhǔn)差和內(nèi)核大小來實(shí)現(xiàn)最佳結(jié)果。

像素化

與高斯模糊相比,像素化(如圖6所示)作為一種人臉模糊方法,通常看起來更符合人眼的視覺感受。用于像素化的像素數(shù)量在這種情況下起著關(guān)鍵作用,因?yàn)檩^小的像素數(shù)量會使面部不太容易識別,但可能導(dǎo)致不太自然的外觀。

總的來說,相對于高斯模糊算法,像素化算法一直是人們更喜歡的選擇。理由在于人們更為熟悉這種算法以及這種算法語境的自然性,其在隱私和美學(xué)之間取得了較好的平衡。

逆向工程

隨著人工智能工具的興起,預(yù)測旨在從模糊圖像中去除隱私過濾器的逆向工程技術(shù)的潛力變得至關(guān)重要。然而,模糊面部的行為不可逆轉(zhuǎn)地用更廣義的面部細(xì)節(jié)取代了特定的面部細(xì)節(jié)。到目前為止,人工智能工具只能在呈現(xiàn)同一個人的清晰參考圖像時對模糊的人臉進(jìn)行逆向工程。不過,這里也存在一個矛盾問題:這首先與逆向工程的必要性相矛盾,因?yàn)槭褂媚嫦蚬こ痰脑挶仨氁粤私鈧€人身份為前提。因此,面對不斷發(fā)展的人工智能技術(shù),人臉模糊是保護(hù)隱私的一種比較有效和必要的手段。

視頻領(lǐng)域中的使用

由于視頻本質(zhì)上是一系列圖像,因此修改每個算法以對視頻進(jìn)行匿名化相對簡單。然而,在這里,處理耗費(fèi)的時間變得至關(guān)重要。例如,對于以每秒60幀(每秒圖像)記錄的給定30秒視頻,算法將需要處理1800幀。在這種情況下,像MTNN這樣的算法是不可行的,盡管它們在某些場景中會有所改進(jìn)。因此,我決定使用YOLO模型來實(shí)現(xiàn)視頻匿名化。

import cv2
from yoloface import face_analysis
face=face_analysis()

def yolo_face_detection_video(video_path, output_path, pixelate):
    cap = cv2.VideoCapture(video_path)
    if not cap.isOpened():
        raise ValueError("Could not open video file")

    #取得視頻屬性
    fps = int(cap.get(cv2.CAP_PROP_FPS))
    frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

    # 定義編解碼器并為輸出視頻創(chuàng)建VideoWriter對象
    fourcc = cv2.VideoWriter_fourcc(*'H264')
    out = cv2.VideoWriter(output_path, fourcc, fps, (frame_width, frame_height))

    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break

        tm = time.time()
        img, box, conf = face.face_detection(frame_arr=frame, frame_status=True, model='tiny')
        print(pixelate)

        for i in range(len(box)):
            x, y, h, w = box[i]
            if pixelate:
                f = img[y:y + h, x:x + w]
                f = cv2.resize(f, (10, 10), interpolation=cv2.INTER_NEAREST)
                img[y:y + h, x:x + w] = cv2.resize(f, (w, h), interpolation=cv2.INTER_NEAREST)
            else:
                blurred_face = cv2.GaussianBlur(img[y:y + h, x:x + w], (99, 99), 30)  # 你可以調(diào)整模糊參數(shù)
                img[y:y + h, x:x + w] = blurred_face

        print(time.time() - tm)
        out.write(img)

    cap.release()
    out.release()
    cv2.destroyAllwindows()

Web應(yīng)用程序

為了簡化對不同算法的比較與評估,我創(chuàng)建了一個Web版本的網(wǎng)絡(luò)應(yīng)用程序,用戶可以在其中上傳任何圖像或視頻,選擇人臉檢測和模糊算法。處理后,結(jié)果返回給用戶。實(shí)現(xiàn)是使用Flask和Python/ target=_blank class=infotextkey>Python在后端完成的,利用前面提到的庫以及OpenCV和React.js在前端進(jìn)行用戶與模型的交互。完整的代碼可在鏈接https://Github.com/dani2221/dpns處獲得。

結(jié)論

在本文項(xiàng)目中,我對包括Haar Cascade、MTNN和YOLOv5在內(nèi)的各種人臉檢測算法進(jìn)行了不同方面的探索、比較和分析。此外,該項(xiàng)目還專注分析了圖像模糊技術(shù)。

實(shí)驗(yàn)數(shù)據(jù)證明,Haar Cascade算法在某些場景中被證明是一種有效的方法,通常表現(xiàn)出良好的時間性能。MTNN算法作為一種在各種條件下都具有實(shí)體人臉檢測能力的算法脫穎而出,盡管它在處理通常不處于傳統(tǒng)方向的人臉時遇到了困難。YOLOv5算法具有實(shí)時人臉檢測功能,是時間作為關(guān)鍵因素的場景(如視頻)應(yīng)用的絕佳選擇,盡管在群組對象環(huán)境中的準(zhǔn)確性略有下降。

最后,我把所有算法和技術(shù)都集成到一個單獨(dú)的Web應(yīng)用程序中。該應(yīng)用程序提供了對所有人臉檢測和模糊方法的輕松訪問和利用,以及使用模糊技術(shù)處理視頻的能力。

譯者介紹

朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計算機(jī)教師,自由編程界老兵一枚。

原文標(biāo)題:Exploration and Model Comparison,作者:Danilo Najkov

分享到:
標(biāo)簽:算法
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定