1. 程式人生 > >【蜂口 | AI人工智慧】表情識別——龍鵬 深度學習與人臉影象應用連載(七)

【蜂口 | AI人工智慧】表情識別——龍鵬 深度學習與人臉影象應用連載(七)

本次繼續給大家帶來的是表情識別這個問題。我們將從四個方向給大家進行分享。

首先,我們會給大家科學地定義一下表情是什麼?表情實際上包含了我們平常所說的表情以及微表情。

其次,我們會簡單地介紹一下傳統方法的研究思路。傳統的方法主要從靜態圖和動態視訊兩個方面進行講述。

然後,我們再給大家介紹一下深度學習的方法。

最後,我們對錶情分類這個問題的應用和它的難點做一個完整的介紹。

下面開始我們第一部分的分享:什麼是表情?

所謂表情其實指的是面部的肌肉的運動。我們平常所說的表情包含七種基本的表情,主要是包括憤怒、厭惡、恐懼、快樂、悲傷、驚訝以及蔑視等。
在這裡插入圖片描述
上面這張圖是一個表情常用的資料集,這個資料集包含了八種表情,實際上就是對應我們左邊所說的七種表情以及中性,也就是無表情。當然這個圖的順序跟我們前面的文字沒有一一對應。總之這七種表情就是我們平常最常見的表情。

但是表情實際上並不僅僅如此。科學上還有一種表情叫做微表情。微表情的研究常常被心理學家和犯罪科學家用於相關的研究。

那什麼是微表情呢?所謂微表情,其實就是持續時間非常短,它只是某種無意識地使人類在隱藏某種情感。無意識的一個行動,它的持續時間通常不到一秒鐘。

舉個例子,當我們有的時候表現出微笑,但其實我們表示的是蔑視這樣的一種感情。大家平時應該有這樣的感受。所以表情其實分為基本表情和微表情這兩大類。當然還有更多更豐富的表情,是我們所研究的問題的複雜性來定,我們可以去進行更多的分類。

那表情它是怎麼形成的呢?前面我們說了表情實際上是面部的肌肉運動,而面部的肌肉運動雖然是一個整體,但是這個肌肉運動實際上也可以分離開幾個區域,主要包含這麼一些區域:

a)眉毛。眉毛主要包含皺眉、擡眉等等。它分別可以表示一些驚訝以及一些蔑視的表情。

b)眼瞼。眼瞼包含擡眼瞼以及閉眼瞼這樣一個動作。它實際上包含的可能是驚訝、無聊這樣的一些表情。

c)眼睛。眼睛可以包含憤怒、蔑視等等。

d)嘴脣。嘴脣的表情非常的豐富,它可以包含微笑、嘟嘴、驚訝等等。

e)鼻子。鼻子它相對來說要簡單一些。比如我們常說的聳鼻等等,它可以表示一種蔑視的表情。

f)下巴。下巴也可以表示一些嘟嘴之類的表情,甚至一些驚訝之類的表情。

總的來說,人臉的面部包含了上面列舉的這幾大區域,由這幾大區域各自就組成了表情基,也就是action uints。一般我們在研究的時候,表情基會有20個左右。這裡我們展示了28個技術的表情基,由這些基本的表情基就可以組成人臉的豐富的表情。

表情的研究方法也是分兩類:傳統的方法和深度學習方法。

傳統的方法主要是兩個方面來進行研究:

一方面是靜態的圖。所謂靜態圖就是一張人臉的圖片。通常我們會使用一張對齊好的人臉圖片。那麼對於靜態圖,我們來研究的表情通常就採用一些傳統的人臉的特徵,包含一些紋理啊等等一些特徵。

另一方面是動態圖。所謂動態圖就是一個視訊,因為人臉的表情他天生是一個運動的動作,也就是肌肉的運動,所以用動態的圖或者視訊來表徵是一個更好的方案。

那麼動態圖主要有兩種研究思路:

一種是光流法。光流法本身就是用於運動的跟蹤的,所以我們可以用光流+梯度場來跟蹤我們的表情的運動區域。前面我們可以分為了一句表情基,可以對人臉的區域進行幾個區域的劃分,我們可以用光流+梯度場來進行跟蹤。當我們跟蹤到這個區域之後,我們就可以用這些區域運動的方向的變化來表示人臉肌肉的運動,表徵到人臉肌肉的運動之後,我們就可以得到相應的人臉的表情。

