# Wasserstein Generative Adversarial Network Based De-Blurring Using Perceptual Similarity
## 3 Proposed Algorithm
### Experiments for Optimal Solution  
Finding the optimal solution means that network generates a high performance of de-blurred images. Various experiments are conducted on different parameters. In the first experiment, five different feature maps of layers in VGG16 [10] are used for calculating style loss in three different ways.  
1. Using relu2_1, relu2_2, relu3_1, relu3_2 and relu3_3 in low layers.
2. Using relu4_1, relu4_2, relu4_3, relu4_4 and relu5_1 layer in high layers.
3. Combine low layer and high layers, which consist of relu2_2, relu3_1, relu4_3, relu4_4 and relu5_1.  
Figure 21: Generated images from comparing proposed method with WGAN-GP using content loss method on Kohler dataset: (**a**) WGAN with content loss (**b**) Proposed method (**c**) Original sharp image.  
Tables 5 and 6 show results of PSNR and SSIM from different locations of feature map in style loss. They show that feature map of high layer contains more detailed edge information. This is because the features of high layers are obtained from large receptive fields. Therefore, to reconstruct the de-blurred image, it is the best to use a high layer feature map in order to capture detailed edge and texture information at the same time.  
In Figures 22 and 23, reconstruction images from extracting low layers has a black hole in the image. As mentioned above, low-level features cannot express texture and edge information, meaning that they do not have enough information to restore the image. As a result, the reconstructed image from extracting high layers represents high quality texture and edge property.  
The second experiment to find the optimal solution is performed by changing lambda values, which are the ratios of style loss and WGAN-GP loss. This is experimented in three cases, which are \(\lambda=10,\ \lambda=100,\ \text{and}\ \lambda=1000\). Output images are shown in Figures 24-26. When \(\lambda\) is 10, generator cannot express enough style information for de-blurred image. This case still has blur noise, and it does not contain style information. Also, when \(\lambda\) is 1000, too much style information is applied to the resulting image, causing the loss of edge components, and the boundaries of the generated images have been crushed. Experimentally, using the value of \(\lambda\) as 100 can generate the best de-blurred image which contains style information and edge components, and de-blurred images look more natural to the human vision.  
Results of PSNR and SSIM are shown in Tables 7 and 8. Table 7 shows the results using GOPRO Large dataset and Table 8 using Kohler dataset. As mentioned above, if \(\lambda\) is too small or too large, its performance in PSNR and SSIM will be dropped, and the generated images do not reflect the edge information because the network does not utilize the appropriate style information. Using 100 for \(\lambda\) gives the best possible performance and can reconstruct the de-blurred image with style and edge information.  
Figure 22: Generated images from extracting different layers in VGG16. First row uses low layers, second row combines low layers and high layer, and last row uses high layers.  
\begin{table}
\begin{tabular}{c c c c} \hline \hline \multirow{2}{*}{**Method**} & \multicolumn{3}{c}{**Comparing Between Different Layers**} \\ \cline{2-4}  & \(\lambda\)=10 & \(\lambda\)=100 & \(\lambda\)=1000 \\ \hline PSNR & 23.31 & **23.29** & 22.45 \\ SSIM & 0.76 & **0.86** & 0.75 \\ \hline \hline \end{tabular}
\end{table}
Table 8: PSNR and SSIM of different lambda on Kohler dataset.  
Figure 23: Generated images from extracting different layers in VGG16 on Kohler dataset. First row uses low layers, second row combines low layers and high layer, and last row uses high layers.  
Figure 24: Generated object images according to different \(\lambda\) values: (**a**) \(\lambda=10\) (**b**) \(\lambda=100\) (**c**) \(\lambda=1000\).  
Figure 25: Generated background images according to different \(\lambda\) values: (a) \(\lambda=10\) (b) \(\lambda=100\) (c) \(\lambda=1000\).