閱讀805 返回首頁    go 阿裏雲 go 技術社區[雲棲]


“無中生有”計算機視覺探奇


0?wx_fmt=jpeg

計算機視覺(Computer Vision,CV)是一門研究如何使機器“會看”的科學。1963年來自MIT的Larry Roberts發表了該領域第一篇博士論文《Machine Perception of Three-Dimensional Solids》,標誌著CV作為一門新興人工智能方向研究的開始。在發展了50多年後的今天,我們就來聊聊最近讓計算機視覺擁有“無中生有”能力的幾個有趣嚐試:

  1. 超分辨率重建;

  2. 圖像著色;

  3. 看圖說話;

  4. 人像複原;

  5. 圖像自動生成。

可以看出,這五個嚐試層層遞進,難度和趣味程度也逐步提升。由於篇幅有限,本文在此隻談視覺問題,不提太過具體的技術細節,若大家對某部分感興趣,以後再來單獨寫文章討論。


◆ ◆ 

超分辨率重建(Image Super-Resolution)


去年夏天,一款名為“waifu 2x”的島國應用在動畫和計算機圖形學中著實火了一把。waifu 2x借助深度“卷積神經網絡”(Convolutional Neural Network,CNN)技術,可以將圖像的分辨率提升2倍,同時還能對圖像進行降噪。簡單來說,就是讓計算機“無中生有”地填充一些原圖中並沒有的像素,從而讓漫畫看起來更清晰真切。大家不妨看看圖1、圖2,真想童年時候看的就是如此高清的龍珠啊!

0?wx_fmt=png

圖1 《龍珠》超分辨率重建效果。右側為原畫,左側為waifu 2x對同幀動畫超分辨率重建結果


0?wx_fmt=png

圖2 waifu 2x超分辨率重建對比,上方為低分辨率且有噪聲的動畫圖像,左下為直接放大的結果,右下為waifu 2x去噪和超分辨率結果


不過需要指出的是,圖像超分辨率的研究始於2009年左右,隻是得力於“深度學習”的發展,waifu 2x才可以做出更好的效果。在具體訓練CNN時,輸入圖像為原分辨率,而對應的超分辨率圖像則作為目標,以此構成訓練的“圖像對”(Image Pair),經過模型訓練便可得到超分辨率重建模型。waifu 2x的深度網絡原型基於香港中文大學湯曉歐教授團隊的成果(如圖3所示)。有趣的是,這一研究指出可以用傳統方法給予深度模型以定性的解釋。在圖3中,低分辨率圖像通過CNN的卷積(Convolution)和池化(Pooling)操作後可以得到抽象後的特征圖 (Feature Map)。基於低分辨率特征圖,同樣可以利用卷積和池化實現從低分辨率到高分辨率特征圖的非線性映射(Non-Linear Mapping)。最後的步驟則是利用高分辨率特征圖重建高分辨率圖像。實際上,這三個步驟與傳統超分辨率重建方法的三個過程是一致的。

0?wx_fmt=png

圖3 超分辨率重建算法流程。從左至右依次為:低分辨率圖像(輸入)、經過若幹卷積和池化操作得到的低分辨率特征圖、低分辨率特征圖經過非線性映射得到的高分辨率特征圖、高分辨率重建圖像(輸出)


◆ ◆ 

圖像著色(Image Colorization)


顧名思義,圖像著色是將原本“沒有”顏色的黑白圖像進行彩色填充。圖像著色同樣借助卷積神經網絡,輸入為黑白和對應彩色圖像的“圖像對”,但僅僅通過對比黑白像素和RGB像素來確定填充的顏色,效果欠佳。因為顏色填充的結果要符合我們的認知習慣,比如,把一條“汪星人”的毛塗成鮮綠色就會讓人覺得很怪異。於是近期,早稻田大學發表在2016年計算機圖形學國際頂級會議SIGGRAPH上的一項工作就在原來深度模型的基礎上,加入了“分類網絡”來預先確定圖像中物體的類別,以此為“依據”再做以顏色填充。圖4就分別展示了模型結構圖和顏色恢複示例,其恢複效果還是頗為逼真的。另外,此類工作還可用於黑白電影的顏色恢複,操作時隻需簡單將視頻中逐幀拿來做著色即可。

0?wx_fmt=jpeg

圖4 圖像著色的深度學習網絡結構和效果。輸入黑白圖像後即分為兩支,上側一支用於圖像著色,下側一支用於圖像分類。在圖中紅色部分(Fusion layer),兩支的深度特征信息進行融合,由於包含了分類網絡特征,因此可以起到“用分類結果為依據輔助圖像著色”的效果


◆ ◆ 

看圖說話(Image Caption)


人們常說“圖文並茂”,文字是除圖像之外另一種描述世界的方式。近期,一項名為“Image Caption”的研究逐漸升溫起來,其主要目的是通過計算機視覺和機器學習的方法實現對一張圖像自動地生成人類自然語言的描述,即“看圖說話”。一般來講,在Image Caption中,CNN用來獲取圖像的特征,接著將圖像特征作為語言模型LSTM(RNN的一種)的輸入,整體作為一個End-to-End的結構進行聯合訓練,最終輸出對圖像的語言描述(如圖5所示)。

0?wx_fmt=png

