目標檢測 3—— 人臉檢測

筆記來源:DeepLearning-500-questions
上次學習了目標檢測的基本概念 Two Stage和 One Stage 算法:
1.目標檢測Two Stage

2.目標檢測One Stage

4 人臉檢測

在目標檢測領域可以劃分爲了人臉檢測與通用目標檢測,往往人臉這方面會有專門的算法(包括人臉檢測、人臉識別、人臉其他屬性的識別等等),並且和通用目標檢測(識別)會有一定的差別,着主要來源於人臉的特殊性(有時候目標比較小、人臉之間特徵不明顯、遮擋問題等),下面將從人臉檢測和通用目標檢測兩個方面來講解目標檢測。

4.1 目前主要有人臉檢測方法分類?

目前人臉檢測方法主要包含兩個區域:傳統人臉檢測算法和基於深度學習的人臉檢測算法。傳統人臉檢測算法主要可以分爲4類:

(1)基於知識的人臉檢測方法;

(2)基於模型的人臉檢測方法;

(3)基於特徵的人臉檢測方法;

(4)基於外觀的人臉檢測方法。

由於本書着重關注深度學習,下面會着重介紹基於深度學習的人臉檢測方法。

2006年Hinton首次提出深度學習(Deep Learning)的概念,它是通過組合低層的特徵形成更高層的抽象特徵。隨後研究者將深度學習應用在人臉檢測領域,主要集中在基於卷積神經網絡(CNN)的人臉檢測研究,如基於級聯卷積神經網絡的人臉檢測(cascade cnn)、 基於多任務卷積神經網絡的人臉檢測(MTCNN)、Facebox等,很大程度上提高了人臉檢測的魯棒性。當然通用目標檢測算法像Faster-rcnn、yolo、ssd等也有用在人臉檢測領域,也可以實現比較不錯的結果,但是和專門人臉檢測算法比還是有差別。下面部分主要介紹基於深度學習的的人臉檢測算法,基於深度學習的通用目標檢測算法將在第二大節介紹。

4.2 如何檢測圖片中不同大小的人臉?

傳統人臉檢測算法中針對不同大小人臉主要有兩個策略:

(1)縮放圖片的大小(圖像金字塔如圖4.1所示);

(2)縮放滑動窗的大小(如圖4.2所示)。
在這裏插入圖片描述
圖 4.1 圖像金字塔

在這裏插入圖片描述
圖 4.2 縮放滑動窗口

​ 基於深度學習的人臉檢測算法中針對不同大小人臉主要也有兩個策略,但和傳統人臉檢測算法有點區別,主要包括:

(1)縮放圖片大小。(不過也可以通過縮放滑動窗的方式,基於深度學習的滑動窗人臉檢測方式效率會很慢存在多次重複卷積,所以要採用全卷積神經網絡(FCN),用FCN將不能用滑動窗的方法。)

(2)通過anchor box的方法(如圖8.3所示,不要和圖8.2混淆,這裏是通過特徵圖預測原圖的anchor box區域,具體在facebox中有描述)。
在這裏插入圖片描述
圖 4.3 anchor box

4.3 如何設定算法檢測最小人臉尺寸?

主要是看滑動窗的最小窗口和anchorbox的最小窗口。

(1)滑動窗的方法

假設通過12×12的滑動窗,不對原圖做縮放的話,就可以檢測原圖中12×12的最小人臉。但是往往通常給定最小人臉a=40、或者a=80,以這麼大的輸入訓練CNN進行人臉檢測不太現實,速度會很慢,並且下一次需求最小人臉a=30*30又要去重新訓練,通常還會是12×12的輸入,爲滿足最小人臉框a,只需要在檢測的時候對原圖進行縮放即可:w=w×12/a。

(2)anchorbox的方法

原理類似,這裏主要看anchorbox的最小box,通過可以通過縮放輸入圖片實現最小人臉的設定。

