首頁>科技>

分享一篇 2020CVPR 錄用論文:Deep Face Super-Resolution with Iterative Collaboration between Attentive Recovery and Landmark Estimation,其提出了一種基於迭代合作的人臉超分辨演算法。

該方法將 16x16 的低解析度圖片超解析度為 128x128,在 CelebA 和 Helen資料集上的 PSNR 指標分別達到了 27.37 和 26.69,超過了當前已有的人臉超解析度演算法。

目前程式碼已經開源:

https://github.com/Maclory/Deep-Iterative-Collaboration

(目前已有72星標)

論文作者資訊:

作者來自清華大學自動化學院、智慧技術與系統國家重點實驗室、北京資訊科學與技術國家研究中心和清華大學深圳國際研究生院。

01

Motivation

在以往的一些人臉超解析度演算法中,人臉先驗資訊(facial prior)如面部關鍵點通常被引入,用於輔助網路生成更加真實的超解析度影象。但是這些方法存在兩個問題:

透過低解析度圖片LR或者粗超解析度圖片SR得到的人臉先驗資訊不一定準確大部分方法使用人臉先驗的方式為簡單的 concatenate 操作,不能充分利用先驗資訊

為了解決上述的兩個問題,作者提出了一個基於迭代合作的人臉超解析度演算法DIC,為了讓生成的圖片更加真實,也給出了該網路的 GAN 版本:DICGAN

02

Method

從網路結構圖可以看出,為了解決先驗網路不能從 coarse SR 中得到準確的先驗資訊,作者設計了一個反饋迭代網路,,使得生產的超解析度圖片越來越趨近於真實圖片,而更加真實的圖片透過先驗網路可以提取更加準確的先驗資訊以再次提升圖片的質量。

下圖展示了該迭代的機制的優勢,隨著迭代次數的增加,關鍵點預測的也越來越準確,生成的影象質量也越來越好。作者也透過實驗證明了,當迭代次數超過 3次時,網路效能的提升有限。

另一方面,為了充分利用人臉先驗資訊,作者提出了一個 Attentive Fusion 模組如下圖所示:

可以看出,作者將面部關鍵點預測網路(網路結構圖中的 Face Alignment 模組)輸出的特徵圖分成五組:左眼、右眼、嘴、鼻子和麵部輪廓。再將每個組的特徵圖透過 softmax 後相加得到每個注意力矩陣(Attention matrix)。

用這 5 個注意力矩陣分別去 reweight 網路中的五個分支的 feature maps,再加在一起得到融合特徵。那麼作者如何確定關鍵點預測網路輸出的特徵圖那幾個channel 是左眼,哪些 channel 是右眼呢?從作者開源的程式碼中可以看出,這些 channel 是人為指定的,如規定第 32 到第 41 個通道是左眼的關鍵點。

if heatmap.size(1) == 5:    return heatmap.detach() if detach else heatmapelif heatmap.size(1) == 68:    new_heatmap = torch.zeros_like(heatmap[:, :5])    new_heatmap[:, 0] = heatmap[:, 36:42].sum(1) # left eye    new_heatmap[:, 1] = heatmap[:, 42:48].sum(1) # right eye    new_heatmap[:, 2] = heatmap[:, 27:36].sum(1) # nose    new_heatmap[:, 3] = heatmap[:, 48:68].sum(1) # mouse    new_heatmap[:, 4] = heatmap[:, :27].sum(1) # face silhouette    return new_heatmap.detach() if detach else new_heatmapelif heatmap.size(1) == 194: # Helen    new_heatmap = torch.zeros_like(heatmap[:, :5])    tmp_id = torch.cat((torch.arange(134, 153), torch.arange(174, 193)))    new_heatmap[:, 0] = heatmap[:, tmp_id].sum(1) # left eye    tmp_id = torch.cat((torch.arange(114, 133), torch.arange(154, 173)))    new_heatmap[:, 1] = heatmap[:, tmp_id].sum(1) # right eye    tmp_id = torch.arange(41, 57)    new_heatmap[:, 2] = heatmap[:, tmp_id].sum(1) # nose    tmp_id = torch.arange(58, 113)    new_heatmap[:, 3] = heatmap[:, tmp_id].sum(1) # mouse    tmp_id = torch.arange(0, 40)    new_heatmap[:, 4] = heatmap[:, tmp_id].sum(1) # face silhouette    return new_heatmap.detach() if detach else new_heatmapelse:    raise NotImplementedError('Fusion for face landmark number %d not implemented!' % heatmap.size(1))

以上就是本篇論文最為核心的兩個創新點。瞭解了整個網路執行的原理之後,網路的損失函式就很好理解了:

03

Result

下圖為 DIC/DICGAN 與其他方法的結果對比圖:

可以看出 DIC/DICGAN 生成的圖片恢復了更多的細節,更加真實。由於DICGAN 是基於 GAN 的方法,相較於基於 PSNR 方法的 FSRNet,指標略低,但是生成的影象更加真實。這也是當前超解析度任務中存在的一個問題:基於 GAN 的方法生成的影象視覺質量更好,但是 PSNR 指標低。

04

Resource

論文連結:https://arxiv.org/pdf/2003.13063.pdf專案連結:https://github.com/Maclory/Deep-Iterative-Collaboration

31
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 錘子堅果手機黯然謝幕:中小手機品牌還有機會嗎?