暢談人工智慧藝術新命題:神經風格遷移

人工智慧頻道發表於2018-11-20

暢談人工智慧藝術新命題:神經風格遷移

波士頓

介紹

神經風格遷移(Neural Transfer Style)是人工智慧在創造性環境中最令人驚奇的應用之一。在這個專案中,我們將看到如何將藝術繪畫風格轉換為所選影像,從而創造出令人驚歎的效果。Leon A. Gatys等人在2015年釋出的論文"藝術風格的神經演算法"中構思了神經風格遷移的概念。之後,許多研究人員應用和改進了方法,增加了損失的元素,嘗試了不同的最佳化器並試驗了用於此目的的不同神經網路。儘管如此,這篇原始論文仍然是理解這一概念的最佳來源,而VGG16和VGG19網路是這方面最常用的模型。考慮到兩者在最近的網路中表現優異,這種選擇是不尋常的,這種選擇在風格遷移中獲得了最高的效能。

你可以檢視此GitHub儲存庫以獲取完整程式碼。

它是如何工作的?

這種技術的目標是將影像的風格(我們稱之為"風格影像")應用於目標影像,從而保留後者的內容。我們來定義這兩個術語:

  • 風格是影像中的紋理和視覺圖案。一個例子是藝術家的筆觸。

  • 內容是影像的宏觀結構。人物、建築物、物體是影像內容的示例。

這裡顯示了不錯的效果:

暢談人工智慧藝術新命題:神經風格遷移


你想看到更多的效果嗎?在文章的最後可以瀏覽。

讓我們看看高階步驟:

  • 選擇要設定風格的影像

  • •選擇樣風格參考影像。通常,這是一幅具有獨特和可識別風格的繪畫。

  • 初始化預訓練的深度神經網路,並獲得中間層的特徵表示。完成該步驟以實現內容影像和風格影像的表示。在內容影像中,最好的選擇是獲得最高層的特徵表示,因為它們包含有關影像宏結構的資訊。對於風格參考影像,從不同比例的多個層獲得特徵表示。

  • 定義損失函式,以最小化內容損失、樣式損失和變化損失的總和。每次迭代,最佳化器都會生成一個影像。內容損失是生成的影像和內容影像之間的差異(L2歸一化),而生成的影像和樣式之間的樣式損失。稍後我們將看到這些變數是如何在數學上定義的。

  • 重新考慮損失的最小化

影像處理和影像逆向處理

首先,我們需要格式化在網路使用的影像。我們將要使用的卷積神經網路(CNN)是經過預先訓練的VGG19會議。當我們將影像處理成相容的陣列時,我們還需要對生成的影像進行解處理,從BGR切換到RGB格式。讓我們構建兩個輔助函式來執行此操作:

暢談人工智慧藝術新命題:神經風格遷移


內容損失

內容損失將主要輸入影像的內容保留為風格。由於卷積神經網路的較高層包含影像宏觀結構的資訊,因此我們將內容損失計算為輸入影像的最高層的輸出與所生成影像的同一層之間的差異(L2歸一化)。

內容損失定義為:

暢談人工智慧藝術新命題:神經風格遷移

內容損失

在等式中,F是內容影像的特徵表示(當我們執行輸入影像時網路輸出的內容),以及P是在特定隱藏層l處生成的影像之一。

這是實施的內容:

暢談人工智慧藝術新命題:神經風格遷移


風格損失

理解風格損失並不像內容丟失那麼簡單。目標是在新生成的影像中保持影像的樣式(即視覺圖案作為筆畫)。在前一種情況下,我們比較中間層的原始輸出。在這裡,我們比較樣式參考影像和生成的影像的特定圖層的Gram矩陣之間的差異。Gram矩陣被定義為給定層的向量化特徵對映之間的內積。矩陣的含義是捕獲層的特徵之間的相關性。計算多個層的損失允許保留在樣式影像和生成的影像之間的不同層內部相關的類似特徵。

單個圖層的樣式損失計算如下: 

暢談人工智慧藝術新命題:神經風格遷移

每層風格丟失

在等式中,A是風格影像的Gram矩陣,G是生成影像的Gram矩陣,兩者都與給定層有關。 N和M是風格影像的寬度和高度。

首先為每個單獨的圖層計算樣式損失,然後將其應用於考慮為風格建模的每個圖層。我們來實現它:

暢談人工智慧藝術新命題:神經風格遷移


暢談人工智慧藝術新命題:神經風格遷移


變化損失

最後,損失的最後一個部分是變化損失。這個元素未包含在原始論文中,並不是專案成功的必要條件。實際上,經驗證明,新增這個元素會產生更好的結果,因為它可以平滑畫素之間的顏色變化。

讓我們把這個包括進來:

暢談人工智慧藝術新命題:神經風格遷移


總體損失

最後,考慮到所有這些貢獻,計算總體損失。首先,我們需要提取我們選擇的特定圖層的輸出。為此,我們將字典定義為<layer name,layer output>:

暢談人工智慧藝術新命題:神經風格遷移


然後,我們計算呼叫以前函式的程式碼的損失。每個元件乘以特定的權重,我們可以調整以產生強烈或更輕的效果:

暢談人工智慧藝術新命題:神經風格遷移


設定神經網路

VGG19網路將一批三個影像作為輸入:輸入內容影像、風格參考影像和包含生成影像的符號張量。前兩個是常量變數,使用包keras.backend定義為Variable。第三個變數定義為佔位符(placeholder),因為它會在最佳化程式更新結果時隨時間變化。

暢談人工智慧藝術新命題:神經風格遷移


一旦變數被初始化,我們就將它們加入到張量中,這將在網路後期提供。

暢談人工智慧藝術新命題:神經風格遷移


完成後,我們需要定義損耗、梯度和輸出。原始論文使用演算法L-BFGS作為最佳化器。該演算法的一個限制是它需要分別轉換損失和梯度。由於獨立地計算它們將是非常低效的,我們將實現一次計算損失和梯度值的Evaluator類,但是單獨返回它們。我們開始實施:

暢談人工智慧藝術新命題:神經風格遷移


暢談人工智慧藝術新命題:神經風格遷移


最後一步

最後,一切都準備好了!最後一步是多次迭代最佳化器,直到達到所需的損失或所需的結果。我們將沿著迭代儲存結果,以檢查演算法是否按預期工作。如果結果不令人滿意,我們可以使用權重來改善生成的影像。

暢談人工智慧藝術新命題:神經風格遷移


要檢視整個程式碼,請參閱頁面開頭提供的GitHub連結。

結果

暢談人工智慧藝術新命題:神經風格遷移


暢談人工智慧藝術新命題:神經風格遷移


暢談人工智慧藝術新命題:神經風格遷移



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31545819/viewspace-2220762/,如需轉載,請註明出處,否則將追究法律責任。

相關文章