近日,期刊平臺(tái) Distill 發(fā)布了谷歌研究人員的一篇文章,介紹一個(gè)適用于神經(jīng)網(wǎng)絡(luò)可視化和風(fēng)格遷移的強(qiáng)大工具:可微圖像參數(shù)化。這篇文章從多個(gè)方面介紹了該工具,機(jī)器之心選取部分內(nèi)容進(jìn)行了編譯介紹。
圖像分類神經(jīng)網(wǎng)絡(luò)擁有卓越的圖像生成能力。DeepDream [1]、風(fēng)格遷移 [2] 和特征可視化 [3] 等技術(shù)利用這種能力作為探索神經(jīng)網(wǎng)絡(luò)內(nèi)部原理的強(qiáng)大工具,并基于神經(jīng)網(wǎng)絡(luò)把藝術(shù)創(chuàng)作推進(jìn)了一小步。
所有這些技術(shù)基本上以相同的方式工作。計(jì)算機(jī)視覺(jué)領(lǐng)域使用的神經(jīng)網(wǎng)絡(luò)擁有圖像的豐富內(nèi)部表征。我們可以使用該表征描述我們希望圖像具備的特性(如風(fēng)格),然后優(yōu)化圖像使其具備這些特性。這種優(yōu)化是可能的,因?yàn)榫W(wǎng)絡(luò)對(duì)于輸入是可微的:我們可以輕微調(diào)整圖像以更好地?cái)M合期望特性,然后迭代地在梯度下降中應(yīng)用這種微調(diào)。
通常,我們將輸入圖像參數(shù)化為每個(gè)像素的 RGB 值,但這不是唯一的方式。由于從參數(shù)到圖像的映射是可微的,我們?nèi)匀豢梢杂锰荻认陆祦?lái)優(yōu)化可替代的參數(shù)設(shè)定。
圖 1:當(dāng)圖像參數(shù)化可微的時(shí)候,我們就可以對(duì)其使用反向傳播(橙色箭頭)來(lái)優(yōu)化。
為什么參數(shù)化很重要?
這可能令人驚訝,即改變優(yōu)化問(wèn)題的參數(shù)設(shè)定可以如此顯著地改變結(jié)果,盡管實(shí)際被優(yōu)化的目標(biāo)函數(shù)仍然是相同的形式。為什么參數(shù)設(shè)定的選擇有如此顯著的效果?原因如下:
(1)改善優(yōu)化:轉(zhuǎn)換輸入使優(yōu)化問(wèn)題更簡(jiǎn)單,這是一種被稱為「預(yù)處理」的技術(shù),是優(yōu)化過(guò)程的重要部分。我們發(fā)現(xiàn)參數(shù)設(shè)定的簡(jiǎn)單變化就可以使圖像優(yōu)化變得更加簡(jiǎn)單。
(2)引力盆地:當(dāng)我們優(yōu)化神經(jīng)網(wǎng)絡(luò)的輸入時(shí),通常有很多不同的解,對(duì)應(yīng)不同的局部極小值。優(yōu)化過(guò)程落入某個(gè)局部極小值是由其引力盆地(即在極小值影響下的優(yōu)化曲面區(qū)域)控制的。改變優(yōu)化問(wèn)題的參數(shù)設(shè)定可以改變不同引力盆地的大小,影響可能的結(jié)果。
(3)附加約束:某些參數(shù)設(shè)定僅覆蓋可能輸入的子集,而不是整個(gè)空間。在這種參數(shù)設(shè)定下的優(yōu)化器仍然尋找最小化或最大化目標(biāo)函數(shù)的解,但它們需要服從參數(shù)設(shè)定的約束。通過(guò)選擇正確的約束集,我們可以施加多種約束,從簡(jiǎn)單的約束(例如,圖像邊界必須是黑色的)到復(fù)雜而精細(xì)的約束。
(4)暗含地優(yōu)化其它目標(biāo)函數(shù):參數(shù)化可能內(nèi)在地使用一種和輸出不同的目標(biāo)函數(shù),并對(duì)其進(jìn)行優(yōu)化。例如,當(dāng)視覺(jué)網(wǎng)絡(luò)的輸入是一張 RGB 圖像時(shí),我們可以參數(shù)化那張圖像為一個(gè) 3D 物體渲染圖,并在渲染過(guò)程中使用反向傳播以進(jìn)行優(yōu)化。由于 3D 物體比圖像具有更多的自由度,我們通常使用隨機(jī)參數(shù)化,它能生成從不同視角渲染的圖像。
在文章接下來(lái)的部分中,我們將給出幾個(gè)示例,證明使用上述方法的有效性,它們帶來(lái)了令人驚訝和有趣的視覺(jué)結(jié)果。
對(duì)齊特征可視化解釋
相關(guān) colab 頁(yè)面:https://colab.research.google.com/github/tensorflow/lucid/blob/master/notebooks/differentiable-parameterizations/aligned_interpolation.ipynb
特征可視化最常用于可視化單個(gè)神經(jīng)元,但它也可用來(lái)可視化神經(jīng)元組合,以研究它們?nèi)绾蜗嗷プ饔?[3]。這時(shí)不是優(yōu)化一張圖像來(lái)激活單個(gè)神經(jīng)元,而是優(yōu)化它來(lái)激活多個(gè)神經(jīng)元。
當(dāng)我們希望真正地理解兩個(gè)神經(jīng)元之間的相互作用時(shí),我們可以更進(jìn)一步并創(chuàng)建多個(gè)可視化,逐漸把目標(biāo)函數(shù)從優(yōu)化一個(gè)神經(jīng)元轉(zhuǎn)移到給另一個(gè)激活神經(jīng)元賦予更多的權(quán)重。這在某種程度上和生成模型(如 GAN)的潛在空間插值相似。
盡管如此,仍然存在一些小問(wèn)題:特征可視化是隨機(jī)的。即使你優(yōu)化的是同一個(gè)物體,其每一次的可視化圖也是不同的。一般而言,這不是什么問(wèn)題,但它確實(shí)阻礙了插值可視化。如果就這樣處理,得到的可視化將是非對(duì)齊的:視覺(jué)關(guān)鍵點(diǎn)(例如眼睛)將出現(xiàn)在每張圖像的不同位置。在稍微不同的物體中,缺乏對(duì)齊將更難識(shí)別差異,因?yàn)椴町惐桓黠@的圖式差異掩蓋了。
如果我們觀察插值幀的動(dòng)畫演示,就可以看到獨(dú)立優(yōu)化存在的問(wèn)題:
圖 2:(1、3 行)非對(duì)齊插值:視覺(jué)關(guān)鍵點(diǎn)(例如眼睛)從一幀到下一幀的位置會(huì)改變。(2、4 行)不同的幀更容易比較,因?yàn)橐曈X(jué)關(guān)鍵點(diǎn)在相同位置。
圖 3:(頂行)從獨(dú)立參數(shù)化的幀開(kāi)始;(中行)然后每個(gè)幀結(jié)合單個(gè)共享參數(shù)設(shè)定;(底行)創(chuàng)建一個(gè)視覺(jué)對(duì)齊的神經(jīng)元插值。
通過(guò)在幀之間部分共享一個(gè)參數(shù)設(shè)定,我們促進(jìn)可視化結(jié)果自然地對(duì)齊。直覺(jué)上,共享參數(shù)設(shè)定提供了視覺(jué)關(guān)鍵點(diǎn)位移的一個(gè)共同參照,但是單獨(dú)的參數(shù)設(shè)定基于插值權(quán)重賦予每個(gè)幀自己的視覺(jué)效果。這種參數(shù)設(shè)定并沒(méi)有改變目標(biāo)函數(shù),但確實(shí)放大了引力盆地(其中可視化是對(duì)齊的)。
這是可微參數(shù)化在可視化神經(jīng)網(wǎng)絡(luò)中作為有用輔助工具的第一個(gè)示例。
通過(guò) 3D 渲染進(jìn)行紋理風(fēng)格遷移
相關(guān) colab 頁(yè)面:https://colab.research.google.com/github/tensorflow/lucid/blob/master/notebooks/differentiable-parameterizations/style_transfer_3d.ipynb
現(xiàn)在我們已經(jīng)構(gòu)造了一個(gè)高效反向傳播到 UV 映射紋理的框架,該框架可用于調(diào)整現(xiàn)有風(fēng)格遷移技術(shù)來(lái)適應(yīng) 3D 物體。與 2D 情況類似,我們的目標(biāo)是用用戶提供圖像的風(fēng)格進(jìn)行原始物體紋理的再繪制。下圖是該方法的概述:
該算法開(kāi)始于隨機(jī)初始化紋理。在每次迭代中,我們采樣出一個(gè)指向物體邊界框中心的隨機(jī)視點(diǎn),并渲染它的兩個(gè)圖像:一個(gè)是有原始紋理的內(nèi)容圖像(content image),另一個(gè)是有當(dāng)前優(yōu)化紋理的學(xué)習(xí)圖像(learned image)。
在對(duì)內(nèi)容圖像和學(xué)習(xí)圖像進(jìn)行渲染后,我們對(duì) Gatys 等人 [2] 的風(fēng)格遷移目標(biāo)函數(shù)進(jìn)行了優(yōu)化,并將參數(shù)化映射回 UV 映射紋理中。重復(fù)該過(guò)程,直到在目標(biāo)紋理中實(shí)現(xiàn)期望的內(nèi)容與風(fēng)格融合。
圖 17:各類 3D 模型的風(fēng)格遷移。注意:內(nèi)容紋理中的視覺(jué)關(guān)鍵點(diǎn)(如眼睛)在生成紋理中正確地顯示出來(lái)。
因?yàn)槊總€(gè)視圖都是獨(dú)立優(yōu)化的,所以在每次迭代中優(yōu)化都要把該風(fēng)格的所有元素融合進(jìn)去。例如,如果選擇梵高的《星夜》作為風(fēng)格圖像,那每個(gè)單視圖都會(huì)加上星星。我們發(fā)現(xiàn),引入先前視圖風(fēng)格的「記憶」會(huì)獲得更好的結(jié)果,如上圖所示。為此,我們?cè)诮诓蓸右朁c(diǎn)上維持表征風(fēng)格的 Gram 矩陣的滑動(dòng)平均不變。在每次優(yōu)化迭代時(shí),我們根據(jù)平均矩陣來(lái)計(jì)算風(fēng)格損失,而不是基于特定視圖計(jì)算。
最終紋理結(jié)合了期望風(fēng)格的元素,同時(shí)保持了原始紋理的特征。譬如將梵高的《星夜》作為風(fēng)格圖像的模型,其最終紋理就包含了梵高作品中輕快有力的筆觸風(fēng)格。然而,盡管風(fēng)格圖像是冷色調(diào)的,最終照片里的皮毛還是保持了原始紋理的暖橙色調(diào)。更有趣的是風(fēng)格遷移時(shí)兔子眼睛的處理方式。例如,當(dāng)風(fēng)格來(lái)自梵高的畫作,那兔子的眼睛會(huì)像星星一樣旋轉(zhuǎn),而如果是康定斯基的作品,兔子眼睛就會(huì)變成抽象圖案,但仍然類似原始眼睛。
圖 18:將立體派畫家費(fèi)爾南·萊熱的畫作 The large one parades on red bottom (Fernand Leger, 1953) 的風(fēng)格遷移到 Stanford Bunny(Greg Turk & Marc Levoy)上的 3D 打印結(jié)果。
結(jié)論
對(duì)于充滿創(chuàng)造力的藝術(shù)家或研究者來(lái)說(shuō),對(duì)參數(shù)化圖像進(jìn)行優(yōu)化還有很大的空間。這不僅生成了截然不同的圖像結(jié)果,還可以生成動(dòng)畫和 3D 圖像。我們認(rèn)為本文探討的可能性只觸及了皮毛。例如,你可以將對(duì) 3D 物體紋理進(jìn)行優(yōu)化擴(kuò)展到對(duì)材料或反射率的優(yōu)化,甚至可以沿著 Kato 等人 [15] 的方向,繼續(xù)優(yōu)化 mesh 頂點(diǎn)位置。
本文主要討論了可微圖像參數(shù)化,因?yàn)樗鼈円子趦?yōu)化且涵蓋了大多應(yīng)用程序。當(dāng)然,通過(guò)強(qiáng)化學(xué)習(xí)或進(jìn)化策略 [17, 18] 來(lái)優(yōu)化不可微或部分可微的圖像參數(shù)化也是能夠?qū)崿F(xiàn)的。使用不可微參數(shù)化實(shí)現(xiàn)圖像或場(chǎng)景生成也很令人期待。