4.4 如何定位人臉的位置?

(1)滑動窗的方式:

滑動窗的方式是基於分類器識別爲人臉的框的位置確定最終的人臉,
在這裏插入圖片描述
圖 4.4 滑動窗

(2)FCN的方式:

​ FCN的方式通過特徵圖映射到原圖的方式確定最終識別爲人臉的位置,特徵圖映射到原圖人臉框是要看特徵圖相比較於原圖有多少次縮放(縮放主要查看卷積的步長和池化層),假設特徵圖上(2,3)的點,可粗略計算縮放比例爲8倍,原圖中的點應該是(16,24);如果訓練的FCN爲12*12的輸入,對於原圖框位置應該是(16,24,12,12),當然這只是估計位置,具體的再構建網絡時要加入迴歸框的預測,主要是相對於原圖框的一個平移與縮放。

(3)通過anchor box的方式:

​ 通過特徵圖映射到圖的窗口,通過特徵圖映射到原圖到多個框的方式確定最終識別爲人臉的位置。

4.5 如何通過一個人臉的多個框確定最終人臉框位置?

在這裏插入圖片描述
圖 4.5 通過NMS得到最終的人臉位置

NMS改進版本有很多,最原始的NMS就是判斷兩個框的交集,如果交集大於設定的閾值,將刪除其中一個框,那麼兩個框應該怎麼選擇刪除哪一個呢? 因爲模型輸出有概率值,一般會優選選擇概率小的框刪除。

4.6 基於級聯卷積神經網絡的人臉檢測(Cascade CNN)

  1. cascade cnn的框架結構是什麼?

在這裏插入圖片描述

級聯結構中有6個CNN,3個CNN用於人臉非人臉二分類,另外3個CNN用於人臉區域的邊框校正。給定一幅圖像,12-net密集掃描整幅圖片,拒絕90%以上的窗口。剩餘的窗口輸入到12-calibration-net中調整大小和位置,以接近真實目標。接着輸入到NMS中,消除高度重疊窗口。下面網絡與上面類似。

  1. cascade cnn人臉校驗模塊原理是什麼?

該網絡用於窗口校正,使用三個偏移變量:Xn:水平平移量,Yn:垂直平移量,Sn:寬高比縮放。候選框口(x,y,w,h)中,(x,y)表示左上點座標,(w,h)表示寬和高。

我們要將窗口的控制座標調整爲:
xxnw/sn,yynh/sn,w/sn,h/sn (x-{x_nw}/{s_n},y-{y_nh}/{s_n},{w}/{s_n},{h}/{s_n})
這項工作中,我們有N=5×3×3=45N=5×3×3=45種模式。偏移向量三個參數包括以下值:
Sn(0.83,0.91,1.0,1.10,1.21) Sn:(0.83,0.91,1.0,1.10,1.21)

Xn(0.17,0,0.17) Xn:(-0.17,0,0.17)

Yn(0.17,0,0.17) Yn:(-0.17,0,0.17)

同時對偏移向量三個參數進行校正。

在這裏插入圖片描述

3、訓練樣本應該如何準備?

人臉樣本:

非人臉樣本:

  1. 級聯的好處

級聯的工作原理和好處:

  • 最初階段的網絡可以比較簡單,判別閾值可以設得寬鬆一點,這樣就可以在保持較高召回率的同時排除掉大量的非人臉窗口;
  • 最後階段網絡爲了保證足夠的性能,因此一般設計的比較複雜,但由於只需要處理前面剩下的窗口,因此可以保證足夠的效率;
  • 級聯的思想可以幫助我們去組合利用性能較差的分類器,同時又可以獲得一定的效率保證。

4.7 基於多任務卷積神經網絡的人臉檢測(MTCNN)

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述

