天天看點

行人檢測0-02:LFFD-白話給你講論文-翻譯無死角(1)

以下連結是個人關于LFFD(行人檢測)所有見解,如有錯誤歡迎大家指出,我會第一時間糾正。有興趣的朋友可以加微信:17575010159 互相讨論技術。若是幫助到了你什麼,一定要記得點贊!因為這是對我最大的鼓勵。 文 末 附 帶 \color{blue}{文末附帶} 文末附帶 公 衆 号 − \color{blue}{公衆号 -} 公衆号− 海 量 資 源 。 \color{blue}{ 海量資源}。 海量資源。

行人檢測0-00:LFFD-史上最新無死角詳細解讀:https://blog.csdn.net/weixin_43013761/article/details/102592374

知識預備

随着能力的提升,我發現自己閱讀論文的能力在逐漸增強 ,那麼這個逼,怎麼裝給大家看呢?思來想去啊,決定今後每個項目,都使用白話為大家翻譯解釋,讓你深刻了解作者的核心思想,我始終覺得,隻有把你自己學會的知識,能給别人講明白,那麼,你才是真的學會了!牛逼就到這裡了哈。

在看這篇論文的時候,大家需要預備倆個知識點,一個為感受野,一個為 anchor(描點),其中前者感受野,十分的好了解,我就不講解了,後者 anchor,說實話,真的不是那麼好了解的,是以編寫了一篇針對anchor講解的部落格,如下:

深度解剖(5):白話談anchor(錨點),不懂來找我!

如果知道了anchor(錨點)大概是什麼東西,那麼我們就開始論文的翻譯吧。

摘要

很多應用都會涉及到人臉檢測,并且經常被部署到,計算能力和記憶體都比較差的邊緣裝置上(如嵌入式,或者移動端)。這篇論文主要提出了一種速度比較快,準确率也比較高的人臉檢測算法。這種方法和傳統的不一樣,是沒有anchor的,并且還是單個階段完成檢測。這裡特别的說明一下,我們對目标檢測的receptive field (RF:感受域)和 effective receptive field (ERF:有效感受域)做了深入的研究,如果不是很了解,沒關系,繼續往下看就了解了。

基于把某些層的RF(感受域)看做是自然的anchor,以及結合RF(自然的anchor=感受域)以及RF對應的步伐(就是目前feature map一個點,對應原圖的多少個像素)這種思想,理論上可以檢測一副圖中大範圍的人臉,哪怕那些人臉的尺寸都各不相同。受到ERF(有效感受域)和人臉縮放的啟發,我們設計出了一個高效的,單階段的人臉檢測架網絡。該網絡的主要架構由一些公共的的網絡層,以及8個分支組成,是以提高了檢測速率。基于現在流行的人臉檢測資料(WIDER FACE,FDDB)做了全面的實驗對比,并且針對應用場景提出了一種新的評估方式。

這種新的測試方式把測試集分為3個類型:1.容易檢測的(人臉比較大),2.中等難度的(人臉大小居中),3.比較難檢測的(人臉比較小)。我們提出的這種網絡模型,

在WIDER資料集上Val/Test的準确率分别是(針對各個難度):

(簡單)0.910/0.896, (中等)0.881/0.865,(困難) 0.780/0.770;

我們的網絡運作速度非常的快(NVIDIA TITAN Xp: 131.45FPS at 640×480; NVIDIA TX2: 136.99 PFS at 160×120;Raspberry Pi 3 Model B+: 8.44 FPS at 160×120),模型隻有9M大小。

Table 1(基于和WIDER資料集和前五的檢測方法進行對比):

行人檢測0-02:LFFD-白話給你講論文-翻譯無死角(1)

1.介紹

人臉檢測是計算機視覺一個重要的分支,很多應用場景都需要他的支援,如果人臉校正,人臉識别等。并且人臉檢測經常被用在邊緣裝置上,比如手機或者嵌入式,甚至攝像頭内部等等。這些裝置的計算能力和記憶體大小都是有一定局限性的,但是在工業上,其對準确率和速度都有一定的要求。

目前一些最先進的人臉檢測,在WIDER FACE資料集上已經達到了很高的準确率,但是其中大部方法,都是使用了模型大,參數多的網絡架構,比如VGG,Resnet50/152,and Densenet121。這前五種方法的準确率展示在上圖的Table 1中,可以看到他們的差距都會很微小,甚至實際應用都很難察覺到他們之間的差距。很顯然,想通過更加複雜的模型去提高準确率,是沒有必要的,因為即使提升了,速度也跟不上,并且很難落地。是以我們認為,為了在實在場景中更好的去使用人臉檢測,應該是去平衡準确率和速度之間的關系。

