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