前言

在前面的文章中我們提到如果想要利用人工智慧並根據影片或影像中人物的臉孔來判斷年紀、性別或類似資訊,很重要的前期是要能夠先偵測到臉孔的存在。我們一連介紹了三種偵測臉孔的方式,分別是 Haar Cascade、OpenCV 內建之 Caffe 網路以及 OpenVINO 內建之 IR 網路,並利用這些方法來找出圖片中的臉孔。在這篇文章中,我們將同時使用這三種方法來找出影像與圖片中的臉孔,並將偵測出的臉孔送到 OpenVINO 內建的年紀/性別網路進行推論,好讓我們可以觀察並比較三者的效果是否有所不同。

回眸一笑

首先我下載了這個影片,並分別利用三種方法來持續追蹤影片中女子的臉孔。在影片中女子不斷地回頭與轉身,讓我們可以觀察到這些方法在各種不同角度時的偵測效果。

首先,對於正面的臉孔,三種方法皆可以順利地偵測到臉孔的存在,而之後的性別偵測人工智慧網路也可以正確地判斷出性別,如下圖所示:

一般正面臉孔的偵測結果

一般正面臉孔的偵測結果

那麼當圖片中的臉孔沒有正確地聚焦呢?三種方法一樣可以順利地偵測到臉孔的存在,而之後的性別偵測人工智慧網路也可以正確地判斷出性別,如下圖所示:

模糊正面臉孔的偵測結果

模糊正面臉孔的偵測結果

看來對這些方法而言正面照的判斷都不是很困難。那麼側臉呢? Haar Cascade 無法偵測到臉孔的存在,而 OpenCV 與 OpenVINO 的內建網路則依舊可以順利地偵測到臉孔的存在,並正確地判斷出性別,只不過年紀部分則與正面照有很大的差別,如下圖所示:

側臉的偵測結果

側臉的偵測結果

好吧,偵測側臉可能要求比較過分些,那麼回首呢?結果相差不多,Haar Cascade 依舊無法偵測出臉孔的存在。

回眸的偵測結果

回眸的偵測結果

不過有時候雖然判斷出了臉孔,但是之後的人工智慧網路卻有可能發生誤判的情況。如下圖所示,OpenCV 與 OpenVINO 內建的臉孔偵測網路雖然都偵測出臉孔的存在,但是性別判斷的網路卻將臉孔判斷為男性:

回眸的偵測結果

回眸的偵測結果

經由一些簡單的比較,我們可以得知 Haar Cascade 在偵測臉孔上的角度限制較多。不過其實也不用太過驚訝,畢竟這個網路的名稱中就有 frontal face 一詞。

轉一轉,測一測

前面我們看到臉孔角度對於偵測效果的影響,接下來我們來看看如果圖片中的臉孔並非上下擺正,而是有一個旋轉角度時對臉孔偵測又有何影響。在此我針對從網路上下載的男女各 10 張的頭像進行測試,當頭像正擺時,Haar Cascade 都可以順利偵測到臉孔的存在,不過當中有一張男性的頭像被誤判為女生(第三排第五張),如下圖所示 :

Haar Cascade 偵測臉孔結果 (擺正)

Haar Cascade 偵測臉孔結果 (擺正)

OpenCV 與 OpenVINO 也有類似的結果:

OpenCV 偵測臉孔結果 (擺正)

OpenCV 偵測臉孔結果 (擺正)

OpenVINO 偵測臉孔結果 (擺正)

OpenVINO 偵測臉孔結果 (擺正)

之後我們開始將頭像分別往左右進行轉動,每次轉動 15 度,直到頭像上下顛倒為止 (也就是旋轉 180 度)。過程中發現當旋轉到 30 度時,Haar Cascade 幾乎已經無法判斷出臉孔的存在,如下圖所示:

Haar Cascade 偵測臉孔結果 (順時針旋轉 30 度)

Haar Cascade 偵測臉孔結果 (順時針旋轉 30 度)

