李二強, 陳凱健, 周 漾
(深圳大學 計算機與軟件學院, 廣東 深圳 518060)
紋理合成是圖形學及圖像處理領域的基礎問題之一, 紋理合成技術旨在合成符合用戶要求的紋理圖片, 在真實感和非真實感繪制、 圖像修復、 圖像藝術風格轉換等領域應用廣泛. 紋理合成方法主要分為兩大類: 基于參數(shù)化過程的和基于樣例的紋理合成. 由于前者包含復雜的參數(shù)設計, 因此目前的研究工作以后者為主.
基于樣例的紋理合成算法研究目前已取得許多成果[1-14]. 傳統(tǒng)基于樣例的紋理合成方法主要從源紋理圖像拷貝像素顏色至結果圖像, 包括逐像素拷貝[1-2]、 逐塊拷貝拼接[3-4]和基于塊紋理優(yōu)化[5,15], 這些算法在均勻紋理(隨機紋理和規(guī)則紋理等)的合成上取得了較好的效果. 對于非均勻紋理, 近年才有研究者通過分析樣圖, 提取一些人工設計特征作為引導通道實現(xiàn)可控合成, 例如邊緣[6]和漸變[7]等. 但這些方法可處理的非均勻紋理有限. 深度學習技術的發(fā)展為紋理合成方法帶來了新思路. Gatys等[8]用神經網絡實現(xiàn)了基于樣圖的紋理合成工作, 該方法將神經網絡中間層的特征圖統(tǒng)計信息作為深度紋理表征, 通過反饋網絡優(yōu)化合成結果; Ulyanov等[9]將文獻[8]的方法轉換為前饋神經網絡; Li等[12]將生成對抗網絡引入到紋理合成中, 該網絡能同時進行紋理合成和藝術風格遷移; 文獻[11]提出了一種用于合成周期性重復紋理的生成對抗網絡. 但這些深度學習方法仍僅適用于隨機或規(guī)則性重復等均勻紋理. Sendik等[16]對文獻[8]的工作進行了改進, 通過引入深層關聯(lián)誤差項, 提高了具有規(guī)則結構的非均勻紋理合成質量, 但該方法對大尺度結構的感知能力和感知范圍有限, 也不能處理具有空域變化的非均勻紋理. Zhou等[14]基于生成對抗網絡, 提出了通過訓練網絡學習從小紋理塊擴展成包含其大紋理塊的映射, 使得網絡在學習紋理模式內分布的同時, 還能使輸出結果符合輸入紋理的結構, 從而解決了非均勻紋理合成的難題. 但這些方法對每張紋理圖片都需單獨訓練一個專門網絡(稱為單一紋理擴展模型), 當需要學習多張紋理的合成時, 空間消耗呈線性增加. 如果簡單將文獻[14]的方法直接用于多張紋理合成, 即直接使用多張紋理圖像訓練單一紋理擴展模型, 當紋理圖像間的紋理模式接近時, 會出現(xiàn)合成結果退化為同一種紋理的現(xiàn)象, 在生成對抗網絡中稱為模式崩潰現(xiàn)象. 而且文獻[14]方法使用的生成器網絡只有一個條件輸入, 即使網絡能學習到多種不同的紋理模式, 在進行紋理遷移時, 用戶也無法控制生成想要的紋理模式或風格. 目前已有通過過擬合單一圖像實現(xiàn)自然圖像編輯的工作, 如InGAN[17]和SinGAN[18]方法, 這些方法也可直接用于紋理合成, 但與文獻[14]方法相同, 每張圖像都需要訓練一個單獨的網絡.
針對上述問題, 本文在文獻[14]方法的基礎上, 提出一種新的適用于多重紋理擴展合成與遷移的網絡. 首先通過在判別器中增加分類誤差, 使判別器在區(qū)分生成數(shù)據(jù)和真實數(shù)據(jù)的同時, 還能進一步正確判別輸入紋理來自哪一張訓練圖像, 從而改善模式崩潰問題. 其次, 為達到紋理遷移中用戶對紋理模式的控制, 將生成器修改為雙流數(shù)據(jù)輸入, 其中一流提供結構引導特征, 另一流提供紋理模式特征, 融合兩種特征后解碼生成最終的紋理圖像. 實驗結果表明, 本文的多重紋理擴展模型不僅可用一個網絡就能正確學習到多張紋理圖像的紋理模式, 訓練好的模型還具有更好的紋理遷移功能.
不同方法的多重紋理擴展結果如圖1所示. 文獻[14]提出的從小紋理塊到包含其大紋理塊的擴展映射, 可視為一個完美的紋理合成過程, 如圖2所示. 基于該假設, 先從單張紋理采樣出足夠多的大紋理塊作為生成結果參考圖像, 再從這些紋理塊中隨機采樣出小紋理塊作為輸入圖像, 利用對抗訓練的方法, 最終訓練生成器即學會了對任意大小的該種紋理由小到大的擴展合成. 除擴展相同紋理模式的輸入圖片外, 訓練好的網絡還能將任意輸入圖片進行紋理遷移, 生成保留輸入圖片的大尺度結構, 同時具備訓練樣本紋理模式的合成紋理. 但該方法需對每張紋理圖片都單獨訓練一個紋理擴展模型, 如果需學習多張紋理的合成時, 空間消耗將呈線性增加. 將文獻[14]的方法直接應用于多張紋理合成, 即直接在多張紋理圖像上采樣訓練紋理對, 訓練其同一個紋理擴展模型, 可能導致以下問題:
1) 當訓練集中紋理圖像間的紋理模式接近時, 不同紋理輸入的合成結果退化為同一種紋理模式, 如圖1(C)所示, 這種現(xiàn)象在生成對抗網絡中稱為模式崩潰;
2) 生成器網絡只有一個條件輸入(提供大尺度結構), 因此即使網絡能學習到多種不同的紋理模式, 在進行紋理遷移時用戶也無法控制輸出的紋理模式或風格.
圖1 不同方法的多重紋理擴展結果
圖2 單一紋理擴展合成過程
針對上述問題, 本文基于單一紋理擴展模型的思想, 提出一種新的多紋理擴展合成網絡, 如圖3所示. 該網絡生成器包含雙流輸入, 分別提供結構控制與紋理模式/風格, 從而使訓練好的模型能按用戶指定的紋理模式進行紋理遷移. 對于判別器網絡, 本文受ACGAN[19]啟發(fā), 在PatchGAN[20]判別器基礎上增加一個分類器網絡分支, 從而改善多重紋理擴展的模式崩潰現(xiàn)象.
圖3 多重紋理擴展模型架構
1.2.1 生成器網絡
生成器網絡采用雙流(two-stream)輸入, 一流輸入結構引導圖片, 另一流輸入紋理模式圖片. 首先, 將雙流圖片分別輸入到預訓練的VGG19網絡模型, 結構引導流使用VGG19模型的relu3_4層提取圖片的特征圖, 提供擴展結果的大尺度結構引導; 紋理模式流使用VGG19模型的relu3_1層提取紋理模式特征圖, 計算其Gram矩陣[21]作為圖片的紋理表征, 控制擴展結果的整體紋理風格. 其次, 為生成器網絡引入啟發(fā)層[22], 對結構特征圖及紋理特征圖的Gram矩陣進行融合, 輸出紋理化的結構特征圖. 為提升生成器網絡的合成能力, 本文在啟發(fā)層后加入6個殘差網絡模塊, 進行圖像特征的深度加工. 最后, 解碼器根據(jù)深度特征生成圖片. 解碼器的上采樣層比編碼器的下采樣層多一層, 以實現(xiàn)紋理圖片由小到大的擴展合成. 本文網絡生成的圖片結構特征明顯, 很好地保留了大尺度結構的完整性, 紋理清晰度高, 保留了紋理的整體風格及局部細節(jié)特征.
1.2.2 判別器網絡
圖4 分類器網絡結構
在多重紋理擴展訓練中, 判別器的主要任務是對多張紋理平行進行真假紋理塊的判別, 即尋找每個紋理樣本的真假紋理塊二分類邊界. 如果判別器分類能力不足, 則可能錯誤選擇其他紋理樣本類別的二分類邊界, 對生成器回傳錯誤分類的真假判別梯度, 從而導致輸入紋理圖與生成圖像紋理模式不匹配并可能出現(xiàn)模式崩潰問題. 基于此, 本文采用一種基于局部判別的判別器網絡, 其基礎結構如圖3中藍色虛線框內所示. 本文判別器網絡由若干個卷積模塊和下采樣卷積模塊組成, 與傳統(tǒng)判別器網絡不同, 輸入該判別器網絡一張圖片, 輸出為一個二維矩陣, 因此提高了判別器輸出的信息量及生成對抗網絡訓練的穩(wěn)定性. 為解決紋理擴展的模式崩潰問題, 受ACGAN[19]的啟發(fā), 本文在原判別器網絡最后一個下采樣卷積模塊后增加一個分類器網絡模塊, 如圖4所示, 使得判別器在區(qū)分生成數(shù)據(jù)和真實數(shù)據(jù)的同時, 還要能進一步正確判別輸入紋理來自哪一張訓練圖像, 從而改善多重紋理擴展的模式崩潰問題.
進行分類訓練時, 訓練開始前先對多張紋理圖片進行one-hot標簽化處理, 以提供真實的分類標簽. 訓練過程中, 根據(jù)判別器的高層特征, 分類器網絡對平行訓練的紋理樣本進行分類, 輸出預測的one-hot分類標簽. 在判別器和生成器網絡訓練過程中, 存在兩種分類誤差: 紋理樣本分類誤差和合成結果分類誤差.
在判別器訓練階段, 紋理樣本誤差負責迫使分類器網絡對輸入圖片進行正確地分類, 其計算公式為
(1)
其中θC表示分類器網絡的網絡參數(shù),n為標簽向量p的長度,p(i)和q(i) 分別為目標紋理標簽向量的第i位和將目標紋理輸入判別器網絡后分類器網絡輸出概率向量的第i位. 在生成器訓練階段, 合成結果分類誤差負責迫使生成器網絡合成正確分類的合成結果, 其計算公式為
(2)
其中r(i)為將生成器網絡合成結果輸入判別器網絡后分類器網絡輸出概率向量的第i位.
如圖1(B)所示, 在增加了分類誤差后, 3類相似的紋理可按自身的紋理模式進行擴展生成. 實驗表明, 通過添加分類器網絡模塊和使用分類誤差, 有效解決了模式崩潰問題.
1.3.1 紋理擴展訓練流程
類似于文獻[23]的訓練方法, 本文以交替的方式對判別器和生成器進行迭代訓練, 訓練過程如下:
1) 對進行擴展訓練的某張紋理樣本, 先從紋理樣本中隨機裁剪2K×2K目標紋理塊Pt作為真實樣本, 再從Pt紋理塊中隨機裁剪K×K紋理塊Pin作為生成器的結構輸入和紋理輸入, 輸出2K×2K生成紋理塊Pout;
2) 分別以Pt和Pout作為真實樣本和生成樣本, 交替地對判別器與生成器進行迭代訓練. 重復上述兩步, 直至設定迭代次數(shù)完畢為止.
1.3.2 損失函數(shù)
在模型訓練過程中, 除使用對抗訓練誤差Ladv[23]及分類誤差LDC,LGC[19]外, 本文還引入Pt和Pout的重建誤差L1及風格誤差Lstyle[21], 以加快模型收斂, 提高生成圖片的質量. 本文實驗中, 多重紋理擴展網絡的總損失函數(shù)為
Ltotal=Ladv+λ1L1+λ2Lstyle+λ3(LDC+LGC),
(3)
其中λ1=100,λ2=1,λ3=1, 分別為重建誤差、 風格誤差及分類誤差的權重. 實驗表明, 分類誤差的存在能有效解決模式崩潰問題, 而其權重大小對訓練及生成圖片質量的影響較小.
1.3.3 訓練方法
本文以NVIDIA Titan Xp GPU作為實驗設備, 使用50張紋理樣圖, 對網絡進行10萬次迭代訓練, 單張圖片GPU訓練總時間約為75~80 h, 網絡訓練完成后, 將分辨率為600×400像素的紋理樣圖輸入生成器網絡, 生成器網絡輸出擴展合成結果僅需約5 ms. 訓練過程中, 使用Adam[24]參數(shù)優(yōu)化方法, 學習率被初始化為0.000 2, 在前5萬次迭代中保持不變, 在后5萬次迭代中線性衰減至零.
使用Pt和Pout的L1損失作為重建誤差. 對風格誤差, 使用ImageNet預訓練的VGG19分類模型, 分別提取Pt和Pout在relu1_1,relu2_1,relu3_1,relu4_1,relu5_1的特征圖輸出, 計算二者各層特征圖的Gram矩陣的加權L2損失, 其權重分別設為1 000/(64×64),1 000/(128×128),1 000/(256×256),1 000/(512×512)和1 000/(512×512).
與單一紋理擴展模型相同, 訓練好的網絡能用于紋理遷移[14]. 本文的多重紋理擴展模型可實現(xiàn)紋理遷移, 且可實現(xiàn)紋理風格的控制. 圖5為訓練完成的多重紋理模型遷移過程, 用戶可將任意圖片作為結構引導圖輸入, 以訓練樣圖中任意紋理圖片作為紋理模式圖輸入, 輸出具有相應結構特點及紋理風格的紋理圖片輸出. 由圖5可見, 本文模型有效地實現(xiàn)了結構流和紋理流的解耦與融合, 生成的紋理輸出結構特征明顯, 紋理清晰度高, 保留了原紋理的整體風格及局部細節(jié)特征.
本文方法深度學習網絡的運行環(huán)境設置如下: CPU為Inter Xeon E5-2630 v3, 內存容量為256 GB, GPU為Nvidia Titan Xp, 操作系統(tǒng)為Linux, Cuda版本為9.0, 使用Python 3.6作為開發(fā)語言, Pytorch作為深度學習框架.
根據(jù)文獻[14]發(fā)布的數(shù)據(jù), 本文構建一個由50張紋理圖片組成的數(shù)據(jù)集. 圖6和圖7為該訓練集上的部分擴展合成結果, 其中每組圖片中左側小圖為給定的紋理樣圖, 大圖為多重紋理擴展合成的結果. 作為比較, 本文從全部實驗結果中挑選3張非均勻紋理與目前已有方法的結果進行對比, 結果如圖7所示. 本文的所有合成結果均由一個訓練好的網絡生成, 而圖7中另外3種方法擴展合成結果需訓練3個不同的網絡. 由圖7可見, 本文多重紋理的擴展合成結果相比于InGAN[17]和SinGAN[18]方法的結果, 在紋理元素的形態(tài)和排列上均與紋理樣圖保持一致, 更好地保留了紋理的整體結構, 且合成結果更真實自然. 相比于文獻[14]單一紋理的合成方法, 這兩種方法的合成結果相似且都具有較高的合成質量, 僅在細節(jié)上有差別.
圖6 多重紋理擴展合成結果
圖7 不同方法的紋理擴展合成結果對比
本文的可控制多重紋理遷移方法實驗結果如圖8所示, 其中每組圖片最左邊小圖為給定的紋理結構引導圖, 最上邊圖為紋理風格圖, 大圖為對應的紋理遷移合成結果. 由圖8可見, 本文方法有效控制了紋理遷移結果, 紋理遷移結果保留了結構引導圖的大尺度整體結構, 而紋理樣式、 風格與對應的風格引導圖相似.
圖8 多重紋理遷移結果
可控制多重紋理遷移方法與原單一紋理遷移方法的實驗結果對比如圖9所示, 其中最左邊是給定的紋理結構引導圖, 第一行為紋理風格圖, 第二行為多重紋理網絡遷移所得結果, 第三行為單一紋理擴展合成方法的神經網絡在對應紋理上進行訓練, 再把結構引導圖輸入到生成器網絡后所得結果, 即訓練4個不同網絡所得結果. 由圖9可見, 與原單一紋理遷移方法的實驗結果相比, 本文方法的結果結構更清晰, 風格化程度更高, 且圖片色彩連續(xù)均勻.
圖9 多重紋理與單一紋理遷移結果對比
考慮到本文方法利用了文獻[22]的風格遷移方法中的啟發(fā)層, 因此進一步對比利用本文方法進行紋理遷移與利用經典的風格遷移方法, 如文獻[21]提出的基于優(yōu)化方法, 文獻[25]提出的自適應實例歸一化層(AdaIN)方法, 文獻[22]提出的基于啟發(fā)層(MSG)方法, 文獻[17]提出的自然圖像重定向任務風格遷移方法(InGAN)和文獻[18]提出的從單張自然圖像中學習非條件生成模型(SinGAN)方法進行紋理遷移. 為客觀比較, 本文首先將紋理進行擴展, 再利用現(xiàn)有的風格遷移方法進行紋理遷移, 結果如圖10所示, 其中結果圖像的結構引導圖為圖8中最后一排的紋理樣圖.
圖10 不同方法的紋理遷移結果對比
由圖10可見, 文獻[21]方法能較好地保持局部紋理模式, 但存在較多偽影. 與AdaIN[25]和MSG[22]方法的結果對比表明, 本文結果的紋理風格化程度更高, 即在細節(jié)方面圖片與紋理風格樣圖更相似, 同時本文結果的紋理細節(jié)尺度保持較好, 未出現(xiàn)不適當?shù)目s放, 圖片色彩連續(xù)均勻, 未出現(xiàn)大面積偽影. 本文方法與基于單張圖像過擬合的InGAN[17]和SinGAN[18]兩種方法對比結果表明: SinGAN方法[18]并不適合紋理遷移, 其結果幾乎完全丟失了紋理模式; InGAN方法[17]取得了較好的結果, 其紋理元素保持比較完整, 但在紋理模式細節(jié)上仍有一定瑕疵.
除定性的視覺效果對比外, 還可通過對紋理遷移結果進行定量分析評判這些方法的合成質量. 首先, 隨機選擇10張自然圖片作為結構引導圖, 選擇圖10中第一列的2張紋理圖片作為給定的紋理風格樣圖, 利用上述6種方法進行紋理遷移, 得到6組結果, 每組有20張圖片紋理遷移結果; 然后遍歷所有組, 求每組中所有紋理遷移結果及其對應紋理樣圖的風格誤差[21]; 最后根據(jù)所求風格誤差, 計算每組結果風格誤差的平均值, 結果列于表1.
表1 風格誤差平均值
考慮到紋理遷移與風格遷移目標并不完全一致, 風格誤差平均值只能在一定程度上反映紋理遷移結果的質量. 由表1可見, 文獻[21]方法取得了最小風格誤差, 原因是其在風格遷移過程中直接最小化風格誤差, 因此該組結果取得最小風格誤差符合預期, 但由圖10視覺對比可見, 該方法結果視覺瑕疵較多, 很可能是陷入了局部最優(yōu). 本文方法結果的風格誤差平均值僅低于文獻[21]方法的結果. InGAN方法[17]取得了較好的視覺效果, 但由于存在一定的細節(jié)瑕疵, 其風格誤差也偏大. SinGAN方法[18]紋理遷移失敗, 其風格誤差最大. 因此, 綜合該定量分析結果與圖10中紋理遷移結果的定性分析結果可知, 本文方法紋理遷移結果的質量優(yōu)于其他4種方法.
綜上所述, 本文基于單一紋理擴展模型的思想, 提出了一種新的適用于多重紋理擴展合成與遷移的網絡. 首先, 通過在判別器中增加分類器網絡模塊, 使判別器在區(qū)分生成數(shù)據(jù)和真實數(shù)據(jù)的同時, 還能進一步正確判別輸入紋理來自哪一張訓練圖像, 從而改善了多重紋理擴展的模式崩潰問題. 其次, 為達到紋理遷移中用戶對紋理模式的控制, 本文將生成器修改為雙流數(shù)據(jù)輸入, 分別提供結構控制與紋理模式/風格, 從而使訓練好的模型可實現(xiàn)用戶可控的合成紋理遷移. 實驗結果表明, 本文的多重紋理擴展模型, 不僅能使用一個網絡就能正確學習到多張紋理圖像的紋理模式, 而且訓練好的模型還具有更好的紋理遷移功能. 相比單一紋理擴展模型, 本文方法的紋理擴展合成結果與其質量基本相同, 在紋理遷移方面則優(yōu)于單一紋理擴展合成方法及其他風格遷移方法.