第二個是用ASM等模型。ASM等模型也就是主動形狀模型。它本身就是提取的面部的關鍵點,而我們人臉的表情實際上可以用面部關鍵點來進行表徵。因為面部關鍵點它有序號的資訊,所以我們基於面部關鍵點,還可以分割槽域的對人類的表情進行表徵,基於動態圖的思路會取得更好的研究效果。

這就是傳統的方法。

如今,在深度學習已經遍地開花的時代,我們更多的是採用深度學習的方法來研究人類表情這樣的問題。

深度學習的方法,它主要包含兩個問題:

一個是分類的問題。前面我們說了,人臉的表情包含了非常多的表情基,所以對於每一個區域的表情基,我們可以進行分別的分類。那麼人臉的表情,對於輸入這樣一張圖,這就是一個多標籤分類的問題。所謂多標籤分類,我們在前面也給大家介紹過,就是說一張圖它不僅僅對應一個唯一的標籤,它可能包含了多個維度,我們要判斷每一個維度上是否存在它的資訊。
在這裡插入圖片描述
上圖是一個常見的pipeline框架。我們可以看到它將人臉的圖分成了8×8這樣的一個區域,將每一個影象塊都經過一個單獨的卷積,一個單獨的卷積通道,然後獲取到它的一個特徵圖的表示。然後我們可以把特徵圖的特徵向量進行串接起來,然後再進行分類。這就是一個典型的多分類的問題。

分類問題我們可以得到一個表情基是否存在。但是當我們在應用表情的時候,我們知道一個表情的存在還不能完美的解決我們的問題,有時候我們希望知道這個表情的幅度是多大,所以又帶來另一個問題,即迴歸的問題。

迴歸的問題估計的就是表情的幅度。
在這裡插入圖片描述
比如上面這張圖,從左到右它是一個微笑的過程,但是微笑的幅度是不一樣的。最右邊微笑的幅度最大,最左邊基本上已經看不到微笑,或者說他不是微笑。有的時候很多的時候我們需要對錶情做遷移,或者對錶情進行編輯,那麼我們需要估計表情的幅度,估計表情的幅度相對於表情分類來說,它更加困難。因為人臉面部的表情基之間並非是完全獨立的,比如嘴巴的運動會牽動下巴的運動,鼻子的運動也會牽動嘴巴的運動,所以我們無法單獨地對錶情基進行估計。

通常意義上常用的研究方法是對各個表情基之間建立了一個圖,然後我們會去優化這樣的一個圖,利用CRF等方法來進行優化。更多的具體細節,大家可以線下去關注。

表情幅度的估計問題的常用方法就是前面所說的這樣的幾種思路。

最後我們來看看錶情的應用,表情可以應用在哪些地方?

首先,遊戲。我們可以用表情在玩很多的遊戲,比如主播之間利用表情來作PK,然後來玩類似於消消樂這樣的一些遊戲。

其次,人機互動。可以利用表情來做很多的人機的控制互動。

最後,表情遷移。如下圖:
在這裡插入圖片描述
這張圖就是一個avatar,我們利用人臉來實時的做一些表情,從而將這些表情驅動到我們這樣的一個3D的模型上面來做一些展示,這樣的一個應用在電影裡面,在CG製作裡面是非常非常有商業前景的。

不過表情估計它也有很多的難點:

第一個難點是表情非常的複雜多變。前面我們說了人臉的表情有七個基本表情,但實際上表情還包含非常非常多,甚至表情都不一定是面部帶來的,它甚至還有其他的影象,非面部區域以外也能帶來一些表情。它的變化非常複雜,再加上人臉又是一個柔性的模型。

第二個難點是表情幅度的量化問題。像我們上面展示的這樣一張圖,我們要用人臉來驅動這樣的一個avatar、這樣的一個3D模型來做一些表情的動作,那麼我們不可避免的要估計人臉,也就是真人他的表現的幅度是多大,而對他的幅度進行量化,就面臨了幾個挑戰:

1)我們要對我們的幅度進行標註,這是一個非常大的問題。因為我們需要用係數來量化我們的幅度,它並不是那麼直觀。

2)我們要利用方法,前面我們所說的利用深度學習的方法來估計我們這樣的表情的幅度,它也面臨著很多的困難。

好了,以上就是我們人臉表情相關的分享。

感謝您的閱讀,更多精彩盡在蜂口小程式~瞭解一下?
獲取免費內容,歡迎V信fengkou-IT勾搭~