[論文導讀]Learning Continuous Image Representation with Local Implicit Image Function(LIIF)
Introduction
傳統的super-resolution方法大多只能產生固定size(固定解析度)的圖片,而本篇論文提出了一種方法,可以為輸入的圖片產生一個continous representation(連續的表示法),並且根據這個連續表示法生成任意解析度的圖片。
Data preparation
首先是資料準備的部分,首先會選定訓練資料,並且做隨機的down-sample,這個down-sample的圖片就是我們的input,而原來大小的圖片就是我們模型的 ground truth,這裡會額外取樣ground truth圖片的每個pixels的座標和對應的rgb數值。
Training
再來是訓練過程,輸入圖片會先經過一個encoder,這個encoder可以是EDSR或是RDN,那 會產出一張feature map(這裡叫做latent code),那我們將想要產生的pixels的座標(浮點數座標)和這張 feature map一起輸入到decoding function,那麼就會生成這個pixels的RGB數值,最後就能和ground truth做比較計算loss。這裡的loss是直接計算L1 Loss,那後續會來詳細介紹這個decoding function。
Concepts
下圖是LIIF的具體流程,首先我們輸入一張想要放大的圖片,這裡假設是3x3。那我們經過encoder以後會產生一張一樣大小的feature map(在本篇論文稱之為latent code),那下圖中latent code當中紅點表示的就是該pixel對應的feature vector,因為此時每一個pixel的RGB數值都已經被encoder轉成各自的feature vector了。
假設我們希望將這張圖片放大到5x5,那概念上就是在每兩個pixel之間多插入一個pixel,可以觀察右下角的圖,原始紅點的座標都是整數座標,那我們要插入的pixel的座標則是浮點數座標(粉紅色點),舉例來說,(0, 0)和(1, 0)之間插入的pixel座標就是(0.5, 0)。而我們只需要把這個浮點數座標和整張3x3的feature map輸入進decoding function中,就能產生這個座標對應的RGB數值,那我們就可以拿這個RGB數值去和ground truth計算loss。最後我們只需要用這個方法,去計算每個想要的pixel的RGB數值就能得到整張放大過後的圖片了。
Decoding function
接下來講細節的部分,要講的就是前面介紹的這個decoding function,那他可以列成下方這個公式,xq就是我們要搜尋的pixles的2D座標,z*就是最接近這個pixels的latent code, 這個latent code可以想像成就是一個feature。那v*就是z*的2D座標,f就代表decoding function,最後這個I(xq)代表的就是在xq這個位置的RGB數值。因此這裡可以看到我們是將最接近的latent code數值和要搜尋的pixels與latent code之間的距離喂給decoding function 就可以產生我們要的RGB數值。那這只是最初步的一個版本,後面會再延伸其他部分。
Feature unfolding
接下來這裡要講的叫做feature unfolding,主要是希望讓每一個latent code所帶有的資訊量可以更多,因此這裡將每一個latent code都和各自周圍8個latent code做concat。此外邊界的部分會用zero padded來處理。
以下圖為例,(j, k)座標點會和他的周圍8個鄰居concat起來。
Local ensemble
另外一項技術叫做local ensemble,主要是因為當搜尋的pixels只透過最靠近的latent code 的資訊來處理那麼在交界處的部分會出現不連續的狀況,觀察右下圖,假設xq一開始最 接近z11,但往左一點變成最接近的為z10,這兩者的交界就會出現不連續的預測值。所以這邊的作法是同時考慮最接近的4個latent code,那每一個latent code會有一個權重,權重是透過兩個座標之間涵蓋的矩形面積來計算。
觀察下圖公式,St代表的是xq和z*t對角線的矩形面積,S代表周圍四個點的矩形面積總合,因此和xq越接近的點所對應的權重就越大。
Cell decoding
最後一項技術叫做cell decoding,因為目的是可以pixels based的生成任意解析度的圖片, 那這裡的目的就是希望將pixels長寬的資訊也喂給模型,不然假設今天要生成放大30倍的圖片和生成放大10倍的圖片,那同樣位置的pixels會生成出一模一樣的RGB數值,但實際上應該要不太一樣。因此這裡將pixels的長寬和輸入的x concat起來。
而具體方法舉例來說,若想要放大10倍,那輸入的長寬就設為1/10。若想放大30倍,那輸入的長寬就設為1/30。
Experiments
最後就是實驗結果,這是在DIV2K的資料集上的實驗結果。模型是利用x1到x4倍的尺度 來訓練,而x6到x30是模型訓練時沒有用過的資料,不管是用EDSR還是RDN來當 Encoder,可以看到他的效果是最好的,尤其是在超出訓練資料的尺度上。
Ablation study
接下來是ablation study,這裡的c代表cell decoding,u代表feature unfolding,e代表local ensemble,d代表降低decoding function的深度。這裡-c代表拿掉cell decoding,以此類推,可以發現全部都用得LIIF是表現是最好的,那這裡有一點比較特別的是在超出分佈的測試資料上,拿掉cell decoding反而表現變好了,這裡作者是認為,因為模型在學習時有學到cell的尺寸,而當初最大只用了4倍來訓練,所以對後面這些尺寸較不能提升 PSNR。
而這張圖可以顯示cell decoding對生成圖片的幫助,右邊是放大30倍的圖片,若僅使用大 小為1或1/2的cell尺寸作為輸入,那結果是相對比使用1/30來做輸入來得差,那這邊可以比較,有用cell decoding和沒用的結果,看虛線出可以發現有用的這張圖邊緣比較清晰,因 此作者在這裡認為雖然實驗數據上PSNR較低,但不代表cell decoding對生成的品質沒有幫助。
Conclusion
最後是結論,本篇論文為圖片的continuous representation提出了local implicit image function,並且提出了一個被所有圖片共享的decoding function,只需要輸入座標和鄰近的feature vector就能產生RGB數值。最後,LIIF可以外推到高達30倍的解析度,且這些高解析度是在訓練時沒有使用過的資料。