最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

簡述風格遷移Neural-Style細節(jié)

2020-05-23 11:13 作者:nyasyamorina  | 我要投稿

什么是風格遷移?

風格遷移是使用某些手段(合法的), 把圖像從原風格轉(zhuǎn)換到另外一個風格, 同時保證圖像內(nèi)容沒有變化, 舉個栗子, 下面的這類圖片應該是很多人見過了

可以看到在把畫風變成梵高的星夜后, 圖片的內(nèi)容也可以清晰可見(說實話我覺得不太行), 這種方法就叫做風格遷移了,? 前幾年興起的"動漫濾鏡"也是屬于這種

背后的使用的方法就是被大家熟知的人工智障了, 下面詳細討論實現(xiàn)的細節(jié)

前置論文:

  • [1]:?A Neural Algorithm of Artistic Style??arxiv.org/pdf/1508.06576.pdf

  • [2]:?Perceptual Losses for Real-Time Style Transfer and Super-Resolution??網(wǎng)站找不到了 = =

一大段廢話, 請?zhí)^ -> 關于人工智能和神經(jīng)網(wǎng)絡的區(qū)別啊.....一般人見識來說呢, 人工智能就像是語音助手,圖像識別什么的. 按照這種方法來說呢, 最初的圖像識別(萬惡的手寫數(shù)字) 是簡化版的人工智能, 但是從數(shù)學層面看比較像是一種自適應降維方法而已, 分類器總給人一種"和人工智能有搭上邊"的感覺, 但是在此發(fā)展出來的對圖像視頻操作的神經(jīng)網(wǎng)絡, 反而沒被一般人認可為人工智能呢........嘛,?每個人對人工智能和神經(jīng)網(wǎng)絡的定義不一樣也是小問題了

高明的Loss設計

首先考慮單張內(nèi)容圖片Ic, Image_Content和單張風格圖Is,?Image_Style片遷移:?假設原本初始化的圖片的噪聲圖I, 經(jīng)過一段神秘操作后, 得到一張內(nèi)容與Ic相近而風格與Is相近的圖片, 也就是說, 其中的關鍵步驟是評估IIc,Is之間的差異. 也就是說需要設計一個Loss_Function

早在2012年就已經(jīng)有研究表明"CNN確實有學到什么東西",?Visualizing and Understanding Convolutional Networks, 并且不久后google開發(fā)了不那么著名但是令人震驚的Deep Dream, 所以我們可以使用CNN作為內(nèi)容風格的評估, 并且就像Conv可視化一樣, 使用CNN的conv輸出作為評估, 而不使用dense層,?

圖片來自[4]

可以看到loss大體分為兩部分: ContentLoss(圖片下方藍色)StyleLoss(圖片上方紅色), 在確保被評估的輸入I(對應圖片里的y_het)大小與內(nèi)容圖片大小Ic(y_c)一致下, 在CNN里取同一層輸出并取均方誤差可以簡單得到ContentLoss,簡單地用公式表示:??記Φ為CNN, Φ_L(I)為I在CNN的第L層輸出?

C,H,W是輸出特征圖的形狀

而對于StyleLoss, 由于圖片風格與位置無關, 所以需要把特征圖轉(zhuǎn)化成與HW無關的數(shù)據(jù), 當然最簡單的是直接取每張?zhí)卣鲌D的平均值得到長度為C的向量, 但是在[1]里使用了Gram矩陣, Gram矩陣不僅與HW無關, 它還計算了每張?zhí)卣鲌D之間的關系, 公式:?F是C*H*W的一塊特征圖?

簡單用程序表示, numpy支持ok

返回的Gram矩陣大小為C*C, 而StyleLoss就可以取I對應Gram矩陣和Is對應Gram矩陣的均方誤差了:?

最后, 為了保證圖像的多樣性, Loss的輸出可以不止1層, 如同[2]所示, 使用了4層VGG輸出計算StyleLoss, 并且在計算總Loss可以乘上合適的權重W,??最后總Loss函數(shù)可以總結為.........

緊急情報, 如果初始化的圖像I為噪聲圖, 在評估Loss并且最小化Loss時, 會出現(xiàn)梯度全部堆積都某幾個像素上, 導致一些像素出現(xiàn)正負幾千(正常圖片范圍在0~255)甚至發(fā)散的結果, 所以需要額外計算一個VariationLoss, 其實就是直接計算圖片在HW方向的平方誤差:

這個Loss在這里直接寫array計算的方法吧

最后整理上面3種Loss: 得到總Loss的計算方法? 雖然式子很長, 只不過是上面說過的拼到一起而已, 并不復雜?

有了求Loss的方法之后, 只需要選好各種超參數(shù)就可以開始風格遷移了

[2]中, Φ使用預訓練的VGG16, 內(nèi)容輸出層Lc=[15], 風格輸出層Ls=[3,8,15,22], 內(nèi)容權重全為1.0, 風格權重全為5.0, 而VariationLoss的權重為1e-6,?這里的內(nèi)容權重和風格權重只是相對而言的, 內(nèi)容權重比風格權重的比值越小, 則最終圖片越偏向風格, 保留的內(nèi)容細節(jié)也越少, 反之亦然. 而w_V幾乎是一個獨立的值, 一般來說w_V在1e-6~1e-4比較好, 太大會導致圖像過于圓滑損失細節(jié), 太小會導致大部分梯度都集中到一小部分像素上

