PConv-Keras
PConv-Keras 是一个基于 Keras 框架的开源项目,旨在复现 NVIDIA 提出的“利用部分卷积进行不规则图像修复”算法。它主要解决的是图像中因物体遮挡、污损等原因产生的不规则缺失区域的自动填充问题,能够智能地根据周围像素内容重建缺失部分,使修复后的图像自然无痕。
该项目特别适合计算机视觉领域的开发者、研究人员以及希望深入理解图像修复技术的学生使用。通过提供完整的代码实现、预训练权重以及详细的 Jupyter 笔记教程,用户可以轻松复现实验结果,或在自有数据集上训练定制化模型。对于普通用户,作者还部署了在线演示网站 fixmyphoto.ai,无需编程即可体验修复效果。
PConv-Keras 的核心技术亮点在于其独创的“部分卷积层”(Partial Convolution Layer)。与传统卷积不同,该层在计算时仅考虑有效像素区域,并动态更新掩码,逐步将无效区域转化为有效信息。这种机制使其在处理形状复杂、边缘不规则的缺损时,比传统方法具有更强的适应性和更优的修复质量。项目结构清晰,涵盖了从随机掩码生成、网络构建到模型训练的全流程,是学习前沿图像修复技术的优质资源。
使用场景
一家数字档案修复团队正在处理一批扫描自 20 世纪的老照片,这些照片因年代久远出现了不规则的霉斑和物理划痕,急需进行自动化批量修复以恢复历史原貌。
没有 PConv-Keras 时
- 传统修复算法难以应对形状随意的不规则污损,往往只能处理矩形或圆形掩码,导致修复边缘生硬。
- 强行使用普通卷积网络填补大面積缺失时,模型会盲目参考周围无效像素,生成模糊或充满伪影的扭曲内容。
- 针对每一张不同破损形态的照片都需要人工手动调整蒙版或重训模型,耗时耗力且无法实现标准化流水线作业。
- 修复后的图像在纹理连贯性上表现较差,经常断裂或出现色块拼接痕迹,无法满足档案级的高清保存要求。
使用 PConv-Keras 后
- 利用其核心的部分卷积(Partial Convolution)层,能够动态忽略无效区域,完美适配任意形状的不规则霉斑与划痕。
- 网络在计算过程中自动更新掩码,确保每次卷积仅基于有效像素信息,从而生成纹理自然、逻辑连贯的填充内容。
- 借助预训练的 UNet 架构,团队可直接加载权重对海量受损照片进行端到端的批量推理,无需针对单图反复调参。
- 输出结果在视觉上将缺失部分与原始背景无缝融合,不仅消除了伪影,还高度还原了老照片特有的颗粒质感。
PConv-Keras 通过独创的掩码更新机制,将原本依赖人工精修的非规则图像修复任务转化为高效、高质量的自动化流程。
运行环境要求
未明确说明必需,但文中提及在 NVIDIA 1080Ti 上测试,训练耗时较长
未说明

