INTEL NCS2+ OpenVINO開發板應用:學堂授課即時反應偵測及反饋

AI的應用若場合,或空間有限時,會使用 AI 開發板來進行 edge computing ,例如 Raspberry Pi+INTEL Neural ComputeStick 2 (NCS2),Nvidia 的 Jetson nano。但這篇使用的是研揚的Up Square對 NCS2上使用物件辨識的效能  。體積上相對小很多。Up Square 是基於INTEL Atom的一部微型電腦,NCS2用於執行神經網路計算,是個易於使用的平台,運作只需 2 瓦,作業系統是Windows10。


摘要
基於現在課堂上已存在的監控系統,加入研揚Up Square開發板及英特爾NCS2進行人臉及情趣識別的理論驗證,通過擷取的完整圖片進行處理,確定人臉出現在圖片中的位置並將畫面進行剪裁、提取,通過對比人臉的特徵點,識別人的正面與負面的反應,並將其加總計分後將結果通過乙太網上傳到上位機。

目錄
一、市場調研

二、演算法實現-定位

三、演算法實現-識別

四、結果上傳

五、測試說明

六、總結。

正文

一、市場調研
首先對現在市場上的了解,關於課堂識別系統算是較少的應用,例如課堂上的行為如舉手,起立,打瞌睡進行辨識。

大體系統的工作流程。 如下,由於攝像頭安裝的位置是固定的, 所以有些人的位置比較遠的,這人體在影片中所佔的pixel數量相較於人臉是多很多,也比較容易辨識到,因此可以看到一些已經成熟的方案中, 對於這一部分的使用。

 

相較於課堂上的行為,人臉在遠處的偵測雖簡單,但要判別人臉的表情就困難多了,因此要訓練一個精度高卻又反應快的模型,會是相當高的挑戰。

 

學堂授課反應偵測反應,可以提供演講者對於演說時聽眾的反應的即時反饋,來修正接下來的課程或是演說

二、演算法實現-人臉偵測

 

在模型的選擇上,人臉偵測相對於情緒識別來的大且重要,所以效能的需要相對比較高,之前的一篇效能評估已經測得 SSD Mobilenet-V2 300x300可以得到最佳的11fps,所以此次方案選擇了SSD Mobilenet-V2 300x300做為人臉偵測的模型基礎。評測請參考下圖及連結:

http://bbs.elecfans.com/jishu_1981974_1_1.html

那麼,基於SSD的車牌識別,主要就包括如下幾個部分:1、圖像處理的基礎理論,這裡就選用了 png 檔格式,而對於其他的檔格式也都是觸類旁通的。  2、圖像處理庫的的使用3、其他圖像處理演演演算法的實現4、網路通訊的實現 所以整個試用過程也是按這個順序一步步進行的。 整個程式執行程式為: 。

由上面的瞭解,人臉的有效區域是在圖像中的某一固定範圍內的,所以在處理圖像時,是不必將整幅圖都進行處理的,只要將有人臉的部分剪裁出來進行處理就足夠了。 這樣也可以加快圖像中情緒識別速度。

 

人臉ssd-mobilenet V2模型的訓練過程中,取得了可以免費試用的ORAI 人工智慧軟體 教育版進行人臉的框選訓練。

 

https://www.programmyschool.org/product/orai-%E4%BA%BA%E5%B7%A5%E6%99%BA%E6%85%A7%E8%BB%9F%E9%AB%94-%E6%95%99%E8%82%B2%E7%89%88/?lang=zh-hant

 

使用Dlib取得人臉並自動label

我特地撰寫了三個工具,分別針對實時影像、影片、相片取得大量的臉孔相片並進行自動face labeling。這三支程式都會自動識別影像中是否有人臉,若有的話便產生VOC xml格式的label檔,並且將image檔及label檔放置於指定的資料夾中。


  1. grep_faces_from_webcam.py

           只要執行該程式,web camera便會持續的進行攝影、辨識、label人臉,並產生可用於訓練的人臉dataset。

  1. grep_faces_from_video.py

          你可以給它一個資料夾路徑,裏面放置各類型的影片(mp4, mov, avi…等),該程式會把所有影片中所能抓出的人臉製作成人臉dataset。

  1. grep_faces_from_image.py

           與上一支程式類似,但資料夾路徑裏面放置的是各類型的圖片(jpg, png, bmp…等),該程式會把該資料夾中所有能抓出的人臉製作成人臉dataset。

