SSH人臉檢測

2021-08-30 17:50:48 字數 1611 閱讀 7067

ssh網路的整體結構如下圖所示

作者沒有採用將輸入影象下取樣形成金字塔,然後對各層影象分別進行網路前向運算檢測的方式,原因就是這種方式處理速度慢。

作者採用的是如圖1所示的在不同深度的卷積層分別進行檢測的思路。具體是對vgg-16網路中conv4-3的輸出使用m1進行檢測,stride為8,檢測small face;對vgg-16網路中conv5-3的輸出使用m2進行檢測,stride為16,檢測medium face;對vgg-16網路中conv5-3池化後的輸出使用m3進行檢測,stride為32,檢測large face。

作者這樣做是因為深度較小的卷積層的feature map,每乙個畫素點表示的輸入影象的尺寸相比於深度較大的卷積層要小。對不同的卷積層分別進行檢測,就實現了不同尺度人臉的檢測。

在兩階段的檢測演算法中,經常會通過擴大候選框周圍的檢測視窗實現對上下文資訊的結合。上圖是整合在ssh檢測模組中的上下文模組。由於在ssh中anchors是以卷積的方式進行分類和回歸處理的,所以這裡採用更大的卷積核來實現對處理的候選框區域的擴充。這裡使用了55和77的卷積核進行實現,對應於上圖中的兩個33卷積和3個33卷積。作者的實驗表明context module提公升了wider驗證集上超過0.5%的平均檢測精度。

使用帶momentum和權重衰減的隨機梯度下降演算法進行模型訓練。

正如第2節所介紹的那樣,在不同的三個卷積層使用不同的檢測模組實現多尺度的人臉檢測,因此就有了三個多工的loss。為了使得三個檢測模型各自只針對特定尺度進行檢測,我們只將屬於該檢測模型尺寸大小的人臉的分類及定位損失進行反向傳播。也就是說,將各anchors根據其尺寸大小分配給三個不同的檢測模型(最小的anchors分配給m1,中等的anchors分配給m2,最大的anchors分配給m3,)。當且僅當乙個anchor與真實人臉之間的iou大於0.5時才認為兩者完成了匹配。作者只將與真實人臉匹配上了的anchor的訓練誤差回傳進行網路的訓練工作。

圖5總體損失 = 分類損失 + 回歸損失

wider資料集:

32203幅影象

393703個標記的人臉

158989個人臉用於訓練

39496個人臉用於驗證

剩餘的作為測試集

驗證集和測試集分為「easy」「medium」「hard」三個子集。

資料集包含多種人臉尺寸和嚴重遮擋,是乙個最有挑戰的人臉公開資料集。

ssh輸入影象是影象的短邊縮放到1200,長邊保持在1600以內,不改變長寬比。

單塊 nvidia quardo p6000顯示卡下耗時

才疏學淺,若有錯誤,歡迎批評指正!

SSH人臉檢測演算法創新點

1 檢測模組,使用7 7和5 5的的視窗增加了特徵map之後的感受野 3 訓練的時候,只是用anchor layer,只是判斷一下anchors的的正負類,測試的時候,使用使用proposal layer,和faster相比,少了roi層,速度較快 4 可以使用對尺度的訓練方式,進一步的增加精度 5...

人臉識別之人臉檢測

人臉識別分為人臉檢測 人臉預處理 蒐集和學習人臉以及人臉識別四個部分,此部分將人臉檢測。本文基於opencv進行的。在opencv中常用的人臉檢測器有基於lbp的特徵檢測 基於haar的特徵檢測,兩者的區別 前者比後者快好幾倍且不需要許可協議,但很多haar檢測器需要許可協議。基於haar的臉部檢測...

OpenCV人臉檢測 眼睛檢測之在人臉以外找眼睛

今天在學習opencv人臉檢測時,發現眼睛檢測是在人臉以外尋找眼睛的,源 如下 import cv2 def detect face cascade cv2.cascadeclassifier cascades haarcascade frontalface default.xml eye casc...