圖5 Image Caption網絡結構。圖像作為輸入,首先經過微調後的多標記(Multi-Label)分類網絡得到預測的類別標簽,並以此連同圖像的深度特征作為下方語言模型LSTM的輸入,最終進行聯合訓練。下圖左一可完成Image Caption任務,左2為單個單詞圖像問答任務,右1為句子級別的圖像問答任務


◆ ◆ 

人像複原(Sketch Inversion)


就在六月初,荷蘭科學家在arXiv上發布了他們的最新研究成果——通過深度網絡對人臉輪廓圖進行“複原”。如圖6所示,在模型訓練階段,首先對真實的人臉圖像利用傳統的線下邊緣化方法獲得對應人臉的輪廓圖,並以原圖和輪廓圖組成的“圖像對”作為深度網絡的輸入,進行類似超分辨率重建的模型訓練。在預測階段,輸入為人臉輪廓(左二Sketch),經過卷積神經網絡的層層抽象和後續的“還原”操作,可以逐步把相片般的人臉圖像複原出來(右一),與最左邊的人臉真實圖像對比,足夠以假亂真。在模型流程圖下還另外展示了一些人像複原的結果,左側一列為真實人像,中間列為畫家手工描繪的人臉輪廓圖,並以此作為網絡輸入進行人像複原,最終得到右側一列的複原結果——目測以後刑偵警察再也不用苦練美術了。

0?wx_fmt=png

圖6 人像複原算法流程及效果


◆ ◆ 

圖像自動生成


回顧剛才的四個工作,其實它們的共同點是仍然需要依靠一些“素材”方可“無中生有”,例如“人像複原”還是需要一個輪廓畫才可以恢複人像。接下來的這個工作則可以做到由任意一條隨機向量生成一張逼近真實場景的圖像。

“無監督學習”可謂是計算機視覺領域的聖杯。最近該方向的一項開創性工作是由Ian Goodfellow和Yoshua Bengio等提出的“生成對抗網絡”(Generative Adversarial Nets, GAN)。該工作的靈感來自博弈論中的零和博弈。在二元零和博弈中,兩位博弈方的利益之和為零或一個常數,即一方有所得,另一方必有所失。而GAN中的兩位博弈方分別由一個“判別式網絡”和一個“生成式網絡”充當,如圖7所示。

0?wx_fmt=png

圖7 生成式網絡和判別式網絡


其中,“判別式網絡”的輸入為圖像,其作用為判斷一張圖像是真實的,還是由計算機生成的像;“生成式網絡”的輸入為一條隨機向量,可以通過網絡“生成”一張合成圖像。這張合成圖像亦可作為“判別式網絡”的輸入,隻是此時,在理想情況下應能判斷出它是由計算機生成的。


接下來,GAN中的零和博弈就發生在“判別式網絡”和“生成式網絡”上:“生成式網絡”想方設法的讓自己生成的圖像逼近真實圖像,從而可以“騙過”“判別式網絡”;而“判別式網絡”也時刻提高警惕,防止“生成式網絡”蒙混過關……你來我往,如此迭代下去,頗有點“左右互搏”的意味。GAN整個過程的最終目標是習得一個可以逼近真實數據分布的“生成式網絡”,從而掌握整體真實數據的分布情況,因此取名“生成對抗網絡”。需要強調的是,GAN不再像傳統的監督式深度學習那樣需要海量帶有類別標記的圖像,它不需任何圖像標記即可訓練,也就是進行無監督條件下的深度學習。2016年初,在GAN的基礎上,Indico Research和Facebook AI實驗室將GAN用深度卷積神經網絡進行實現(稱作DCGAN,Deep Convolutional GAN),工作發表在國際表示學習重要會議ICLR 2016上,並在無監督深度學習模型中取得了當時最好的效果。圖8展示了一些由DCGAN生成的臥室圖像。

0?wx_fmt=png

圖8 DCGAN生成的臥室圖像


更為有趣的是,DCGAN還可以像word2vec一樣支持圖像“語義”層麵的加減(如圖9所示)。

0?wx_fmt=png

圖9 DCGAN“語義加減”示意


另外,前些天“生成式計算機視覺”研究領域大牛UCLA的Song-Chun Zhu教授團隊發布了他們基於生成式卷積網絡的最新工作STGConvNet:它不僅可以自動合成動態紋理,同時還可以合成聲音,可以說將無監督計算機視覺又向前推進了一大步。


◆ ◆ 

結束語


如今借著“深度學習”的東風,計算機視覺中絕大多數任務的性能表現都被“刷”上了新高,甚至連“人像複原”,“圖像生成”類似“無中生有”的奇談都可以較高質量地實現,著實讓人激動不已。不過盡管如此,事實上距離所謂的顛覆人類的AI“奇點”還相當遙遠,並且可以預見,現階段甚至相當長的一段時間內,計算機視覺或人工智能還不可能做到真正意義上的“無中生有”——即擁有“自我意識”。


但是,也非常慶幸我們可以目睹並且經曆這次計算機視覺乃至是整個人工智能的革命浪潮,相信今後還會有很多“無中生有”的奇跡發生。站在浪潮之巔,我興奮不已、徹夜難眠。

 原文發布時間為:2016-09-23

本文來自雲棲社區合作夥伴“大數據文摘”,了解相關信息可以關注“BigDataDigest”微信公眾號

最後更新:2017-06-05 16:01:50

  上一篇:go  GitHub排名前20的Pandas, NumPy 和SciPy函數
  下一篇:go  從http協議中獲得客戶端ip