自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

人臉檢測之Retina FaceNet

網(wǎng)絡(luò) 通信技術(shù)
Retinaface 與普通的目標(biāo)檢測算法類似,在圖片上預(yù)先設(shè)定好一些先驗框,這些先驗框會分布在整個圖片上,網(wǎng)絡(luò)內(nèi)部結(jié)構(gòu)會對這些先驗框進(jìn)行判斷看是否包含人臉,同時也會調(diào)整位置進(jìn)行調(diào)整并且給每一個先驗框的一個置信度。

 retinaface 人臉檢測算法

甜點

最近一直了解人臉檢測的算法,所以也嘗試學(xué)多人臉檢測框架。所以這里將拿出來和大家分享一下

Retinaface 與普通的目標(biāo)檢測算法類似,在圖片上預(yù)先設(shè)定好一些先驗框,這些先驗框會分布在整個圖片上,網(wǎng)絡(luò)內(nèi)部結(jié)構(gòu)會對這些先驗框進(jìn)行判斷看是否包含人臉,同時也會調(diào)整位置進(jìn)行調(diào)整并且給每一個先驗框的一個置信度。

在 Retinaface 的先驗框不但要獲得人臉位置,還需要獲得每一個人臉的五個關(guān)鍵點位置

接下來我們對 Retinaface 執(zhí)行過程其實就是在圖片上預(yù)先設(shè)定好先驗框,網(wǎng)絡(luò)的預(yù)測結(jié)果會判斷先驗框內(nèi)部是否包含人臉并且對先驗框進(jìn)行調(diào)整獲得預(yù)測框和五個人臉關(guān)鍵點。

主干特征提取網(wǎng)絡(luò)

  • mobileNet 和 Resnet
  • 在主干網(wǎng)絡(luò)(例如 mobileNetv1) 不斷進(jìn)行特征提取,在特征提取過程就是壓縮長寬到深度(通道擴張)上過程(下采樣)

mobileNet

MobileNet 網(wǎng)絡(luò)是由 google 團隊在 2017 年提出的,專注移動端和嵌入式設(shè)備中輕量級 CNN 網(wǎng)絡(luò),在大大減少模型參數(shù)與運算量下,對于精度只是小幅度下降而已。

加強特征提取網(wǎng)絡(luò) FPN 和 SHH

FPN 構(gòu)建就是生成特征圖進(jìn)行融合,通過上采樣然后和上一層的有效特征層進(jìn)行

SSH 的思想非常簡單,使用了 3 個并行結(jié)構(gòu),利用 3 x 3 卷積的堆疊代替 5 x 5 與 7 x 7 卷積的效果,


retina head

在主干網(wǎng)絡(luò)輸出的相當(dāng)輸出了不同大小網(wǎng)格,用于檢測不同大小目標(biāo),先驗框默認(rèn)數(shù)量為 2,這些先驗框用于檢測目標(biāo),然后通過調(diào)整得到目標(biāo)邊界框。

  • face classification 用于檢測先驗框中是否存在人臉。也就是判斷先驗框內(nèi)部是否包含目標(biāo),利用一個 1 x 1 的卷積,將 SSH 的通道數(shù)調(diào)整成 num_anchors x 2 ,用于代表每個先驗框內(nèi)部包含人臉的概率, 這里覺得有必要解釋一下 2,通常不就是用一個概率來表示先驗框存在人臉的概率,而在這里用了兩個值來表示人臉是否存在先驗框內(nèi)的概率。其實在兩個值中,如果第一個值比較大,就表示有人臉,那么如果第二值比較大,表示沒有人臉存在
  • face box regression 用于調(diào)整先驗框的中心和寬高,用四個參數(shù)對先驗框進(jìn)行調(diào)整。此時可以利用 1 x 1 的卷積,將 SSH 的通道數(shù)調(diào)整成 num_anchors x 4 用于表示每個先驗框的調(diào)整參數(shù)
  • facial landmark regression 對先驗框進(jìn)行調(diào)整獲得人臉關(guān)鍵點,每一個人臉關(guān)鍵點需要兩個調(diào)整參數(shù),一共有五個人臉關(guān)鍵點。此時利用 1 x 1 的卷積,將 SSH 通道調(diào)整成為 num_anchor(num_anchors x 5 x 2) 表示每個先驗框的每一個人臉關(guān)鍵點的調(diào)整,5 就是人臉上 5 個關(guān)鍵點,這里 2 表示對人臉中心點進(jìn)行調(diào)整的參數(shù)。

