機器人2025本期導(dǎo)讀 第一版: 第二版: 谷歌首屆 TensorFlow 開發(fā)者峰會 重磅發(fā)布 TensorFlow 1.0 微軟發(fā)布AI助手Cortana 提醒用戶及時查看郵件 第三版: 第四版:深度學習前沿算法思想
深度學習實踐:使用Tensorflow實現(xiàn)快速風格遷移
行為識別:讓機器學會“察言觀色”第一步
目前最全面的深度學習教程自學資源匯總
三角學回顧
2016年AlphaGo計算機圍棋系統(tǒng)戰(zhàn)勝頂尖職業(yè)棋手李世石,引起了全世界的廣泛關(guān)注,人工智能進一步被推到了風口浪尖。而其中的深度增強學習算法是AlphaGo的核心,也是通用人工智能的實現(xiàn)關(guān)鍵。本文將帶領(lǐng)大家了解深度增強學習的前沿算法思想,領(lǐng)略人工智能的核心奧秘。
深度增強學習(Deep Reinforcement Learning,DRL)是近兩年來深度學習領(lǐng)域迅猛發(fā)展起來的一個分支,目的是解決計算機從感知到?jīng)Q策控制的問題,從而實現(xiàn)通用人工智能。以Google DeepMind公司為首,基于深度增強學習的算法已經(jīng)在視頻、游戲、圍棋、機器人等領(lǐng)域取得了突破性進展。2016年Google DeepMind推出的AlphaGo圍棋系統(tǒng),使用蒙特卡洛樹搜索和深度學習結(jié)合的方式使計算機的圍棋水平達到甚至超過了頂尖職業(yè)棋手的水平,引起了世界性的轟動。AlphaGo的核心就在于使用了深度增強學習算法,使得計算機能夠通過自對弈的方式不斷提升棋力。深度增強學習算法由于能夠基于深度神經(jīng)網(wǎng)絡(luò)實現(xiàn)從感知到?jīng)Q策控制的端到端自學習,具有非常廣闊的應(yīng)用前景,它的發(fā)展也將進一步推動人工智能的革命。
當前深度學習已經(jīng)在計算機視覺、語音識別、自然語言理解等領(lǐng)域取得了突破,相關(guān)技術(shù)也已經(jīng)逐漸成熟并落地進入到我們的生活當中。然而,這些領(lǐng)域研究的問題都只是為了讓計算機能夠感知和理解這個世界。以此同時,決策控制才是人工智能領(lǐng)域要解決的核心問題。計算機視覺等感知問題要求輸入感知信息到計算機,計算機能夠理解,而決策控制問題則要求計算機能夠根據(jù)感知信息進行判斷思考,輸出正確的行為。要使計算機能夠很好地決策控制,要求計算機具備一定的“思考”能力,使計算機能夠通過學習來掌握解決各種問題的能力,而這正是通用人工智能(Artificial General Intelligence,AGI)(即強人工智能)的研究目標。通用人工智能是要創(chuàng)造出一種無需人工編程自己學會解決各種問題的智能體,最終目標是實現(xiàn)類人級別甚至超人級別的智能。
通用人工智能的基本框架即是增強學習(Reinforcement Learning,RL)的框架,如圖1所示。
智能體的行為都可以歸結(jié)為與世界的交互。智能體觀察這個世界,然后根據(jù)觀察及自身的狀態(tài)輸出動作,這個世界會因此而發(fā)生改變,從而形成回饋返回給智能體。所以核心問題就是如何構(gòu)建出這樣一個能夠與世界交互的智能體。深度增強學習將深度學習(Deep Learning)和增強學習(Reinforcement Learning)結(jié)合起來,深度學習用來提供學習的機制,而增強學習為深度學習提供學習的目標。這使得深度增強學習具備構(gòu)建出復(fù)雜智能體的潛力,也因此,AlphaGo的第一作者David Silver認為深度增強學習等價于通用人工智能DRL=DL+RL=Universal AI。
目前深度增強學習的算法都可以包含在Actor-Critic框架下,如圖2所示。
把深度增強學習的算法認為是智能體的大腦,那么這個大腦包含了兩個部分:Actor行動模塊和Critic評判模塊。其中Actor行動模塊是大腦的執(zhí)行機構(gòu),輸入外部的狀態(tài)s,然后輸出動作a。而Critic評判模塊則可認為是大腦的價值觀,根據(jù)歷史信息及回饋r進行自我調(diào)整,然后影響整個Actor行動模塊。這種Actor-Critic的方法非常類似于人類自身的行為方式。我們?nèi)祟愐彩窃谧陨韮r值觀和本能的指導(dǎo)下進行行為,并且價值觀受經(jīng)驗的影響不斷改變。在Actor-Critic框架下,Google DeepMind相繼提出了DQN,A3C和UNREAL等深度增強學習算法,其中UNREAL是目前最好的深度增強學習算法。下面我們將介紹這三個算法的基本思想。
DQN是Google DeepMind于2013年提出的第一個深度增強學習算法,并在2015年進一步完善,發(fā)表在2015年的《Nature》上。DeepMind將DQN應(yīng)用在計算機玩Atari游戲上,不同于以往的做法,僅使用視頻信息作為輸入,和人類玩游戲一樣。在這種情況下,基于DQN的程序在多種Atari游戲上取得了超越人類水平的成績。這是深度增強學習概念的第一次提出,并由此開始快速發(fā)展。
DQN算法面向相對簡單的離散輸出,即輸出的動作僅有少數(shù)有限的個數(shù)。在這種情況下,DQN算法在Actor-Critic框架下僅使用Critic評判模塊,而沒有使用Actor行動模塊,因為使用Critic評判模塊即可以選擇并執(zhí)行最優(yōu)的動作,如圖3所示。
在DQN中,用一個價值網(wǎng)絡(luò)(Value Network)來表示Critic評判模塊,價值網(wǎng)絡(luò)輸出Q(s,a),即狀態(tài)s和動作a下的價值?;趦r值網(wǎng)絡(luò),我們可以遍歷某個狀態(tài)s下各種動作的價值,然后選擇價值最大的一個動作輸出。所以,主要問題是如何通過深度學習的隨機梯度下降方法來更新價值網(wǎng)絡(luò)。為了使用梯度下降方法,我們必須為價值網(wǎng)絡(luò)構(gòu)造一個損失函數(shù)。由于價值網(wǎng)絡(luò)輸出的是Q值,因此如果能夠構(gòu)造出一個目標Q值,就能夠通過平方差MSE的方式來得到損失函數(shù)。但對于價值網(wǎng)絡(luò)來說,輸入的信息僅有狀態(tài)s,動作a及回饋r。因此,如何計算出目標Q值是DQN算法的關(guān)鍵,而這正是增強學習能夠解決的問題?;谠鰪妼W習的Bellman公式,我們能夠基于輸入信息特別是回饋r構(gòu)造出目標Q值,從而得到損失函數(shù),對價值網(wǎng)絡(luò)進行更新。
在實際使用中,價值網(wǎng)絡(luò)可以根據(jù)具體的問題構(gòu)造不同的網(wǎng)絡(luò)形式。比如Atari有些輸入的是圖像信息,就可以構(gòu)造一個卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)來作為價值網(wǎng)絡(luò)。為了增加對歷史信息的記憶,還可以在CNN之后加上LSTM長短記憶模型。在DQN訓練的時候,先采集歷史的輸入輸出信息作為樣本放在經(jīng)驗池(Replay Memory)里面,然后通過隨機采樣的方式采樣多個樣本進行minibatch的隨機梯度下降訓練。
DQN算法作為第一個深度增強學習算法,僅使用價值網(wǎng)絡(luò),訓練效率較低,需要大量的時間訓練,并且只能面向低維的離散控制問題,通用性有限。但由于DQN算法第一次成功結(jié)合了深度學習和增強學習,解決了高維數(shù)據(jù)輸入問題,并且在Atari游戲上取得突破,具有開創(chuàng)性的意義。
A3C算法是2015年DeepMind提出的相比DQN更好更通用的一個深度增強學習算法。A3C算法完全使用了Actor-Critic框架,并且引入了異步訓練的思想,在提升性能的同時也大大加快了訓練速度。A3C算法的基本思想,即Actor-Critic的基本思想,是對輸出的動作進行好壞評估,如果動作被認為是好的,那么就調(diào)整行動網(wǎng)絡(luò)(Actor Network)使該動作出現(xiàn)的可能性增加。反之如果動作被認為是壞的,則使該動作出現(xiàn)的可能性減少。通過反復(fù)的訓練,不斷調(diào)整行動網(wǎng)絡(luò)找到最優(yōu)的動作。AlphaGo的自我學習也是基于這樣的思想。
基于Actor-Critic的基本思想,Critic評判模塊的價值網(wǎng)絡(luò)(Value Network)可以采用DQN的方法進行更新,那么如何構(gòu)造行動網(wǎng)絡(luò)的損失函數(shù),實現(xiàn)對網(wǎng)絡(luò)的訓練是算法的關(guān)鍵。一般行動網(wǎng)絡(luò)的輸出有兩種方式:一種是概率的方式,即輸出某一個動作的概率;另一種是確定性的方式,即輸出具體的某一個動作。A3C采用的是概率輸出的方式。因此,我們從Critic評判模塊,即價值網(wǎng)絡(luò)中得到對動作的好壞評價,然后用輸出動作的對數(shù)似然值(Log Likelihood)乘以動作的評價,作為行動網(wǎng)絡(luò)的損失函數(shù)。行動網(wǎng)絡(luò)的目標是最大化這個損失函數(shù),即如果動作評價為正,就增加其概率,反之減少,符合Actor-Critic的基本思想。有了行動網(wǎng)絡(luò)的損失函數(shù),也就可以通過隨機梯度下降的方式進行參數(shù)的更新。
為了使算法取得更好的效果,如何準確地評價動作的好壞也是算法的關(guān)鍵。A3C在動作價值Q的基礎(chǔ)上,使用優(yōu)勢A(Advantage)作為動作的評價。優(yōu)勢A是指動作a在狀態(tài)s下相對其他動作的優(yōu)勢。假設(shè)狀態(tài)s的價值是V,那么A=Q-V。這里的動作價值Q是指狀態(tài)s下a的價值,與V的含義不同。直觀上看,采用優(yōu)勢A來評估動作更為準確。舉個例子來說,假設(shè)在狀態(tài)s下,動作1的Q值是3,動作2的Q值是1,狀態(tài)s的價值V是2。如果使用Q作為動作的評價,那么動作1和2的出現(xiàn)概率都會增加,但是實際上我們知道唯一要增加出現(xiàn)概率的是動作1。這時如果采用優(yōu)勢A,我們可以計算出動作1的優(yōu)勢是1,動作2的優(yōu)勢是-1?;趦?yōu)勢A來更新網(wǎng)絡(luò),動作1的出現(xiàn)概率增加,動作2的出現(xiàn)概率減少,更符合我們的目標。因此,A3C算法調(diào)整了Critic評判模塊的價值網(wǎng)絡(luò),讓其輸出V值,然后使用多步的歷史信息來計算動作的Q值,從而得到優(yōu)勢A,進而計算出損失函數(shù),對行動網(wǎng)絡(luò)進行更新。
A3C算法為了提升訓練速度還采用異步訓練的思想,即同時啟動多個訓練環(huán)境,同時進行采樣,并直接使用采集的樣本進行訓練。相比DQN算法,A3C算法不需要使用經(jīng)驗池來存儲歷史樣本,節(jié)約了存儲空間,并且采用異步訓練,大大加倍了數(shù)據(jù)的采樣速度,也因此提升了訓練速度。與此同時,采用多個不同訓練環(huán)境采集樣本,樣本的分布更加均勻,更有利于神經(jīng)網(wǎng)絡(luò)的訓練。
A3C算法在以上多個環(huán)節(jié)上做出了改進,使得其在Atari游戲上的平均成績是DQN算法的4倍,取得了巨大的提升,并且訓練速度也成倍的增加。因此,A3C算法取代了DQN成為了更好的深度增強學習算法。
UNREAL算法是2016年11月DeepMind提出的最新深度增強學習算法,在A3C算法的基礎(chǔ)上對性能和速度進行進一步提升,在Atari游戲上取得了人類水平8.8倍的成績,并且在第一視角的3D迷宮環(huán)境Labyrinth上也達到了87%的人類水平,成為當前最好的深度增強學習算法。
A3C算法充分使用了Actor-Critic框架,是一套完善的算法,因此,我們很難通過改變算法框架的方式來對算法做出改進。UNREAL算法在A3C算法的基礎(chǔ)上,另辟蹊徑,通過在訓練A3C的同時,訓練多個輔助任務(wù)來改進算法。UNREAL算法的基本思想來源于我們?nèi)祟惖膶W習方式。人要完成一個任務(wù),往往通過完成其他多種輔助任務(wù)來實現(xiàn)。比如說我們要收集郵票,可以自己去買,也可以讓朋友幫忙獲取,或者和其他人交換的方式得到。UNREAL算法通過設(shè)置多個輔助任務(wù),同時訓練同一個A3C網(wǎng)絡(luò),從而加快學習的速度,并進一步提升性能。
在UNREAL算法中,包含了兩類輔助任務(wù):第一種是控制任務(wù),包括像素控制和隱藏層激活控制。像素控制是指控制輸入圖像的變化,使得圖像的變化最大。因為圖像變化大往往說明智能體在執(zhí)行重要的環(huán)節(jié),通過控制圖像的變化能夠改善動作的選擇。隱藏層激活控制則是控制隱藏層神經(jīng)元的激活數(shù)量,目的是使其激活量越多越好。這類似于人類大腦細胞的開發(fā),神經(jīng)元使用得越多,可能越聰明,也因此能夠做出更好的選擇。另一種輔助任務(wù)是回饋預(yù)測任務(wù)。因為在很多場景下,回饋r并不是每時每刻都能獲取的(比如在Labyrinth中吃到蘋果才能得1分),所以讓神經(jīng)網(wǎng)絡(luò)能夠預(yù)測回饋值會使其具有更好的表達能力。在UNREAL算法中,使用歷史連續(xù)多幀的圖像輸入來預(yù)測下一步的回饋值作為訓練目標。除了以上兩種回饋預(yù)測任務(wù)外,UNREAL算法還使用歷史信息額外增加了價值迭代任務(wù),即DQN的更新方法,進一步提升算法的訓練速度。
UNREAL算法本質(zhì)上是通過訓練多個面向同一個最終目標的任務(wù)來提升行動網(wǎng)絡(luò)的表達能力和水平,符合人類的學習方式。值得注意的是,UNREAL雖然增加了訓練任務(wù),但并沒有通過其他途徑獲取別的樣本,是在保持原有樣本數(shù)據(jù)不變的情況下對算法進行提升,這使得UNREAL算法被認為是一種無監(jiān)督學習的方法?;赨NREAL算法的思想,可以根據(jù)不同任務(wù)的特點針對性地設(shè)計輔助任務(wù),來改進算法。
深度增強學習經(jīng)過近兩年的發(fā)展,在算法層面上取得了越來越好的效果。從DQN,A3C到UNREAL,精妙的算法設(shè)計無不閃耀著人類智慧的光芒。在未來,除了算法本身的改進,深度增強學習作為能夠解決從感知到?jīng)Q策控制的通用型學習算法,將能夠在現(xiàn)實生活中的各種領(lǐng)域得到廣泛的應(yīng)用。AlphaGo的成功只是通用人工智能爆發(fā)的前夜。
作者: Flood Sung,CSDN博主,人工智能方向研究生,專注于深度學習,增強學習與機器人的研究。
原文:http://geek.csdn.net/news/detail/138103
風格遷移(Style Transfer)是深度學習眾多應(yīng)用中非常有趣的一種,如圖,我們可以使用這種方法把一張圖片的風格“遷移”到另一張圖片上:
然而,原始的風格遷移(論文地址:https://arxiv.org/pdf/1508.06576v2.pdf)的速度是非常慢的。在GPU上,生成一張圖片都需要10分鐘左右,而如果只使用CPU而不使用GPU運行程序,甚至需要幾個小時。這個時間還會隨著圖片尺寸的增大而迅速增大。
這其中的原因在于,在原始的風格遷移過程中,把生成圖片的過程當做一個“訓練”的過程。每生成一張圖片,都相當于要訓練一次模型,這中間可能會迭代幾百幾千次。如果你了解過一點機器學習的知識,就會知道,從頭訓練一個模型要比執(zhí)行一個已經(jīng)訓練好的模型要費時太多。而這也正是原始的風格遷移速度緩慢的原因。
那有沒有一種方法,可以不把生成圖片當做一個“訓練”的過程,而當成一個“執(zhí)行”的過程呢?答案是肯定的。這就這篇快速風格遷移(fast neural style transfer):Perceptual Losses for Real-Time Style Transfer and Super-Resolution
快速風格遷移的網(wǎng)絡(luò)結(jié)構(gòu)包含兩個部分。一個是“生成網(wǎng)絡(luò)”(原文中為Transformation Network),一個是“損失網(wǎng)絡(luò)”(Loss Network)。生成網(wǎng)絡(luò)接收一個圖片當做輸入,然后輸出也是一張圖片(即風格遷移后的結(jié)果)。如下圖,左側(cè)是生成網(wǎng)絡(luò),右側(cè)為損失網(wǎng)絡(luò):
訓練階段:首先選定一張風格圖片。訓練的目標是讓生成網(wǎng)絡(luò)可以有效生成圖片。目標由損失網(wǎng)絡(luò)定義。
執(zhí)行階段:給定一張圖片,將其輸入生成網(wǎng)絡(luò),輸出這張圖片風格遷移后的結(jié)果。
我們可以發(fā)現(xiàn),在模型的“執(zhí)行”階段我們就可以完成風格圖片的生成。因此生成一張圖片的速度非常塊,在GPU上一般小于1秒,在CPU上運行也只需要幾秒的時間。
話不多說,直接上我的代碼的Github地址:hzy46/fast-neural-style-tensorflow
還有變換效果如下。
原始圖片:
風格遷移后的圖片:
以上圖片在GPU(Titan Black)下生成約需要0.8s,CPU(i7-6850K)下生成用時約2.9s。
關(guān)于快速風格遷移,其實之前在Github上已經(jīng)有了Tensorflow的兩個實現(xiàn):
junrushao1994/fast-neural-style.tf
OlavHN/fast-neural-style
但是第一個項目只提供了幾個訓練好的模型,沒有提供訓練的代碼,也沒有提供具體的網(wǎng)絡(luò)結(jié)構(gòu)。所以實際用處不大。
而第二個模型做了完整的實現(xiàn),可以進行模型的訓練,但是訓練出來的效果不是很好,在作者自己的博客中,給出了一個范例,可以看到生成的圖片有很多噪聲點:
我的項目就是在OlavHN/fast-neural-style的基礎(chǔ)上做了很多修改和調(diào)整。
與Tensorflow Slim結(jié)合
在原來的實現(xiàn)中,作者使用了VGG19模型當做損失網(wǎng)絡(luò)。而在原始的論文中,使用的是VGG16。為了保持一致性,我使用了Tensorflow Slim(地址:tensorflow/models)對損失網(wǎng)絡(luò)重新進行了包裝。
Slim是Tensorflow的一個擴展庫,提供了很多與圖像分類有關(guān)的函數(shù),已經(jīng)很多已經(jīng)訓練好的模型(如VGG、Inception系列以及ResNet系列)。
下圖是Slim支持的模型:
使用Slim替換掉原先的網(wǎng)絡(luò)之后,在損失函數(shù)中,我們不僅可以使用VGG16,也可以方便地使用VGG19、ResNet等其他網(wǎng)絡(luò)結(jié)構(gòu)。具體的實現(xiàn)請參考源碼。
改進轉(zhuǎn)置卷積的兩個Trick
原先我們需要使用網(wǎng)絡(luò)生成圖像的時候,一般都是采用轉(zhuǎn)置卷積直接對圖像進行上采樣。
這篇文章指出了轉(zhuǎn)置卷積的一些問題,認為轉(zhuǎn)置卷積由于不合理的重合,使得生成的圖片總是有“棋盤狀的噪聲點”,它提出使用先將圖片放大,再做卷積的方式來代替轉(zhuǎn)置卷積做上采樣,可以提高生成圖片的質(zhì)量,下圖為兩種方法的對比:
對應(yīng)的Tensorflow的實現(xiàn):
def resize_conv2d(x, input_filters, output_filters, kernel, strides, training): with tf.variable_scope('conv_transpose') as scope: height = x.get_shape()[1].value if training else tf.shape(x)[1] width = x.get_shape()[2].value if training else tf.shape(x)[2] new_height = height * strides * 2 new_width = width * strides * 2 x_resized = tf.image.resize_images(x, [new_height, new_width], tf.image.ResizeMethod.NEAREST_NEIGHBOR) shape = [kernel, kernel, input_filters, output_filters] weight = tf.Variable(tf.truncated_normal(shape, stddev=0.1), name='weight') return conv2d(x_resized, input_filters, output_filters, kernel, strides)
以上為第一個Trick。
第二個Trick是文章 Instance Normalization: The Missing Ingredient for Fast Stylization 中提到的,用 Instance Normalization來代替通常的Batch Normalization,可以改善風格遷移的質(zhì)量。
注意使用Optimizer和Saver
這是關(guān)于Tensorflow實現(xiàn)的一個小細節(jié)。
在Tensorflow中,Optimizer和Saver是默認去訓練、保存模型中的所有變量的。但在這個項目中,整個網(wǎng)絡(luò)分為生成網(wǎng)絡(luò)和損失網(wǎng)絡(luò)兩部分。我們的目標是訓練好生成網(wǎng)絡(luò),因此只需要去訓練、保存生成網(wǎng)絡(luò)中的變量。在構(gòu)造Optimizer和Saver的時候,要注意只傳入生成網(wǎng)絡(luò)中的變量。
找出需要訓練的變量,傳遞給Optimizer:
variable_to_train = []for variable in tf.trainable_variables(): if not(variable.name.startswith(FLAGS.loss_model)): variable_to_train.append(variable)train_op = tf.train.AdamOptimizer(1e-3).minimize(loss, global_step=global_step, var_list=variable_to_train)
總之是做了一個還算挺有趣的項目。代碼不是特別多,如果只是用訓練好的模型生成圖片的話,使用CPU也可以在幾秒內(nèi)運行出結(jié)果,不需要去搭建GPU環(huán)境。建議有興趣的同學可以自己玩一下。(再貼下地址吧:hzy46/fast-neural-style-tensorflow)
作者:何之源,復(fù)旦大學計算機科學碩士在讀,研究方向為人工智能以及機器學習的應(yīng)用。
來源:公眾號黑信息
電影短片《Changing Batteries》講了這樣一個故事:獨居的老奶奶收到兒子寄來的一個機器人,這機器人善于察言觀色,很快就跟老奶奶“心有靈犀”,不僅能在老奶奶口渴時為她端水、在老奶奶掃地時接過老奶奶的掃把,做力所能及的家務(wù)活,如果老奶奶在椅子上看電視睡著了,機器人還為她輕輕蓋上踏足。有了它,老奶奶又重新感受到久違的快樂,過上了更輕松的生活[1]……咳咳,催淚的故事講完了,接下來我們先說說這機器人的察言觀色技能是怎么實現(xiàn)的。
在人工智能研究領(lǐng)域,這一技能叫人體行為識別,是智能監(jiān)控、人機交互、機器人等諸多應(yīng)用的一項基礎(chǔ)技術(shù)。以電影提到的老人智能看護場景為例,智能系統(tǒng)通過實時檢測和分析老人的行動,判斷老人是否正常吃飯、服藥、是否保持最低的運動量、是否有異常行動出現(xiàn)(例如摔倒), 從而及時給予提醒,確保老人的生活質(zhì)量不會由于獨自居住而有所降低。第二個例子是人機交互系統(tǒng),通過對人的行為進行識別,猜測用戶的“心思”,預(yù)測用戶的意圖,及時給予準確的響應(yīng)。第三個例子是醫(yī)院的康復(fù)訓練,通過對動作行為的規(guī)范程度做出識別,評估恢復(fù)程度以提供更好的康復(fù)指導(dǎo)等。
俗話說“排骨好吃,骨頭難啃”,行為識別是一項具有挑戰(zhàn)性的任務(wù),受光照條件各異、視角多樣性、背景復(fù)雜、類內(nèi)變化大等諸多因素的影響。對行為識別的研究可以追溯到1973年,當時Johansson通過實驗觀察發(fā)現(xiàn),人體的運動可以通過一些主要關(guān)節(jié)點的移動來描述,因此,只要10-12個關(guān)鍵節(jié)點的組合與追蹤便能形成對諸多行為例如跳舞、走路、跑步等的刻畫,做到通過人體關(guān)鍵節(jié)點的運動來識別行為[2]。正因為如此,在Kinect的游戲中,系統(tǒng)根據(jù)深度圖估計出的人體骨架(Skeleton,由人體的一些關(guān)節(jié)點的位置信息組成),對人的姿態(tài)動作進行判斷,促成人機交互的實現(xiàn)。另一個重要分支則是基于RGB視頻做行為動作識別。與RGB信息相比,骨架信息具有特征明確簡單、不易受外觀因素影響的優(yōu)點。我們在這里主要探討基于骨架的行為識別及檢測。
人體骨架怎么獲得呢?主要有兩個途徑:通過RGB圖像進行關(guān)節(jié)點估計(Pose Estimation)獲得[3][4],或是通過深度攝像機直接獲得(例如Kinect)。每一時刻(幀)骨架對應(yīng)人體的K個關(guān)節(jié)點所在的坐標位置信息,一個時間序列由若干幀組成。行為識別就是對時域預(yù)先分割好的序列判定其所屬行為動作的類型,即“讀懂行為”。但在現(xiàn)實應(yīng)用中更容易遇到的情況是序列尚未在時域分割(Untrimmed),因此需要同時對行為動作進行時域定位(分割)和類型判定,這類任務(wù)一般稱為行為檢測。
基于骨架的行為識別技術(shù),其關(guān)鍵在于兩個方面:一方面是如何設(shè)計魯棒和有強判別性的特征,另一方面是如何利用時域相關(guān)性來對行為動作的動態(tài)變化進行建模。
我們采用基于LSTM (Long-Short Term Memory)的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)來搭建基礎(chǔ)框架,用于學習有效的特征并且對時域的動態(tài)過程建模,實現(xiàn)端到端(End-to-End)的行為識別及檢測。關(guān)于LSTM的詳細介紹可參考[5]。我們的工作主要從以下三個方面進行探討和研究:
如何利用空間注意力(Spatial Attention)和時間注意力(Temporal Attention)來實現(xiàn)高性能行為動作識別 [8]?
如何利用人類行為動作具有的共現(xiàn)性(Co-occurrence)來提升行為識別的性能[7]?
如何利用RNN網(wǎng)絡(luò)對未分割序列進行行為檢測(行為動作的起止點的定位和行為動作類型的判定)[9]?
注意力模型(Attention Model)在過去這兩年里成了機器學習界的“網(wǎng)紅”,其想法就是模擬人類對事物的認知,將更多的注意力放在信息量更大的部分。我們也將注意力模型引入了行為識別的任務(wù),下面就來看一下注意力模型是如何在行為識別中大顯身手的。
時域注意力:眾所周知,一個行為動作的過程要經(jīng)歷多個狀態(tài)(對應(yīng)很多時間幀),人體在每個時刻也呈現(xiàn)出不同的姿態(tài),那么,是不是每一幀在動作判別中的重要性都相同呢?以“揮拳”為例,整個過程經(jīng)歷了開始的靠近階段、揮動拳腳的高潮階段以及結(jié)束階段。相比之下,揮動拳腳的高潮階段包含了更多的信息,最有助于動作的判別。依據(jù)這一點,我們設(shè)計了時域注意力模型,通過一個LSTM子網(wǎng)絡(luò)來自動學習和獲知序列中不同幀的重要性,使重要的幀在分類中起更大的作用,以優(yōu)化識別的精度。
空域注意力:對于行為動作的判別,是不是每個關(guān)節(jié)點在動作判別中都同等重要呢?研究證明,一些行為動作會跟某些關(guān)節(jié)點構(gòu)成的集合相關(guān),而另一些行為動作會跟其它一些關(guān)節(jié)點構(gòu)成的集合相關(guān)。比如“打電話”,主要跟頭、肩膀、手肘和手腕這些關(guān)節(jié)點密切相關(guān),同時跟腿上的關(guān)節(jié)點關(guān)系很小,而對“走路”這個動作的判別主要通過腿部節(jié)點的觀察就可以完成。與此相適應(yīng),我們設(shè)計了一個LSTM子網(wǎng)絡(luò),依據(jù)序列的內(nèi)容自動給不同關(guān)節(jié)點分配不同的重要性,即給予不同的注意力。由于注意力是基于內(nèi)容的,即當前幀信息和歷史信息共同決定的,因此,在同一個序列中,關(guān)節(jié)點重要性的分配可以隨著時間的變化而改變。
圖1.2展示了網(wǎng)絡(luò)框架圖。時域注意力子網(wǎng)絡(luò) (Temporal Attention)學習一個時域注意力模型來給不同幀分配合適的重要性,并以此為依據(jù)對不同幀信息進行融合??沼蜃⒁饬ψ泳W(wǎng)絡(luò)(Spatial Attention)學習一個時域注意力模型來給不同節(jié)點分配合適的重要性,作用于網(wǎng)絡(luò)的輸入關(guān)節(jié)點上。
空時注意力模型能帶來多大的好處呢?我們在SBU 數(shù)據(jù)庫、NTU RGB+D 數(shù)據(jù)庫的Cross Subject(CS) 和 Cross View(CV) 設(shè)置上分別進行了實驗,以檢測其有效性。圖1.3展示了性能的比較:LSTM表示只有主LSTM網(wǎng)絡(luò)時的性能(沒引入注意力模型)。當同時引入時域注意力(TA)和空域注意力(SA)網(wǎng)絡(luò)后,如STA-LSTM所示,識別的精度實現(xiàn)了大幅提升。
細心的讀者可能已經(jīng)發(fā)現(xiàn),序列中的空域注意力和時域注意力具體為多大是沒有參考的(不知道Groundtruth)。網(wǎng)絡(luò)是以優(yōu)化最終分類性能來自動習得注意力。那么,學到的注意力模型分配的注意力數(shù)值是什么樣呢?我們可視化并分析了空時注意力模型的輸出。圖1.4可視化了在 “揮拳”行為動作的測試序列上,模型輸出的空域注意力權(quán)重的大小,時域注意力權(quán)重值 以及相鄰幀時域注意力的差值。如圖1.4(a)中所示,主動方(右側(cè)人)的節(jié)點被賦予了更大的權(quán)值,且腿部的節(jié)點更加活躍。圖(b)展示了時域注意力的變化,可以看到,時域注意力隨著動作的發(fā)展逐漸上升,相鄰幀時域注意力差值的變化則表明了幀間判別力的增量。時域注意力模型會對更具判別力的幀賦予較大的注意力權(quán)重。對不同的行為動作,空間注意力模型賦予較大權(quán)重的節(jié)點也不同,整體和人的感知一致。
欣賞完“網(wǎng)紅”的魅力之后,我們還是回歸一下LSTM網(wǎng)絡(luò)的本真吧。近年來,除了在網(wǎng)絡(luò)結(jié)構(gòu)上的探索,如何在網(wǎng)絡(luò)設(shè)計中利用人的先驗知識以及任務(wù)本身的特性來提升性能,也越來越多地受到關(guān)注。
著眼于人的行為動作的特點,我們將行為動作中關(guān)節(jié)點具有的共現(xiàn)性特性引入到LSTM網(wǎng)絡(luò)設(shè)計中,將其作為網(wǎng)絡(luò)參數(shù)學習的約束來優(yōu)化識別性能。人的某個行為動作常常和骨架的一些特定關(guān)節(jié)點構(gòu)成的集合,以及這個集合中節(jié)點的交互密切相關(guān)。如要判別是否在打電話,關(guān)節(jié)點“手腕”、“手肘”、“肩膀”和“頭”的動作最為關(guān)鍵。不同的行為動作與之密切相關(guān)的節(jié)點集合有所不同。例如對于“走路”的行為動作,“腳腕”、“膝蓋”、“臀部”等關(guān)節(jié)點構(gòu)成具有判別力的節(jié)點集合。我們將這種幾個關(guān)節(jié)點同時影響和決定判別的特性稱為共現(xiàn)性(Co-occurrence)。
在訓練階段,我們在目標函數(shù)中引入對關(guān)節(jié)點和神經(jīng)元相連的權(quán)重的約束,使同一組的神經(jīng)元對某些關(guān)節(jié)點組成的子集有更大的權(quán)重連接,而對其他節(jié)點有較小的權(quán)重連接,從而挖掘關(guān)節(jié)點的共現(xiàn)性。如圖2.2所示,一個LSTM 層由若干個LSTM神經(jīng)元組成,這些神經(jīng)元被分為K組。同組中的每個神經(jīng)元共同地和某些關(guān)節(jié)點有更大的連接權(quán)值(和某類或某幾類動作相關(guān)的節(jié)點構(gòu)成關(guān)節(jié)點子集),而和其他關(guān)節(jié)點有較小的連接權(quán)值。不同組的神經(jīng)元對不同動作的敏感程度不同,體現(xiàn)在不同組的神經(jīng)元對應(yīng)于更大連接權(quán)值的節(jié)點子集也不同。在實現(xiàn)上,我們通過對每組神經(jīng)元和關(guān)節(jié)點的連接加入組稀疏(Group Sparse)約束來達到上述共現(xiàn)性的挖掘和利用。
關(guān)節(jié)點共現(xiàn)性約束的引入,在SBU數(shù)據(jù)庫上帶來了3.4%的性能改進。通過引入Dropout技術(shù),最終實現(xiàn)了高達90.4%的識別精度。
前面討論了對于時域分割好的序列的行為動作分類問題。但是想要計算機get到“察言觀色”的技能并不那么容易。在實際的應(yīng)用中多有實時的需求,而攝像頭實時獲取的視頻序列并沒有根據(jù)行為動作的發(fā)生位置進行預(yù)先時域分割,因此識別系統(tǒng)不僅需要判斷行為動作的類型,也需要定位行為動作發(fā)生的位置,即進行行為動作檢測。如圖3.1所示,對于時間序列流,檢測系統(tǒng)在每個時刻給出是否當前是行為動作的開始或結(jié)束,以及行為動作的類型信息。
在線(Online)的行為動作檢測常常采用滑窗的方法,即對視頻序列流每次觀察一個時間窗口內(nèi)的內(nèi)容,對其進行分類。然而基于滑窗的方法常常伴隨著冗余的計算,性能也會受到滑動窗口大小的影響。
對于骨架序列流,我們設(shè)計了基于循環(huán)神經(jīng)網(wǎng)絡(luò)LSTM的在線行為動作檢測系統(tǒng),在每幀給出行為動作判定的結(jié)果。LSTM的記憶性可以避免顯式的滑動窗口設(shè)計。如圖3.3所示,網(wǎng)絡(luò)由LSTM 層和全連層(FC Layer)組成前端的網(wǎng)絡(luò)Deep LSTM Network, 后面連接的分類網(wǎng)絡(luò) (Classification Network)用于判定每幀的動作類別,同時,回歸網(wǎng)絡(luò) ( Regression Network )用于輔助確定動作行為的起止幀。圖3.4展示了該回歸子網(wǎng)絡(luò)對起止點位置的目標回歸曲線,即以起始點(結(jié)束點)為中心的高斯形狀曲線。在測試時,當發(fā)現(xiàn)代表起始點的回歸曲線到達局部峰值時,便可以定位為行為動作的起點位置。由于LSTM網(wǎng)絡(luò)對時間序列處理的強大能力,加上聯(lián)合分類回歸的設(shè)計,聯(lián)合分類和回歸循環(huán)網(wǎng)絡(luò)(JCR-RNN)實現(xiàn)了快速準確的行為動作檢測。
由于行為識別技術(shù)在智能監(jiān)控、人機交互、視頻序列理解、醫(yī)療健康等眾多領(lǐng)域扮演著越來越重要的角色,研究人員正使出“洪荒之力”提高行為識別技術(shù)的準確度。說不定在不久的某一天,你家門口真會出現(xiàn)一個能讀懂你的行為、和你“心有靈犀”的機器人,對于這一幕,你是不是和我們一樣充滿期待?
[1] https://movie.douban.com/subject/25757903/
[2] Gunnar Johansson. Visual perception of biological motion and a model for it is analysis. Perception and Psychophysics 14(2), pp 201–211, 1973.
[3] Alejandro Newell, Kaiyu Yang, Jia Deng. Stacked Hourglass Networks for Human Pose Estimation, In ECCV, 2016.
[4] Zhe Cao, Tomas Simon, Shih-En Wei, Yaser Sheikh. Realtime Multi-person 2D Pose Estimation using Part Affinity Fields. arXiv preprint arXiv:1611.08050, 2016.
[5] http://colah.github.io/posts/2015-08-Understanding-LSTMs/
[6] CVPR2011 Tutorial on Human Activity Recognition.
http://michaelryoo.com/cvpr2011tutorial/
[7] Wentao Zhu, Cuiling Lan, Junliang Xing, Wenjun Zeng, Yanghao Li, Li Shen, Xiaohui Xie. Co-Occurrence Feature Learning for Skeleton Based Action Recognition Using Regularized Deep LSTM Networks. In AAAI, 2016.
[8] Sijie Song, Cuiling Lan, Junliang Xing, Wenjun Zeng, Jiaying Liu. An End-to-End Spatio-Temporal Attention Model for Human Action Recognition from Skeleton Data. Accepted by AAAI, 2017.
[9] Yanghao Li, Cuiling Lan, Junliang Xing, Wenjun Zeng, Chunfeng Yuan, Jiaying Liu. Online Human Action Detection Using Joint Classification-Regression Recurrent Neural Networks. In ECCV, 2016.
作者簡介:蘭翠玲博士,微軟亞洲研究院副研究員,從事計算機視覺,信號處理方面的研究。她的研究興趣包括行為識別、姿態(tài)估計、深度學習、視頻分析、視頻壓縮和通信等,并在多個頂級會議,期刊上發(fā)表了近20篇論文,如AAAI, ECCV, TCSVT等。
來源::微軟研究院AI頭條,授權(quán)CSDN發(fā)布。