類神經影像藝術風格轉換系列筆記-基礎
影像風格轉換一直是一個我很感興趣的主題,在2020年有一篇蠻有趣的論文Stylized Neural Painting,他們的實驗結果非常優秀,可以做到可控筆劃數、顏色的影像風格繪畫(如下圖)。
當然,要完成可控度這麼高的結果相對來說會需要更多限制。
在這篇文章中還不會介紹該篇論文,會著重於介紹較前期(2015~2017)的影像風格轉換的研究,以及這些研究中比較特別的細節,以及個人的解讀還有一些程式碼連結。
主軸如下:
- 類神經藝術風格轉換
(非即時 →及時單一風格 →及時多風格 →及時任意風格) - 初步風格轉換控制
- 其他方法初步想法
影像藝術風格轉換
影像風格轉換的目的,是希望生成一個新的風格化影像(Stylized Image : y),並且該影像
- 有著內容影像(Content Image : CI)的內容
- 有著風格影像(Style Image : SI)的風格
以類神經網路的實驗結果論(下方會介紹的Gatys et al. 2015)而言,要得到一個滿足上面兩種情況的風格化影像y,可以用一個良好的特徵轉換F (VGG 網路的前幾層),並且讓F(y)有著F(CI)以及F(SI)的特性即可。
對應到上方的兩條限制:
- F(y) 近似 F(CI)(Content Loss)
- F(y) 的統計量近似F(SI)的統計量 (Style Loss)
類神經網路影像風格轉換的開山始祖
自 Gatys et al. 2015 的 A Neural Algorithm of Artistic Style 採用了 VGG 模型作為了影像風格轉換特徵萃取工具後,在之後有很多研究都用與他們同一個特徵萃取工具。
CVPR 版本 : Image Style Transfer Using Convolutional Neural Networks
下方有很多圖來自這個連結
上圖為VGG16/19的架構,在Gatys et al. 2015的論文中使用的是VGG19的某幾層輸出作後續使用
由於使用部分是全捲積結構,所以可以輸入任意大小的影像進入
上一小節提到了,要做風格轉換,會希望風格轉換圖的特徵跟原影像的特徵相近,並且有著原本風格圖的統計量,分別對應到了下方的content loss與style loss
為了版面乾淨,上方的 Σ計算的皆為平均值
該論文的方法將下方式子當成優化問題來找出最好的風格化影像y:
初始值 x可以隨意設定,可以是原影像,也可以是隨機雜訊
其中 α,β為控制 y要比較靠近content還是 style的超參數
style layer set 部分,論文中採用 {F_b(x)c1 |x ∈ {1,2,3,4,5}}這五層,不過後續很多研究採用的網路層不同於Gatys et al. 2015原設計
* F_b(x)c1的記號為 blockx_conv1層,可以回去看上方的VGG架構圖片
其中的唯一限制為 y的影像大小要與 content image相同
SI與 y的影像大小可以不相同,因為 gram matrix為深層特徵的統計量矩陣,不管輸入影像大小為何,Gram matrix的維度皆為 (channel, channel)
(例如若 layer = blcok5_conv1,則gram matrix 的維度為 (512, 512)
可以透過調整風格影像的大/小,來控制筆觸要比較全域/局部
後方會一個小章節涵蓋較為詳細的如何做風格轉換控制的介紹
****
若平均值為0,則gram matrix等價於covariance matrix
個人猜測
此處使用 gram matrix的原因為VGG網路輸出的值域為 0~∞
(因 vgg的 activation function為relu)
若使用的為covariance matrix,則會將減掉平均數,從而破壞掉值域後續也有研究是使用Gram Matrix以外的統計量去做實驗,也能得到不錯的結果
A Neural Algorithm of Artistic Style / Image Style Transfer Using Convolutional Neural Networks 論文結果
A Neural Algorithm of Artistic Style 小結:
- 類神經網路影像風格轉換的開山始祖
- 奠定了後續研究的loss function
- 要生成一張新的風格化影像需要重新訓練一次
Tensorflow實作
https://www.tensorflow.org/tutorials/generative/style_transfer
PyTorch實作
https://pytorch.org/tutorials/advanced/neural_style_tutorial.html
即時單一風格轉換
在Gatys et al. 2015 奠定了基礎後,後面許多研究都延續他們的loss function,其中李飛飛的實驗室 Johnson et al. 2016 在3月出的一篇論文 Perceptual Losses for Real-Time Style Transfer and Super-Resolution能夠達成即時的單一風格轉換或者超解析度影像生成
該論文與Gatys et al. 2015不同之處在於
Gatys et al. 2015是對輸入影像 x 做總loss的優化,其優化的是影像 x。
Johnson et al. 2016 希望找到一個模型 M,使得任意的內容影像 x,其經過模型後的輸出結果y=M(x)的總loss越小越好,其優化的是模型 M。
而之後要輸出風格化影像則直接使用模型M,並且模型能夠在一般的硬體上達到即時風格轉換
其中TV loss 為 lotal variation loss,目的是希望輸出影像 M(CI)較為平滑
計算方式為將影像的鄰近像素相減後算MAE/MSE
#取 |X_i ,j ,c - X_i+1,j,c| + |X_i ,j ,c - X_i,j+1,c| 對 i,j,c的平均
他們內容影像的資料集D_c為Microsoft COCO dataset (八萬張影像)
模型為含down/up sample/resudial connect的fully convolution的網路架構
文獻中有提到也可以不使用 down/up sample網路架構
不過使用了down sample & up sample有許多好處
1. 可以用更少的層數得到更大的 receptive field
2. 跟沒down sample比起來,可以在同樣的FLOPS下,使用更多的參數 (增加Feature Map的數量)
在實作這個方法的時候有看到一個2018有趣的文章
Creating a 17 KB style transfer model with layer pruning and quantization
他將原本7 MB的模型壓到17KB,還能保留不錯的結果
方法為減少filter數量、減少residual block數量、將weight從float32壓到int8
Perceptual Losses for Real-Time Style Transfer and Super-Resolution 論文結果
提醒: Johnson et al. 2016用的是 VGG16,而非VGG19
前面兩張為單獨針對content loss或者style loss去生成圖片的分析
(尚未使用風格轉換模型M,為用 Gatys et al. 2015 的方法對 VGG16做分析)
以下為論文實驗數據以及結果
Johnson et al. 2016比較了其模型與 Gatys et al. 2015的實驗結果。
紅線是原影像的loss
綠線是M(CI)對應到的loss #(Johnson et al. 2016)
藍線是重現Gatys et al. 2015的方法loss
可以注意到的是,若用Gatys et al. 2015 的方法,要過非常多的更新步數才能趕上Johnson et al. 2016的結果,而且在影像大小特別大(1024x1024)時,最終loss只比與直接使用 Johnson et al. 2016的結果好一些。
由於Johnson et al. 2016的模型是全捲積架構,在256x256的輸入大小訓練完成後,可以直接任意更改輸入影像的大小。
上圖中值得注意的一點是右下角的貓臉部分,其結構在經過模型後還是高度存在的,而貓的身體則不然。作者提出的看法是,該部分在VGG原先的分類問題上是重要的特徵,同樣類似的部分像是人類、動物等等相較背景來說都是比較明顯的。
超解析度結果,由於篇幅、主題限制不介紹,有興趣的讀者可以去看原文。
Perceptual Losses for Real-Time Style Transfer and Super-Resolution 小結:
- 將原本的單一圖片的優化問題改成了模型-內容影像資料集優化問題
- 執行時只使用模型M,而不須使用 VGG
- Real Time
- 一個風格影像對應到一個模型
個人參考的實作程式碼: https://github.com/dxyang/StyleTransfer
原作者程式碼:https://github.com/jcjohnson/fast-neural-style
即時多風格轉換
上一小節為即時單一風格轉換,要做及時的多風格轉換可以直接訓練多個模型,並且一個模型對應到一個風格,但是這樣會讓不論是儲存成本、訓練成本都是非常高的,並且有可能不同類神經網路花了很多力氣在擷取同樣的特徵。
而 Dumoulin et al. 2016 (google brain)在與上一篇論同年10月提出了一個較為貪心的作法,就是希望一個模型可以做多風格的轉換:A Learned Representation For Artistic Style。
Dumoulin et al. 2016 對捲積後的結果使用了Conditional Instance Normalization(CIN),來達成多風格的風格轉換,其中一個condition對一個風格。
Instance Normalization(IN)為對特徵圖做channel方向標準化後的結果:
將特特徵圖 F沿著channel方向算出平均值μ,標準差σ後
計算(F-μ)/σ即為 Instance Normalization
CIN 如上圖所示,針對一個風格的訓練方式為對Instance Normalization後的結果做一個該風格的線性變換(γ_s, β_s),有N個風格要訓練的話,就有N種線性變換要訓練。
個人對CIN的解讀:
個人認為,風格轉換可以說是希望特徵有某種統計量
而CIN就是將特徵值映射到某個統計量(γ, β)的方式以對齊顏色的統計量為例,將Content Image的RGB標準差、平均值分別映射到Style Image的RGB標準差、平均值,就是一種最簡單透過一層的CIN達成的風格轉換了。
其中風格部分所占的參數量是非常少的
一個風格會在每個捲積層的輸出部分的每個channel占用兩個參數
針對一個捲機層做計算,若為channel數量為128到128,kernel為 3x3的捲積
其在捲積部分所佔的參數量為 128x128x3x3
而若模型訓練了十種風格圖,在風格部分所佔的參數僅為10x128x2
大概只有捲積部分參數量的2%而已
在網路架構部分與 Johnson et al. 2016除了Conditional instance normalization以外基本上完全一樣,只有改變些微部分:
- padding從zero padding改成mirror padding
- convolution transpose改成nearest upsample + convolution
他們在論文中提到,改了這兩項東西後,不需要加 Johnson et al. 2016 的total variation loss也能有穩定的結果。將整體目標改為如下
其中D_c與Johnson et al. 2016不同,這邊使用的是ImageNet
而模型除了吃Content Image以外,也要吃是第幾個Style
A Learned Representation For Artistic Style 論文結果
其中蠻值得注意的是上圖
上方左圖顯示一次訓練多個風格跟一次訓練一個風格比較起來,得到的結果是幾乎一模一樣的。
上方右圖為顯示若在預訓練模型增加一個新的style,可以用比較少的step數就能達成最終結果。
另外,Dumoulin et al. 2016做了額外的實驗,他們做了不同風格的condition (γ, β)的線性內插,得出了下面的結果。
A Learned Representation For Artistic Style小結:
- 讓模型能夠做到多風格的風格轉換:
套上了conditional instance normalization,一個風格對應上一個condition,讓模型能夠做到不同風格的轉換。 - 針對多風格的參數占了很小的比例:
一個風格約占0.2% - 為google自己的任意風格轉換(Arbitrary Style Transfer)打下基礎:
下一小節介紹的Exploring the structure of a real-time, arbitrary neural artistic stylization network
官方程式碼:https://github.com/magenta/magenta/tree/master/magenta/models/image_stylization
註: Johnson在github的程式碼在後來也加了instance normalization的版本
即時任意風格轉換
結束了多風格轉換後,下一個目標就是任意風格轉換了。
及時任意風格轉換的最終目標就是能夠對任意的風格圖像做風格轉換,並且不需額外訓練。
接下來會介紹兩篇論文:
Huang et al. 2017:Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization
Ghiasi et al. 2017:Exploring the structure of a real-time, arbitrary neural artistic stylization network
兩篇論文都是在2017出的,其中第一篇論文是在三月,且該篇也是第一篇即時的任意風格轉換論文;上方第二篇論文是google在五月出的,並且完全是Dumoulin et al. 2016的延伸版本。
兩篇論文都是對Instance Normalization的結果做手腳,區別在於手腳的繁複程度。
雖然Huang et al. 2017論文發表時間比較早,不過由於Ghiasi et al. 2017是前一篇的延伸,所以先介紹這篇
Exploring the structure of a real-time, arbitrary neural artistic stylization network簡介
延續著conditional instance normalization的想法,Dumoulin et al. 2016是讓一個風格圖片對應到一組condition(γ, β),而Ghiasi et al. 2017他們的想法是,用一個風格預測模型P去預測condition應該是什麼。
Loss部分與Dumoulin et al. 2016大同小異,區別為Style Image的取樣方式
由於是google的研究,他們採用的style prediction network以自家的Inception-v3為骨,輸出點為mixed-6e,經過了global average pooling後再接兩層dense
而style transfer network部分則與Dumoulin et al. 2016一樣
而後方提供的官方範例有使用以mobilenet v2為骨的版本
Exploring the structure of a real-time, arbitrary neural artistic stylization network 論文結果
可以看到上圖,對風格預測網路P輸入未在訓練集的風格圖也能得到很好的結果。
官方範例:
https://www.tensorflow.org/hub/tutorials/tf2_arbitrary_image_stylization
https://github.com/magenta/magenta/tree/master/magenta/models/arbitrary_image_stylization
官方TFlite範例(MobileNet v2):
https://www.tensorflow.org/lite/models/style_transfer/overview
Mobile APP Example: [ios] [android]如果要看這篇論文的延伸,可以去看Ghiasi為第二作者的Adjustable Real-time Style Transfer,原本的style loss Weight在模型訓練時是固定的;而他們的研究,將style loss weight除了會對loss做影響外,也把這些參數輸入給模型。經過了他們的這種設計,能夠達成單一模型,能夠對不同尺度去調整,而得出使用者最喜歡的超參數。
Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization簡介
上一篇,Ghiasi et al. 2017要額外訓練一個特殊的Style Prediction Network去預測condition。
而Huang et al. 2017這篇用了一個非常低成本的貪心作法”AdaIN”來達成condition的生成,並且只需要訓練decoder即可。
原本的Dumoulin et al. 2016又或者是Ghiasi et al. 2017的condition是要學習學出來的,而這篇的condition是直接適應(adaptive)風格圖像的結果的。
適應方式為直接將Content Image在VGG上某層輸出的統計量μ,σ 做線性轉換後對齊Style Image在同層的統計量(AdaIN)。
而為了等下撰寫方便,目標編碼 (t : target encode)為下
Huang et al. 2017在論文中採用的Encoder是VGG19-block4_conv1
由於模型比較特殊,這邊改一下寫法:
其中E為Encoder,D為Decoder,t 為前方提到的目標編碼
訓練的時候記得不要訓練VGG部分,不然結果會爛掉
Loss部分
Content Loss與前幾篇論文一樣
Style Loss與這邊提到的前幾篇論文不一樣,他們照著其他篇論文的結果,由原本要近似Style Image在{block(i)_conv1|i=1,2,3,4}上的Gram Matrix改成近似平均值與標準差:μ,σ
他們論文中有提到如果style loss用gram matrix輸出的結果差不多,不過為了概念上簡潔,改採用μ,σ
Decoder的架構為鏡像的Encoder,但是maxpool2x2改成nearestneighbor up sample2x2
Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization論文結果
由於風格轉換結果大同小異,這邊就不貼風格轉換結果,放一些他們較特殊的實驗結果
上圖描述了,比較BN(Batch Normalization)以及IN(Instance Normalization),在各種測試下,在style loss部分不管是下降速度還是最終loss都是IN的表現優於BN。
上圖,作者有模型的AdaIN層、Decoder區做了一些額外嘗試。作者直說很重要的一點是不要在decoder加上BN或者IN(圖e,f)。
e的部分,個人感覺品質差不多,不過若真的要講的話,個人感覺較不好的地方有兩個
1. 原圖下方較暗,c圖有表現出來,而e圖沒有
2. c圖的花叢部分還有稍微保留顏色,而e圖沒有f很明顯較差。
個人認為的原因是,IN會直接破壞掉特徵圖的統計量,並且本篇沒有為每個風格圖像生成特殊的Condition。將影像IN後,沒辦法適應各種不同的風格圖。
最簡單的例子,假如網路的最後一層用了IN,那最後一層的RGB分布皆會被調整,導致無法適應各種不同風格圖的顏色分布,因此失效。
AdaIN這篇論文的模型非常簡單有效,另外,如果要看比較現代作法,可以看隔年2018年12月的論文Arbitrary Style Transfer with Style-Attentional Networks,他們在encoder的深層部分加了content encode pixel對style encode feature map的attention,可以達成比較好的效果。
原作者 github :
https://github.com/xunhuang1995/AdaIN-style
個人參考 github:
https://github.com/elleryqueenhomels/arbitrary_style_transfer.git
即時任意風格轉換小結
- Exploring the structure of a real-time, arbitrary neural artistic stylization network 小結
a. 將 Dumoulin et al. 2016的style image對上condition的1對1紀錄,改成額外使用一個模型去做預測condition。
b. 有針對condition vector做手腳來得到特殊的vector,並對這些vector做視覺化的分析(如作家的Principle Component 的風格為和),本文並無提到,詳情請看原文。
c. 有比較自己的方法與AdaIN的在content/style loss上的差異,詳情請看原文。
d. Condition只需預測一次,在實際做風格轉換時不須重新預測(便宜)。 - Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization 小結
a. 第一個即時任意風格轉換的研究
b. 直接使用來自Style Image在VGG19-block4_conv1的統計量來當作特徵,對Content Image的同層做線性轉換。
c. style loss計算採用mean, std,而非gram matrix。
d. 執行時必須使用VGG encoder(很肥)
影像藝術風格轉換方法回顧
- Gatys et al. 2015
開發了後續研究使用的Loss
優化輸入來最小化Loss
任意風格轉換
非即時 - Johnson et al. 2016
將優化輸入問題改成優化模型問題
及時單一風格轉換 - Dumoulin et al. 2016
套用Condition Instance Normalization,讓Johnson et al. 2016的方法能夠拓展到多風格轉換
及時多風格轉換 - Ghiasi et al. 2017
將Dumoulin et al. 2016的Condition做泛化,改成直接使用一個模型預測Condition該為何。不在訓練集中的風格影像也能被透過此方法去預測出Condition。
及時任意風格轉換 - Huang et al. 2017
提出了AdaIN
及時任意風格轉換
初步風格轉換控制
這一章節會帶一些簡單的風格轉換控制方法。
其中包含了
- 風格內插 (Style Interpolation)
- 空間控制 (Spatial Control)
- 顏色控制 (Color Control)
- 尺度控制 (Scale Control)
風格內插
前一章節的某些模型已經自帶能夠做到初步控制的想法了,在Dumoulin et al. 2016, Ghiasi et al. 2017, Huang et al. 2017這三篇中,皆能對風格的condition做手腳來達成風格內插。
以下回顧一下三篇論文將兩個condition做線性混和的結果。
其中Ghiasi et al. 2017有個較特殊的延伸,Adjustable Real-time Style Transfer對Style Predict Network加了更多設定,並且這些設定同時是不同Layer的Loss Weight,在Inference時直接去調整這些設定即可。
空間控制/顏色控制/尺度控制
Gatys et al. 2016 為了解決自己的舊方法無法做控制而提出的 Controlling Perceptual Factors in Neural Style Transfer
該論文的補充內容位置:
http://bethgelab.org/media/uploads/stylecontrol/supplement/SupplementaryMaterial.pdf
空間控制
在上方左圖中,如果直接對(a)圖套用(b)圖的風格,則會生成(d)的結果,很多雲的紋理都變成圍牆的紋理了。
為了控制對應空間的風格,他們提出了兩種方法,這邊只介紹較為直覺的第一種方法。Style Loss部分從逼近整張圖的Gram Matrix,改成逼近上方右圖的Guided Gram Matrix(遮罩下的 Gram Matrix):
如果是去最小化上方的Style Loss,能得到下面的結果
其中有一個特別要注意的是,為了不希望風格溢出遮罩,計算上的做法在不同深度的gram matrix計算要做一些內縮,的如下圖:
顏色控制
在作風格轉換時,有時只希望只改變圖片的結構,不要改變圖片的顏色,Gatys et al. 2016提出了兩種做法
- 亮度改變(Luminance-only transfer)
做完正常的風格轉換後,萃取風格化圖片的亮度,將該亮度套用在原圖上。 - 顏色對齊(Colur Histogram Matching)
先將風格圖片對原圖做影像顏色對齊(或者反過來),之後照著原流程做風格轉換。
尺度控制
有時會希望轉換後的圖片有著風格圖I的筆觸、風格圖II的架構。
Gatys et al. 2016 他們的初步想法(Naive Approach)是直接風格化影像逼近風格A在淺層的Gram Matrix;以及風格B在深層的Gram Matrix。不過他們的對實驗結果不滿意,他們的討論是,不同深度的Gram Matrix並不是互相獨立的,用此種方法會不小心混和淺/深層資訊而沒辦法達成原本的目的。
後來想的做法非常直觀,與前面一小節的顏色對齊很類似,不過是將之用在風格上。作法為直接先將風格圖以另一張風格圖淺層(conv1_1, conv2_1)的Gram Matrix為目標創造出新的風格圖。而後再使用新的風格圖為目標,做正常的風格轉換
其他方法初步想法
上方介紹的基本上都是延續Gatys et al. 2015的做法,都會需要使用到style image的全域統計值Gram Matrix當作目標去做訓練。
除了使用統計值以外,Combining Markov Random Fields and Convolutional Neural Networks for Image Synthesis 的 Markov Random Fields 作法是從Content Image的每個小區塊(Patch),去找在Style Image中,那些區塊在模型中的特徵最相似(Cosine Similarity),將之對應回去,再嘗試去找一個最優的輸入影像來還原此種特徵,該作法能夠達成一個不錯的混和成果,如下所示:
當然,該作法又回到跟Gatys et al. 2015一樣的情境,每次要生成一張新的影像都要重新優化一次,非常的慢,所以後續也有許多研究將這種影像優化問題改為模型優化問題,有興趣的讀者可以自行去觀看這篇風格轉換的回顧:Neural Style Transfer: A Review(該回顧紀錄至2018/3月的結果)
除了有目標的學習以外(有Style Image),也能漫無目的的直接對輸入影像在網路的深層輸出做手腳。
Google的Deep Dream直接讓輸入影像對網路的深層輸出做梯度上升也能對影像做到一些特殊的轉換
總結
這篇文章介紹了自2015~2017年份間一些比較基礎的風格轉換方式,從最一開始的Gatys奠定了類神經風格轉換的方法;演變至一個模型對任意風格轉換的過程,以及一些基礎的控制方法。
有機會的話,下一篇會寫比較進階或特殊的作法。
(2021 Feb 被引用次數)參考文獻:
- (1623) Gatys, Leon A., Alexander S. Ecker, and Matthias Bethge. “A neural algorithm of artistic style.” arXiv preprint arXiv:1508.06576 (2015).
- (4567) Johnson, Justin, Alexandre Alahi, and Li Fei-Fei. “Perceptual Losses for Real-Time Style Transfer and Super-Resolution.” arXiv preprint arXiv:1603.08155 (2016).
- (556) Dumoulin, Vincent, Jonathon Shlens, and Manjunath Kudlur. “A learned representation for artistic style.” arXiv preprint arXiv:1610.07629 (2016).
- (1075) Huang, Xun, and Serge Belongie. “Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization.” arXiv preprint arXiv:1703.06868 (2017).
- (133) Ghiasi, Golnaz, et al. “Exploring the structure of a real-time, arbitrary neural artistic stylization network.” arXiv preprint arXiv:1705.06830 (2017).
- (249)Gatys, Leon A., et al. “Controlling Perceptual Factors in Neural Style Transfer.” arXiv preprint arXiv:1611.07865 (2016).
- (241)Jing, Yongcheng, et al. “Neural Style Transfer: A Review.” arXiv preprint arXiv:1705.04058 (2017).