快速开始
使用 Keras 的部分卷积用于图像修复
Keras 实现了论文《使用部分卷积修复不规则孔洞的图像》,https://arxiv.org/abs/1804.07723。在此向 NVIDIA 公司的作者 Guilin Liu、Fitsum A. Reda、Kevin J. Shih、Ting-Chun Wang、Andrew Tao 和 Bryan Catanzaro 致以崇高敬意,感谢他们发表了这篇精彩的论文。实现该架构、部分卷积层以及损失函数对我来说是一次非常宝贵的学习经历。
依赖项
- Python 3.6
- Keras 2.2.4
- Tensorflow 1.12
如何使用本仓库
尝试该算法进行几组预测最简单的方式是访问 www.fixmyphoto.ai。我在那里部署了一个无服务器的 React 应用程序,并使用 AWS Lambda 函数来处理推理任务。
如果你想深入研究代码,新的 PConv2D Keras 层以及使用这些部分卷积层的类似 UNet 的架构的主要实现分别位于 libs/pconv_layer.py 和 libs/pconv_model.py 中——大部分实现都在这里。除此之外,我还准备了四个 Jupyter 笔记本,详细记录了我在实现该网络时所经历的几个步骤,具体如下:
步骤 1:创建随机不规则掩码
步骤 2:实现并测试 PConv2D 层的实现
步骤 3:实现并测试使用 PConv2D 层的 UNet 架构
步骤 4:在 ImageNet 数据集上训练和测试最终架构
步骤 5:通过图像分块尝试预测任意尺寸的图像
预训练权重
我已将 VGG16 的权重从 PyTorch 转移到 Keras;这意味着可以像在 PyTorch 中一样,对 VGG16 网络使用 1/255. 的像素归一化。
- 转换后的 VGG16 权重
- PConv 在 ImageNet 上的结果
- PConv 在 Places2 上的结果 [待训练]
- PConv 在 CelebaHQ 上的结果 [待训练]
在自己的数据集上训练
你可以直接跳到 步骤 4 笔记本,或者使用命令行工具(请确保下载已转换的 VGG16 权重):
python main.py \
--name MyDataset \
--train TRAINING_PATH \
--validation VALIDATION_PATH \
--test TEST_PATH \
--vgg_path './data/logs/pytorch_to_keras_vgg16.h5'
实现细节
实现的具体细节已在论文中说明(https://arxiv.org/abs/1804.07723),不过我还是会在这里总结一些要点。
掩码生成
论文中使用了一种基于视频中连续两帧之间遮挡与非遮挡关系的技术来生成随机不规则掩码。而我则选择简单地编写一个掩码生成函数,利用 OpenCV 绘制一些随机的不规则形状作为掩码。不过,后续引入新的掩码生成技术应该不会有问题,而且我认为使用这种方法得到的结果也相当不错。
部分卷积层
本实现中的关键组件是部分卷积层。基本原理是:给定卷积滤波器 W 和对应的偏置 b,与普通卷积不同,这里应用的是部分卷积:
其中 ⊙ 表示逐元素相乘,M 是由 0 和 1 组成的二值掩码。重要的是,在每次部分卷积之后,掩码也会更新:如果卷积能够基于至少一个有效输入生成输出,则该位置的掩码会被移除,即:
其结果是,经过足够深的网络后,掩码最终会变为全 1(即消失)。
UNet 架构
架构的具体细节可在论文中找到,但本质上它是一种类似 UNet 的结构,所有普通的卷积层都被部分卷积层取代,从而确保图像始终与掩码一起通过网络。以下是该架构的概览。

损失函数
论文中使用的损失函数较为复杂,具体内容可参阅原文。简而言之,它包括:
- 针对有掩码区域和无掩码区域的逐像素损失
- 基于 ImageNet 预训练 VGG-16 的感知损失(pool1、pool2 和 pool3 层)
- 针对预测图像和计算图像(将无孔洞区域设置为真实标签)的风格损失
- 针对孔洞区域进行 1 像素膨胀后的总变差损失
这些损失项的权重分配如下:

训练流程
网络是在 ImageNet 数据集上以批次大小为 1 进行训练的,每个 epoch 设定为 10,000 个批次。此外,由于批归一化会对带掩码的卷积造成问题(因为会针对孔洞像素计算均值和方差),因此训练分两个阶段进行,采用 Adam 优化器。
第一阶段 学习率设为 0.0001,训练 50 个 epoch,所有层都启用批归一化。
第二阶段 学习率降至 0.00005,训练 50 个 epoch,但所有编码层的批归一化都被禁用。
用于展示的图像训练时间极其漫长,这很可能是因为我个人的硬件配置较差。我在 1080Ti 显卡上进行的几次测试(批次大小为 4)表明,训练时间可能与论文中提到的一样,约为 10 天。
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
opencode
OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。