使用TensorFlow Hub進行神經風格遷移

2022-06-14 10:03:13 字數 3605 閱讀 3229

作者|richmond alake

編譯|flin

**|towardsdatascience

我不會繪畫,但是機器學習可以…

神經風格遷移(nst)是一種技術,涉及利用深度卷積神經網路和演算法從一幅影象中提取內容資訊並從另一幅參考影象中提取風格資訊。在提取風格和內容之後,將生成乙個組合影象,其中生成的影象的內容和風格來自不同的影象。

nst是一種影象風格化方法,它是一種使用輸入參考影象來提供從輸入影象匯出的風格變化的輸出影象的過程。

leon a gatys等人在** 「藝術風格的神經演算法」中( 介紹了nst技術。

深度神經網路(dnn),更具體地說,卷積神經網路(cnn)的關鍵特徵是能夠學習影象中內容和風格的空間表示。此特性使nst技術得以實現。

cnn生成的輸入影象的空間表示形式捕獲影象的風格和內容統計資訊。nst將提取的風格和內容組合到生成的輸出影象中。

cnn層結構內的中間層中的啟用函式提供了捕獲輸入影象的內容和風格統計資訊的功能。

cnn圖層在卷積操作之後輸出特徵圖,該卷積操作涉及在輸入影象上有乙個濾波器滑動。影象的內容實際上在每個圖層的生成的特徵圖中。

從中間層的特徵圖中提取內容將提供輸入影象的高階結構和幾何資訊。

特徵圖獲取輸入影象的風格。為了匯出影象的風格,需要評估中間層中特徵圖的均值和相關性。此過程提供的資訊提供輸入影象的紋理圖案資訊。

好東西來了。

我們將使用下面影象的內容和風格建立影象。

為了使用兩個參考影象成功實現神經風格遷移的過程,我們將利用tensorflow hub( 上的模組

tensorflow hub提供了一套可重用的機器學習元件,例如資料集,權重,模型等。

對於本文的實現部分,我們將利用一套工具和庫來載入影象和執行資料轉換。

我們將使用jupyter notebook( 進行**實現。本文末尾還包括指向notebook的github儲存庫的鏈結。

首先,我們將匯入所需的工具和庫。

import tensorflow as tf

import matplotlib.pyplot as plt

import numpy as np

import pil.image

import tensorflow_hub as hub

接下來,我們宣告兩個變數,這些變數儲存了影象的目錄路徑,以表示輸出結果的內容和風格。另外,我們也將顯示影象。

要求將影象轉換為張量表示。對於下一步,我們將利用tensorflow的影象處理方法。

我們將建立乙個接受影象路徑為引數的函式,然後使用「tf.io.read_file」將影象轉換為張量。我們進一步使用'tf.image.decode_image'將張量中值的資料型別更改為在0和1之間的浮點數。

def image_to_tensor(path_to_img):

img = tf.io.read_file(path_to_img)

img = tf.image.decode_image(img, channels=3, dtype=tf.float32)

# resize the image to specific dimensions

img = tf.image.resize(img, [720, 512])

img = img[tf.newaxis, :]

return img

需要執行與上述相反的操作才能視覺化來自tensorflow hub模組的結果。我們需要將返回的張量轉換為可以視覺化的影象。

我們只需將每個元素乘以255,即可將包含0到1之間的值的張量反歸一化為實際畫素值。下一步是使用numpy建立乙個陣列,其中包含我們需要的資料型別。

我們從張量返回乙個影象物件。

def tensor_to_image(tensor):

tensor = tensor*255

tensor = np.array(tensor, dtype=np.uint8)

tensor = tensor[0]

plt.figure(figsize=(20,10))

plt.axis('off')

return plt.imshow(tensor)

到目前為止,我們已經完成了以下工作:

現在,我們將影象轉換為張量並通過tensorflow hub包中的.load()方法將其傳遞給模組。

我們期望從參考影象中獲得風格和內容的組合結果;因此,我們將建立乙個變數來儲存來自模組的運算結果。

為了視覺化結果,我們僅使用我們先前建立的tensor_to_image函式。

我們設法結合了兩個參考影象的風格和內容,並生成了網格影象。

歡迎關注磐創ai部落格站:

sklearn機器學習中文官方文件:

歡迎關注磐創部落格資源彙總站:

TensorFlow Hub 安裝及使用

tensorflow hub 是 google 提供的機器學習模組打包函式庫,幫開發者把tensorflow的訓練模型發布成模組,方便再次使用或是與社交共享。打包用來發布機器學習中可重複使用的部分,包括tensorflow graph 權重以及外部檔案等所需資源。這些模組包含了大量資料集預訓練後取得...

使用GraphEdit使用

1 註冊元件。其實乙個filter就是乙個com元件,所以使用之前需要註冊,可以有兩種方法對元件進行註冊。1.直接使用命令。命令列下輸入 regsvr32 hqtlystd.ax 編譯之後你會在工程目錄下的debug中找到hqtlystd.ax,這個就是要用的filter 即可註冊成功。2.vc6....

MySQL使用學習使用 mysql學習使用

1 mysql學習 1 安裝 ubuntu下直接安裝 apt get install mysql server 2 檢查伺服器是否啟動 sudo netstat tap grep mysql,如果啟動成功,出現以下資訊 tcp00localhost.localdomain mysql listen ...