最近的十年間,人臉檢測的發展是非常快的,最早的是 Viola-Jones提出,使用手工提取特征,然後利用級聯分類器(不了解也沒有關系)。其中聚合通道的特點,是衆所周知的。通過這種方法,很明顯的提高了速度。但是他們依賴于手工提取特征,不是端到端的進行訓練,導緻檢測的準确率不是很高。

但是近些年的CNN在WIDER FACE資料集上取得了很高的準确率,完勝傳統模式。這些方法可以粗略的分成兩個類别,分别為一個階段和兩個階段。其中兩個階段的方法,包括了候選框的提取,以及局部回歸,其中R-CNN就是比較一個經典的代表。一個階段的方法,分類和box的回歸是同步的,一般會結合anchor和多尺寸圖像變換(圖像金字塔)一起使用。在很多單階段的檢測中,anchor是網絡中必不可少的部分。以往為了提高準确率,提出了很多複雜的網絡模型,但是他們的速度是很慢的。

這這篇論文中,我們提出了一種不僅快,而且準确率也比較高的模型(Light and Fast Face Detec-LFFD),可以在邊緣裝置上部署。改模型的建構主要受到SSD(單階段,多尺寸)以及其他網絡的啟發。其中SSD的特點是,為每一個檢測的分支都設定預想設定了anchor,為了能覆寫各種不同尺寸和形狀的物體,anchor的大小以及長寬比例都是不一樣的,是以在單階段的目标檢測中,anchor榜樣着重要的角色。

目前通過anchor的檢測方法,主要面臨着以下問題:

1、基于anchor的比對,是沒有辦法覆寫各種尺寸的人臉的,看能前面anchor講解的文章大家可以很明顯的知道,anchor僅僅粗略覆寫或者比對那些人臉。

2、對于anchor的比對,是通過與真實圖檔上的目标框計算出IOU,其需要設定一個門檻值,這個門檻值經常根據不同實際應用場景,或者資料集變化,也就是說很難固定下來,做一個統一。

3、anchor數量的設定,也同樣需要根據實際情況做調整,并且會伴随着一些沒有必要的計算。

在這篇論文中,我們認為RF(感受野)可以當做一個自然的anchor,這些的話,就能夠很簡單的解決上面的問題了。

1、在整個網絡中,不同尺寸的人臉總會被某一層中某個對應的RF預測,或者比對到。

2、( 重 點 : 明 白 是 哪 個 落 在 哪 個 \color{red}{重點:明白是哪個落在哪個} 重點:明白是哪個落在哪個)隻要感受野的中心落在groundtruth bbox(标簽=真實目标box)上,則該感受野負責預測。

3、輸入圖檔大小确定之後,分布在原圖上的RFs數量是固定的

另外,我們通過ERF(有效感受野)對RF做了定性的分析,然後建構了LFFD模型,他的架構是一些公共的卷積層,與八個分支。整個網絡都是使用3x3或者1x1的卷積核,以及一些殘差子產品和ReLU激活函數。是以他是輕量級的網絡,比起VGG16 , Resnet50與Densenet121速度是要快很多的。是以我們的模型隻有2.1M(VGG16-138.3M,Resnet50-25.5M )。他的準确率和速度非常的令人驚訝,适用于邊緣裝置。

總結,這邊論文主要有如下貢獻:

1、我們研究了RF,ERF,與人臉檢測的關系,這是LFFD網絡設計靈感的源泉
2、克服了基于anchor設計網絡的缺點,LFFD是沒有anchor的網絡
3、我們提出的架構,檢測速度和精度都是比較可觀的
4、大量基于WIDER FACE和FDDB的實驗,證明了在邊緣裝置上,我們的網絡是有很大的優勢的
           

2.相關工作

十年以前,人臉檢測就吸引了大批人。

早期相關的人臉檢測方法 :早期的人臉檢測,是通過手工提取特征,然後利用滑動視窗以級聯分類器。直到一些快速的特征提取,以及高速分類器的出現之前 ,都是使用Viola-Jones人臉檢測就是使用Haar特征去訓練Adaboost人臉鑒别器。但是這些方法都不是端到端的學習和訓練,特征的提取和分類都是分開的。雖然他們的速度或許很快,但是準确率是比較低的。