進行人臉資料庫的訓練

之後就利用ORAR進行人臉的抓拍的訓練啦,


結果驗證:

驗證方式為使用一千張和訓練時不相關聯的教室裡的人臉做盲測,比較標準答案(ground truth)並取得一千張bounding box的平均分數mAP必須大於80%算是合格。並與OpenVino sample的face detect 0104 模型做比較。

OpenVino object detection face-detection-0104





OpenVINO取得

1000張outputs的mAP結果:

Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.518





ORAI SSD model training 取得

1000張outputs的mAP結果:

Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.83

臉部偵測以取得更為精確的結果

 

三、演算法實現-識別

 

人的情緒可以透過一張人臉的影像判斷出來, 但是喜好度若是只使用單張的影像來判斷,會沒辦 法分析人在一段連續時間內的喜好。所以我們認為 喜好度應該要與一段連續序列的臉部影像相關,而 不是使用單張影像來進行分析。例如應用在無人商店時,需要觀察客戶的購買喜好,那就需要一段連 續時間的觀察。同樣的如果使用單張影像分開來分析課堂喜好程度,那麼就不會比一段連續臉部影像的來得準確。 我們的方法分成兩個階段,包括了人臉情緒辨識階段和喜好度分析階段。人臉情緒辨識階段第一階段的架構如下圖




,輸入為一段序列影像 ?? = {????:?? = 1,2, … , ??},??為序列影像的總張數。依 序經過情緒分析網路的運算之後會得到的情緒值 ?????? = {?????? ?? :?? = 1,2, … , ??},????是情緒的種類,總 共有7種,分別是憤怒(emA)、厭惡(emD)、恐懼 (emF)、快樂(emH)、自然(emN)、悲傷(emS)和驚 訝(emSP)。輸入圖片大小為 48 x 48,標籤有 7 類。 第一個卷積層使用 5 x 5 的卷積核,每次移動 1 格 會獲得 32 個特徵(FeatureMap)。經過卷積層內 積後,上下左右的邊界會少兩個像素,為防止這 個狀況,可以讓缺少的值補 0(Zero-padding), 所以輸出後的大小會跟輸入一樣都是 48 x 48,第 一層池化層使用最大池化(Max-pooling),區塊 大小使用 2 x 2,每次移動 2 格,讓圖像大小縮小 到 24 x 24。第二層卷積層,卷積核大小使用 5 x 5, 每次移動 1 格會獲得 64 個特徵,第二層池化層使 用最大池化,區塊大小使用 2 x 2,每次移動 2 格, 將圖片大小變為 12 x 12。第三層卷積層,卷積核 大小使用使用 5 x 5,每次移動 1 格並獲得 128 個 特徵,第三層池化層使用最大池化,區塊大小是 2 x 2,每次移動 2 格,將圖片大小變為 6 x 6。最後 全連接層有兩層各使用 128 個神經元及 256 個神 經元,並使用 Dropout 方法,隨機停止神經元來避 免過度訓練,最後輸出層是 7 個神經元分別對到7 種情緒,該層使用歸一化指數函數(Softmax)來 標準化輸出結果,在此模型的卷積層均使用 ReLU 激活函數,損失函數為交叉熵(Cross Entropy)。

 
喜好度會是多種情緒混合的呈現,例如自然和快樂可能會先後出現在一張人臉上來表現出喜歡的感覺。所以在分析喜好度時必須考慮多種情緒。例如快樂跟驚訝對喜好度是正面的影響,而厭惡則是負面影響,所以每一個情緒對喜好度都有不同的正向或負向的加權,我們定義為情緒加權值 ??????,??????為下方七種情緒加權值之一,分別是 ????????(憤怒)、????????(厭惡)、????????(恐懼)、???????? (快 樂)、????????(自然)、????????(悲傷)和?????????? (驚訝)。接著我們要檢視這些情緒在這一序列影像中的變化來 決定其對情緒的影響力。例如快樂情緒成分???????? 在這一序列影像中的變化是在初始為0到中間逐漸增高,讓我們可以判斷這段序列影像有因為某些授課或演講內容而產生明顯的快樂情緒,因此喜好度會正向增加; 反之,快樂情緒成分????????在這一序列影像中的變化是在初始為0到中間逐漸降低,使我們判斷這段序列影像因為內容乏味或枯燥而產生低段的快樂情緒,喜好度會因此負向增加。所以每種情緒的變化樣式使 情緒對喜好度有不同的影響程度,在這個階段我們 必須要分析出每一個情緒在這個序列影像中的變化樣式來決定其對喜好度的影響我們在這邊我們定義 了 16 種變化樣式,我們定義為 ?? = {????: ?? = 1,2, … ,16}。為了便利了解,我們將情緒的一維變化值轉化成二維可視化灰階圖形如表1的樣式。