1.MTCNN模型有三個子網絡。分別是P-Net,R-Net,O-Net.我想問一下,1.模型中的三個input size是指的是同一張圖resize到不同尺度下餵給不同模型,還是同一張圖,依次經過三個模型,然後是不同的輸入尺寸?(這部分能給我講一下嗎)2.每個模型它都有對應三個結果(face classification;bounding box;facial landmark)這三個在網絡上是如何對應的呢?

爲了檢測不同大小的人臉,開始需要構建圖像金字塔,先經過pNet模型,輸出人臉類別和邊界框(邊界框的預測爲了對特徵圖映射到原圖的框平移和縮放得到更準確的框),將識別爲人臉的框映射到原圖框位置可以獲取patch,之後每一個patch通過resize的方式輸入到rNet,識別爲人臉的框並且預測更準確的人臉框,最後rNet識別爲人臉的的每一個patch通過resize的方式輸入到oNet,跟rNet類似,關鍵點是爲了在訓練集有限情況下使模型更魯棒。

還要注意一點構建圖像金字塔的的縮放比例要保留,爲了將邊界框映射到最開始原圖上的

還要注意一點:如何從featureMap映射回原圖

4.8 Facebox

在這裏插入圖片描述

(1)Rapidly Digested Convolutional Layers(RDCL)

在網絡前期,使用RDCL快速的縮小feature map的大小。 主要設計原則如下:

  • Conv1, Pool1, Conv2 和 Pool2 的stride分別是4, 2, 2 和 2。這樣整個RDCL的stride就是32,可以很快把feature map的尺寸變小。
  • 卷積(或pooling)核太大速度就慢,太小覆蓋信息又不足。文章權衡之後,將Conv1, Pool1, Conv2 和 Pool2 的核大小分別設爲7x7,3x3,5x5,3x3
  • 使用CReLU來保證輸出維度不變的情況下,減少卷積核數量。

(2)Multiple Scale Convolutional Layers(MSCL)

在網絡後期,使用MSCL更好地檢測不同尺度的人臉。 主要設計原則有:

  • 類似於SSD,在網絡的不同層進行檢測;
  • 採用Inception模塊。由於Inception包含多個不同的卷積分支,因此可以進一步使得感受野多樣化。

(3)Anchor densification strategy

爲了anchor密度均衡,可以對密度不足的anchor以中心進行偏移加倍,如下圖所示:

在這裏插入圖片描述

5 目標檢測的技巧彙總

  1. Data Augmentation
  2. OHEM
  3. NMS:Soft NMS/ Polygon NMS/ Inclined NMS/ ConvNMS/ Yes-Net NMS/ Softer NMS
  4. Multi Scale Training/Testing
  5. 建立小物體與context的關係
  6. 參考relation network
  7. 結合GAN
  8. 結合attention

6 目標檢測的常用數據集

6.1 PASCAL VOC

​ VOC數據集是目標檢測經常用的一個數據集,自2005年起每年舉辦一次比賽,最開始只有4類,到2007年擴充爲20個類,共有兩個常用的版本:2007和2012。學術界常用5k的train/val 2007和16k的train/val 2012作爲訓練集,test 2007作爲測試集,用10k的train/val 2007+test 2007和16k的train/val 2012作爲訓練集,test2012作爲測試集,分別彙報結果。

6.2 MS COCO

​ COCO數據集是微軟團隊發佈的一個可以用來圖像recognition+segmentation+captioning 數據集,該數據集收集了大量包含常見物體的日常場景圖片,並提供像素級的實例標註以更精確地評估檢測和分割算法的效果,致力於推動場景理解的研究進展。依託這一數據集,每年舉辦一次比賽,現已涵蓋檢測、分割、關鍵點識別、註釋等機器視覺的中心任務,是繼ImageNet Chanllenge以來最有影響力的學術競賽之一。

相比ImageNet,COCO更加偏好目標與其場景共同出現的圖片,即non-iconic images。這樣的圖片能夠反映視覺上的語義,更符合圖像理解的任務要求。而相對的iconic images則更適合淺語義的圖像分類等任務。