CNN端到端的人臉檢測方法:目前基于CNN的人臉檢測方法,主要分為一階段和兩個階段。其中兩個階段的方法,如faster R-CNN。目前的狀況來看,占優勢的主要是單階段的檢測,如基于圖像金字塔的MTCNN,以及其更新版本RF。但是圖像金字塔的缺點是,其速度比較慢,并且記憶體的占用比較大。後面的S3FD網絡利用RF(感受野),以及anchor這種方法,對其進行了改善。再入Zhu等人,使用很多的anchor增加了網絡對小人臉的檢測。從這裡可以看出anchor是目标檢測重要的東西。随後S3FD,PyramidBox,為了檢測小物體,提出了特征金字塔。SSH通過3個檢測模型共同合作,提出了尺寸不變性模型。 DSFD的特點是特征增強模型,前面的網絡層監督改善anchor的比對方法。S3FD,PyramidBox, SSH 和DSFD都是基于VGG16架構的,是以模型比較大,參數比較多。FaceBoxes為了能夠實時的運作,減少了輸入圖檔的尺寸,詳細的說,他使用了步伐為32的縮放(兩個卷積,兩個池化)。盡管他的速度提高了,但是很難去檢測比較小的人臉,在WIDER FACE資料集上的準确率非常的低。

但是我們的網絡,不僅快,準确率又高(又開始吹逼了,忍不住吐槽下,都不知道說多少次了),那些使用很大的計算量帶來準确率微弱的提升,或者大量降低準确率,去提高速度的方法都是不可取的。

3.快準的人臉檢測

在這個這個段落中

3.1 我們主要重訴一下RF和人臉之間的關系:

3.2 描述RF當做自然anchor的相關資訊

3.3 是整個網絡詳細的描述

3.4 給出了整個網絡訓練的規範

3.1 重訴人臉檢測的RF

首先,我們對RF和他的本質,做一個簡單的概括:RF是輸入圖像确定的一個範圍,影響着神經元的激活,RF決定了一個神經元在輸入原圖中能看到的範圍。如果被檢測的物體,能被RF包括,或者剛好結合,那麼這個物體能被很好的檢測出來。

普遍認為,淺層的網絡RFs是比較小的,深層網絡的RFs比較大,RF的一個重要屬性是,其每個像素對神經元的激活所做的貢獻都是不一樣的,總的來說,RF中心周圍的像素,做的貢獻是比較大的,離開中心越遠,則貢獻越小。這種現象的成為ERF(有效感受野)。ERF在網絡中的存在類似于高斯分布,是以RF中心的物體也是非常重要的。LFFD的設計主要就是來自上述的觀察。

人臉檢測是目标檢測的一個分支,他有一些特點:

1、大的臉,是比較容易檢測出來的,因為能很清楚的看到鼻子,嘴巴眼睛這些特征。這些特征,随着表情的變化,會發生一些改變,但是并不會對我們識别他是一個人臉造成影響。

2、小或者特别小的人臉,必須和比較大的臉區分來對待,一張比較小的臉,很難直接通過臉部的外貌識别出來了(如下圖Fig. 1這個例子),如果隻看第一張小的人臉,人都很難區分其到底是不是一張人臉,機器模型也是一樣,他也是很難去區分的。但是,我們結合他周邊的背景,比如他的脖子和肩膀,如下圖(上面部分),慢慢擴大,加入環境背景,我們就能比較容易 的識别出來,該是一個人臉。

Fig. 1

行人檢測0-02:LFFD-白話給你講論文-翻譯無死角(1)

Figure 1圖注解:及小人臉檢測,左上角的圖檔隻包含了人臉,右上角的圖檔包含了更多的環境,以及背景資訊。可以知道,帶有環境資訊的時候,對小人臉的識别是有幫助的。下面的部分圖,描述的是在檢測小人臉時,RF和ERF之間的關系。

基于上面的了解,對待不同大小的人臉,其選擇的RF也是不同的

1、對于小的,或者特别小的人臉,ERF必須覆寫這些臉,以及足夠的環境和背景資訊。

2、對于中等程度的臉,ERFs隻要包含這張臉,和少量的環境背景資訊即可

3、對于比較大的人臉,隻需要保持他們在RF之内就行了

通過上述幾點,我們設計了一個高效的網絡架構

3.2 RFs當做自然的Anchor

一階段的目标的檢測,最大的特點就是預先設定好anchor,為了檢測到不同大小和形狀的物體,所有anchor也是多種多樣的。這些anchor經常被多餘的設定出來,在人臉檢測的時候,一般是使用長寬1:1的anchor(正方形),如果卷積核的長寬是正方向,那麼RF也是正方形(這個還是比價好了解的吧)。LFFD把RF當做一種自然的anchor,在一些層的神經元,他們映射到原圖的RF,是很有規律的平放的,是以,在網絡搭建好的時候,RF的數目已經被固定下來了。