這里非常建議自己去試試做一個, 沒什么用又不可以裝逼的大技巧 +1

記得VGG輸入的圖像最好經(jīng)過預處理, 也就是RGB每個通道減去ImageNet數(shù)據(jù)集的均值{R=123.680,G=116.779,B=103.939}, 并且輸入BGR圖像而不是RGB, 這個只是caffe預訓練模型的預處理方法, torch模型與caffe模型有很大差別, 詳情可以看官方torchvision文檔, 或者百度 (google)

VGG16中, 層的編號

選取一張內(nèi)容圖片和風格圖片, 使用白噪音初始化圖像I, 然后使用L-BFGS更新圖像I至最小Loss, 使用L-BFGS是因為計算一副圖像的Loss就代表全局的Loss而不需要考慮batchsize, learning_rate什么的, 大約更新500次就收斂到局部最小值附近了 ***

紅字提醒: 在原論文[1]中, 并沒有使用VariationLoss, 也不是用白噪音初始化圖像, 更不是使用VGG16, 他使用內(nèi)容圖像作為初始圖像, 而使用VGG19和非常奇怪的輸出層, Loss計算細節(jié)也不一樣,? ? 但是在我兩天高強度測試中發(fā)現(xiàn), [1]的Loss計算不使用于[2], 而[2]的計算適用于[1], 我覺得可能是[1]的Loss的計算只在內(nèi)容圖片附件的空間有良好的局部最小值, 而[2]則在大部分空間都具有相似且良好的局部最小值

如果有自己動手嘗試上面的單內(nèi)容單風格的風格遷移的話, 可能你會發(fā)現(xiàn), 或者我現(xiàn)在告訴你: 非常慢, 寫這篇文章時手上只有一塊750是空閑的, 使用chainer也需要大約60s才可以得到不錯的輸出, 就算使用torch和ttx Pascal可能也需要~10s, 完全達不到"實時"的效果

這時候就提出了使用轉(zhuǎn)換網(wǎng)絡(?TransformNet)來學習圖片風格的轉(zhuǎn)換,?TransformNet由3部分構成: 輸入,下采樣 - 轉(zhuǎn)換 - 上采樣,輸出, 在[2]里給出的結構是

其中ResidualBlock為殘差塊, 直接扔出[2]里給出殘差塊的實現(xiàn):??欲了解詳情請搜索殘差網(wǎng)絡?

TransformNet的輸入應該為內(nèi)容圖像Ic, 輸出則等于上述Loss中需要更新的圖像I, 因為上面已經(jīng)知道求?Loss/?I可以優(yōu)化I到局部最小值, 而這里 I =?TransformNet(Ic), 可以繼續(xù)利用反向傳播求得TransformNet的梯度從而更新TransformNet至局部最優(yōu).

可以看到TransformNet只擁有一個圖像輸入, 也就是說一個TransformNet只能對應一種固定的風格, 訓練時間雖長, 但是訓練好TransformNet后只進行前向傳播就可以完成風格遷移

訓練細節(jié): 訓練集使用COCO(早安?), 圖片大小全部resize到(256,256)風格圖片re不re可以看自己心情,?batchsize=4,?使用α=1e-3的Adam優(yōu)化器, 一共更新40k步 *

* 更新40步的意思是: 如果恰好有一個4*40k個圖片的數(shù)據(jù)集, 那么更新40k步就剛剛好用完數(shù)據(jù)集.?實際上當數(shù)據(jù)集足夠大的時候, epoch是真的沒什么用, 一整輪訓練下來數(shù)據(jù)集都沒跑完幾次, 不如直接隨機采樣省力氣.

上面說到的Loss計算問題, 因為TransformNet在初始化是隨機的, 所以剛開始輸出的圖像I基本上是一個粉噪聲圖像, 試驗過使用[1]中的Loss計算優(yōu)化TransformNet, 測試了4次的半份訓練(20k步), 每次都....完全不能說是"不理想了", 這簡直是什么BS ↓

使用我又愛又恨的chainer和垃圾750完成一次訓練需要大概20小時, 訓練完成后, 計算一張512x512的圖片大約需要1.28s, 并且視覺上的效果有時候比單圖片單風格要好,? 如果使用torch和1080ti寫模型, 訓練時間可以壓縮至1小時左右, 而前向傳播甚至達到了驚人207fps (?我是不太信的, 吹, 都可以吹)

風格遷移還有一個叫Meta Networks的快速多內(nèi)容多風格的風格遷移, 不過介于chainer好雖好, 但是不太完善, 所以我先去摸摸torch再來MetaN了


對編程, 人工智障, 數(shù)學物理什么的感興趣的都可以加群來耍啊, 在線24小時激情監(jiān)工 :?274767696? ?(入群提問真的需要認真答好吧)

簡述風格遷移Neural-Style細節(jié)的評論 (共 條)

分享到微博請遵守國家法律
会同县| 新民市| 塔城市| 泽州县| 南阳市| 四平市| 屏东县| 霍邱县| 马关县| 周口市| 南宫市| 龙山县| 顺平县| 县级市| 延川县| 寿宁县| 延边| 襄城县| 博客| 宜春市| 肥乡县| 闸北区| 威信县| 灵石县| 广水市| 库车县| 奉贤区| 从江县| 南皮县| 郎溪县| 平昌县| 竹北市| 北安市| 辉县市| 崇左市| 蒲城县| 华池县| 临城县| 津南区| 嘉义县| 彰武县|