剛剛過(guò)去的五四青年節(jié),你的朋友圈是否被這樣的民國(guó)風(fēng)照片刷屏?用戶只需要在 H5 頁(yè)面上提交自己的頭像照片,就可以自動(dòng)生成諸如此類(lèi)風(fēng)格的人臉比對(duì)照片,簡(jiǎn)潔操作的背后離不開(kāi)計(jì)算機(jī)視覺(jué)技術(shù)和騰訊云技術(shù)的支持。
那么這個(gè)爆款應(yīng)用的背后用到了哪些計(jì)算機(jī)視覺(jué)技術(shù)?掌握這些技術(shù)需要通過(guò)哪些學(xué)習(xí)路徑?
5 月 17 日,人工智能頭條邀請(qǐng)到騰訊云 AI 和大數(shù)據(jù)中心高級(jí)研發(fā)工程師葉聰,他以直播公開(kāi)課的形式為大家解答了這些問(wèn)題,
▌一、朋友圈爆款活動(dòng)介紹
大家經(jīng)常在朋友圈看到一些很有趣的跟圖像相關(guān)的小游戲,包括以前的軍裝照以及今年五四青年節(jié)的活動(dòng)。這個(gè)活動(dòng)非常有意思,大家可以選擇一張自己覺(jué)得拍的最美的照片,然后上傳到 H5 的應(yīng)用里面,我們就會(huì)幫你匹配一張近現(xiàn)代比較優(yōu)秀的青年照片。那張照片是老照片,而大家上傳的是新照片,這就產(chǎn)生了一些比較有意思的對(duì)比,這個(gè)活動(dòng)今年也是得到了強(qiáng)烈的反響,大家非常喜歡。
所有的這些算法構(gòu)建完以后,我們把它上傳到了騰訊云的 AI 大平臺(tái)上去。因?yàn)槲覀儏⒄樟巳ツ贶娧b照的流量,所以這次活動(dòng)我們預(yù)估了 5 萬(wàn) QPS,這其實(shí)是很高的一個(gè)要求。該活動(dòng) 5 月 4 日上線,截止 5 月 5 日下線,在短短兩天內(nèi),在線 H5 頁(yè)面的 PV 達(dá)到了 252.6 萬(wàn),UV 111.3 萬(wàn),服務(wù)調(diào)用量 420 萬(wàn),還是比較驚人的。
▌二、計(jì)算機(jī)視覺(jué)基礎(chǔ)知識(shí)
首先計(jì)算機(jī)視覺(jué)是什么?計(jì)算機(jī)視覺(jué)研究如何讓計(jì)算機(jī)從圖像和視頻中獲取高級(jí)和抽象信息。從工程角度來(lái)講,計(jì)算機(jī)視覺(jué)可以使模仿視覺(jué)任務(wù)自動(dòng)化。
一般來(lái)說(shuō)計(jì)算機(jī)視覺(jué)包含以下分支:
物體識(shí)別
對(duì)象檢測(cè)
語(yǔ)義分割
運(yùn)動(dòng)和跟蹤
三維重建
視覺(jué)問(wèn)答
動(dòng)作識(shí)別
這邊額外提一下語(yǔ)義分割,為什么要提這個(gè)呢?因?yàn)檎Z(yǔ)義分割這個(gè)詞也會(huì)在包括 NLP、語(yǔ)音等領(lǐng)域里出現(xiàn),但是實(shí)際上在圖像里面分割的意思跟在語(yǔ)音和 NLP 里面都很不一樣,它其實(shí)是對(duì)圖像中間的不同的元素進(jìn)行像素級(jí)別的分割。比如最右下角這張圖片,我們可以看到行人、車(chē)輛、路,還有后面的樹(shù),他們都用不同的顏色標(biāo)注,其實(shí)每一種顏色就代表了一種語(yǔ)義。左邊和中間的兩幅圖,可能我不用介紹,大家也應(yīng)該能猜到了,一個(gè)是人臉識(shí)別,一個(gè)是無(wú)人駕駛,都是現(xiàn)在使用非常廣泛和熱門(mén)的應(yīng)用。
如何讓機(jī)器可以像人一樣讀懂圖片?人在處理圖像的時(shí)候,我們是按照生物學(xué)的角度,從圖像到視網(wǎng)膜然后再存儲(chǔ)到大腦。但機(jī)器沒(méi)有這套機(jī)制,那機(jī)器如何把圖片裝載到內(nèi)存里面?這個(gè)就牽扯到一個(gè)叫 RGB-alpha 的格式。
顧名思義,就是紅綠藍(lán)三色,然后,alpha 是什么?如果大家在早期的時(shí)候玩過(guò)一些電腦硬件,你可能會(huì)發(fā)現(xiàn),最早期的顯卡是 24 位彩色,后來(lái)出現(xiàn)一個(gè)叫 32 位真彩色,都是彩色的,有什么不同嗎?因?yàn)樵谟?jì)算機(jī)領(lǐng)域,我們用 8 位的二進(jìn)制去表示一種顏色,紅綠藍(lán)加在一起就是 24 位,基本上我們把所有顏色都表示出來(lái)了。
為什么還出現(xiàn) alpha?alpha 是用來(lái)表示一個(gè)像素點(diǎn)是不是透明的,但并不是說(shuō) alpha 是 1 的時(shí)候它就是透明,是 0 的時(shí)候就不透明。只是說(shuō)阿爾法通道相當(dāng)于也是一個(gè)矩陣,這個(gè)矩陣會(huì)跟 RGB 的其他的矩陣進(jìn)行一種運(yùn)算,如果 alpha 的這個(gè)點(diǎn)上是 1,它就不會(huì)影響 RGB 矩陣上那個(gè)點(diǎn)的數(shù)值,它就是以前原來(lái)的顏色,如果是 0,這個(gè)點(diǎn)就變成透明的。這也是我們?cè)趺从?RGB 加 alpha 通道去描述世界上所有的圖片的原理。
比如右上角,這張圖片是黑白圖,中間是彩色圖,下面一張是有些透明效果,右下角基本上沒(méi)有像素點(diǎn),這就是一個(gè)很好的例子,去理解 RGB 是怎么一回事。
除了 RGB-alpha 這種表達(dá)方式,我們還有很多不同的顏色表達(dá)方式。包括如果我們搞印刷的話,大家可能接觸到另外一種色系,叫 CMYK,這個(gè)也是一種顏色的表示方式。這邊還會(huì)有一些其他類(lèi)型的圖片,包括紅外線圖片,X 光拍攝的圖片,紅外熱成像圖,還有顯微鏡拍攝的細(xì)胞圖,這些加在一起都是我們計(jì)算機(jī)可以處理的圖像的范圍,不僅僅是我們之前看到,用手機(jī)、攝像機(jī)拍攝的圖片。
我們?cè)谟?jì)算機(jī)視覺(jué)中經(jīng)常會(huì)提到 stages,為什么叫 stages?
這邊我們看到,有 Lowlevel,Midlevel,Highlevel,這里澄清一下,并不是說(shuō) LowLevel 這些應(yīng)用就比較低級(jí),Highlevel 就比較高端,這個(gè)描述的維度其實(shí)是從我們看問(wèn)題的視野上來(lái)說(shuō)的,Low level 代表我們離這個(gè)問(wèn)題非常近,Highlevel 代表比較遠(yuǎn)。
舉一個(gè)簡(jiǎn)單例子,比如 LowLevel 上面我們可以做圖像的降噪、優(yōu)化、壓縮、包括邊緣檢測(cè),不管是哪一條,我們都是可以想象一下,我們是離這個(gè)圖片非常近的去看這個(gè)細(xì)節(jié)。Highlevel 是什么?包括情景理解、人臉識(shí)別、自動(dòng)駕駛,它基本上是從一個(gè)比較遠(yuǎn)的角度來(lái)看這個(gè)大局。
所以其實(shí)大家可以這么想,在解決問(wèn)題的時(shí)候,我們要離圖片的視覺(jué)大概保持多遠(yuǎn)的距離,High 代表比較遠(yuǎn),Low 代表比較近,并不是說(shuō) High 比 Low 要難,或者說(shuō)要高端。
Midlevel 介于 High 跟 Low 之間的,包括分類(lèi)、分割、對(duì)象檢測(cè),后面還有情景分割,這邊的情境分割跟分割還不太一樣,應(yīng)該說(shuō)是更深度的分割問(wèn)題,后面我會(huì)詳細(xì)解釋。
這邊有一些例子是幫大家去理解 Lowlevel Processing。比如左上那張是我們拍 X 光會(huì)看到的圖,上面那張圖是原始的 X 光的圖片,大家可以看到,非常的不清晰,很難去理解到里面的骨骼,血管在什么位置。但通過(guò) LowLevel Processing 的降噪和優(yōu)化,就能非常清晰的看到這個(gè)病人的所有的骨骼及內(nèi)臟的位置。
中間這個(gè)是一個(gè) PCB 板,一些工業(yè)領(lǐng)域?yàn)榱藱z測(cè) PCB 板就會(huì)拍攝照片,做圖像處理,并用這種方式去找到板上的一些問(wèn)題,然后去修復(fù)它。有的時(shí)候也為了質(zhì)量品控,看到中間這張的 PCB 板原始的圖片上面充滿了噪音,經(jīng)過(guò)優(yōu)化、降噪以后就得到一張很清晰的照片。
這個(gè)是 Mid level Processing,目前這塊的技術(shù)比較成熟。這塊的應(yīng)用包括分類(lèi)、分割、目標(biāo)檢測(cè),也包括情景檢測(cè)、情景分割,甚至還有意圖檢測(cè),就是通過(guò)看圖片里面的一些物體和他們目前在做的一些行為來(lái)判斷他們的意圖。
底下有幾張小貓咪和小狗的圖,從左到右是一個(gè)進(jìn)階的方向。首先最容易想到的一個(gè)應(yīng)用,就是怎么能用機(jī)器學(xué)習(xí)的方法讀懂一張圖片里面的內(nèi)容,那這個(gè)方法如何去實(shí)現(xiàn)它呢?其實(shí)就是用了一個(gè)分類(lèi),因?yàn)樽筮吥菑垐D片如果給了機(jī)器,分類(lèi)算法會(huì)告訴你里面有一只貓,但是僅此而已。
那如果我們想知道,這里面有只貓,但這只貓?jiān)谀睦锬兀窟@個(gè)問(wèn)題,我們就需要在這個(gè)基礎(chǔ)上加上定位,也就是第二張圖片,那我們就可以定位到,原來(lái)這里是貓咪所在的范圍,只是在這個(gè)方框范圍內(nèi),并沒(méi)有精確到像素級(jí)別。
再進(jìn)一步,如果這張圖片里面不僅僅有貓,可能會(huì)有很多其他的東西,我希望把所有的東西都標(biāo)識(shí)出來(lái),應(yīng)該怎么辦?這個(gè)任務(wù)叫做叫對(duì)象檢測(cè),就是把圖片里面所有的這些對(duì)象全部標(biāo)注檢測(cè)出來(lái)。
再進(jìn)一步,我不但想把里面的對(duì)象全部標(biāo)注出來(lái),我還要精確的知道,它們?cè)趫D像的什么位置,這種情況下我可能想把它們剝離出來(lái),把背景去掉。一般情況下,這種被我們框出來(lái)的對(duì)象叫做前景,其他的這些部分叫做后景。我們?nèi)绻氚亚熬芭鰜?lái),那我們就需要這種對(duì)象分割的技術(shù),從左到右,我們就完成了分類(lèi)、定位、檢測(cè)、對(duì)象分割的全部流程,從頭到尾也是一個(gè)慢慢晉升的過(guò)程。因?yàn)槎ㄎ皇切枰诸?lèi)的基礎(chǔ)的,對(duì)象檢測(cè)是需要有分類(lèi)基礎(chǔ)的,情景分割也需要有檢測(cè)的基礎(chǔ),它是一個(gè)由淺入深的一個(gè)過(guò)程。
最右邊就是一個(gè)情景分割的例子,之前我也簡(jiǎn)單介紹過(guò),現(xiàn)在的技術(shù)已經(jīng)可以精確的把我們這張圖片上的幾乎所有的元素很精確的給分出來(lái),包括什么是人、車(chē)、路、景色、植物、大樓等全部都能分出來(lái),我們的技術(shù)目前在 Mid level Processing 這塊已經(jīng)很成熟了。
接下來(lái)簡(jiǎn)單介紹一下 High level Processing,也是目前非常熱門(mén)和有前景,但是應(yīng)該說(shuō)遠(yuǎn)遠(yuǎn)還未達(dá)到成熟的技術(shù)。可能目前,大家做最好的 High level Processing 就是人臉檢測(cè)。
左下角那張是無(wú)人駕駛,也可以叫做高智能的輔助駕駛,不同的車(chē)廠,不同的定義,基本上就是對(duì)象檢測(cè)的一個(gè)復(fù)雜應(yīng)用,包括檢測(cè)到路上的所有情況,包括不同的地上標(biāo)識(shí),周?chē)慕ㄖ€有在你前面的所有車(chē)輛,甚至行人,各種信息,還包括跟他們的距離,它是一個(gè)相對(duì)來(lái)說(shuō)多維度的,是個(gè)復(fù)雜的對(duì)象檢測(cè)的應(yīng)用。
中間的是兩個(gè)小朋友在打網(wǎng)球,這張圖片也是兩個(gè)人物,跟之前Mid level Processing有什么區(qū)別嗎?其實(shí)從右邊那個(gè)對(duì)象樹(shù)上,我們就能判斷,它是對(duì)這個(gè)圖片理解的深度有了非常本質(zhì)的區(qū)別。前一個(gè)那個(gè)例子,我們知道圖片上有貓有狗,僅此而已。而這張圖片上,我們除了判斷到,圖片上有兩個(gè)孩子以外,還對(duì)他們的各種穿著,都進(jìn)行了精確的分割和定義,包括他們手上的這些持有的球拍,我們都有個(gè)非常詳細(xì)的描述,所以Highlevel圖像的理解并不是簡(jiǎn)單的說(shuō)有哪些東西,而是他們之間的聯(lián)系、細(xì)節(jié)。Highlevel本身不僅能識(shí)別我們的圖上有什么東西,它還能識(shí)別,應(yīng)該做什么,他們的關(guān)系是什么。
右邊那張圖片是一個(gè)醫(yī)學(xué)的應(yīng)用,一個(gè)心血管的虛擬圖。它是英國(guó)皇家醫(yī)學(xué)院跟某個(gè)大學(xué)合作的一個(gè)項(xiàng)目,我們通過(guò)計(jì)算機(jī)視覺(jué)去模擬一個(gè)病人的心血管,幫助醫(yī)生做判斷,是否要做手術(shù),應(yīng)該怎么去做手術(shù)方案,這個(gè)應(yīng)該是計(jì)算機(jī)視覺(jué)在醫(yī)學(xué)上的很好的一個(gè)應(yīng)用的例子。
這里有一些比較常見(jiàn)的計(jì)算機(jī)視覺(jué)的應(yīng)用,平時(shí)我們也會(huì)用到,包括多重的人臉識(shí)別,現(xiàn)在有些比較流行的照片應(yīng)用,不知道大家平時(shí)會(huì)不會(huì)用到,包括比如像 Google photos,基本上傳一張照片上去,它就會(huì)對(duì)同樣的照片同樣的人物進(jìn)行歸類(lèi),這個(gè)也是目前非常常見(jiàn)的一個(gè)應(yīng)用。
中間那個(gè)叫 OCR,就是對(duì)文本進(jìn)行掃描和識(shí)別,這個(gè)技術(shù)目前已經(jīng)比較成熟了。照片上這張是比較老的技術(shù),當(dāng)時(shí)我記得有公司做這個(gè)應(yīng)用,有個(gè)掃描筆,掃描一下就變成文字,現(xiàn)在的話,基本上已經(jīng)不需要這么近的去掃描了,大家只要拍一張照片,如果這張照片是比較清晰的,經(jīng)過(guò)一兩秒鐘,一般我們現(xiàn)在算法就可以直接把它轉(zhuǎn)換成文字,而且準(zhǔn)確率相當(dāng)高,所以圖片上的這種 OCR 是一個(gè)過(guò)時(shí)的技術(shù)。
右下角是車(chē)牌檢測(cè),開(kāi)車(chē)的時(shí)候不小心壓到線了,闖紅燈了,收到一張罰單,這個(gè)怎么做到呢?也是計(jì)算機(jī)視覺(jué)的功勞,它們可以很容易的就去識(shí)別這個(gè)照片里的車(chē)牌,甚至車(chē)牌有一定的污損,經(jīng)過(guò)計(jì)算機(jī)視覺(jué)的增強(qiáng)都是可以把它給可以?xún)?yōu)化回來(lái)的,所以這個(gè)技術(shù)也是比較實(shí)用的。
下面聊幾個(gè)比較有挑戰(zhàn)性的計(jì)算機(jī)視覺(jué)的任務(wù)。首先是目標(biāo)跟蹤,目標(biāo)跟蹤就是我們?cè)谶B續(xù)的圖片或者視頻流里面,想要去追蹤某一個(gè)指定的對(duì)象,這個(gè)聽(tīng)起來(lái)對(duì)人來(lái)說(shuō)是一個(gè)非常容易的任務(wù),大家只要目不轉(zhuǎn)睛盯著一個(gè)東西,沒(méi)有人能逃脫我們的視野。
實(shí)際上對(duì)機(jī)器來(lái)說(shuō),這是一個(gè)很有挑戰(zhàn)性的任務(wù),為什么呢?因?yàn)闄C(jī)器在追蹤對(duì)象的時(shí)候,大部分會(huì)使用最原始的一些方法,采取一些對(duì)目標(biāo)圖片進(jìn)行形變的匹配,就是比較早期的計(jì)算機(jī)識(shí)別的方法,而這個(gè)方法在實(shí)際應(yīng)用中間是非常難以實(shí)現(xiàn)的,為什么?因?yàn)樾枰櫟膶?duì)象,它由于角度、光照、遮擋的原因包括運(yùn)動(dòng)的時(shí)候,它會(huì)變得模糊,還有相似背景的干擾,所以我們很難利用模板匹配這種方法去追蹤這個(gè)對(duì)象。一個(gè)人他面對(duì)你、背對(duì)你、側(cè)對(duì)你,可能景象完全不一樣,這種情況下,同樣一個(gè)模板是無(wú)法匹配的,所以說(shuō),很有潛力但也很有挑戰(zhàn)性,因?yàn)槟壳皩?duì)象追蹤的算法完全沒(méi)有達(dá)到人臉識(shí)別的準(zhǔn)確率,還有很多的人在不斷的努力去尋找新的方法去提升。
右邊也是一個(gè)例子,就是簡(jiǎn)單的一個(gè)對(duì)我們頭部的追蹤,也是非常有挑戰(zhàn)性的,因?yàn)槲覀冾^可以旋轉(zhuǎn),尺度也可能發(fā)生變化,用手去遮擋,這都給匹配造成很大的難度。
后面還有一些比較有挑戰(zhàn)性的計(jì)算機(jī)視覺(jué)任務(wù),我們歸類(lèi)把它們叫做多模態(tài)問(wèn)題,其中包括 VQA,這是什么意思?這個(gè)就是說(shuō)給定一張圖片,我們可以任意的去問(wèn)它一些問(wèn)題,一般是比較直接的一些問(wèn)題,Who、Where、How,類(lèi)似這些問(wèn)題,或者這個(gè)多模態(tài)的模型,要能夠根據(jù)圖片的真實(shí)信息去回答我們的問(wèn)題。
舉個(gè)例子,比如底下圖片中間有兩張是小朋友的,計(jì)算機(jī)視覺(jué)看到這張圖片的時(shí)候它要把其中所有的對(duì)象全部分割出來(lái),要了解每個(gè)對(duì)象是什么,知道它們其中的聯(lián)系。比如左邊的小朋友在喝奶,如果把他的奶瓶分出來(lái)以后,它必須要知道這個(gè)小朋友在喝奶,這個(gè)關(guān)系也是很重要的。
屏幕上的問(wèn)題是“Where is the child sitting?”,這個(gè)問(wèn)題的復(fù)雜度就比單純的只是解析圖像要復(fù)雜的多。他需要把里面所有信息的全部解析出來(lái),并且能準(zhǔn)確的去關(guān)聯(lián)他們的關(guān)系,同時(shí)這個(gè)模型還要能夠理解我們問(wèn)這個(gè)問(wèn)題到底是什么個(gè)用意,他要知道問(wèn)的是位置,而且這個(gè)對(duì)象是這個(gè)小孩,所以這個(gè)是包含著計(jì)算機(jī)視覺(jué)加上自然語(yǔ)言識(shí)別,兩種這種技術(shù)的相結(jié)合,所以才叫多模態(tài)問(wèn)題,模態(tài)指的是像語(yǔ)音,文字,圖像,語(yǔ)音,這種幾種模態(tài)放在一起就叫多模態(tài)問(wèn)題。
右邊一個(gè)例子是 Caption Generation,現(xiàn)在非常流行的研究的領(lǐng)域,給定一張圖片,然后對(duì)圖片里面的東西進(jìn)行描述,這個(gè)還有一些更有趣的應(yīng)用,待會(huì)我會(huì)詳細(xì)介紹一下。
▌三、曾經(jīng)的圖像處理——傳統(tǒng)方法
接下來(lái)我們聊一聊,過(guò)去了很多年,大家積累的傳統(tǒng)的計(jì)算機(jī)視覺(jué)的圖像處理的方法。
首先提到幾個(gè)濾波器,包括空間濾波器,傅里葉、小波濾波器等等,這些都是我們經(jīng)常對(duì)圖像進(jìn)行初期的處理使用的濾波器。一般情況下,經(jīng)過(guò)濾波以后,我們會(huì)對(duì)圖像進(jìn)行 Feature Design,就是我們要從圖片中提取一些我們覺(jué)得比較重要的,可以用來(lái)做進(jìn)一步的處理的一些參照的一個(gè)信息,然后利用信息進(jìn)行分類(lèi),或者分割等等,這些應(yīng)用,其中一些比較經(jīng)典的一些方法,包括 SIFT、Symmetry、HOG,還有一些就是我們分類(lèi)會(huì)經(jīng)常用到的一個(gè)算法,包括 SVM,AdaBoost,還有 Bayesian 等等。
進(jìn)一步的分割還有對(duì)象檢測(cè)還有一些經(jīng)典算法,包括 Water-shed、Level-set、Active shape 等。
首先我們做 Feature Design,提取一個(gè)圖片中間對(duì)象的特點(diǎn),最簡(jiǎn)單能想到的方法,就是把這個(gè)對(duì)象的邊緣給分離出來(lái),Edge Detection 也確實(shí)是很早期的圖像信息提取方法。
舉個(gè)例子,硬幣包括上面的圖案,都會(huì)經(jīng)過(guò)簡(jiǎn)單的 Edge Detection 全部提取出來(lái),但實(shí)際上Edge Detection 在一些比較復(fù)雜的情況上面,包括背景復(fù)雜的情況下,它是會(huì)損失很多信息的,很多情況下我們看不到邊緣。
這樣情況下大家還想出另外一個(gè)方法叫 Local Symmetry,這種方法是看對(duì)象重心點(diǎn),利用重心點(diǎn)去代表著這個(gè)圖像的一些特征。
這個(gè)叫 Haar Feature,相當(dāng)于結(jié)合了前面邊緣特征,還有一些其他的一些特征的信息。Haar Feature 一般分為三類(lèi)
邊緣特征
線性特征
中心對(duì)角線特征
通過(guò)處理,把圖片中所有的邊緣信息提取出來(lái)以后,就會(huì)對(duì)圖片整理獲得一個(gè)特征模板,這個(gè)特征模板由白色和黑色兩種矩形組成,一般情況下定義模板的特征值為白色的矩形像素和減去黑色像素矩形像素和。Haar Feature 其實(shí)是反映了圖像的一個(gè)灰度變化的情況,所以臉部的一些特征,就可以用矩形的模板來(lái)進(jìn)行表述,比如眼睛要比臉頰顏色要深,鼻梁兩側(cè)比鼻梁顏色要深,嘴巴比周?chē)伾畹鹊取N覀兝眠@些矩形就對(duì)圖像的一些細(xì)節(jié)進(jìn)行了提取。
SIFT 尺度不變特征變換,當(dāng)對(duì)象有角度、特征位置的變化時(shí),我們?nèi)绾稳コ掷m(xù)的能夠知道它們是同樣的一個(gè)東西,這個(gè)就要利用到 SIFT。SIFT 是一種局部檢測(cè)的特征算法,這個(gè)算法是通過(guò)求圖片中的一些特征點(diǎn),對(duì)圖像進(jìn)行匹配,這是非常老的一個(gè)算法,大概在 2000 年時(shí)候就提出來(lái)了,目前已經(jīng)是一個(gè)常用的非深度學(xué)習(xí)的一個(gè)圖像的一種匹配的算法。
另外一個(gè)比較流行的方法叫 HOG 方向梯度直方圖,比如像這張圖片上顯示,在圖像中間,局部目標(biāo)的表象和形狀能夠?qū)叶鹊奶荻取⑦€有邊緣方向的密度有很好的表示。比如像這張圖像,人身上的梯度就是向著上下方向。而對(duì)于背景,由于背景光的原因,如果我們做灰度的分析,會(huì)發(fā)現(xiàn)它的梯度是偏水平方向的,利用這種方式我們就很容易的可以把背景跟前景進(jìn)行分割。另外如果很多小框里的梯度方向幾乎一致的話,我們就可以認(rèn)為它是一個(gè)對(duì)象,這個(gè)方法是很好的可以塑造一個(gè)分割的效果。實(shí)際上很早期的目標(biāo)檢測(cè)就是 Feature Design,所以說(shuō)檢測(cè)是基于分類(lèi)的,也是這個(gè)意思。現(xiàn)在深度學(xué)習(xí)引入以后,很多理論也發(fā)生了一些變化,待會(huì)詳細(xì)介紹一下。
這個(gè)也是一個(gè)非常經(jīng)典的分割方法,叫分水嶺算法,就是把這個(gè)圖像想象成一個(gè)地理上的地形圖,然后我們對(duì)其中的各個(gè)山谷非常無(wú)差別的統(tǒng)一往里面放水,總會(huì)有一些山谷先被填滿漫出來(lái),那我們?yōu)榱俗韪羲麄兯鞯牧鲃?dòng)就要建一些這種堤壩,這也是分水嶺算法的名字的由來(lái)。利用這種方式,我們建壩的地方就是很好的一個(gè)圖像的分割的這種界線,大家可以想象一下,把左邊這張圖和右邊的邊界聯(lián)系起來(lái),就會(huì)理解到這個(gè)算法是個(gè)非常巧妙的事。
常規(guī)的分水嶺算法還是有些缺點(diǎn)的,比如由于圖像上的一個(gè)噪音,經(jīng)常會(huì)造成局部的一些過(guò)度分割,也會(huì)有一些圖像中的部分元素因?yàn)轭伾嘟粫?huì)被分割出來(lái),所以經(jīng)常會(huì)出現(xiàn)一些誤判,這也是分水嶺算法的一些局限性。
ASM,中文名叫可變模板匹配,或者叫主觀形狀模型。這個(gè)翻譯聽(tīng)起來(lái)都怪怪的,其實(shí)很好理解,它是對(duì)人臉上的一些特征進(jìn)行提取,采用的方式是在人臉上尋找一些邊角的地方進(jìn)行繪點(diǎn),一般繪制大概 68 個(gè)關(guān)鍵特征點(diǎn)。然后利用這些特征點(diǎn),我們?nèi)コ槿∫粋€(gè)原始的模型出來(lái)。
原始的模型抽出來(lái)之后,是不是能直接用呢?沒(méi)有那么簡(jiǎn)單,因?yàn)槿四樣锌赡軙?huì)由于角度變化會(huì)發(fā)生一些形變,如果只是單純的對(duì)比這 68 個(gè)點(diǎn),是不是在新的圖片上面還有同樣的位置,大部分情況都是 No。這時(shí)我們要對(duì)這些特征點(diǎn)進(jìn)行一些向量的構(gòu)建,我們把那 68 個(gè)點(diǎn)提取出來(lái),把它向量化,同時(shí)我們對(duì)我們需要比對(duì)的點(diǎn),比對(duì)的那個(gè)臉部也進(jìn)行同樣的工作,也把它向量化。然后我們對(duì)原始圖片上的這種向量點(diǎn)和新圖片上的點(diǎn)進(jìn)行簡(jiǎn)單化匹配,可以通過(guò)旋轉(zhuǎn)縮放水平位移,還有垂直位移這種方式,尋找到一個(gè)等式,讓它們盡量的相等,最后優(yōu)化的不能再優(yōu)化的時(shí)候,就去比較閾值的大小,如果它小于某個(gè)閾值,這樣人臉就能匹配上,這個(gè)想法還是比較有意思的。
另外,在這里由于 68 個(gè)點(diǎn)可能比較多,很久以前我們的這種計(jì)算機(jī)的性能可能沒(méi)有那么好,也沒(méi)有 GPU,我們?nèi)绻麑?xiě)的時(shí)候?yàn)榱颂岣咂ヅ涞乃俣龋鸵雮€(gè)辦法去降低需要比對(duì)特征點(diǎn)的量,這個(gè)時(shí)候引出一個(gè)比較著名的算法叫主成分分析,利用這個(gè) PC,我們會(huì)做降維,比如一些沒(méi)有太大意義的點(diǎn)可以去掉,減少數(shù)據(jù)量,減少運(yùn)算量,提高效果,當(dāng)然這并不是必須的,它只是一個(gè)提升 ASM 實(shí)際效能的加分辦法。
▌四、圖像處理的爆發(fā)——深度學(xué)習(xí)方法
然后接下來(lái)我們就聊一聊現(xiàn)在非常熱門(mén),未來(lái)也會(huì)更加熱門(mén)的圖形學(xué)的深度學(xué)習(xí)方法。下面有兩個(gè)深度學(xué)習(xí)的網(wǎng)絡(luò),所謂的深度學(xué)習(xí)實(shí)際就是深度神經(jīng)網(wǎng)絡(luò),叫深度神經(jīng)網(wǎng)絡(luò)大家更容易理解。左邊那個(gè)是一個(gè)兩層的神經(jīng)網(wǎng)絡(luò),這里要解釋一下,我們一般說(shuō)神經(jīng)網(wǎng)絡(luò)的層數(shù)是不算輸入層的,兩層就是包括一個(gè)輸入層,一個(gè)隱層,和一個(gè)輸出層。所以有的時(shí)候,如果我們提到了一個(gè)單層網(wǎng)絡(luò),其實(shí)就是只有輸入層和輸出層,大家知道這種情況下面的淺度神經(jīng)網(wǎng)絡(luò)是什么?它就是我們傳統(tǒng)的機(jī)器學(xué)習(xí)里非常經(jīng)典的邏輯回歸和支持向量機(jī)。
這時(shí)候你會(huì)發(fā)現(xiàn),深度學(xué)習(xí)并沒(méi)有那么遙不可及,它其實(shí)跟我們傳統(tǒng)的一些方法是有聯(lián)系的。它只是多重的一種包裝,或者組合強(qiáng)化,然后反復(fù)利用,最后打包成了一個(gè)新的機(jī)器學(xué)習(xí)的方法。
圖上有兩個(gè)神經(jīng)網(wǎng)絡(luò),其中有些共同點(diǎn),首先他們都有一個(gè)輸入層,一個(gè)輸出層。這個(gè)就是所有的神經(jīng)網(wǎng)絡(luò)必須的,中間的隱層才是真正的不同的地方,不同的網(wǎng)絡(luò)為了解決不同的問(wèn)題,它就會(huì)有不同的隱層。
這個(gè)是對(duì)多重人臉識(shí)別設(shè)計(jì)的一個(gè)深度神經(jīng)網(wǎng)絡(luò),我們可以看到輸入層中間會(huì)做一些預(yù)處理,包括把圖片轉(zhuǎn)換成一些對(duì)比度圖。第一個(gè)隱層是 Face Features,從人臉上提取關(guān)鍵的特征值。第二個(gè)隱層就是開(kāi)始做特征值匹配,最后的輸出層就是對(duì)結(jié)果進(jìn)行輸出,一般就是分類(lèi)。
除了剛才我們看到的典型神經(jīng)網(wǎng)絡(luò),還會(huì)有其他各式各樣的網(wǎng)絡(luò)?有三角形,也有矩形的,矩形中間還有菱形的。神經(jīng)網(wǎng)絡(luò)出現(xiàn)了以后,改變了大家的一些工作方式。之前,大部分機(jī)器學(xué)習(xí)的科學(xué)家是去選擇模型,然后選擇模型優(yōu)化的方式。到了深度學(xué)習(xí)領(lǐng)域,大家考慮的是我們使用什么網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)我們的目的,實(shí)際上還是區(qū)別比較大的。
CNN,也就是卷積神經(jīng)網(wǎng)絡(luò),它是目前應(yīng)用最廣泛的圖像識(shí)別網(wǎng)絡(luò),了解 CNN 會(huì)對(duì)了解其他網(wǎng)絡(luò)有很大的幫助,所以把這個(gè)作為例子。
這個(gè)例子中我們做了一個(gè)手寫(xiě)識(shí)別,這里包含輸入層、輸出層,還有卷積層、池化層。一般情況下,不僅僅做一次卷積,我們還會(huì)多次的做卷積,池化然后再卷積,利用這種方式去多次的降維,池化層其實(shí)在這個(gè)卷積神經(jīng)網(wǎng)絡(luò)中起一個(gè)作用,就是降低我們數(shù)據(jù)的維度。
最后會(huì)有一個(gè)叫全連接層,它是個(gè)歷史遺留物,現(xiàn)在大家其實(shí)慢慢的也在減少使用全連接層,全連接層一般情況下,它的作用就是對(duì)前面的各種池化卷積最后的結(jié)果進(jìn)行一個(gè)歸類(lèi)。而實(shí)際上現(xiàn)在深度學(xué)習(xí)比較講究端對(duì)端學(xué)習(xí),又講究效率比較高,這種情況下面,有的時(shí)候全連接層的意義就不是那么大,因?yàn)檫@個(gè)分類(lèi)有可能在卷積的時(shí)候就把它做了,其實(shí)這個(gè)里面還是有很多的可以提升的地方。
再舉一個(gè)例子,目前比較流行的做圖像分割的還有很多基于 CNN 的新網(wǎng)絡(luò)。比如在 CNN 基礎(chǔ)上大家又加入了一個(gè)叫 Region Proposal Network 的東西,利用它們可以去優(yōu)化傳統(tǒng) CNN 中間的一些數(shù)據(jù)的走向。Faster-RCNN 不是一蹴而就的,它是從RCNN中借鑒了 SPPNET 的一些特性,然后發(fā)明了 Fast-RCNN,又在 Fast-RCNN 的基礎(chǔ)上進(jìn)一步的優(yōu)化變成了 Faster-RCNN。
大家能看到,神經(jīng)網(wǎng)絡(luò)也不是一成不變的,它也是不斷在進(jìn)化的,而我們最開(kāi)始想到用神經(jīng)網(wǎng)絡(luò)去解決圖像問(wèn)題的時(shí)候,是由于什么原因?是由于當(dāng)時(shí)我們?cè)趪L試去用 CNN 去做圖像檢測(cè)的時(shí)候發(fā)現(xiàn)了很大的困難,效果不好,這時(shí)就有非常厲害的科學(xué)家想了,我們可不可以把一個(gè)非常典型的檢測(cè)問(wèn)題變?yōu)榉诸?lèi)問(wèn)題,因?yàn)?CNN 用來(lái)解決分類(lèi)問(wèn)題是非常有效的,所以就會(huì)出現(xiàn)很多的這樣的轉(zhuǎn)換應(yīng)用。我上面寫(xiě)的每一個(gè)網(wǎng)絡(luò)都是一篇非常偉大的論文,所以大家如果有興趣,我課后可以分享一下。
目前除了 Faster-RCNN,還有一個(gè)應(yīng)用效果非常好的一個(gè)網(wǎng)絡(luò)結(jié)構(gòu),叫 YOLO,它也是在 Faster-RCNN 上面,已經(jīng)不僅僅是進(jìn)行了優(yōu)化,而是改變了它的思維模式。最開(kāi)始,我們覺(jué)得檢測(cè)如果轉(zhuǎn)化成分類(lèi)會(huì)效果更好,后來(lái)發(fā)明 Faster-RCNN 的這個(gè)科學(xué)家覺(jué)得,有的時(shí)候可能還是用回歸的方式去解決目標(biāo)檢測(cè)的問(wèn)題效果會(huì)更好,他最后就搬出了 YOLO 這種新的神經(jīng)網(wǎng)絡(luò)框架,從而重新返回到了用回歸的方式去解決目標(biāo)檢測(cè)問(wèn)題的方式上來(lái)。
有的時(shí)候也并不是說(shuō)解決同樣一個(gè)問(wèn)題是有不同方法,也并不是說(shuō)在一條路上一直走到黑是最好,換個(gè)思維方式,在硬件和軟件條件達(dá)到一個(gè)新的層次的時(shí)候,有些已經(jīng)用不了的技術(shù)現(xiàn)在就能用了,深度學(xué)習(xí)就是這么來(lái)的。
我們?cè)倭囊涣纳疃葘W(xué)習(xí)圖像應(yīng)用的案例,比如說(shuō)我們提到的這個(gè)五四青年節(jié)活動(dòng),它是怎么樣去設(shè)計(jì)的。首先呢,我們會(huì)有一些圖片的訓(xùn)練數(shù)據(jù),然后在進(jìn)入模型之前,我們會(huì)對(duì)數(shù)據(jù)進(jìn)行向量化,通過(guò)數(shù)據(jù)向量化,我們就可以得到一個(gè)模型,然后得到一個(gè)分類(lèi),和一個(gè) score,這邊的 score 只是模型對(duì)這種結(jié)果一個(gè)相對(duì)的分析,一般我們會(huì)選擇 score 最高的一個(gè)分類(lèi),然后前端會(huì)從這個(gè)分類(lèi)中間選擇圖片,生成H5的這個(gè)結(jié)果,大家就可以看到跟哪位歷史上的有名的青年相似了。
第二個(gè)也是多模態(tài)的例子,根據(jù)一張圖片去講一個(gè)浪漫的故事,當(dāng)時(shí)我們有這個(gè)想法的原因是,我們知道現(xiàn)在已經(jīng)有看圖出文字描述的技術(shù),那我們能不能進(jìn)一步的,讓圖片可以講故事。這樣的話,這個(gè)應(yīng)用就可以幫助家里有小寶寶的人群。除了圖像識(shí)別以外,我們還進(jìn)行了一些意圖的分析。
在另一方面,我們會(huì)使用一個(gè)浪漫小說(shuō)的數(shù)據(jù)庫(kù),對(duì)另外一個(gè)模型進(jìn)行訓(xùn)練。最后,我們根據(jù)這個(gè)圖片里面這些關(guān)健詞和它的意圖去匹配浪漫小說(shuō)中間的文段,把有關(guān)的文段全部拿出來(lái),拿出來(lái)這些文段有的是不成文章的,所以要進(jìn)行下一輪的匹配,把這些文段中間的關(guān)鍵詞再去進(jìn)一步的在小說(shuō)庫(kù)里面去匹配,成段的文字,這就實(shí)現(xiàn)了一個(gè) storyteller。
這個(gè)項(xiàng)目除了最先我們對(duì)圖像里面的對(duì)象識(shí)別過(guò)程使用的是監(jiān)督學(xué)習(xí),其他的都是非監(jiān)督學(xué)習(xí)。這個(gè)系統(tǒng)是可以自然的去套用到很多不同的地方,只要換個(gè)不同的文章數(shù)據(jù)庫(kù),它就可以講不同的故事。一些例子就是根據(jù)不同的圖片,比如左上角這張是我覺(jué)得分?jǐn)?shù)最高的:有一個(gè)女性在沙灘上面走路,經(jīng)過(guò)我們的模型就輸出了一個(gè)非常浪漫的故事,基本上符合這個(gè)情景。
▌五、解析云端AI能力支撐
我們聊了很多計(jì)算機(jī)視覺(jué)圖像處理的一些算法,我們是不是下一步還要考慮怎么樣把這個(gè)算法落地,變成一個(gè)有趣的產(chǎn)品或者活動(dòng)呢?如果是這樣,我們需要一些什么樣的能力呢?
我們需要一個(gè)這樣的架構(gòu),比如像這次軍裝照活動(dòng),我們會(huì)有非常高的訪問(wèn)量,同時(shí)呢,它會(huì)有遍布全國(guó)的用戶,整體上來(lái)說(shuō),我們首先要保證這個(gè)系統(tǒng)能穩(wěn)定和彈性伸縮,然而由于所有的機(jī)器都是有成本的,這里我們就要考慮到一個(gè)平衡,如何很好的高效承載服務(wù)的同時(shí),又要保證這個(gè)系統(tǒng)能夠足夠的穩(wěn)定?
在這個(gè)活動(dòng)背后,我們使用了很多的騰訊云的一些服務(wù),包括靜態(tài)加速、負(fù)載均衡、云服務(wù)器、對(duì)象存儲(chǔ),還有一些 GPU 計(jì)算。后來(lái)發(fā)現(xiàn) CPU 的性能是能夠滿足我們的需求的,所以之后我們 GPU 就沒(méi)有上,因?yàn)?CPU 的承載還是比較高的,但實(shí)際上這一套流程是完全都是可以這么運(yùn)行的。一般情況下,我們會(huì)先用 SCD,里面的 CDM 去做一個(gè)靜態(tài)的緩存,到離用戶最近的節(jié)點(diǎn),這樣大家在訪問(wèn) H5 頁(yè)面的時(shí)候就不會(huì)等著圖片慢慢加載,因?yàn)樗鼤?huì)在離你家最近的某一個(gè)數(shù)據(jù)中心里一次性的把它給到手機(jī)的客戶端上。
然后就到負(fù)載均衡器,就是把流量負(fù)載到背后海量的虛擬機(jī)上面。在不同的區(qū)域,比如北京會(huì)有,成都會(huì)有多個(gè) ELB……這個(gè) ELB 會(huì)掛載著很多個(gè)不同的 CVM,就是虛擬機(jī),所有這些大家上傳的照片,匹配運(yùn)算都是在每個(gè) CVM 上面去產(chǎn)生結(jié)果的,然后有些過(guò)程的信息,我們也會(huì)存在 COS 上,這個(gè) COS 存儲(chǔ)是沒(méi)有大小限制的,這樣多種需求都可以得到滿足。
這套機(jī)制目前證明是非常有效的,我們將來(lái)的很多的活動(dòng)會(huì)繼續(xù)在架構(gòu)上面做一些優(yōu)化。如果你有一個(gè)很好的想法或模型要去實(shí)現(xiàn),也是可以嘗試使用一下云服務(wù),這樣是最經(jīng)濟(jì)和高效的。
騰訊云人工智能產(chǎn)品方案矩陣
▌六、技能進(jìn)階建議
最后我們聊一聊技能進(jìn)階的一些建議,如果我們?cè)?AI 這個(gè)方向上想有所進(jìn)步的話,我們應(yīng)該怎么做?右邊有個(gè)金字塔,它表示我們要完成一個(gè) AI 的產(chǎn)品,我們需要的人力的數(shù)量,AI 算法這塊可能是很核心的,但它需要的人數(shù)相對(duì)來(lái)說(shuō)比較少一點(diǎn)。共同實(shí)現(xiàn)是中間的,你需要多一些的底層開(kāi)發(fā)。由于同樣一個(gè)算法模型,你可能會(huì)海量的應(yīng)用,產(chǎn)品開(kāi)發(fā)應(yīng)用這個(gè)需要的人力的數(shù)量是最大的。
算法研究方面我們要做什么?首先是要打好比較強(qiáng)的數(shù)學(xué)基礎(chǔ)。因?yàn)闄C(jī)器學(xué)習(xí)中間大量的用到了比大學(xué)高等數(shù)學(xué)更復(fù)雜的數(shù)學(xué)知識(shí),這些知識(shí)需要大家早做研究打好基礎(chǔ),這就需要讀很多論文。同時(shí)還要鍛煉自己對(duì)新的學(xué)術(shù)成果的理解和吸收能力,像剛才提到了一個(gè)神經(jīng)網(wǎng)絡(luò)圖像的分類(lèi)問(wèn)題,實(shí)際上,短短的十年時(shí)間實(shí)現(xiàn)了那么多不同網(wǎng)絡(luò)的進(jìn)化,每一個(gè)新的網(wǎng)絡(luò)提出了,甚至還沒(méi)有發(fā)表,只是在預(yù)發(fā)表庫(kù)里面,大家就要很快的去吸收理解它,想把它轉(zhuǎn)化成可以運(yùn)行的模型,這個(gè)是要反復(fù)鍛煉的。
第二塊是工程實(shí)現(xiàn)方面,如果想從事這方面首先要加強(qiáng)自己邏輯算法封裝的能力,盡量鍛煉自己對(duì)模型的訓(xùn)練和優(yōu)化能力,這塊會(huì)需要大家把一個(gè)設(shè)計(jì)好的算法給落實(shí)到代碼上,不斷的去調(diào)整優(yōu)化實(shí)現(xiàn)最好的結(jié)果,這個(gè)過(guò)程也是需要反復(fù)磨煉的。
最后一個(gè)方向是產(chǎn)品應(yīng)用,這個(gè)首先大家要有一定的開(kāi)發(fā)能力,不管是移動(dòng)開(kāi)發(fā)還是 Web 開(kāi)發(fā),同時(shí)要提升自己 AI 產(chǎn)品場(chǎng)景的理解和應(yīng)用。實(shí)際上很多AI產(chǎn)品跟傳統(tǒng)的產(chǎn)品是有很大的理解上的區(qū)別,大家可能要更新自己的這種想法,多去看一些 AI 產(chǎn)品目前是怎么做的,有沒(méi)有好的點(diǎn)子,多去試用體會(huì)。同時(shí)如果我們想把一個(gè) AI 的模型變成百萬(wàn)級(jí)、千萬(wàn)級(jí)用戶使用的流行產(chǎn)品,我們還需要有系統(tǒng)構(gòu)建能力和優(yōu)化能力。
計(jì)算機(jī)視覺(jué)學(xué)習(xí)資源
-
計(jì)算機(jī)視覺(jué)
+關(guān)注
關(guān)注
8文章
1698瀏覽量
45976 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5500瀏覽量
121111
原文標(biāo)題:從零到一學(xué)習(xí)計(jì)算機(jī)視覺(jué):朋友圈爆款背后的計(jì)算機(jī)視覺(jué)技術(shù)與應(yīng)用 | 公開(kāi)課筆記
文章出處:【微信號(hào):AI_Thinker,微信公眾號(hào):人工智能頭條】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論