日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

优达学城《DeepLearning》2-5:风格迁移

發布時間:2023/11/27 生活经验 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 优达学城《DeepLearning》2-5:风格迁移 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這次我們將學習一種風格轉換方法,該方法具體原來可見論文《Image Style Transfer Using Convolutional Neural Networks》,使用卷積神經網絡進行圖像風格轉換,作者是Gatys。

在本文中,我們使用19層的VGG網絡中的特征提取層,該網絡由一系列卷積層和池化層以及幾個全連接層組成。在下圖中,卷積層按堆棧及其在堆棧中的順序命名。Conv1是圖像在第一個堆棧中通過的第一個卷積層。Conv2_1是第二個堆棧中的第一個卷積層。網絡中最深的卷積層是conv5_4。

分離樣式和內容

風格傳遞依賴于圖像內容和風格的分離。給定一個內容圖像和一個樣式圖像,我們的目標是創建一個新的目標圖像,該圖像應包含我們所需的內容和樣式組件:

  • 圖像內容:目標對象及其排列
  • 圖像風格:樣式、顏色和紋理

下面是一個示例,圖像內容是一只貓,圖像風格是Hokusai's Great Wave。生成的目標圖像仍然包含貓,但樣式變為波浪、藍色和米色,以及塊打印狀的紋理!

在本筆記本中,我們將使用預訓練的VGG19從圖像中提取內容或樣式特征。然后,我們將形式化內容和樣式丟失的概念,并使用它們來迭代更新目標圖像,直到得到我們想要的結果。我們鼓勵您使用自己的風格和內容圖片,并在Twitter上與@udacity分享您的作品;我們很想看看你的想法!

加載VGG19

VGG19分為兩部分:

  • vgg19特征提取層:所有的卷積層和池化層
  • vgg19分類器層:最后的三個線性分類器層

我們只需要特征提取部分,我們將在下面加載模型并“凍結”權重。

你可以加載任何你想要的圖片!下面,我們提供了一個helper函數,用于加載任何類型和大小的圖像。load_image函數還將圖像轉換為標準化的張量。

接下來,我將按文件名加載圖像,并強制風格圖像與內容圖像的大小相同。

為了獲得圖像的內容和樣式表示,我們必須通過VGG19網絡將圖像前向傳播,直到到達所需的層,然后從該層獲得輸出。

內容和樣式特征

TODO:獲取特征提取層。

Gram矩陣

每個卷積層的輸出都是一個張量,其維度與batch_size、depth、d以及一定的高度和寬度(h, w)有關。卷積層的Gram矩陣可以計算如下:

  • 通過batch_size, d, h, w = tensor.size()獲取depth, height, width。
  • reshape張量,使其維度被拉平。
  • 通過將重構后的張量乘以它的轉置來計算gram矩陣

注意:兩個矩陣的乘法可以使用函數:torch.mm(matrix1, matrix2)

TODO:完成gram_matrix函數

把他們放一起

現在我們已經編寫了用于提取特征和計算給定卷積層的gram矩陣的函數;讓我們把所有這些碎片放在一起!我們將從圖像中提取特征,并為樣式表示中的每一層計算gram矩陣。

損失和權重

下面給出了在每個相關層中權重樣式表示的選項。建議您使用0-1之間的范圍來衡量這些層。通過對更前面的層(conv1_1和conv2_1)進行更多加權,您可以期望在結果的目標圖像中得到更大的樣式組件。如果您選擇對后面的層進行加權,那么您將會更加強調較小的樣式組件。這是因為每一層都有不同的大小,它們一起創建了一個多尺度的樣式表示

就像在論文中一樣,我們定義了alpha(內容權重)和beta(樣式權重)。這個比例將影響你的最終圖像的風格化程度。建議您保留內容權重= 1,并將樣式權重設置為您想要的比例。

更新Target和計算損失

你將決定一些步驟來更新你的圖像,這與你之前看到的訓練循環類似,只是我們改變了我們的目標圖像,沒有其他關于VGG19或任何其他圖像。因此,steps的數量真的由您來設置!我建議使用至少2000步來獲得好的結果。但是,如果您只是測試不同的權重值或試驗不同的圖像,那么您可能希望從更少的步驟開始。

在迭代循環中,您將計算內容和樣式損失,并相應地更新目標圖像。

內容損失

內容損失是目標特征與內容特征在conv4_2層的均方差。這可以如下計算:

ontent_loss = torch.mean((target_features['conv4_2'] - content_features['conv4_2'])**2)

樣式損失

樣式損失以類似的方式計算,只是您必須遍歷多個層,在我們的字典樣式權重中通過名稱指定。

  • 您將計算每一層的目標圖像、target_gram和樣式圖的target_gram的gram矩陣,并比較這些gram矩陣,計算圖層樣式損失。稍后,你會看到這個值被圖層的大小標準化了。

總損失

最后,您將通過將樣式和內容損失相加,并將它們與指定的alpha和beta進行加權,從而創建總的損失。

我們會打印出這個損失;如果損失很大,不要驚慌。改變圖像的風格需要一些時間,您應該關注目標圖像的外觀,而不是任loss值。但是,您應該看到這種損失會隨著迭代次數的增加而減少。

TODO: Define content, style, and total losses.

結果:

Total loss at : 96257672.0

Total loss at : 15236884.0

Total loss at : 7416982.0

Total loss at : 4611283.5

Total loss at : 3088661.5


顯示目標圖像

備注一下原始風格圖像:

?

?

?

?

總結

以上是生活随笔為你收集整理的优达学城《DeepLearning》2-5:风格迁移的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。