這個情況並未出在 OpenCV 與 OpenVINO 的臉孔偵測網路上。事實上,即使經過 90 度、甚至 180 度 (上下顛倒) 的旋轉,OpenCV 依舊能夠順利偵測出大多數臉孔的存在 :

OpenCV 偵測臉孔結果 (順時針旋轉 90 度)

OpenCV 偵測臉孔結果 (順時針旋轉 90 度)

OpenCV 偵測臉孔結果 (順時針旋轉 180 度)

OpenCV 偵測臉孔結果 (順時針旋轉 180 度)

OpenVINO 也有不錯的效果:

OpenVINO 偵測臉孔結果 (順時針旋轉 90 度)

OpenVINO 偵測臉孔結果 (順時針旋轉 90 度)

OpenVINO 偵測臉孔結果 (順時針旋轉 180 度)

OpenVINO 偵測臉孔結果 (順時針旋轉 180 度)

為了方便比較,我將三種方法在各個旋轉角度下無法偵測到的臉孔數量以直條圖的方式加以呈現:

Haar Cascade、OpenCV、OpenVINO 在各個旋轉角度時無法偵測的臉孔數

Haar Cascade、OpenCV、OpenVINO 在各個旋轉角度時無法偵測的臉孔數

我們發現只要左右轉動各超過 30 度後,Haar Cascade 就從此一蹶不振,而 OpenCV 則在各種角度都有不錯的表現。OpenVINO 雖然也有不錯的表現,但是很明顯當頭像左右旋轉接近 90 度時 (下巴朝右或朝左),將會造成蠻大的失誤。

不過可惜的是,儘管在旋轉過後 OpenCV 與 OpenVINO 的臉孔偵測網路依舊能夠順利偵測到臉孔的存在,性別/年紀偵測網路卻開始出現大量的錯誤。為了確認此一現象,我將各個旋轉角度下可以順利判斷出的性別數量一樣畫了出來。從下圖中我們可以看到當旋轉角度左右各超過 45 度之後,正確判斷出性別的數量就未超過 10 個。以 OpenCV 及 OpenVINO 而言,其實在這些旋轉角度下幾乎依舊可以判斷出所有的臉孔,然而能夠判斷出性別的次數卻停留在 10 次以下。10 次,感覺好像還是很不錯,有接近 50% 的正確率。然而事實卻不是這樣的,學過機率的人應該知道,就算我們矇著眼亂猜旁人的性別,猜對的機率也是 50% 呢。換句話說,在這些情況下,使用 OpenVINO 的性別辨識網路來判斷性別已經跟亂猜無異了,一點用途也沒有。

Haar Cascade、OpenCV、OpenVINO 在各個旋轉角度時順利偵測的臉孔數

Haar Cascade、OpenCV、OpenVINO 在各個旋轉角度時順利偵測的臉孔數

結論

經過一系列簡單的嘗試與比較,我們可以得到下列推論:

  1. Haar Cascade 臉孔識別網路對於臉孔角度最為敏感,不管是前後回頭或是將頭歪一邊,都會造成無法正確順利偵測的情況。
  2. 即使 OpenCV 與 OpenVINO 臉孔偵測網路對於角度較不敏感,但是之後的性別偵測網路卻也無法正確運作。當我們將多個網路串接運作時,必須確保每一層都能夠順利運作,不然就會因為中間任何的錯誤而影響了我們想要的最終結果。

雖然這不是一個很嚴謹的試驗,使用的圖片數據也不夠多,但是仍可以讓我們了解到臉孔偵測應用的一些需要注意事項,也對這三種臉孔偵測方法有更深入的了解。

Facebook 留言
Print Friendly, PDF & Email
Summary
你看到我了嗎?人工智慧臉孔偵測技術比一比
Article Name
你看到我了嗎?人工智慧臉孔偵測技術比一比
Description
在這篇文章中,我們將同時使用 Haar Cascade、OpenCV 與 OpenVINO 三種方法來找出影像與圖片中的臉孔,並將偵測出的臉孔送到 OpenVINO 內建的年紀/性別網路進行推論,好讓我們可以觀察並比較三者的效果是否有所不同。
Author
Publisher Name
Everlearn Studio
Publisher Logo