葉聰, 現任騰訊云AI產品中心高級研發工程師,前美國亞馬遜 AWS 人工智能技術經理,負責領導開發了 Amazon Alexa 智能語音助手背后的AI云服務Lex。在多年的云計算系統研發經歷中,負責了領導了多個百萬用戶級產品的架構設計和開發,并且具有豐富的跨國團隊和項目管理經驗。美國明尼蘇達大學電子工程及計算機系碩士,其后在斯坦福大學攻讀研究生證書。
1
朋友圈爆款活動背后的秘密
很榮幸受到云加社區邀請來做這次分享。我們將主要分六個部分來介紹,首先我想和大家介紹一下最近風靡朋友圈的爆款計算機視覺小游戲的背后是怎么回事兒。然后會由淺入深一步步從最基礎的計算機視覺技術知識,快速地帶大家去了解一些學習計算機視覺技術需要哪些技術知識。之后會再談談計算機視覺技術的歷史和最近興起的深度學習方法。同時會告訴大家在這背后的云端AI能力是如何支撐的,最后會給不同層次的想要學習計算機視覺技術的朋友們一些技能進階的建議。
今年我們組織了一場五四青年節的活動,大家上傳自己的照片,就能匹配到民國時期的一些人物。這個應用背后就利用到了人臉匹配技術,我們會利用一些算法來匹配到跟你長相最相似的人物。這個活動當時反應可以說是非常熱烈的,相信不少人也參與過這個活動。
其實類似的活動還有很多,比如軍裝照等,回到人臉融合等等。這些應用都是運用了人臉融合的技術。
2
計算機視覺基礎知識
如果我們想要去學習一些計算機視覺技術的話,我們要先從歷史上了解計算機視覺技術是如何從幕后走到臺前來的。首先計算機視覺定義是怎么樣的?其實從很多的書上不同的材料上都會對這些區別有不同的定義。
我比較喜歡的定義是從工程學的角度來講,計算機視覺是使機器模仿人的視覺的能力和任務變成自動化。我們人可以通過我們的視覺去理解信息。現在的計算機視覺機器學習算法,可以把這個流程變成一個自動的形式。
計算機視覺其實呢包含很多的分支,包括比如物體識別、語義分割、運動追蹤、三維重建、視覺問答(VQA)、還有動作識別等等。
隨著計算機視覺算法模型的日漸強大,它的使用面越來越廣,幾乎在所有我們人眼可以識別的領域,計算機視覺將會逐步的一個一個的去替換掉。所以從總體來說這個場景是非常廣闊的,潛力是非常巨大的。
底下有幾張照片,左下角那張呢是非常經典的應用叫人臉識別(Facial Recognition),中間的是現在非常火熱的無人駕駛,右邊的就是是情景分割(Semantic Segmentation)。情景分割這個詞其實是有一些不同的含義的,在LP領域也有情景分割這個說法,不過他是對一句話中的不同的詞或詞性,甚至是一些語義進行一些分割。
而計算機視覺領域的語義分割稍微有些不同,它是對一個圖像里的元素進行像素層面的細致的區分。上面右邊這張圖我們可以看到比如植物是綠色的,道路是灰色的,人是紅色的,然后汽車是藍色的,這些都是一些非常細致的Pixel Level。
非常有意思件事是我們人類去了解一個東西的顏色,我們是可以通過我們的眼睛的視網膜成像的,但是機器它是怎么去讀這個圖像的呢?這就要提出一個叫做RGB的概念。
什么是RGB?RGB就是Red,Green and Blue紅綠藍三種顏色。理論上自然界的所有的色彩都可以用這三種顏色來進行描述,計算機會把每種顏色給予一個八位的一個二進制去表示,也就是25種不同的數字去描述一個像素點。
這就非常有意思了,3*8位是24位,那但是現在我們大家所說的這個真彩色是32位,那這里的八位是什么?其實它是一個叫Alpha channel。它是一個代表一個圖像,某個像素是不是透明的,它是一個透明值,所以就是3×8+8,最后就是32位。 24位的顏色我們以前叫做全彩色,而32位是真彩色,現在大家只要用RGB去表示圖像,那基本上我們說32位的話都是帶著個八位的Alpha Channel的。
我們可以看到PPT上面右邊有三張圖。最上面那張就是黑白的灰度圖,中間一張呢就是我們剛才說的全彩圖,而下面一張就是真彩圖,這張圖加了八位的透明Channel在里面。
計算機視覺的素材還是非常多的,不僅僅是剛才看到那些大家用手機單反相機拍攝出來的照片,我們還有很多在大氣天文醫療領域的。比如左邊是航拍熱成像圖,中間有我們的胸的這種ct圖X光圖,然后還有右下角的是一些超倍顯微鏡看到的一些非常小的細微的人眼無法看到的圖,這些都是計算機視覺可以去學習去應用的素材。接下來聊一下計算機視覺的處理的分級。
(計算機視覺處理分級)
這個分級其實是為了幫助我們更好的去理解計算機視覺所要解決的一個任務,它分為Low Level, Mid Level和High Level.聽名字好像他們分別對應的就是低中高三個級別,但其實Low Level意思是我們離這個問題的細節比較近,而High Level比較遠,比如像Low Level中間有降噪這一項。大家可以試想一個場景,我們離這個照片的每個細節非常近的情況下,我們才可以處理這些噪點,反過來講High Level的話就比較高,比如像Scene Understanding就是對這個情景的理解,這種情況是需要我們要對整個圖有個宏觀理解才能進行處理。
我們先來看看Low Level Processing中的一些常見例子,它包括降噪,強化,壓縮和標記,可以說它的使用范圍已經非常廣泛了。比如左邊一張是我們拍的胸部的X光圖。如果我們去醫院拍張片子,基本上就是我們看到的是下面一張圖,而不是上面那張。但上面那張其實是原片,計算機視覺的Low Level Processing可以利用各種算法對這個圖片的景深進行加強,在一些暗部進行強化,在一些亮部進行減弱,從而使這張圖片變得很清晰。我們由一張比較混沌的圖片中間經過優化,可以看到他非常清晰的骨骼血管這些脈絡,這就是圖像處理的厲害的地方。
右邊是一個pcb板的圖,這是一個工業界的應用,原片上面充滿了噪點。很多素質并不高的照相機拍出來的效果基本上就是這樣,經過降噪的處理之后,它就可以變成非常清晰的pcb的圖。我們可以清晰地看到每一條電路,每一個模塊。
底下一張是航拍圖,由于云和霧霾等各種因素,這種航拍圖是非常模糊的,那經過將近十節的enhancement的強化之后,我們可以加強景深對比路,能夠很清晰地看到圖上對象的實體,包括建筑和機場。右邊是registration,它等于把兩張不同角度的圖給對應上進行匹配,這也是一個很常見的應用。
Mid Level Processing包括Classification、Segmentation這些。我很喜歡左下角這張圖,這張圖是來源于斯坦福大學李飛飛教授的一門計算機視覺的入門課程,最左下角的這張圖計算機識別處理叫分類(Classification),它僅僅從圖片上識別出來這里有一只貓,并不知道這個貓的位置或者這只是什么貓,這是一個分類的問題,是屬于Classification。
進一步的第二張圖有個紅色的框框,這個就是已經對圖上的貓進行了一個定位,是Classification加上Localization,就是對圖上的對象的定位。再進一步的話,我們從圖上不僅看到了有貓,還有狗,還有小鴨子。整張圖所有的對象都被識別出來了,這是一個典型的Object Detection場景,也就是對象檢測。我們把圖片上所有的對象很清晰地識別了出來。再進一步的話叫對象檢測Instance Segmentation,這個意思就是我們不單知道圖像上有哪些對象,我們還把它進行了一些劃分。 劃分的意思就是把一張圖上的不同的元素可以區分出來并標注。
右邊是我剛才我們之前復用的一張情景識別的圖,它包括了行人,還有各種車輛。情景識別其實是左邊所有的這個應用的一個更高層次的進化。從左到右可以看出,我們從只知道這個圖上有什么發展到了我們能知道這個圖上有所有的東西,包括在什么位置都可以知道,這就是我們在Mid Level Processing中是怎么一步一步的把一個圖的所有信息給挖掘出來。
接下來我們會聊一下High Level Processing,這也是目前最火熱的一個部分,包括左邊的人臉識別。人臉識別其實就是根據我們人臉的一些模型,從臉上尋找到很多的特征點,即關鍵點,包括呢眉毛,眼睛的邊框,然后對它進行匹配建模。
人臉底下是非常經典的人無人駕駛的圖,這方面有非常多不同的實現方式,總體來說包括用激光雷達和無激光雷達兩種,無人駕駛也是未來的一個趨勢。現在全世界范圍內做無人駕駛的公司非常多,國外比較出名的包括特斯拉,這是一家非常執著于不使用激光雷達,只是用計算機視覺方式去解決無人駕駛問題的公司。其他用雷達公司就非常多,比如通用汽車福特,包括歐洲的一些公司,國內的話也有很多。
中間這張呢是Scene Understanding,它其實就是對畫面里的所有的元素和它們之間的關系以及他的行為進行全面識別。,和之前識別小貓小狗的區別在于,這張圖片上面呢我們不僅識別到了有兩個孩子,我們還識別到了他們手上拿的是什么,以及他在什么地方,甚至還有他們要做什么這一系列信息,,并把這些信息形成了一個對象樹,上面不同的顏色代表不同的詞性,比如誰在什么地方做什么,這些東西我們都從這個圖上獲得了。
這就是High Level Processing我們希望得到的一個結果。它不是簡單的對一個圖片或是單純的對象的一個匹配和識別,而是對整張圖片有一個全面的了解。
最右邊一張是醫學上心臟血管的這個造影圖,這好像是英國某大學和英國皇家醫學會合作做的一個項目。利用計算機識別的成像,可以在手術前讓醫生對患者的整個心血管有非常清晰的了解。因為它可以知道每個血管的血寬,在哪里可能有風險,利用這個技術的話,醫生在做手術就可以大大的降低手術失敗的風險,也可以大大的降低后續并發癥的影響。這些都是High Level Processing的一些應用。
其他常見的計算機視覺的例子有人臉識別,OCR文本的識別,圖上展示的是一個比較老的技術,它是用一個激光筆,可能比較老的一些公司會使用這種方式。用激光筆去掃描文字,然后把掃描的文字轉換成文本。現在基本上已經不需要這種方法了,因為OCR技術已經非常成熟,只要大家清晰的拍一張照片,不管是中文還是英文,它都可以轉換成一段非常清晰的文字,并沒有任何什么問題,而速度會非常快。
右邊的車牌識別,就是大家如果吃罰單但沒看到交警,很多時候是由于這個技術。
接下來聊一個比較有趣的話題——目標跟蹤。我對它評價是Full of potentials, but chanllenged.這個技術本身我覺得是非常有前景的,但是非常難。因為中間過程會有很多的因素影響最后的效果,所以目前來說這是一個很多人都在研究的熱點,并且目前還沒有。
首先我們上面看到這是一場NBA球賽的視頻的截圖,假如我們想追蹤其中某一個球員的話,它會出現什么問題呢?首先它是在不斷的移動的,對于攝像頭而言它的位置是不斷在變化的,所以會出現各種不同的形變,運動員的姿勢也是在變的。
右邊這張圖也是由于各種燈光角度的照射強弱的問題,運動員在視頻的截圖上的看起來的樣子是不一樣的,它的光感也是不一樣的,這也是一個匹配的難點。然后底下幾張圖顯示圖上可能會出現什么問題,比如人在快速移動的時候,視頻中間會出現模糊,這是一個非常常見的現象,然后由于背景色可能跟前景色太過接近,背景可能會影響到前景色產生干擾,這也是非常常見的,那這幾種情況呢都會影響目標跟蹤的效果。
右邊則是一些其他的例子,比如不同的角度,人的頭可以旋轉,可以遮擋,甚至在有些時候它會出在畫面之外,這些情況都可以讓一個目標跟蹤算法的失敗。如果大家對這個領域很有興趣的話,可以考慮一下在這個領域做一些研究,因為目前來說并沒有某一種算法可以很好很完美地解決這些問題,也說明這個方向的研究的潛力還是比較大的。
其實不僅是一個問題,我把這類問題統稱為多模態問題——Multi-modal Problem.意思就是在解決問題的時候,我們需要不止一種機器學習的能力,還需要結合多種能力去實現。比如左邊那個VQA,就是我們給出一張圖片,任何的人可以去問一個問題,我們的模型要從圖片中去識別,針對我們問的問題給出一個合理的答案。
比如這個右上角有兩個寶寶,一個坐在冰箱里,一個在媽媽的懷抱里。 那如果我們問這個孩子坐在哪?首先第一步要有一個情景識別的一個引擎去理解這個圖片,知道這圖片里面有什么,比如有孩子,他在干什么,他坐在什么上,坐在冰箱里或者坐在媽媽懷抱里。另外呢還要有一個模型能去理解我們的這個問句,這個問題是什么?問的是在哪里?不是問是誰也不是問怎么樣。而且對象是這個孩子,需要知道他在哪里坐著。這個例子等于需要兩個模型來解決我們的問題,一個理解圖,一個理解文字,還需要去匹配他們,它是一系列的不同的模型結合在一起,一個這個圖像的識別的引擎,加上一個NLPU識別的引擎,還有一個匹配引擎,一起去協作才能解決這個問題。這就是很典型的一個多模態問題。
右邊是Caption Generation的示例。 Caption Generation.就是根據圖像自動生成一段描述該圖像的文本語言。上面的這兩張圖片左邊是一個女士在一個沙灘邊散步,根據我們不同的情況,, 輸入了不同的訓練文本,我們就可以生成一些話去描述這個情景,右邊是在公園也是一樣的,后面我可以詳細再聊一下機器是如何實現。
如果要想了解到機器學習每一步的發展,首先我們就要聊一聊一些為我們實現這個目的一些算法,也就是機器學習的圖像應用的傳統方法。
3
曾經的圖像處理- 傳統方法
首先我們要去做圖像處理的時候,機器去理解圖像的時候無法像人類一樣去讀取信息,我們必須要把它轉化成機器能理解的這些數據,那應該怎么做呢?
首先我們就需要用一些濾波器從這圖片中提取信息,把模擬的信號轉換成數字信號。這些濾波器并不僅僅是使用在圖像處理這個領域,包括信號處理,還有一些其他語音處理中間都會使用。常見的濾波器有幾種,比如空間,傅里葉,還有小波濾波器等等,這幾種是比較常見的。
那如果我們想要去對圖像進一步的利用,我們還需要什么呢?首先我們要能夠理解到這個圖片中間它到底是怎么回事,達到這個目的的方式,就是我們要從這個圖片中抓取一些特征,我們首先要設計這個特征。設計特征的方法有很多種,包括比如像SIFT,對稱特性還有HOG。
拿到所有圖片的特征以后,我們會做進一步的處理,使用的傳統方法包括,比如SVM,AdaBoost,Bayesian等等。這些算法本身也不是圖像識別領域而獨有的,也是在長時間的過程中間,我們在不同的領域,包括語音LP我們都會去使用這種類似的方法。
大家會發現最終我們解決問題是可以歸納成一些比較統一的問題的,再進一步的話我們需要做這個圖像對象的劃分,還有識別的時候,還有一些很經典的一些算法。
這是一個非常好用也非常簡單的一個提取圖像特征的方法,叫做Edge Detection邊緣檢測,比如說左邊這張圖片是一個很多硬幣的照片,我們可以其中提取到整個硬幣的邊緣,還有它其中花紋的邊緣,這樣我們就把這個圖片的最重要的信息提取出來了。
這個叫Haar特征,Haar特征適用的場景會跟精確一些,整張圖片在不同的地方會有不同的灰度變化,Haar特征其實就是描述反應灰度變化的。
它一般會分為幾種描述的特征,包括邊緣特征,線性特征,還有中心和對角的特征,這種特征會用黑和白來表示。一般定義的這種模板特征,白色減去黑色就是它的特征值相似和。整個Haar特征其實是反映這個圖片的灰度變化的。
可能有人就會問了,說那很多時候圖像的灰度變化并不完全是水平和垂直,所以Haar特征其實有一個進化的算法就是Haar like呢就是加入了45度角這個特性。
不管如何,它是有限度的方向,所以這就引出來后面幾種算法,在Haar特征的解決不了問題或者效果不好的情況下,這些算法可以發揮效果。
比如像這種叫Local Symmetric局部對稱性算法。局部對稱性算法可以解決很多Haar特征提取效果不好的情況。它是根據我們一個對象的重心點的位置,越靠近重心點的越亮,越靠近邊緣的話越暗,用一個重心的這個特征去代表這個對象。很多圖片實際上是有一定的對稱性的,比如像我們拍照的人,拍攝的一些房子,在物理上它都是有對稱的特性的。所以利用這種局部特征對稱性,就很容易提取這些照片中的一些有效信息。
下面聊聊到一個非常經典的算法叫尺度不變性,這里可能就要牽扯到一個尺度的概念。
什么是尺度?尺度空間其實是描述我們人從遠到近看待事物的一個過程。比如我們看一片樹林,我們只能看到樹的輪廓,我們看不到每片葉子。但如果我們慢慢的靠近這個樹,我們就能看到每個葉片,甚至能看到兩片葉片的區別,看到葉片上的紋路是什么樣的。其實這整個的變化就是一個尺度的一個變化。
尺度不變特性的使用方式是,我們會在這個圖片上面去提取一些關鍵的尺度的點,在變化的時候,我們就嘗試用這些不變的點去做匹配,在每個方向向量上去獲得一些參數。然后利用這樣的情況我們就可以去識別一些角度或是旋轉之后都不太一樣的照片。即使這個圖片可能會有一些遮擋,只要它的尺度性的那個點沒有被遮蔽,我們一樣是可以去得獲得識別的這種效果的。
還有一種跟灰度有關的方法叫HOG方向梯度直方圖,它也是利用灰度的原理,把整個圖形分成很多塊,描述里面灰度變化最小的或者最大的。一般選用最小的方向。好處是它計算起來的成本比較靠譜的,比如這張圖上,人穿黑色的衣服,所以在黑色衣服上它的灰度變化最小一定是垂直的。到了旁邊白色背景可能就是水平的。利用它這個HOG的梯度圖的方向,很容易把這個人從背景中間區分出來。
這個和剛才我們聊到的海爾特征區別在于,它其實對整個圖像進行了一個全面的一個掃描。我們對圖像進行掃描以后,就可以清楚地得到一個圖像的灰度變化曲線。比如像這個圖上的人,一般情況下同樣一個類別的對象,他身上的灰度相對來說比較統一的。我們就把灰度變化最小的方向作為這個梯度的方向。這樣的話這個圖上的不同區間就會得到很好的劃分。比如像人那他從他的臂膀到他的腿,整個的話都是一個灰度,基本上是不變的,在人身上的梯度的方向就是垂直的。
背景由于打光的各種的原因,它的方向一般是比較分散的,在各個方向都有。這樣的話呢我們根據它梯度的變化方向,我們就可以把這個人從背景中很完美的摳出來,也就能識別到這個人。所以其實對象檢測整個過程呢就是第一是要設計這個特征,第二呢就是做分類。把兩個結合起來,我們就能實現對象檢測的這個目的。
在對象檢測之下,我們可能想要做分割,或者是其他的一些更高級一點的應用,那我們應該怎么辦呢?
有一些比較經典算法,比如像分水嶺算法,它其實也是基于一個灰度的變換的。我們會對整個圖像進灰進行度掃描以后,可以把灰度深的地方想象成一個比較深的水溝,灰度淺的地方變成一個比較淺的水溝。在相鄰的兩個區域之間灰度聯通的地方,我們可以去建一個水壩把他們給隔開。大家可以想象一幅圖轉換成了好多不同盆地的曲線圖,然后我們慢慢往里面灌水。
應該說所有區域都是分開的,雖然我們灌水的程度慢慢變多,總會有兩個相鄰的區域相對來說要變連通,那這種情況我們需要在其中建一個大壩,然后把這個本來要連起來的區域我們人為隔開,然后我們繼續往里灌水,就會有新的區域又被聯通,然后我們再把它隔開。其實我們在放這個水壩隔開這個區域的時候,我們就把這個圖片上的一個區域給分開了,這就是分層與算法也非常巧妙。
還有一個做對象檢測的算法叫做ASM主觀形狀模型。
它就是把一個我們想要匹配對象的輪廓全部識別出來以后,進行各種的形變。然后嘗試和我們一個想要去核對的一個目標進行匹配。但大家也能很容易想到說,有的時候我們往往兩個想要匹配的圖片并不完全是同樣一個方向的,他可能在側面或者說他的表現不一定完全一樣,這種情況下面這個模型就很容易失敗。這也是為什么很多傳統的圖像識別的方法的效果并不是特別好,而到了深度學習的興起以后,整個領域才變得這個突飛猛進起來,因為它使用場景是有局限性的。
下面我們聊一下關于深度學習的圖像處理,什么是深度學習?
4
圖像處理的爆發——深度學習
下面我們聊一下關于深度學習的圖像處理,什么是深度學習?
其實所謂深度學習就是深度神經網絡,我們首先了解一下神經網絡到底是怎么回事。
神經網絡本身并不是一個全新的技術,它大概在三四十年前就存在了。我們人腦是是由一個神經網絡來形成的,我們的各種神經元激凸通過之間的互相的傳導信息,讓我們人可以去理解這個世界。那大家就在說我們有沒有可能去模擬這個過程,就有人發明了這個神經網絡。
圖上左右邊其實都是非常簡單的神經網絡,左邊是一個兩層的神經網,這里大家注意一下,就是一般我們說神經網絡時候是不算輸入層的,這里一個是兩層的神經網絡,右邊那個是個三層的那最開始的一層,我們一般叫Input Layer輸入層,我們可以直接拿到結果的一般叫做Output Layer,就是輸出層。除了輸入和輸出場的都叫Hidden Layer隱藏層。
那是不是神經網絡就是一個全新的東西?其實并不是的。如果大家熟悉邏輯回歸和支撐向量積的話可以試著匹配一下,會發現其實邏輯回歸和支撐向量是非常特殊例子上的單層的神經網絡。
神經網絡其實有的時候并沒有那么玄幻,它很多時候也是一步步隨著我們類去了解,去使用機器理解一些事物的過程中間慢慢的進化出來。
剛才我們看到的這個神經網絡是非常簡單的,那實際應用中間我們如果想要去做一個人臉匹配,比如像人臉門禁,我們需要的網絡是更復雜的,比如像上圖這樣。
它的input layer首先可能就有很多層,因為為了提取不同的圖片里面的特征,hidden layer整個的計算層又分很多層,可能不同的層中間還有不同的目的。有的時候識別病人特征,有的時候是去識別一些特殊的特征。整個output layer也可能分很多層,因為他要進行一些數據擬合,然后分類結果的合成這樣一些東西。
其實神經網絡并不僅僅有剛才我們就是看到的那些類型,,并不完全是一個金字塔型的。其實很多網絡的形式是有多樣性的。比如像上圖這個。它就是很多不同神經網絡一個綜合的圖,包括感知器,應該是最原始的神經網絡樣子。其實我們還會有一些像梯形的神經網絡,然后網狀的神經網絡,矩形神經網絡,這些都有屬于他們自己的名字,他們都能解決一些特定的問題。
傳統機器學習方法是去理解我應該用什么樣的一個模型去解決問題,要什么樣的一個算法,是用支撐向量機還是用邏輯,大家想的是這個問題。
到了深度學習時代科學家們想的問題是我應該要用什么網絡去解決問題,比如我選擇了一種網絡中介,我應該怎么去細化這個網絡結構,每一層應該怎么去設計,我的那個激活因子應該選哪一個,是利用這種方式。其實思維模式是產生了變換,所以從傳統機器學習的人去轉換成一個學深度學習,有的時候他能夠重新利用的信息知識并沒有很多,所以深度學習往往是一個新的開始。
深度學習去做圖像類的應用。它常用的一個網絡叫做卷積神經網絡。那為什么叫卷積神經網絡?為什么要使用卷積?
大家如果有一定數學基礎的話,可能會了解。我們使用卷機去對一個圖片進行處理,其實是想要對這個圖片中的信息得到一個全方位的一個了解。就比如我想要去識別圖片上的一條狗,那他有可能在這個圖片的任何一個位置以任何一個大小任何一個角度來呈現。所以我想盡量多的去圖片上抓到可能的信息,那我就會采用卷積這種方式。
一般一個經典的這個卷積神經網絡圖是什么樣的?就是上圖這樣的。
首先會有卷積層,整個圖片的所有的信息獲取是來源于這個卷積層的(Convolution layer)。第二步我們會在學習過程中間要盡量的去減少數據量,因為如果我們把圖片整個Convolution layer出來的數據從頭帶到尾,不去做任何的降維的話,這個數據量是海量的,可能我們的機器根本就無法承載。而往往這個其中的很多信息在后續的學習中并沒有這么重要。那怎么辦?
我們就會采用一個叫池化層(Pooling Layer),在這過程中對我們一些矩陣進行采樣,只使用其中的一些關鍵信息,或者把一些并不關鍵的信息給合并成一個比較關鍵的信息,把它作為特征值再進行下一步傳遞。這樣的話呢就大大降低了我們整體的運算量,也讓神經網絡變得比較可行。
最后為了輸出結果,我們一般還會有一個叫全連接層(Full Connection Layer)。全連接層就是把之前所有層的信息進行全部的連接,然后產生一個結果。有點相當于我們在做邏輯回歸時的那個softmax。它其實是一個歷史遺留產物,是從經典機器學習中間牽引過來的。所以現在也有很多人在挑戰這一點,說我們為什么需要一個全連接層。往往在一個網絡中間,全連接層可能會占整個網絡中間80%的神經元的量。 它一大部分網絡是在生成一個結果。很多人就會在這說我們為什么要這么做?我們能不能不要這個權力階層,這樣可以把這個網絡變得簡單很多。就會有人開始把全連接層的工作慢慢的分散在不同的層,分別去做。不是一次性的把所有層進行連接,而在過程中間逐層的去做連接,去降維,去產生一定的中間結果。這也是現在很流行的一個趨勢。上圖是一個很經典的一個CNN的圖,但已經不是我們現在使用的圖的樣子。
在CNN之后非常聰明的科學家們就發現了很多可以更加優化的點,所以CNN其實只是整個深度學習做圖像識別的一個起點,終點是應該遠遠還沒有到。
CNN之后,大家想到了就是R-CNN,加入了Region Proposal Network(RPN)。大家可以這么理解,如果單純的用神經網絡去識別圖片上的一些信息的話,它的起點其實是非常寬泛的,是以整個圖片作為單位的。如果我們能加一個局部的一個層,我們就可以把一些根本不需要目標的區域給排除掉,可以提前縮小這個范圍。 只讓這個模型在這個我們確定一定會有something happen的地方去進行掃描,這樣的話再做后續的處理,就大大的降低了整個神經網絡的運算量,也讓速度變得很快。
RCNN之后也出現了很多其他的網絡,包括SPPNET,還有剛剛圖上的Faster-RCNN。這些都是我們在一步步地優化網絡,不斷的往里面加一些東西。主要是為了兩個目的,一個是降低網絡的復雜度,提高運算速度,第二就是提升結果,提高這個模型算法的適應性。其實從CNN到Faster-RCNN都是同樣一種解決問題的思維方式,叫Detection對象識別的方式。Faster-RCNN出現以后,有一個非常天才的人想到,也是他發明的CNN和Faster-RCNN的科學家。他就想到我們是不是一定要用對象識別的方式去解決這個問題,我們有沒有可能回歸到最初用分類的方式Classification去解決問題,比如對象檢測這種問題。
最后呢他就想到了一種新的算法叫YOLO。這就有趣了,我們當時把這些問題分類,把分割分類,對象識別問題都拆分開,是希望可以讓算法更好的為我們服務,讓某一類型的算法模型解決一個類型的問題達到更好的效果。但隨著技術的發展,硬件資源的提升,我們可能發現之前走不通的路變成了可能。也許大自然的規律就是如此,一切都是循環往復。
接下來談一下在有了一個模型算法以后,應該如何做應用。
講幾個騰訊云這邊支持過的AI應用的例子。首先是五四青年的活動,它是圖像匹配應用的一個活動例子。那這個整個的流程大概是怎么進行的?首先我們會有一些標簽好的數據,就是一些民國的人物圖,包括他們的一些名稱。然后我們會把這些東西送我們的模型去訓練,機器會對圖片本身進行一個相當于數據項量化的一個提取,把圖片轉換成數據向量,再用我們剛才的一些特征提取的方式把其中的特征提取出來。然后和標簽匹配在一起以后,就會用我們的算法訓練產生一個模型。用戶在用的時候,比如小程序,可以上傳我們的照片,我們的模型就會從我們的照片里面提取特征值,然后和本來預存的這些已經訓練好的數據進行各種匹配。最后返回的結果一般是這種詞典形式的,會有一個分類的ID加上一個置信度分數。
這個分數我們一般稱之為置信度,但它其實并不是直接能代表它的準確度。假設我們返回來的數據是0.8,它是一類。然后0.7是二類這樣。并不是說它們加起來總和是一,有80%可能性它是第一類的。這個只是代表我們對他比較確信,所以一般我們會返回確信度最高的那個分類作為它的主分類,然后前端上面就會去搜索這個分類上的照片,把它顯示給大家,這就是整個這個應用的流程。
第二個應用也比較流行:人臉融合的一個應用。類似軍裝照這類,但它使用的方式和思維模式是截然不同的。
首先我們會有一個模板圖,還會有大家上傳的照片圖。前一半是處理我們用戶上傳的照片,后一半做我們兩個照片的融合。大家上傳完照片以后,我們的模型會對人臉的關鍵點進行一個定位,但往往大家上傳的照片的這個角度或者圖片并不是正中的,有可能左30度角右30度角。這種情況我們會對圖片進行一定程度的旋轉,讓它達到居中。下一步我們會把人臉非常完整的摳出來,再和我們的模板圖進行一個匹配。而這個匹配只是初步的匹配,它只是看起來好像是兩個東西合成一個了,但實際上圖片的邊緣,包括色差光影都并不完美。
很多的工作其實是在最后一步——圖片校正。在這個領域要把兩個圖片要調成同樣色調,光線也要重新調整,其他的一些細節我們都會去做一些調整。
經過這一系列完整的過程,我們就可以擁有一個非常完美的人臉融合的照片。
另外一個應用是我之前提到的一些照片,比如給出一個圖片,最后摘取了一段文字的。
圖上這個是我之前在斯坦福的時候做的一個項目,就是給出一個圖片以后,我們會根據這個圖片講一段故事,這個可以幫助一些像有抑郁癥的孩子,或是一些老人。我們可以傳個圖片,然后我們的story teller就會生成一段故事。而且這個故事是非常符合情景的,能夠反映圖片上的信息的。這就是一個多模態應用的一個例子。
整個這個項目中間基本上都是無監督學習。這里跟大家聊一下監督有監督學習無監督學習。
比如我們人臉匹配的這些應用,其實它都是一個有監督學習,我們模型在生成的時候都是有已經標注好的數據去生成的這個模型。
像這個應用的話,除了我們的文字庫訓練的時候用的是一個有監督的,其他比如圖片的理解什么都是無監督的,所以它的適用場景是非常廣泛的。而通過我們調整輸入文本的不同的類型,比如我們的文本庫,從浪漫小說改成科幻小說,那我們的文本生成器生成的文本就會從浪漫范變成了一個科幻范,它的靈活性彈性是非常強的。
這后面有幾個例子,像剛才兩張照片,一個是在在海邊散步的,還有公園的。底下的文字都是非常完美的反映了圖上的情景,還有寫詩一樣的意境在。
那如果大家想要去做一些研究,去了解最新的計算機視覺,或者是其他的整個機器學習人工智能領域一些東西,我應該去哪里去看?除了看公眾號以外,有沒有一些更專業的地方?
那這里跟大家推薦一個很好的論文庫,叫Arxiv。這個論文庫跟我們平常的這些論壇期刊有什么不同呢?Arxiv上面所有的論文都是最新的。這個論文庫之所以存在,其實是因為很多的科學家他們在研究出來一個東西以后,由于期刊發表或者會議發表的審稿周期的很長。他們研究的東西還沒有讓全世界人知道之前,就有人也在同樣的時候差不多時間也研究出來了,早他們一步發表。這樣的話他們一下子從全世界第一個發現第一個做好的人變成了一個追隨者。
所以康奈爾大學就支持了這個project,這是一個讓大家可以第一時間不經過復雜的審稿機制,就可以發表自己論文的地方,就是這個Arxiv數據庫。所有人都可以訪問,沒有密碼也不需要錢。而且大家不用擔心上面的論文的質量,都是非常高的。在上面發表論文的很多科學家都是世界最頂級的科學家,他們把所有論文都丟進去就是希望讓全世界人知道我是第一個把這東西做出來的。
我最近讀到一篇非常有意思關于無人駕駛的論文。我們知道全世界范圍內,做無人駕駛的公司一般有兩種流派,一種是用激光雷達,還有一種呢是堅信不用激光雷達,單純的用機器視覺的方式,我們就可以實現這個目的。因為激光雷達成本還是比較高的,所以但很多車廠在使用激光雷達的時候還是非常的謹慎。一旦裝了激光雷達車的價格就會很高,那銷量就很難提高上去,所獲得數據量也會受到影響。
特斯拉是非常堅定支持不用激光雷達的,它也是世界上目前生產有L3或者以上潛力的無人駕駛能力汽車最多的一個公司。他當時不使用激光雷達,原因就是馬斯克是堅定地覺得不使用激光雷達的機器識別的算法也是實現的。目前看來是有可能的,我們要使用激光雷達是想要實現一個什么目的?是希望得到整個汽車運行場景的一個鳥瞰圖。比如從上往下看,我們周圍的對象在什么位置?它的大小是怎么樣?激光雷達由于它本身的掃描特性和在車頂的這個高度,它是可以得到一個多維度的一個場景的繪制圖。
而如果是一張單純的照片,就像我們攝像頭車上攝像頭拍的照片,它只是一個二維的圖,本質上來說是得不到距離的信息的和東西相對之間距離的。
那有沒有方法可以幫助我們從一個二維圖中獲得三維地址信息呢?這篇論文就非常有意思地闡述了一個算法,就是去模擬人眼去理解二維圖的方式。比如我們人去看個二維圖的時候,其實我們能夠把它想象成一個三維圖的。 我們會根據一個圖片的景深和他們物體之間的形變,在腦子中間會對這個圖片上的對象進行三維建模。雖然我們看的是二維的,但在我們腦中它其實形成了一個三維的形象,這個算法就是模擬。
它其中的關鍵點是一個叫正交變換。就是他會拿了一張圖以后,利用幾何學的一些方式,從中去提取特性,然后把兩個相鄰的對象之間的距離關系和位置關系給模擬出來。
上面這幾張圖相當于是其中一些過程,大概的意思就是說先提取所有東西之間相對位置的一些信息,然后利用這個位置信息倒推出,它如果在三維圖上的位置應該是怎么樣的?其中分分了大概四個步驟,這種方式目前的效果是超過了業界使用2D圖模擬3D圖的算法叫Mono3D。
這個OFT的方法目前的性能是全面的已經超過Mono3D,我覺得這個算法的應用可能會為用2D攝像頭的無人駕駛汽車公司技術實現一個小飛躍。
上圖是一個比較圖,不包括剛才我提到的OFT的算法。是目前所有2D實現3D模擬圖的算法的性能,但目前為止,OFT超越了這里面所有的算法。
5
解析云端AI能力支撐
剛才我們聊了很多的這種機器學習圖像方面的一些算法,包括傳統的和深度的。那如果我們想要擁有或者自己可以搭建一個機器視覺的應用,不管是小程序,還是網站什么的,我們需要什么?
只有算法模型是遠遠不夠的。像我們剛才聊到的朋友圈爆款產品的背后,其實是由我們整個的云網絡在支撐的。我們使用了很多云上的一些組件和一些技術服務去支撐我們整個活動。包括我們使用SCD去做DNS的分發,ERB去做負載均衡。包括虛擬機去支撐我們的使用量,還有GPU,去快速的跑我們的模型。 我們所有的數據會存在cos的對象存儲里,所有的虛擬集群都是自動可伸縮的。這就是我們整個云上去實現一個應用的背后的例子。
實際上大家看到的很多的應用只是在水面上的冰山的那個一角,但能夠讓我們很流暢的去使用應用,更多的是因為在背后我們看不到的部分。其實我們做了很多的工作,包括跨地域的負載均衡,因為除了考慮到全國各地的用戶之外還要考慮海外的用戶。同時我們做了動態的擴容,還有各種防雪崩的機制。在我們的服務熱點期過了以后,我們會逐次的降級,把一些不用的機器給釋放掉,這也可以是降低成本。
這就是我們支撐一個爆款應用上線和下線的整個過程背后的機制。
再來介紹一下我們騰訊云的人工智能產品的矩陣。我們大概分幾個不同的領域,包括像人臉(計算機視覺)。這個里面包括人臉和聲,身份證識別,還有各種基于場景的,比如智能門禁物流。語音領域,我們也有ASR(語音-文字)和TTS(文字-語音)的能力。底層我們會有積極學習的平臺,還有大數據的平臺去支撐。基礎建設就包括我們剛才提到的CPU、GPU,還有FPGA的各種服務器,還有我們裸金屬的這個黑石的服務器。所以大家如果在開公司創業時候,想要去很快的搭建底層的這些技術能力,使用它們去做你的APP,其實使用云服務是最快,也是目前最流行的方式。
我們目前計算機視覺的產品呢大概分四類,其中包括云智的慧眼,它是實名認證的身份核驗的產品。神圖是關于多場景的人臉的識別,比如考勤簽到,還有我們支付用的人臉支付。明視是OCR的結構化,它包括我們的身份證識別,銀行卡識別名片識別這些。魔鏡主要是內容審核,比如識別各種視頻圖片的鑒黃鑒恐鑒暴等敏感信息。這就是我們產品的一個舉證。
介紹一下幾個例子,比如大家平時會用到人臉付款,或者去一些政府部門去簽到等等都會用到。
圖上這是1比N的一個人臉檢測。這個場館領域,可以去尋找走失人口,或是運用在一些公安體系上。這個就類似在海量人中間去匹配少量的人,即1:N的人臉算法模型。目前的場景使用也非常多。
OCR我就不細說了,像快遞單這些,我們大家每天都會用到,基本上是已經離不開了。
除此之外我們還有一個私有化的視頻管理平臺,叫云智平臺(TIMatrix)。它是針對各種智能樓宇園區的一個產品。它可以幫助一個主題公園,一個廠區或者一個公司快速地搭建起一整套的視頻監控體系。我們背后也有各種的A.I.引擎去做大數據的分析,客戶畫像熱力圖等等非常適合to B的一些場景。
6
技能進階建議
然后聊完我們今天這些話題以后,可能有些小伙伴會問如果我想要做一些東西,但目前好像會的并不是很多的話,我應該怎么樣去學習?這里會給出一些小建議小tips
我們可以把AI領域分成幾層。首先是算法,這大家都知道,我們要怎么樣寫模型,怎么樣去選擇不同的神經網絡,怎么樣去用傳統機器學習方法,怎么樣去做Feature Design,怎么樣去把這個模型給搞出來,這是算法研究方向。
其實這個并不是完整的A.I.的版圖的樣子,只是有算法離落地AI場景其實還有非常遠的距離。有了算法以后我們還需要什么?我們需要有工程實踐,就要把一個算法可以真的變成一個能用的東西,不管是一個服務是個微服務,還是一個SARS軟件還是一個客戶端軟件。我們需要有這個轉換的過程,但工程實踐其實非常的吃人力,它需要的人力其實是比算法更多的。
然后再上一層就是我做出了一個東西之后,那怎么去定義它,怎么做市場推廣,怎么做產品定義。我把這一步叫做AI產品開發及應用,這也是另外一層。
其實大家如果想要進入AI領域,并不完全只能靠搞算法這條路,從工程實踐和產品開發及應用的領域,大家一樣是有這個潛力和機會可以進入AI這個領域的。
針對不同領域的人的話,我的建議是首先是,如果大家想搞AI算法的話,需要打好數學基礎,積累算法的理論知識是必不可少的。同時還要鍛煉自己對新學術的一些成果的快速理解和吸收的能力。不管是論文期刊,還是剛剛提到的論文庫。都需要有快速的讀論文,理解論文,把算法簡單地從模型給實現出來的這個能力。
如果是想從工程實踐方向著手,就需要鍛煉邏輯算法封裝的能力。比如別人給了你預算,怎么樣能快速很好的把它部署成一個服務,而且可以承載海量的訪問量和吞吐量。同時還要比較好的模型訓練和優化的能力,這個都是可以從工程實踐角度去著手提高自己的部分。
從產品角度話,如果想做一個AI的產品經理,更多時候是要提高對AI產品場景和應用的理解,去提升自己對復雜系統的構建和和理解能力。 由于人工智能的產品和場景和傳統的產品和場景是不太一樣的。我們理解的維度和角度其實是有很大的區別的。很多時候,傳統的產品經理想要進入領域,需要對自己的很多固有觀念進行一個更新,甚至是完全推翻重來。
舉個簡單的例子來說,比如當時國際巨頭在想要進入AI領域去做智能交互,他們都從不同的角度進行切入。像蘋果當時做了siri智能助手,谷歌則是做了Google Assistant嵌入到了一個當時美國很流行的溫度的控制器上面。微軟是從操作系統著手,把??加入到了Windows操作系統里面,但事實證明這些都并不是很成功。最成功的是亞馬遜,它做了一款智能音箱,也是目前全世界第一款智能音箱,叫Amazon Echo。從此開啟了AI到底如何跟人交互的答案。其實這么多全球巨頭在尋找一個場景的時候,花了多少時間,走了多少彎路,所以很多時候對一個AI產品的定義是可以直接決定他的這個產品的最終的結局和生死的。
所以如果大家想往AI產品方面去發展轉,這里面的空間也非常大,有很多的資料可以去學習,有很多的場景可以去考慮,有很多國家的公司的一些競品可以去研究。,我覺得這都是非常有意思的。
如果從技術角度入門的話,可以參考右邊這張圖。這個是比較常見的機計算機視覺的各種庫,包括open cv,大家只要接觸過一段時間都會用到的。中間一層是各種機器學習的框架,包括谷歌,Tensorflow,亞馬遜支持的MX net,Facebook目前的是Caffe。底層就是各種的不同的進一步的數學庫。
關于課程的話,計算機視覺領域我有幾門比較推薦的課程。首先CS131,231A,231N。這幾個都是斯坦福機器學習實驗室一系列的課程。這個課程的老師是李飛飛教授,他的這些課程是非常系統的,如果從頭到尾大家去學一遍的話,會對計算機視覺整個領域有一個清楚的脈絡的認識,非常好。
而且很多的課程它是在網上是開源的,都可以免費可以看到,可能有些作業什么的不一定開源,但是基本上大家想搜都是可以拿到。其他還有一些網站,我覺得是非常好的資源匯總的地方。它把很多不同的資源放到了一個像維基百科一樣的地方,大家可以快速的去找。
推薦PPT上的這幾本書給喜歡讀書的小伙伴們:
Computer Vision: Algorithms and Application
Computer Vision: Models, Learning, and Inference
Multiple View Geometry in Computer Vision
前兩本書其實不是一個系列的,只是名字有點像是兩個不同人寫的,第一個相對來說比較系統,第二個會比較深入一些。第三本書書是從另外一個維度,更多的牽涉到一些數學的知識。大家有興趣的話都可以借來看一看。
Q&A環節
Q:有人問激光雷達在識別技術上跟計算機視覺技術上有沒有什么區別,哪個技術在應用上能夠更準確一些?
A:首先激光雷達LiDAR在識別技術上跟計算機視覺是有很大區別的。激光雷達由于雷達的特性,它很容易把整個周圍場景的3D圖給建模出來,這部分對算法的要求并沒有那么高,整個雷達技術已經是很成熟的。利用這種激光雷達,可以快速地把周圍的場景3D的建模出來。但是如果我們想用一個2D的圖片從中去獲得3D的信息,這個就得純靠算法。這里面的難度和整個的工作量就會很大。從目前的情況上來看,激光雷達更準確。畢竟它的造價很高,而且它可以直接達到識別的目的。我們用2D建3D模的方式,很多時候是一個曲線救國,是一個間接的方法。激光雷達是一個直接的方法,所以目前來說激光雷達是更好的。但我覺得最終2D的方法也會慢慢的接近激光雷達效果。
Q: 嘉賓能不能為我們簡單分析一下,計算機視覺技術,未來的市場會是什么樣子的?
A: 從我的理解上來看,首先計算機視覺應用目前是屬于逐漸成熟的階段。大家可能會了解到,所有的技術從萌芽到最后被廣泛使用,都會經歷一個Hyperloop曲線。計算機視覺已經到了趨向于成熟的階段,它會慢慢涉及到我們生活的各個方面。基本上人腦可以通過我們的視覺去理解的東西,計算機視覺慢慢都可以代替,這個的潛力是非常大的。而且它的顛覆已經開始了,所以我覺得未來在5到10年之內,它能夠顛覆的領域會非常多的,很有潛力。
Q: 除了剛剛說的一些獨立的應用場景,然后我們知道騰訊有一些通用印刷體識別和通用手寫體識別,因為像這種關于手寫體的識別的話,它具體是怎么樣進行對它進行識別的?
A: 其實本質上這種識別類的應用都是類似的。首先我們會輸入很多海量不同的手寫體文字。比如我們想要識別數字一的時候,我們訓練集中會全世界不同的人用各種方式,各種筆寫的數字一。然后等我們模型訓練好以后,我們就會進行各種Classification去匹配,去分類。
由于我們有海量的數據,加上我們模型會有很強的適應性,所以大家基本上不管怎么寫我們都是可以識別出來這個文字的。
Q:騰訊有圖片標簽識別的功能,那有沒有場景識別功能,呢比如說像火災檢測,看看工人有沒有安戴安全帽之類的場景,有沒有這一塊相關的業務是這樣的?
A:我們騰訊云提供了很多最核心的基礎能力,包括圖片的標簽識別這樣的一個能力。.那這個能力在具體的場景中間可以使用的方式是非常多的。這里提到的火災檢測,是一個非常細分的場景,安全帽這個對象也是很特殊的一個對象。從技術上來說我們都是可以實現的。更多的時候是說從商業上來看客戶的需求量有多大,訓練集及是否充沛,這些問題解決的話,原理上來說都是可以實現的。
干貨下載:添加微信好友“5834434”(必須備注“機器視覺:學校/公司+研究方向”,否則無法通過驗證),合作交流或獲取機器視覺教程,行業報告等資源,持續更新中。。。
熱門文章推薦
回復下面數字或直接點擊,獲取相關文章:
001:計算機視覺領域研究資源及期刊、會議介紹
002:德國kuka機器人與世界冠軍乒乓對決
003:120圖勾勒全球AI產業完整圖譜!
004:Facebook 開源計算機視覺系統,從像素水平理解圖像(附論文及代碼)
005:想成為機器學習工程師?這份自學指南你值得收藏
006:十一種通用濾波算法
007:圖像處理與計算機視覺基礎,經典以及最近發展
008:機器人行業深度報告(完整版)
009:從洗衣妹到谷歌首席科學家,她靠孤獨改變了人工智能界!
010:工業級機器視覺行業研究報告
011:雙遠心工業鏡頭的原理簡述
012:如何裝備一個學術型的 iPad ?
013:機器視覺系統概述
014:德國工匠:我們沒有“物美價廉”的東西
015:為什么最好的機械臂是7個自由度,而不是6個?
016:史上最給力的技術視頻!
017:機器人10大流行編程語言對比,你掌握了哪種?
018:新奇復雜機械原理圖!
019:機器人控制系統相關知識大匯集020:機器人的工作原理,史上最詳細的解析!
021:光源選型知識點022:這才是機械手,這才是自動化,你那算什么?023:攝像機和鏡頭的基礎知識024:物聯網產業鏈全景圖(附另13大電子行業全景圖,必收藏)025:日本到底強大到什么地步?讓人窒息!看后一夜未眠026:德國機械用行動驚艷全世界:無敵是多么寂寞
-
AI
+關注
關注
87文章
31520瀏覽量
270339 -
計算機視覺
+關注
關注
8文章
1700瀏覽量
46128
原文標題:騰訊AI技術專家教你從0到1學習計算機視覺技術
文章出處:【微信號:www_51qudong_com,微信公眾號:機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
機器視覺與計算機視覺的關系簡述
讓機器“看見”—計算機視覺入門及實戰 第二期基礎技術篇
計算機視覺的發展歷史_計算機視覺的應用方向
計算機視覺入門指南
計算機視覺中的九種深度學習技術
![<b class='flag-5'>計算機</b><b class='flag-5'>視覺</b>中的九種深度<b class='flag-5'>學習</b><b class='flag-5'>技術</b>](https://file1.elecfans.com/web2/M00/93/E9/wKgZomTixNeAShnbAABFCtFafH0789.png)
評論