譯者按:將一張普通風景照片迅速變?yōu)榇髱煿P下的畫作,神奇的Prisma在推出不長時間后便迅速席卷業(yè)界,成為又一個互聯(lián)網(wǎng)“爆款”。作為一家同樣致力于圖像識別、處理的技術公司,我們并不打算跟風去賺取眼球,但出于對好奇心,我們還是進行了相關的研究和開發(fā),并把結果放入到小程序中分享出來。這篇文章即是Prisma背后的技術原理,轉自Christopher Burger博士私人的博客。我個人覺得原理解釋的比較清楚,所以也花點時間挑選主要部分翻譯出來,與大家分享。個人能力有限,如果有翻譯不周的地方,歡迎私信交流。
另:他在文中的提及的DeepArt即是該技術的真正開創(chuàng)者,Prisma即受此啟發(fā)而來,原理都是一樣的。
下圍棋和生成讓觀眾興趣盎然的藝術圖像是兩個很難教給計算機人工智能的任務,然而AlphaGo和Deepart兩個系統(tǒng)都證明了它們可以很好的完成教給他們的事。同時,兩個系統(tǒng)都碰巧依賴卷積網(wǎng)絡,于是我決定寫下這篇關于此技術的文章。
如何把一張圖片的風格融入到另一張圖片中?
DeepArt創(chuàng)始團隊搭建了這樣一個系統(tǒng):可以將這樣的兩張圖片:一張 是藝術作品,比如著名的繪畫;另一張是任意的照片,然后通過一種有趣的方式輸出成一張圖片,一張混合了原始照片的內(nèi)容與繪畫風格的新圖片。用deepart團隊的說法如下:
圖像合成的方法是通過找到一副圖像同時匹配照片的內(nèi)容和藝術圖像的風格。雖然源照片的全局布置被保存,顏色和局部的結構這些組成全局場景的要素則由藝術圖像提供。這有效的賦予了照片藝術品的樣式,既合成圖像的外觀與藝術品相似,即使它顯示了與照片相同的內(nèi)容。
接下來,我現(xiàn)在將解釋deepart團對怎么實現(xiàn)這點的。為了讓大家更好的理解,我需要先花點時間,介紹一些卷積網(wǎng)絡的知識。
卷積網(wǎng)絡
資料來源:維基媒體
卷積神經(jīng)網(wǎng)絡(或簡稱為卷積網(wǎng)絡)是人工神經(jīng)網(wǎng)絡的一個子類,它尤其適合用圖像作為輸入。一個卷積神經(jīng)網(wǎng)絡的輸出可以是一個分類的結果(例如“這幅圖像包含機器人”),或者一副或多幅圖像(例如輸出圖像是源輸入圖像的降噪或去模糊版本)。
運用MLP的算法進行圖像去模糊的結果。(MLP是另一種神經(jīng)網(wǎng)絡)
卷積網(wǎng)絡像其它人工神經(jīng)網(wǎng)絡一樣,包含一些參數(shù)。這些參數(shù)是通過獲得最優(yōu)期望值(比如物體檢測,能夠告訴圖像包含機器人或者香蕉)的訓練(比如調(diào)諧值)得到的。卷積網(wǎng)絡也同樣用前饋方式逐層操作。換而言之,一個輸入圖像被順序地發(fā)送入網(wǎng)絡的各層中,在最后一層輸出結果圖像。每一層有一組在網(wǎng)絡的訓練過程中被計算(訓練)出來的參數(shù)集,這些可訓練的參數(shù)定義了每層濾波器的功能。一副圖像經(jīng)過層的濾波器后產(chǎn)生的多個濾波圖像稱之為特征圖。這些特征圖本身是圖像。它們中的每一個都表示了源輸入圖像的一些特征(邊緣,角落,輪廓,物體部分)。
通常卷積網(wǎng)絡在更深的層中均比前面的層包含更多的特征圖,但是特征圖隨著網(wǎng)絡的變深而變得越來越小。
物體識別
特征圖于是包含了輸入圖像的某些特征。重要的是要理解對于每個濾波器的角色是沒有嚴格定義和描述的;同樣,我們也很難確定特定的特征圖捕捉到了輸入圖片的哪些特征。
通常這些特征在經(jīng)過一定數(shù)量的網(wǎng)絡層之后會越來越抽象。舉個例子:當卷積網(wǎng)絡被訓練用于物體識別時,越是深層的特征圖就越關注在特定圖片中指定對象的存在,而不是特定的圖像像素的值。作為對比,在第一層的特征圖檢測到諸如邊緣這樣相對簡單的特征。
此外,后幾層檢測到的特征的尺寸相對于第一層更大。這緣于濾波操作本身的原因:第一層能檢測到的特征最多與濾波器一樣大(這個僅僅是幾個像素的大?。?。但是第二層能檢測到的特征幾乎是第一層的兩倍。這個尺寸與域的大小相適應。我們呆會還要再回到這點。
近些年來,用卷積網(wǎng)絡獲得的物體檢測和定位已經(jīng)越來越好,挑戰(zhàn)也變得越來越困難——比如關于ImageNet的挑戰(zhàn)需要分辨1000類不同的物體。
imagenet 2014的勝者是一個帶有19層以及相對少的濾波器的深層卷積網(wǎng)絡。這個網(wǎng)絡被稱為VGG,它是DeepArt系統(tǒng)的基石。
利用卷積網(wǎng)絡進行紋理合成
在一篇論文里,DeepArt團隊的成員介紹了如何用被訓練了物體識別的卷積網(wǎng)絡用于其它的任務:生成人造紋理。一張照片作為源圖像,合成一張與它相似的人工圖像。下面是兩個合成生成紋理的例子:
來源:Bethgelab。左側的圖片是由右側的圖片自動生成的。這兩張圖片看起來非常像,但是整體布局已經(jīng)沒有了。
在Bethgelab可以找到許多令人印象深刻的合成紋理和它們對應的源圖像的例子。一副紋理圖像經(jīng)??梢员硎疽粋€可以被重復的圖案,比如沙子、紙、云、木頭、鋼筋混泥土等等。紋理圖像的整體布局沒有比在照片中的諸如著名地標的重要。
合成過程是選一幅僅帶有隨機噪聲的圖像,然后根據(jù)一些標準通過迭代更新這個噪聲圖像直到和原圖像足夠相似。
這個標準的目標是保留顏色和局部結構這樣的方法來抓取相似度,而不是保留圖像的整體布局。DeepArt團隊說的非常好:
紋理是預定義固定的,所以紋理模型需要和空間信息分離。
這個團隊所做的就是利用VGG網(wǎng)絡的不同特征圖之間的關系(對物體識別進行訓練),并用這些關系作為標準:
概況統(tǒng)計量是放棄特征圖中被給予不同特征關系的空間信息。
我們希望刪除空間信息,但是保存紋理信息。問題是一個特征圖是(非線性)一個濾波器版本的輸入圖像。所以它會包含輸入圖像的空間信息。我們?nèi)绾尾拍茏龅饺コ臻g信息?計算一個去除空間關系層的特征圖之間的關系(兩個特征圖的關系是一個單一的值,所以空間信息需要去除)。作者提取了一個層中所有特征圖的關系,得到一個大小為N*N的Gram矩陣,其中N是某層的特征圖的數(shù)量。
于是迭代更新過程修改源噪聲圖像直到它的Gram矩陣接近于這個源圖像生成的Gram矩陣,結果是該迭代更新過程可以通過反向傳播方便地完成。這便是標準的訓練神經(jīng)網(wǎng)絡的方法,除了這種情況中僅更新輸入圖像(而不是網(wǎng)絡的參數(shù))。它也證明,這個過程可以生成與源圖像驚人地相似的紋理。
第一排:原始圖片。第二排:僅用第一層進行重建。由于第一層中的小的接收域尺寸,重建具有很小的結構。第三排:使用更多(更深)層的重建。由于更大可容納區(qū)域,空間信息在更大范圍內(nèi)被保留。
剩余一個問題:應該選擇哪一層或哪幾層計算Gram矩陣?事實證明,選擇第一層(最淺)不能導致令人滿意的結果。最好的結果是用包括較深層的多個層。這個效果可以從兩個方面解釋:
更深的層從輸入圖像中抽取更多的抽象特征。
得益于增加相應域的大小,較深的層能抽取越來越大的特征。
用卷積網(wǎng)絡合并內(nèi)容和樣式
接下來,這個團隊對于之前介紹的紋理合成增加了一種額外的步驟。對于紋理合成,目標是近似由VGG網(wǎng)絡特征圖生成的Gram矩陣,得到一個樣式相似內(nèi)容不同的圖像?,F(xiàn)在新的目標是生成與一張圖像有相同的樣式,但是和另一幅不同的圖像有相同的內(nèi)容的圖像。除了現(xiàn)在的度量不同之外,近似圖像內(nèi)容與紋理合成方法類似地進行:目標是直接近似VGG網(wǎng)絡的深層中的值。該算法可以總結如下:
將藝術圖片輸入VGG網(wǎng)絡,計算和保存Gram矩陣的G值.
將照片輸入VGG網(wǎng)絡然后保存特征圖F值。
生成白噪聲圖像。通過反向傳播,迭代地更新這個圖像,直到它生成的特征圖和Gram矩陣分別接近F值和G值。
因為通常不可能找到完全匹配G和F的圖像,所以需要權衡:接近G或F,哪個更重要?如果更加強調(diào)Gram矩陣G,則結果是更接近匹配藝術圖像的風格的圖像。如果更多地強調(diào)特征圖F,則結果是更接近匹配照片內(nèi)容的圖像。下面的例子說明了這種權衡。
它是如何工作的?
來源。同樣的臉,在不同的光線條件下的效果(是的,這些真的是一張臉?。T谒械乃膫€圖像中,內(nèi)容是相同的,但是外觀/風格是不同的。這表明了能夠在對象識別中區(qū)分內(nèi)容和外觀/風格的重要性。
正如我前面所說,神經(jīng)網(wǎng)絡中每層的確切功能很難定義,因為網(wǎng)絡作為一個整體被訓練,并且根據(jù)其參數(shù),不同的層將具有不同的功能??雌饋?,被訓練用以識別對象的卷積網(wǎng)絡允許以圖像內(nèi)容和圖像風格的分離的方式在內(nèi)部表示圖像:Gram矩陣代表圖像風格,特征圖值代表圖像內(nèi)容。他們在訓練過程中自動學習這種可分離的表示法。這就是為什么可以控制圖像的風格,而不會太嚴重的影響到內(nèi)容的原因。
這是個令人驚訝的結果,有人可能會想知道為什么會這樣。作者給出了可能的解釋:
總而言之,一個被訓練來執(zhí)行生物視覺的核心計算任務之一的神經(jīng)網(wǎng)絡,可以自動學習內(nèi)容與風格分離的圖像表示法。這是非常令人著迷的。它的原因可能是當學習對象識別時,網(wǎng)絡必須對保持對象特性的所有不同的圖像得出一致結果。化簡圖像內(nèi)容的變化和其外觀的變化的表示法對于該任務將是非常實用的。因此,我們從內(nèi)容抽取風格的能力,乃至我們創(chuàng)造和享受藝術的能力,成為了我們的視覺系統(tǒng)強大的推理能力的一個非凡的證明。
讓我進一步解釋:有許多變化(如光照變化)改變了圖像的外觀,而不影響其內(nèi)容(仍是同一個對象)。因此,任何有利于識別圖像對象的系統(tǒng)都被迫能夠?qū)?nèi)容與外觀區(qū)分開。而系統(tǒng)到底是計算機系統(tǒng)(例如卷積網(wǎng)絡)亦或生物系統(tǒng)(例如,人類大腦)則變得無關緊要。這是一個相當有趣的洞察!
有趣的嘗試:系統(tǒng)反向
使用DeepArt的demo,我首先在論文中復制結果:我使用了Tübingen的Neckarfront的照片,并結合它與梵高的“星夜”,結果類似于DeepArt的團隊提出的結果。然后,我使用的系統(tǒng)相反:我使用內(nèi)卡河的照片作為藝術形象,梵高的畫作為照片。結果是一個圖像,保留了繪畫的內(nèi)容表示,使用在內(nèi)卡河畔的照片中發(fā)現(xiàn)的顏色和小結構。我們看到系統(tǒng)在這種情況下也能如預期的那樣工作。
從左上方開始,順時針:圖賓根的Neckarfront的照片。梵高的“星夜”。DeepArt的組合,使用梵高的繪畫作為這件藝術品。DeepArt的組合,使用圖賓根的照片作為藝術品。
下一步是什么?
Matthias Bethge告訴我,Leon Gatys成為Adobe的新研究員之一,與Adobe的合作正在將風格分解成不同的風格特定方面。期待看到更多的結果!
資料來源:ImageNet。用對象類注釋的圖像。目標是能夠自動注釋圖像。