我們的喜好度分析模組演算法,演算法有兩種加權,第一個是表1中的樣式加權 WP,第二個是情緒權重 WE。演算法會決定????最符合哪一種樣式,我們使用變數 iFirst、iSecond、iThird 來儲存最大值的前三個樣式。從這三個變數選出最符合的樣式加權之後,在與第二個情緒權重相乘,得出單一情緒的喜好值??????。我們認為情緒權重跟樣式加權相乘能提高喜好度的準確率,這個方法能更接近使用者輸入的喜好度。演算法如下:

加權後情緒分數與序列影像的喜好度經過喜好度分析模組的計算後得出的值,也就是單一情緒的喜好度預測。最後把所有單一情緒喜好度預測值整合之後就是序列影像的情緒喜好度。整段序列影像的喜好度,我們定義為?em,公式如下:


ε: ?的一個變數因子

 

把圖中心的位置設定成自然。我們把情緒關係圖上的原始情緒量化,在?軸上的值是愉快度,越往右越高,我們認為愉快度對應喜好度的關係是1:1的關係。因為越愉快喜好度也越高。在?軸上的值是激動度,越往上越高。但是激動程度對喜好度的關係並不會是1:1,激動的程度不會完整的 影響到喜好度。例如驚訝是最高的激動程度,但是驚訝並不會對完整的影響到喜好度。所以我們給與?一個變數因子ε。

 

經由算法結果,我們針對被授課或聽眾的反應分辨為正向喜好度(Positive) 和負向厭惡度(negative) 成績加總後將結果上傳。

 

四、結果上傳

 

下圖為結果經由Network輸出至手機示意圖


五、測試說明

 

1、
經由高精度算法在Up Squre上使用NCS2取得人臉特徵值後進行統計後,將結果經由網路傳送到手機上的APP


2、
測試用的APP如下圖,首先依偵測的情緒,Happy, Surprise, Sad, Angry, Natural測得數量依直觀圖形分布來提供參考,最後依權重及方程式算出最後的總積分,分別在手機上顯示總得分為不好,普通,或是很好。

 

六、展望與總結。

首先這個學堂授課即時反應偵測及反饋只是對於圖像處理的理論驗證,距離真正的產品還有一段距離,這也是之後要做的工作。
1、演算法優化,縮短識別時間。 
2、類型增多。
人的表情複雜而且多變、正確的反饋實際的心情對授課或講演質量佔很大因素。 它們的算法分配都是不同的,這項的工作量很大。 
3、上位機設計與完善。

INTEL NCS2開發板具有強大的性能的同時,又兼顧了介面與功能的豐富。 提高了使用者的使用體驗。 開發板功能標註清晰,佈局合理,是二次開發的不錯選擇。


 

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論