Globally and Locally Consistent Image Completion 论文及lua 代码解读

本文深入解析了Globally and Locally Consistent Image Completion论文,介绍了其利用global和local discriminator改进image inpainting,提升修复图像的清晰度和对比度。该方法包括completion network、context discriminator,以及训练过程和后处理步骤。虽然能精细复原图像,但若修复大块结构物体,效果不佳。提供了作者的github链接供参考。

一、论文

1、论文思想

上一篇文章提到的Context encode 利用decoder 和encoder 来进行image inpainting,可以修复较大的图像缺失并使得恢复好的图像符合整幅图像的语义,但是修复好的图像存在局部模糊的问题,因此真实图像和利用inpainting 得到的图像肉眼清晰可辨。针对这个问题,SATOSHI IIZUKA 等提出了一个新的想法,即利用global discriminator 和local discriminator 两种判别器保证生成的图像即符合全局语义,又尽量提高局部区域的清晰度和对比度。论文中的网络结构如下:

(1)completion network

completion network 的主体机构与context encoder 相同,先利用卷积降低图片的分辨率然后利用去卷积增大图片的分辨率得到修复结果。为了保证生成区域尽量不模糊,文中降低分辨率的操作是使用strided convolution 的方式进行的,而且只用了两次,将图片的size 变为原来的四分之一。同时在中间层还使用了dilated convolutional layers 来增大感受野,在尽量获取更大范围内的图像信息的同时不损失额外的信息。

By using dilated convolutions at lower resolutions, the model can effectively “see” a larger area of the input image when computing each output pixel than with standard convolutional layers.

Dilated convolution 的操作一张图就能看明白:

想看动图可以参考:如何理解空洞卷积(dilated convolution)?

(2)Context discriminator 

Context discriminator 包含global 和local 两种,global discriminator  把修复好的完整图片作为输入,如果图片较大,会将其resize 成256 × 256,通过多次convolution 和全连接层输出一个1024 维的向量,local discriminator 输入为修复的区域,resize 其大小为128

### 关于Globally and Locally Consistent Image Completion的实现代码 Satoshi Iizuka等人提出的《Globally and Locally Consistent Image Completion》方法结合了全局和局部的一致性来完成图像修复任务。该研究通过引入两个鉴别器——全局鉴别器和局部鉴别器,分别用于判断整张图像的整体一致性和补全区域的局部一致性[^3]。 #### 官方实现 官方作者提供了此工作的源代码,并托管在GitHub上。以下是官方项目的链接地址: - **GitHub仓库**: [https://github.com/satoshiiizuka/image_inpainting](https://github.com/satoshiiizuka/image_inpainting)[^5] 该项目实现了完整的模型架构以及训练流程,支持使用ImageNet数据集进行预训练和微调[^4]。具体来说,代码库包含了以下几个部分: 1. 图像编码与解码模块:负责学习输入图像的特征表示并生成缺失区域的内容。 2. GAN结构中的生成器与判别器:生成器用于创建逼真的填充内容,而判别器则分为全局和局部两部分以评估生成效果。 #### 社区实现 除了官方版本外,还有许多开发者基于原始论文重新实现了这一算法。这些第三方实现通常会提供更简洁或者适配现代框架(如PyTorch、TensorFlow 2.x)的代码示例。以下是一些常见的社区资源: - PyTorch版实现: [https://github.com/DmitryUlyanov/pytorch-image-inpainting](https://github.com/DmitryUlyanov/pytorch-image-inpainting) - TensorFlow/Keras版实现: [https://github.com/akanimax/impytializer](https://github.com/akanimax/impytializer) 需要注意的是,在选择第三方实现时应仔细核对其是否完全遵循原论文的设计思路和技术细节。 ```python import torch from torchvision import transforms from PIL import Image # 假设加载了一个预训练好的模型 model = torch.load('path_to_pretrained_model.pth') def inpaint_image(input_img_path, mask_img_path): transform = transforms.Compose([ transforms.Resize((256, 256)), transforms.ToTensor() ]) input_tensor = transform(Image.open(input_img_path)) mask_tensor = transform(Image.open(mask_img_path)) with torch.no_grad(): output_tensor = model(input_tensor.unsqueeze(0), mask_tensor.unsqueeze(0))[0] return output_tensor.permute(1, 2, 0).numpy() inpaint_result = inpaint_image('./input.jpg', './mask.png') ``` 上述代码片段展示如何利用已有的模型对一张带有掩模标记的损坏图片执行修复操作。
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值