​ COCO的檢測任務共含有80個類,在2014年發佈的數據規模分train/val/test分別爲80k/40k/40k,學術界較爲通用的劃分是使用train和35k的val子集作爲訓練集(trainval35k),使用剩餘的val作爲測試集(minival),同時向官方的evaluation server提交結果(test-dev)。除此之外,COCO官方也保留一部分test數據作爲比賽的評測集。

6.3 Google Open Image

​ Open Image是谷歌團隊發佈的數據集。最新發布的Open Images V4包含190萬圖像、600個種類,1540萬個bounding-box標註,是當前最大的帶物體位置標註信息的數據集。這些邊界框大部分都是由專業註釋人員手動繪製的,確保了它們的準確性和一致性。另外,這些圖像是非常多樣化的,並且通常包含有多個對象的複雜場景(平均每個圖像 8 個)。

6.4 ImageNet

​ ImageNet是一個計算機視覺系統識別項目, 是目前世界上圖像識別最大的數據庫。ImageNet是美國斯坦福的計算機科學家,模擬人類的識別系統建立的。能夠從圖片識別物體。Imagenet數據集文檔詳細,有專門的團隊維護,使用非常方便,在計算機視覺領域研究論文中應用非常廣,幾乎成爲了目前深度學習圖像領域算法性能檢驗的“標準”數據集。Imagenet數據集有1400多萬幅圖片,涵蓋2萬多個類別;其中有超過百萬的圖片有明確的類別標註和圖像中物體位置的標註。

7 目標檢測常用標註工具

7.1 LabelImg

​ LabelImg 是一款開源的圖像標註工具,標籤可用於分類和目標檢測,它是用 Python 編寫的,並使用Qt作爲其圖形界面,簡單好用。註釋以 PASCAL VOC 格式保存爲 XML 文件,這是 ImageNet 使用的格式。 此外,它還支持 COCO 數據集格式。

7.2 labelme

​ labelme 是一款開源的圖像/視頻標註工具,標籤可用於目標檢測、分割和分類。靈感是來自於 MIT 開源的一款標註工具 LabelMe。labelme 具有的特點是:

  • 支持圖像的標註的組件有:矩形框,多邊形,圓,線,點(rectangle, polygons, circle, lines, points)
  • 支持視頻標註
  • GUI 自定義
  • 支持導出 VOC 格式用於 semantic/instance segmentation
  • 支出導出 COCO 格式用於 instance segmentation

7.3 Labelbox

​ Labelbox 是一家爲機器學習應用程序創建、管理和維護數據集的服務提供商,其中包含一款部分免費的數據標籤工具,包含圖像分類和分割,文本,音頻和視頻註釋的接口,其中圖像視頻標註具有的功能如下:

  • 可用於標註的組件有:矩形框,多邊形,線,點,畫筆,超像素等(bounding box, polygons, lines, points,brush, subpixels)
  • 標籤可用於分類,分割,目標檢測等
  • 以 JSON / CSV / WKT / COCO / Pascal VOC 等格式導出數據
  • 支持 Tiled Imagery (Maps)
  • 支持視頻標註 (快要更新)

7.4 RectLabel

​ RectLabel 是一款在線免費圖像標註工具,標籤可用於目標檢測、分割和分類。具有的功能或特點:

  • 可用的組件:矩形框,多邊形,三次貝塞爾曲線,直線和點,畫筆,超像素
  • 可只標記整張圖像而不繪製
  • 可使用畫筆和超像素
  • 導出爲YOLO,KITTI,COCO JSON和CSV格式
  • 以PASCAL VOC XML格式讀寫
  • 使用Core ML模型自動標記圖像
  • 將視頻轉換爲圖像幀

7.5 CVAT

