图像去模糊 DeblurGAN 和 DeblurGANv2
1、 图像去模糊 DeblurGAN
论文:DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial Networks
论文主要贡献:
- 提出使用DeblurGAN对模糊图像去模糊,网络结构基于cGAN和“content loss”。获得了目前最佳的去模糊效果
- 将去模糊算法运用到了目标检测上,当待检测图像是模糊的的时候,先对图像去模糊能提高目标检测的准确率
- 提出了一个新的合成模糊图像的方法
生成模糊图像的方法:
用清晰图像卷积上各式各样的“blur kernel”,获得合成的模糊图像。
2、图像去模糊DeblurGANv2
论文:DeblurGAN-v2: Deblurring (Orders-of-Magnitude) Faster and Better
代码:VITA-Group/DeblurGANv2
DeblurGANv2是乌克兰天主教大学的Orest Kupyn等人提出的一种基于GAN方法进行盲运动模糊移除的方法。它在第一版DeblurGAN基础上进行改进而来,通过引入Feature Pyramid Network与轻量型backbone等使得DeblurGANv2取得更快、更优的性能。
作者首次将FPN引入到去模糊中作为生成器的核心模块。FPN可以与大量的backbone协作,可以轻松的在性能与效率方面取得均衡。FPN-Inception-ResNet-v2集成取得了SOTA性能,而FPN-MobileNet系列取得10-100倍的速度提升同时具有媲美其他SOTA方法的性能,可以达到实时性需求。除了在去模糊领域,DeblurGANv2取得了SOTA性能,它同时适用于其他图像复原任务。
Abstract
作者将FPN架构引入到去模糊问题中,同时采用了不同的backbone进行网络设计,配合GAN以及内容损失的训练学习,DeblurGANv2取得了更快更优的性能。论文的创新点包含:
- 框架层面。作者构建了一个基于FPN的去模糊框架,判别器方面选用了relativistic形式并配以最小二成损失,在全局与局部两个尺度方面进行度量;
- 骨干层面。在上述框架基础下,骨干网络的选择直接影响最终的去模糊质量与效率。在追求更高质量时可以考虑选用Inception-Resnet-v2骨干网络;在追求更快速度时可以考虑选用轻量型网络,如MobileNet系列。
- 实验层面。作者在三个流程基准数据集上进行了充分的实验对比,DeblurGANv2均取得了SOTA性能;同时作者也表明该框架同样适用于更广义的图像复原任务。
参考:图像去模糊:DeblurGANv2
参考:图像去模糊之DeblurGAN-v2
跑通程序DeblurGANv2
需要从github上下载训练好的模型:fpn_mobilenet.h5
此外还需要下载预训练模型:
mobilenet_v2.pth.tar模型的url:http://sceneparsing.csail.mit.edu/model/pretrained_resnet/mobilenet_v2.pth.tar
(感觉预测时这个不是必须的,但是代码可能写的有问题,所以不得不下载)
预测时models/fpn_mobilenet.py 下面的代码注释掉也是可以执行的。
if pretrained:
#Load weights into the project directory
state_dict = torch.load('mobilenet_v2.pth.tar') # add map_location='cpu' if no gpu
net.load_state_dict(state_dict)
接着就是修改 config/config.yaml
g_name: fpn_mobilenet
修改predict.py
weights_path='fpn_mobilenet.h5',
再有就是 models/fpn_mobilenet.py 修改预训练模型名称,因为下载的预训练模型名称与代码中差一个下划线:
state_dict = torch.load('mobilenet_v2.pth.tar')
然后就可以参照 README.md中的提示在终端执行预测脚本。
python predict.py IMAGE_NAME.jpg
比如我使用的是一张名为23.png的图片:
python predict.py 23.png
执行结果:左图是去模糊之前的图片,右图是去模糊之后的图片。可以看到确实起到了去模糊的作用。