iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0

前言

昨天使用了Pix2Pix來修復圖像,不知道各位的Pix2Pix有沒有得到好的成果,同時也希望各位可以試試看將Pix2Pix應用在其他影像處理的任務中。今天要來介紹本系列的最後一個GAN了,因為只有30天,礙於篇幅我決定先介紹這些GAN,其他有名的GAN例如CycleGAN、StackGAN、InfoGAN等就等之後有機會再來介紹吧。

SRGAN是甚麼?

SRGAN (Super-Resolution Generative Adversarial Network)於2016年9月被提出。SRGAN的應用層面主要是在圖像增強和圖像修復方面,例如可以用於提升低分辨率的影像、影片或醫學影像的品質,或者用於恢復受到雜訊、模糊或壓縮等影響的圖片。SRGAN主要也是使用CNN層並定義了一個與傳統GAN不同的損失函數,這個GAN能夠將一張圖片轉為長寬都放大四倍的高分辨率圖片。

本篇所使用的圖片均出自於原始論文

下圖是SRGAN與其它超分辨率模型的對比,其中bicubic是直接將原圖放大四倍,並透過插值法將圖片像素補齊,可以看到比較模糊;接著使用超分辨率的殘差網路 (SRResNet)效果好一點,但某些細節還是有些模糊;而SRGAN效果就比前兩者好,一些細節的把控也有到位。
https://ithelp.ithome.com.tw/upload/images/20230925/201510297fegx8kQYT.png

接著來看看SRGAN的模型架構,SRGAN的生成器與判別器都有許多細節可以注意。

  • 生成器:
    1. 生成器使用PReLU作為激活函數,PReLU與LeakyReLU類似,但是PReLU在輸入是負數的部分其斜率是根據訓練的數據而定的,不像LeakyReLU在負數輸出的斜率是我們預先定義的。
    2. 生成器中使用了卷積(Conv)-批次正規化(BN)-PReLU-卷積-批次正規化-合併層作為一個residual block,在模型中間使用5個residual blocks作為殘差部分。而其他就是比較普通的卷積等部分,合併層是將上一層的輸出與這層的輸出做相加,是殘差層必備的結構。原始論文也提供了每個CNN的參數。
    3. 作者在Discussion and future work章節曾提及當網路大於16層時能夠帶來比較好的結果。且在後續實驗中發現54層效果是最好的,但此時網路訓練已經十分緩慢。不確定再往上提升效果會不會更好,能夠確定的是個人電腦應該會跑不動XD。
  • 判別器:
    1. 判別器在輸入第一層中與Dense層不使用批次正規化,激活函數使用LeakyReLU。
    2. 其中也是以卷積-批次正規化-LeakyReLU作為一個block,網路層使用7個blocks。
    3. 最後分辨圖片屬於高清抑或是低清。使用了Perceptual Loss (論文2.2章節),簡單來說就是因為在低清轉高清圖時一定會有細節要處理,但GAN不知道細節的樣子所以只能隨便生成細節。不過也因為如果使用逐個像素比對細節的話一定會使訓練崩塌掉。所以SRGAN的作者就使用VGG網路來提取圖片特徵並且使用此特徵讓原圖與生成圖去比對相似度。
      https://ithelp.ithome.com.tw/upload/images/20230925/20151029MLarSv0Mf1.png
    4. 使用VGG網路得到的生成圖與原圖特徵圖使用L2損失 (類似MSE)做相似度計算。
      https://ithelp.ithome.com.tw/upload/images/20230925/20151029pojw4ockk3.png
      SRGAN原始論文中,生成器與判別器的模型架構圖。

另外剛剛提到的VGG網路可能也有許多人有疑問,這是把一個神經網路用在SRGAN裡面嗎?是的,VGG網路就是直接被應用到SRGAN的對抗模型中作為計算Perceptual Loss的方式,並跟判別器判斷結果一起計算損失並給生成器訓練優話。VGG網路是一個已經預訓練好的網路,可以根據使用者來決定要使用幾層網路至其他任務中,這個使用預訓練模型的方式稱為遷移學習 (Transfer Learning)。作者於SRGAN中使用VGG19,也就是使用了19層網路。

下圖為Perceptual Loss的公式部分,看到一大串英文頭真的很痛,不過釐清符號代表的意思就很簡單了。

  • 代表VGG網路通過第個MaxPooling之前的第個CNN層之後得到的特徵圖。
  • 顧名思義是高清與低清圖片。
  • 就是圖片的長寬。
  • 就是生成器。
  • 整個公式就是使用VGG萃取高清圖特徵,以及將低清圖片經過生成器生成的高清圖也透過VGG萃取特徵。接著這兩張特徵圖再去計算MSE。最後除以圖片長寬相乘做平均以得到損失。
    https://ithelp.ithome.com.tw/upload/images/20230925/20151029zPD0F5e3w6.png

最後對抗模型的目標函數就與原始GAN的目標函數相同,只是符號不同而已。
https://ithelp.ithome.com.tw/upload/images/20230925/20151029nJL7TAUyAD.png

與GAN的不同

SRGAN與GAN不同的點也有許多:

  1. 輸入不再是雜訊,而是低清圖;輸出也不是隨機圖,而是對應低清輸入的高清圖。
  2. 生成器使用CNN為主的網路,並在中間加入殘差區塊 (Residual Block)。
  3. 判別器會使用CNN來判斷圖片真假。
  4. 為了使低清轉高清的細節資訊不要有太多損失且讓模型能夠正常訓練,SRGAN的對抗模型中除了原始的判別器輸出還使用了Perceptual Loss。透過VGG19網路來將圖片特徵圖做L2損失的計算。讓生成器能夠更順利的學習到生成高清圖所需要補齊的細節。

結語

今天介紹了SRGAN,SRGAN對於圖片轉成高清圖有許多幫助,也可以將圖片的解析度提升許多。明天會來帶各位實作mnist的圖片超分辨率轉換,具體做法基本上就將mnist的解析度降低,由原本的28*28變成7*7的大小,然後再經過SRGAN生成比較高清的圖片,也就是原始圖片,這樣子進行生成就是我們明天的任務了。在GAN結束後就會來講講數學理論最麻煩、複雜的擴散模型,希望各位能夠盡力去理解這些生成式AI的細節。


上一篇
[Day21]:訓練一個Pix2Pix來修復圖片吧!
下一篇
[Day23]:想把圖片轉高清圖?使用SRGAN吧
系列文
生成式AI到底何方神聖?一窺生程式AI的真面目31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言