RF和目标的比對政策是很簡單的:隻要RF的中心落到了groundtruth bbox上,然後這個RF和groundtruth bbox就進行比對,計算IOU。這種方法是基于S3FD的anchor比對。Zhang 等人解釋的ERF的影響以及設計合适的anchor去加強小人臉的檢測,盡量的去提高了anchor的命中率。但是S3FD引入了一個麻煩的問題(針對小人臉,存在很多的anchor),為了解決這些問題,不得不采用一些額外的手段。但是理論上LFFD,隻要控制合适的步伐,RF能夠百分百比較合适的去覆寫這些人臉,并且,我們的RF比對方法,能夠很比對連續的,不同尺寸的人臉。比如,100像素的RF是有能力去預測20~40像素之間的人臉的。這樣,他會相同的去對待多個不同尺寸的人臉。

基于上面的解說,LFFD沒有建立任何的anchor去和groundtruth bboxes進行比對,是以我們提出的LFFD是沒有anchor的。

3.3. 網絡結構

通過前面解釋,我們設計了一種特殊的人臉檢測網絡,有兩個因素決定了branches放置的位置。分别是stride(步伐=縮放速率)和 RFs(感受野)的大小。合适的RF大小能保證學習特征和鑒别的能力,是以RFs必須百分百的覆寫人臉。LFFD網絡全部的節後如下圖Fig. 2:

行人檢測0-02:LFFD-白話給你講論文-翻譯無死角(1)

Fig. 2圖解:整個網絡結構有為25層,分為4個部分,tiny part, small part, medium part,large part。可以看到一起有8個branch,其是為了檢測不同尺寸的人臉。這八個branch都是有3x3的卷積核,1x1的卷積核以及殘差子產品組成。

LFFD能檢測10個像素以上的人臉,是以在WIDER FACE資料集上,大于10個像素的人臉,都需要被檢測。我們可以很明确的看到,該網絡是一個分成十個部分的一階段檢測方法,關于branch具體的資訊,請看Table 2:

行人檢測0-02:LFFD-白話給你講論文-翻譯無死角(1)

這個tiny part部分有十個卷積層,前面兩個卷積都是使用stride =2進行下采樣,加起來共stride =2,在tiny part部分,之後的每個卷積stride=4。一個比較重要的原理:盡快的進行下采樣,是為了人臉能夠百分百的被RF覆寫。在tiny part有兩個branchs,首先loss branch1在從c8(看圖,第八層卷積)開始的,此處的RF大小為55,對應連續的人臉尺寸為10-15,同理,loss branch 2是從c10開始的,此處的RF大小為71,對應連續人臉連續縮放尺寸為15-20。很明顯的,我們能夠保證RFs的中心落在smallest face box上,達到百分百的覆寫。

好 好 理 解 下 : \color{red}{好好了解下:} 好好了解下:一種特殊的情況是,一個RF的中心,可能同時落在多個face box上面,在這種情況下,RF直接被忽略。

如前面3.1所說,tiny face需要較多的上下文,或者說環境背景資訊,ERF是要比RF小的。到最後,我們使用了一個比平均人臉尺寸要大的RFs,這個RFs和平均人臉尺寸的比例分别為4.4(branch 1),4.0(branch 2)。在Table 2中,他們的比例是在逐漸減少的,從4.4減少到了1.3。因為比較大的人臉,需要的上下文資訊(背景,環境)比較少。

對于每個branch,他有兩個sub buranch,一個做分類,判斷是否為人臉,一個對box做回歸。

small part負責的是對20-40和40-70之間的人臉檢測,首先在c11 處經過了步伐為2的下采樣,随後是使用卷積完成相同的功能(tiny part),相對于tiny part的RF為8,在small part的RF快速的增加到到16,是以他需要更多卷積層,才能實作RF大小的增加。相比于small part,small part隻有一個branch。

在LFFD網絡結構的最後,是 large part的卷積。因為這裡的特征圖比較小,不需要太多的計算,就能檢測到較大尺寸的人臉。這裡開始了三個branch,因為大的人臉容易比檢測到,是以RFs和平均臉尺寸的比例也比較小。

LFFD這種網絡結構,能夠檢測到10-560之間像素的人臉,并且還是單階段的。因為快速的推理速度,可以在cuDNN,ncnn,mace等架構上廣泛的使用。我們的網絡中沒有BN,因為他降低了速度,原本對于640×480的圖檔是7.6ms,使用BN之後變成了8.9 ms,降低了17%。因為沒有使用BN,是以需要更多次數的疊代。我們并排的使用殘差網絡,為了增加網絡的深度。在前兩個part所有卷積我們沒有增加filters的數目,其filters都為64,因為前面兩個部分的特征圖比較大,如果增加filters,會增加許多的計算量。但是最後的兩個part,我們增加到了128。如Table 2:

行人檢測0-02:LFFD-白話給你講論文-翻譯無死角(1)

累到我了,這篇就到這裡吧,不然太臃腫了,歡迎大家看下片部落格!我會把剩下的翻譯完。

繼續閱讀