# Bringing-Old-Photos-Back-to-Life 原理 ## 介紹 這是一個微軟開源的 AI 工具,用來修復有破損的舊照片,並且美化人像,使得照片重獲新生。 使用深度學習的方法來修復嚴重老化的舊照片,與傳統監督式學習的修復任務不同,此方式是利用真實照片和大量合成圖像的新型三重域翻譯網絡,也就是訓練了兩個**變分自編碼器 (VAE)**,分別將舊照片和乾淨照片轉換為兩個潛在空間。通過合成配對數據來學習兩個潛在空間之間的轉換。 為了解決混雜在舊照片中的多個退化問題,設計了一個帶有 partial non-local block 的全局分支,用於處理結構性缺陷,如:劃痕、塵點,和一個局部分支,用於處理非結構性缺陷,如:噪點、模糊。 兩個分支在潛在空間融合,提高從多個退化問題中恢復舊照片的能力。該方法在相片修復的視覺質量方面優於現有的方法。 ## 架構 1. 首先訓練兩個變分自編碼器 VAE AE : AutoEncoder,是多層神經網絡的一種**非監督式**學習算法,稱為自動編碼器,它可以幫助資料分類、視覺化、儲存。其架構中可細分為 **Encoder**(編碼器)和 **Decoder**(解碼器)兩部分,它們分別做壓縮與解壓縮的動作,讓輸出值和輸入值表示相同意義,代表經過編碼的數值與輸入有某種關聯,所以**已編碼的數值(encoding vector)**可以做為輸入的**特徵向量**。 ![](https://i.imgur.com/JERXbPY.png) VAE : Variational Autoencoder,AE的進階版,結構上也是由 Encoder 和 Decoder 所構成![](https://i.imgur.com/LmwVaFu.png) VAE 在編碼過程增加了一些限制,迫使生成的向量遵從高斯分佈。由於高斯分佈可以通過其mean 和 standard deviation 進行參數化,因此 VAE 理論上是可以讓你控制要生成的圖片。 VAE 的內部做法: (1) 先輸出兩個向量:mean(總和) 和 standard deviation(標準差) (2) 在encoder部分用常態分佈來表示每一個潛在的特徵,也就是用normal distribution(常態分佈)產生第三個向量 (3) 把第二個向量做 exponential,之後跟第三個向量做相乘後,把它跟第一個向量相加,即成為中間層的隱含向量 > 如何得出常態分布中的概率: > ![](https://i.imgur.com/X4VtHIJ.png) > > 假如有一個**隱含變數**(hidden varibale),z是由x生成的,目前只知道x,想要得到z的特徵就需要計算條件概率p(z|x) > ![](https://i.imgur.com/vd1M7Zq.png) > 使用variational inference(**變分法**)間接估算p(z|x)的值,其中用到KL diverge(**KL散度**)來計算兩個概率分佈相似度,使q(z|x)來估計p(z|x)的值,得出min KL(q(z|x) || p(z|x))。 總之,VAE 可以解讀隱含向量中的每一個維度(dimension)分別代表什麼意思,因此理想上可以調整想要生成的圖片。 --- 回到此項目的VAE,VAE1 用於真實照片 r ∈ R 和合成圖像 x ∈ X,通過聯合訓練一個對抗判別器縮小它們的 domain gap;對乾淨圖像 y ∈ Y 進行 VAE2 訓練。利用 VAE 將圖像轉換到緊湊的潛在空間。 2. 把潛在空間中損壞的圖像恢復到具有partial non-local block的乾淨照片裡進行對比。 ![](https://i.imgur.com/Lk4jywl.png) 與其他AI修復對比圖 ![](https://i.imgur.com/kB1J5Je.png) [教學連結](https://hackmd.io/j2Apt4ZMRIW4mISbOc8jRA?view)