​ CVAT 是一款開源的基於網絡的交互式視頻/圖像標註工具,是對加州視頻標註工具(Video Annotation Tool) 項目的重新設計和實現。OpenCV團隊正在使用該工具來標註不同屬性的數百萬個對象,許多 UI 和 UX 的決策都基於專業數據標註團隊的反饋。具有的功能

  • 關鍵幀之間的邊界框插值
  • 自動標註(使用TensorFlow OD API 和 Intel OpenVINO IR格式的深度學習模型)

7.6 VIA

​ VGG Image Annotator(VIA)是一款簡單獨立的手動註釋軟件,適用於圖像,音頻和視頻。 VIA 在 Web 瀏覽器中運行,不需要任何安裝或設置。 頁面可在大多數現代Web瀏覽器中作爲離線應用程序運行。

  • 支持標註的區域組件有:矩形,圓形,橢圓形,多邊形,點和折線

8.7.6 其他標註工具

​ liblabel,一個用 MATLAB 寫的輕量級 語義/示例(semantic/instance) 標註工具。
ImageTagger:一個開源的圖像標註平臺。
Anno-Mage:一個利用深度學習模型半自動圖像標註工具,預訓練模型是基於MS COCO數據集,用 RetinaNet 訓練的。

​ 當然還有一些數據標註公司,可能包含更多標註功能,例如對三維目標檢測的標註(3D Bounding box Labelling),激光雷達點雲的標註(LIDAR 3D Point Cloud Labeling)等。

參考文獻:

https://github.com/amusi/awesome-object-detection

https://github.com/hoya012/deep_learning_object_detection

https://handong1587.github.io/deep_learning/2015/10/09/object-detection.html

https://www.zhihu.com/question/272322209/answer/482922713

http://blog.leanote.com/post/[email protected]/b5f4f526490b

https://blog.csdn.net/hw5226349/article/details/78987385

[1] Girshick R, Donahue J, Darrell T, et al. Rich feature hierarchies for accurate object detection and semantic segmentation[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2014: 580-587.

[2] Girshick R. Fast r-cnn[C]//Proceedings of the IEEE international conference on computer vision. 2015: 1440-1448.

[3] He K, Zhang X, Ren S, et al. Spatial pyramid pooling in deep convolutional networks for visual recognition[J]. IEEE transactions on pattern analysis and machine intelligence, 2015, 37(9): 1904-1916.

[4] Ren S, He K, Girshick R, et al. Faster r-cnn: Towards real-time object detection with region proposal networks[C]//Advances in neural information processing systems. 2015: 91-99.

[5] Lin T Y, Dollár P, Girshick R, et al. Feature pyramid networks for object detection[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2017: 2117-2125.

[6] He K, Gkioxari G, Dollár P, et al. Mask r-cnn[C]//Proceedings of the IEEE international conference on computer vision. 2017: 2961-2969.

[7] Liu W, Anguelov D, Erhan D, et al. Ssd: Single shot multibox detector[C]//European conference on computer vision. Springer, Cham, 2016: 21-37.

[8] Fu C Y, Liu W, Ranga A, et al. Dssd: Deconvolutional single shot detector[J]. arXiv preprint arXiv:1701.06659, 2017.

[9] Redmon J, Divvala S, Girshick R, et al. You only look once: Unified, real-time object detection[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 779-788.

[10] Redmon J, Farhadi A. YOLO9000: better, faster, stronger[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 7263-7271.

[11] Redmon J, Farhadi A. Yolov3: An incremental improvement[J]. arXiv preprint arXiv:1804.02767, 2018.

[12] Lin T Y, Goyal P, Girshick R, et al. Focal loss for dense object detection[C]//Proceedings of the IEEE international conference on computer vision. 2017: 2980-2988.

[13] Liu S, Huang D. Receptive field block net for accurate and fast object detection[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 385-400.

[14] Zhao Q, Sheng T, Wang Y, et al. M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network[J]. arXiv preprint arXiv:1811.04533, 2018.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章