
樣式遷移定義將樣式圖片上的樣式遷移到內容圖片上得到合成圖片實線箭頭和虛線箭頭分別表示前向傳播和反向傳播風格遷移常用的損失函數由3部分組成(1)內容損失使合成圖像與內容圖像在內容特征上接近(2)風格損失使合成圖像與風格圖像在風格特征上接近(3)全變分損失則有助于減少合成圖像中的噪點。數據預處理圖片尺寸resize圖片RGB數值歸一化圖片格式從 (H,W,C) → (C,H,W) → (1,C,H,W)數據后處理將CNN輸出轉化為“能看的”圖片模型使用VGG-19選擇相應的層作為內容層和風格層輸出深層特征保留物體結構、空間布局去掉過多細節從淺到深覆蓋不同尺度的紋理邊緣→紋理→圖案→全局風格裁剪VGG只保留需要的層逐層提取特征風格遷移有三張圖參與內容圖像固定不變風格圖像固定不變合成圖像每輪都在變提前算好內容目標和風格目標損失函數內容損失風格損失全變分損失內容損失利用均方誤差風格損失Gram矩陣來定義什么是風格給定一個特征圖CNN 某層的輸出把它拉平成矩陣 X 形狀為 c×hw注意這里需要最后的數值歸一化避免出現較大的值影響判斷這樣就可以基于gram矩陣來通過均方誤差得到誤差全變分損失是風格遷移中的去噪器它懲罰相鄰像素之間的劇烈跳變讓合成圖像更平滑自然。本質遍歷每個像素計算它和右邊、下邊兩個鄰居的差異全部加起來。風格轉移的損失函數是內容損失、風格損失和總變化損失的加權和。 通過調節這些權重超參數我們可以權衡合成圖像在保留內容、遷移風格以及去噪三方面的相對重要性。初始化合成圖像合成的圖像是訓練期間唯一需要更新的變量。因此我們可以定義一個簡單的模型SynthesizedImage并將合成的圖像視為模型參數。模型的前向傳播只需返回模型參數即可。因為 MXNet/Gluon 的 Trainer 只能優化 nn.Block 的參數。我們套一個模型殼讓框架以為我們在訓練模型實際上訓練的是圖像像素。使用Adam優化器框架內部組件訓練前的準備工作創建模型參數 圖像像素init.Constant(X)用內容圖像素初始化合成圖。一開始合成圖 內容圖原樣gluon.Trainer(..., adam, ...)Adam優化器學習率 lr。優化對象是合成圖像素預計算風格圖5個層的Gram矩陣訓練時不再重復算整體的訓練模型核心循環extract_features(X, ...)合成圖 X 過VGG網絡在目標層截獲特征compute_loss(...)比較合成圖和內容圖/風格圖的特征差異得到總損失 ltrainer.step(1)Adam優化器根據梯度更新 X 的像素值