FPN

  1. class FPN(nn.Module): 
  2.     def __init__(self,in_channels_list,out_channels): 
  3.         super(FPN,self).__init__() 
  4.         leaky = 0 
  5.         if (out_channels <= 64): 
  6.             leaky = 0.1 
  7.          
  8.         # 利用 1x1 卷積對獲得的3有效特征層進(jìn)行通道數(shù)的調(diào)整,輸出通道數(shù)都為 64 
  9.         self.output1 = conv_bn1X1(in_channels_list[0], out_channels, stride = 1, leaky = leaky) 
  10.         self.output2 = conv_bn1X1(in_channels_list[1], out_channels, stride = 1, leaky = leaky) 
  11.         self.output3 = conv_bn1X1(in_channels_list[2], out_channels, stride = 1, leaky = leaky) 
  12.  
  13.         self.merge1 = conv_bn(out_channels, out_channels, leaky = leaky) 
  14.         self.merge2 = conv_bn(out_channels, out_channels, leaky = leaky) 
  15.  
  16.     def forward(self, input): 
  17.         # names = list(input.keys()) 
  18.         input = list(input.values()) 
  19.  
  20.         #  
  21.         output1 = self.output1(input[0]) 
  22.         output2 = self.output2(input[1]) 
  23.         output3 = self.output3(input[2]) 
  24.  
  25.         # 對于最小特征層進(jìn)行上采樣來獲得 up3 
  26.         up3 = F.interpolate(output3, size=[output2.size(2), output2.size(3)], mode="nearest"
  27.         # 然后將最小特征層經(jīng)過上采用獲得結(jié)果和中間有效特征層進(jìn)行相加 
  28.         output2 = output2 + up3 
  29.         # 進(jìn)行 64 通道卷積進(jìn)行特征整合 
  30.         output2 = self.merge2(output2) 
  31.  
  32.         # 這個步驟和上面類似 
  33.         up2 = F.interpolate(output2, size=[output1.size(2), output1.size(3)], mode="nearest"
  34.         output1 = output1 + up2 
  35.         output1 = self.merge1(output1) 
  36.  
  37.         out = [output1, output2, output3] 
  38.         return out 

 SSH

  1. class SSH(nn.Module): 
  2.     def __init__(self, in_channel, out_channel): 
  3.         super(SSH, self).__init__() 
  4.         assert out_channel % 4 == 0 
  5.         leaky = 0 
  6.         if (out_channel <= 64): 
  7.             leaky = 0.1 
  8.         self.conv3X3 = conv_bn_no_relu(in_channel, out_channel//2, stride=1) 
  9.  
  10.         # 用 2 個 3 x 3 的卷積來代替 5 x 5 的卷積 
  11.         self.conv5X5_1 = conv_bn(in_channel, out_channel//4, stride=1, leaky = leaky) 
  12.         self.conv5X5_2 = conv_bn_no_relu(out_channel//4, out_channel//4, stride=1) 
  13.         # 使用 3 個 3 x 3 的卷積來代替 7 x 7 的卷積 
  14.         self.conv7X7_2 = conv_bn(out_channel//4, out_channel//4, stride=1, leaky = leaky) 
  15.         self.conv7x7_3 = conv_bn_no_relu(out_channel//4, out_channel//4, stride=1) 
  16.  
  17.     def forward(self, input): 
  18.         conv3X3 = self.conv3X3(input) 
  19.  
  20.         conv5X5_1 = self.conv5X5_1(input) 
  21.         conv5X5 = self.conv5X5_2(conv5X5_1) 
  22.  
  23.         conv7X7_2 = self.conv7X7_2(conv5X5_1) 
  24.         conv7X7 = self.conv7x7_3(conv7X7_2) 
  25.  
  26.         # 堆疊 
  27.         out = torch.cat([conv3X3, conv5X5, conv7X7], dim=1) 
  28.         out = F.relu(out
  29.         return out 

 先驗框調(diào)整

深度可分離卷積(Depthwise separable convolution)

深度可分離卷積好處就是可以減少參數(shù)數(shù)量,從而降低運算的成本。經(jīng)常出現(xiàn)在一些輕量級的網(wǎng)絡(luò)結(jié)構(gòu)(這些網(wǎng)絡(luò)結(jié)構(gòu)適合于移動設(shè)備或者嵌入式設(shè)備),深度可分離卷積是由DW(depthwise)和PW(pointwise)組成


這里我們通過對比普通卷積神經(jīng)網(wǎng)絡(luò)來解釋,深度可分離卷積是如何減少參數(shù)

  • 卷積核通道數(shù)與輸入通道數(shù)保持一致
  • 輸出通道與卷積核個數(shù)保持一致

DW(Depthwise Conv)

我們先看圖中 DW 部分,在這一個部分每一個卷積核通道數(shù) 1 ,每一個卷積核對應(yīng)一個輸入通道進(jìn)行計算,那么可想而知輸出通道數(shù)就與卷積核個數(shù)以及輸入通道數(shù)量保持一致。

簡單總結(jié)一下有以下兩點

  • 卷積核通道數(shù)為 1
  • 輸入通道數(shù)等于卷積核個數(shù)等于輸出通道數(shù)

PW(Pointwise Conv)

PW 卷積核核之前普通卷積核類似,只不過 PW 卷積核大小為 1 ,卷積核深度與輸入通道數(shù)相同,而卷積核個數(shù)核輸出通道數(shù)相同






 

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2022-04-05 20:54:21

OpenCVPython人臉檢測

2017-01-23 21:35:58

Android人臉檢測介紹

2024-06-12 12:57:12

2012-04-30 20:24:43

Android API

2024-07-18 00:00:25

PyTorch神經(jīng)網(wǎng)絡(luò)

2019-03-27 15:10:02

開源人臉檢測庫

2018-01-23 09:17:22

Python人臉識別

2018-05-08 14:25:22

Pythondlib人臉檢測

2015-02-10 10:08:59

JavaScript

2018-05-02 15:41:27

JavaScript人臉檢測圖像識別

2024-04-03 09:48:28

人臉檢測識別JS開源

2018-07-10 15:50:29

2014-06-23 10:09:20

MacBook ProLinux

2012-04-11 22:12:09

iPad

2013-08-26 10:53:26

人臉檢測API

2024-04-15 00:00:01

GoogleAndroid機器學(xué)習(xí)

2020-11-02 11:24:52

算法人臉識別技術(shù)

2018-03-12 16:42:11

華為云

2021-08-16 20:59:02

人臉識別AI人工智能

2023-04-27 10:13:54

點贊
收藏

51CTO技術(shù)棧公眾號