[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-MathiasGruber--PConv-Keras":3,"tool-MathiasGruber--PConv-Keras":62},[4,18,26,36,46,54],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",158594,2,"2026-04-16T23:34:05",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":42,"last_commit_at":43,"category_tags":44,"status":17},8272,"opencode","anomalyco\u002Fopencode","OpenCode 是一款开源的 AI 编程助手（Coding Agent），旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件，而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码，还是排查难以定位的 Bug，OpenCode 都能通过自然语言交互高效完成，显著减少开发者在重复性劳动和上下文切换上的时间消耗。\n\n这款工具专为软件开发者、工程师及技术研究人员设计，特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构，这意味着用户可以审查代码逻辑、自定义行为策略，甚至私有化部署以保障数据安全，彻底打破了传统闭源 AI 助手的“黑盒”限制。\n\n在技术体验上，OpenCode 提供了灵活的终端界面（Terminal UI）和正在测试中的桌面应用程序，支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具，安装便捷，并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客，还是渴望提升产出的独立开发者，OpenCode 都提供了一个透明、可信",144296,1,"2026-04-16T14:50:03",[13,45],"插件",{"id":47,"name":48,"github_repo":49,"description_zh":50,"stars":51,"difficulty_score":32,"last_commit_at":52,"category_tags":53,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":55,"name":56,"github_repo":57,"description_zh":58,"stars":59,"difficulty_score":32,"last_commit_at":60,"category_tags":61,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[45,13,15,14],{"id":63,"github_repo":64,"name":65,"description_en":66,"description_zh":67,"ai_summary_zh":67,"readme_en":68,"readme_zh":69,"quickstart_zh":70,"use_case_zh":71,"hero_image_url":72,"owner_login":73,"owner_name":74,"owner_avatar_url":75,"owner_bio":76,"owner_company":77,"owner_location":78,"owner_email":79,"owner_twitter":80,"owner_website":81,"owner_url":82,"languages":83,"stars":92,"forks":93,"last_commit_at":94,"license":95,"difficulty_score":10,"env_os":96,"env_gpu":97,"env_ram":98,"env_deps":99,"category_tags":106,"github_topics":107,"view_count":32,"oss_zip_url":80,"oss_zip_packed_at":80,"status":17,"created_at":115,"updated_at":116,"faqs":117,"releases":148},8288,"MathiasGruber\u002FPConv-Keras","PConv-Keras","Unofficial implementation of \"Image Inpainting for Irregular Holes Using Partial Convolutions\". Try at: www.fixmyphoto.ai","PConv-Keras 是一个基于 Keras 框架的开源项目，旨在复现 NVIDIA 提出的“利用部分卷积进行不规则图像修复”算法。它主要解决的是图像中因物体遮挡、污损等原因产生的不规则缺失区域的自动填充问题，能够智能地根据周围像素内容重建缺失部分，使修复后的图像自然无痕。\n\n该项目特别适合计算机视觉领域的开发者、研究人员以及希望深入理解图像修复技术的学生使用。通过提供完整的代码实现、预训练权重以及详细的 Jupyter 笔记教程，用户可以轻松复现实验结果，或在自有数据集上训练定制化模型。对于普通用户，作者还部署了在线演示网站 fixmyphoto.ai，无需编程即可体验修复效果。\n\nPConv-Keras 的核心技术亮点在于其独创的“部分卷积层”（Partial Convolution Layer）。与传统卷积不同，该层在计算时仅考虑有效像素区域，并动态更新掩码，逐步将无效区域转化为有效信息。这种机制使其在处理形状复杂、边缘不规则的缺损时，比传统方法具有更强的适应性和更优的修复质量。项目结构清晰，涵盖了从随机掩码生成、网络构建到模型训练的全流程，是学习前沿图像修复技术的优质资源。","# Partial Convolutions for Image Inpainting using Keras\nKeras implementation of \"*Image Inpainting for Irregular Holes Using Partial Convolutions*\", https:\u002F\u002Farxiv.org\u002Fabs\u002F1804.07723. A huge shoutout the authors Guilin Liu, Fitsum A. Reda, Kevin J. Shih, Ting-Chun Wang, Andrew Tao and Bryan Catanzaro from NVIDIA corporation for releasing this awesome paper, it's been a great learning experience for me to implement the architecture, the partial convolutional layer, and the loss functions. \n\n\u003Cimg src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMathiasGruber_PConv-Keras_readme_1df99a6deb97.png' \u002F>\n\n# Dependencies\n* Python 3.6\n* Keras 2.2.4\n* Tensorflow 1.12\n\n# How to use this repository\nThe easiest way to try a few predictions with this algorithm is to go to [www.fixmyphoto.ai](https:\u002F\u002Fwww.fixmyphoto.ai\u002F), where I've deployed it on a serverless React application with AWS lambda functions handling inference.\n\nIf you want to dig into the code, the primary implementations of the new `PConv2D` keras layer as well as the `UNet`-like architecture using these partial convolutional layers can be found in `libs\u002Fpconv_layer.py` and `libs\u002Fpconv_model.py`, respectively - this is where the bulk of the implementation can be found. Beyond this I've set up four jupyter notebooks, which details the several steps I went through while implementing the network, namely:\n\nStep 1: Creating random irregular masks\u003Cbr \u002F>\nStep 2: Implementing and testing the implementation of the `PConv2D` layer\u003Cbr \u002F>\nStep 3: Implementing and testing the UNet architecture with `PConv2D` layers\u003Cbr \u002F>\nStep 4: Training & testing the final architecture on ImageNet\u003Cbr \u002F>\nStep 5: Simplistic attempt at predicting arbitrary image sizes through image chunking\n\n## Pre-trained weights\nI've ported the VGG16 weights from PyTorch to keras; this means the `1\u002F255.` pixel scaling can be used for the VGG16 network similarly to PyTorch. \n* [Ported VGG 16 weights](https:\u002F\u002Fdrive.google.com\u002Fopen?id=1HOzmKQFljTdKWftEP-kWD7p2paEaeHM0)\n* [PConv on Imagenet](https:\u002F\u002Fdrive.google.com\u002Fopen?id=1OdbuNJj4gV9KUoknQG063jJrJ1srhBvU)\n* PConv on Places2 [needs training]\n* PConv on CelebaHQ [needs training]\n\n## Training on your own dataset\nYou can either go directly to [step 4 notebook](https:\u002F\u002Fgithub.com\u002FMathiasGruber\u002FPConv-Keras\u002Fblob\u002Fmaster\u002Fnotebooks\u002FStep4%20-%20Imagenet%20Training.ipynb), or alternatively use the CLI (make sure to download the converted VGG16 weights):\n```\npython main.py \\\n    --name MyDataset \\\n    --train TRAINING_PATH \\\n    --validation VALIDATION_PATH \\\n    --test TEST_PATH \\\n    --vgg_path '.\u002Fdata\u002Flogs\u002Fpytorch_to_keras_vgg16.h5'\n```\n\n# Implementation details\nDetails of the implementation are in the [paper itself](https:\u002F\u002Farxiv.org\u002Fabs\u002F1804.07723), however I'll try to summarize some details here.\n\n## Mask Creation\nIn the paper they use a technique based on occlusion\u002Fdis-occlusion between two consecutive frames in videos for creating random irregular masks - instead I've opted for simply creating a simple mask-generator function which uses OpenCV to draw some random irregular shapes which I then use for masks. Plugging in a new mask generation technique later should not be a problem though, and I think the end results are pretty decent using this method as well.\n\n## Partial Convolution Layer\nA key element in this implementation is the partial convolutional layer. Basically, given the convolutional filter **W** and the corresponding bias *b*, the following partial convolution is applied instead of a normal convolution:\n\n\u003Cimg src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMathiasGruber_PConv-Keras_readme_7a5564f7b613.png' \u002F>\n\nwhere ⊙ is element-wise multiplication and **M** is a binary mask of 0s and 1s. Importantly, after each partial convolution, the mask is also updated, so that if the convolution was able to condition its output on at least one valid input, then the mask is removed at that location, i.e.\n\n\u003Cimg src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMathiasGruber_PConv-Keras_readme_3150eb6557cb.png' \u002F>\n\nThe result of this is that with a sufficiently deep network, the mask will eventually be all ones (i.e. disappear)\n\n## UNet Architecture\nSpecific details of the architecture can be found in the paper, but essentially it's based on a UNet-like structure, where all normal convolutional layers are replace with partial convolutional layers, such that in all cases the image is passed through the network alongside the mask. The following provides an overview of the architecture.\n\u003Cimg src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMathiasGruber_PConv-Keras_readme_61e6189544c5.png' \u002F>\n\n## Loss Function(s)\nThe loss function used in the paper is kinda intense, and can be reviewed in the paper. In short it includes:\n\n* Per-pixel losses both for maskes and un-masked regions\n* Perceptual loss based on ImageNet pre-trained VGG-16 (*pool1, pool2 and pool3 layers*)\n* Style loss on VGG-16 features both for predicted image and for computed image (non-hole pixel set to ground truth)\n* Total variation loss for a 1-pixel dilation of the hole region\n\nThe weighting of all these loss terms are as follows:\n\u003Cimg src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMathiasGruber_PConv-Keras_readme_c9b51c2f5a8a.png' \u002F>\n\n## Training Procedure\nNetwork was trained on ImageNet with a batch size of 1, and each epoch was specified to be 10,000 batches long. Training was furthermore performed using the Adam optimizer in two stages since batch normalization presents an issue for the masked convolutions (since mean and variance is calculated for hole pixels).\n\n**Stage 1**\nLearning rate of 0.0001 for 50 epochs with batch normalization enabled in all layers\n\n**Stage 2**\nLearning rate of 0.00005 for 50 epochs where batch normalization in all encoding layers is disabled.\n\nTraining time for shown images was absolutely crazy long, but that is likely because of my poor personal setup. The few tests I've tried on a 1080Ti (with batch size of 4) indicates that training time could be around 10 days, as specified in the paper.\n","# 使用 Keras 的部分卷积用于图像修复\nKeras 实现了论文《使用部分卷积修复不规则孔洞的图像》，https:\u002F\u002Farxiv.org\u002Fabs\u002F1804.07723。在此向 NVIDIA 公司的作者 Guilin Liu、Fitsum A. Reda、Kevin J. Shih、Ting-Chun Wang、Andrew Tao 和 Bryan Catanzaro 致以崇高敬意，感谢他们发表了这篇精彩的论文。实现该架构、部分卷积层以及损失函数对我来说是一次非常宝贵的学习经历。\n\n\u003Cimg src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMathiasGruber_PConv-Keras_readme_1df99a6deb97.png' \u002F>\n\n# 依赖项\n* Python 3.6\n* Keras 2.2.4\n* Tensorflow 1.12\n\n# 如何使用本仓库\n尝试该算法进行几组预测最简单的方式是访问 [www.fixmyphoto.ai](https:\u002F\u002Fwww.fixmyphoto.ai\u002F)。我在那里部署了一个无服务器的 React 应用程序，并使用 AWS Lambda 函数来处理推理任务。\n\n如果你想深入研究代码，新的 `PConv2D` Keras 层以及使用这些部分卷积层的类似 UNet 的架构的主要实现分别位于 `libs\u002Fpconv_layer.py` 和 `libs\u002Fpconv_model.py` 中——大部分实现都在这里。除此之外，我还准备了四个 Jupyter 笔记本，详细记录了我在实现该网络时所经历的几个步骤，具体如下：\n\n步骤 1：创建随机不规则掩码\u003Cbr \u002F>\n步骤 2：实现并测试 `PConv2D` 层的实现\u003Cbr \u002F>\n步骤 3：实现并测试使用 `PConv2D` 层的 UNet 架构\u003Cbr \u002F>\n步骤 4：在 ImageNet 数据集上训练和测试最终架构\u003Cbr \u002F>\n步骤 5：通过图像分块尝试预测任意尺寸的图像\n\n## 预训练权重\n我已将 VGG16 的权重从 PyTorch 转移到 Keras；这意味着可以像在 PyTorch 中一样，对 VGG16 网络使用 `1\u002F255.` 的像素归一化。\n* [转换后的 VGG16 权重](https:\u002F\u002Fdrive.google.com\u002Fopen?id=1HOzmKQFljTdKWftEP-kWD7p2paEaeHM0)\n* [PConv 在 ImageNet 上的结果](https:\u002F\u002Fdrive.google.com\u002Fopen?id=1OdbuNJj4gV9KUoknQG063jJrJ1srhBvU)\n* PConv 在 Places2 上的结果 [待训练]\n* PConv 在 CelebaHQ 上的结果 [待训练]\n\n## 在自己的数据集上训练\n你可以直接跳到 [步骤 4 笔记本](https:\u002F\u002Fgithub.com\u002FMathiasGruber\u002FPConv-Keras\u002Fblob\u002Fmaster\u002Fnotebooks\u002FStep4%20-%20Imagenet%20Training.ipynb)，或者使用命令行工具（请确保下载已转换的 VGG16 权重）：\n```\npython main.py \\\n    --name MyDataset \\\n    --train TRAINING_PATH \\\n    --validation VALIDATION_PATH \\\n    --test TEST_PATH \\\n    --vgg_path '.\u002Fdata\u002Flogs\u002Fpytorch_to_keras_vgg16.h5'\n```\n\n# 实现细节\n实现的具体细节已在论文中说明（https:\u002F\u002Farxiv.org\u002Fabs\u002F1804.07723），不过我还是会在这里总结一些要点。\n\n## 掩码生成\n论文中使用了一种基于视频中连续两帧之间遮挡与非遮挡关系的技术来生成随机不规则掩码。而我则选择简单地编写一个掩码生成函数，利用 OpenCV 绘制一些随机的不规则形状作为掩码。不过，后续引入新的掩码生成技术应该不会有问题，而且我认为使用这种方法得到的结果也相当不错。\n\n## 部分卷积层\n本实现中的关键组件是部分卷积层。基本原理是：给定卷积滤波器 **W** 和对应的偏置 *b*，与普通卷积不同，这里应用的是部分卷积：\n\n\u003Cimg src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMathiasGruber_PConv-Keras_readme_7a5564f7b613.png' \u002F>\n\n其中 ⊙ 表示逐元素相乘，**M** 是由 0 和 1 组成的二值掩码。重要的是，在每次部分卷积之后，掩码也会更新：如果卷积能够基于至少一个有效输入生成输出，则该位置的掩码会被移除，即：\n\n\u003Cimg src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMathiasGruber_PConv-Keras_readme_3150eb6557cb.png' \u002F>\n\n其结果是，经过足够深的网络后，掩码最终会变为全 1（即消失）。\n\n## UNet 架构\n架构的具体细节可在论文中找到，但本质上它是一种类似 UNet 的结构，所有普通的卷积层都被部分卷积层取代，从而确保图像始终与掩码一起通过网络。以下是该架构的概览。\n\u003Cimg src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMathiasGruber_PConv-Keras_readme_61e6189544c5.png' \u002F>\n\n## 损失函数\n论文中使用的损失函数较为复杂，具体内容可参阅原文。简而言之，它包括：\n\n* 针对有掩码区域和无掩码区域的逐像素损失\n* 基于 ImageNet 预训练 VGG-16 的感知损失（pool1、pool2 和 pool3 层）\n* 针对预测图像和计算图像（将无孔洞区域设置为真实标签）的风格损失\n* 针对孔洞区域进行 1 像素膨胀后的总变差损失\n\n这些损失项的权重分配如下：\n\u003Cimg src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMathiasGruber_PConv-Keras_readme_c9b51c2f5a8a.png' \u002F>\n\n## 训练流程\n网络是在 ImageNet 数据集上以批次大小为 1 进行训练的，每个 epoch 设定为 10,000 个批次。此外，由于批归一化会对带掩码的卷积造成问题（因为会针对孔洞像素计算均值和方差），因此训练分两个阶段进行，采用 Adam 优化器。\n\n**第一阶段**\n学习率设为 0.0001，训练 50 个 epoch，所有层都启用批归一化。\n\n**第二阶段**\n学习率降至 0.00005，训练 50 个 epoch，但所有编码层的批归一化都被禁用。\n\n用于展示的图像训练时间极其漫长，这很可能是因为我个人的硬件配置较差。我在 1080Ti 显卡上进行的几次测试（批次大小为 4）表明，训练时间可能与论文中提到的一样，约为 10 天。","# PConv-Keras 快速上手指南\n\nPConv-Keras 是基于 Keras 实现的“不规则孔洞图像修复（Image Inpainting）”工具，核心算法源自 NVIDIA 的论文《Image Inpainting for Irregular Holes Using Partial Convolutions》。该工具通过局部卷积层（Partial Convolution）有效处理图像中的不规则缺失区域。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下版本要求。由于项目依赖较旧的 TensorFlow 和 Keras 版本，建议使用虚拟环境（如 `venv` 或 `conda`）以避免冲突。\n\n*   **操作系统**: Linux \u002F macOS \u002F Windows\n*   **Python**: 3.6\n*   **Keras**: 2.2.4\n*   **TensorFlow**: 1.12\n*   **其他依赖**: OpenCV (用于掩码生成), Jupyter Notebook (可选，用于运行示例笔记)\n\n> **提示**：国内用户可使用清华源或阿里源加速 Python 包安装。\n\n## 安装步骤\n\n1.  **克隆仓库**\n    ```bash\n    git clone https:\u002F\u002Fgithub.com\u002FMathiasGruber\u002FPConv-Keras.git\n    cd PConv-Keras\n    ```\n\n2.  **安装依赖**\n    由于指定了特定版本，建议手动安装以确保兼容性：\n    ```bash\n    pip install -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple tensorflow==1.12 keras==2.2.4 opencv-python jupyter\n    ```\n\n3.  **下载预训练权重**\n    为了直接进行推理或微调，需要下载转换后的 VGG16 权重及 ImageNet 上的 PConv 模型权重：\n    *   [Ported VGG 16 weights](https:\u002F\u002Fdrive.google.com\u002Fopen?id=1HOzmKQFljTdKWftEP-kWD7p2paEaeHM0)\n    *   [PConv on Imagenet](https:\u002F\u002Fdrive.google.com\u002Fopen?id=1OdbuNJj4gV9KUoknQG063jJrJ1srhBvU)\n\n    下载后将文件放置于项目目录下的 `data\u002Flogs\u002F` 文件夹中（或根据后续命令参数指定路径）。\n\n## 基本使用\n\n### 方式一：在线体验（无需安装）\n如果您仅想测试算法效果，可以直接访问作者部署的在线应用：\n[www.fixmyphoto.ai](https:\u002F\u002Fwww.fixmyphoto.ai\u002F)\n\n### 方式二：本地代码探索与推理\n核心实现位于 `libs\u002Fpconv_layer.py` (局部卷积层) 和 `libs\u002Fpconv_model.py` (UNet 架构)。作者提供了详细的 Jupyter Notebook 流程，建议按顺序运行以理解原理：\n\n1.  **Step 1**: 创建随机不规则掩码 (`notebooks\u002FStep1...`)\n2.  **Step 2**: 实现并测试 `PConv2D` 层\n3.  **Step 3**: 构建带有 `PConv2D` 的 UNet 架构\n4.  **Step 4**: 在 ImageNet 上训练和测试最终架构\n5.  **Step 5**: 尝试通过图像分块预测任意尺寸图像\n\n您可以启动 Jupyter 来运行这些笔记：\n```bash\njupyter notebook\n```\n\n### 方式三：使用自有数据集训练\n如果您希望在自己的数据集上进行训练，请确保已下载 VGG16 权重，然后使用命令行接口（CLI）。\n\n**命令示例：**\n```bash\npython main.py \\\n    --name MyDataset \\\n    --train TRAINING_PATH \\\n    --validation VALIDATION_PATH \\\n    --test TEST_PATH \\\n    --vgg_path '.\u002Fdata\u002Flogs\u002Fpytorch_to_keras_vgg16.h5'\n```\n\n**参数说明：**\n*   `--train`: 训练集图片路径\n*   `--validation`: 验证集图片路径\n*   `--test`: 测试集图片路径\n*   `--vgg_path`: 下载的 VGG16 权重文件路径\n\n**训练策略提示：**\n根据论文实现，训练分为两个阶段以解决批归一化（Batch Normalization）在掩码卷积中的问题：\n1.  **第一阶段**：学习率 0.0001，运行 50 个 epoch，启用所有层的 Batch Norm。\n2.  **第二阶段**：学习率 0.00005，运行 50 个 epoch，禁用编码层中的 Batch Norm。\n\n*注：在单张 GPU（如 1080Ti）上完整训练可能需要约 10 天时间。*","一家数字档案修复团队正在处理一批扫描自 20 世纪的老照片，这些照片因年代久远出现了不规则的霉斑和物理划痕，急需进行自动化批量修复以恢复历史原貌。\n\n### 没有 PConv-Keras 时\n- 传统修复算法难以应对形状随意的不规则污损，往往只能处理矩形或圆形掩码，导致修复边缘生硬。\n- 强行使用普通卷积网络填补大面積缺失时，模型会盲目参考周围无效像素，生成模糊或充满伪影的扭曲内容。\n- 针对每一张不同破损形态的照片都需要人工手动调整蒙版或重训模型，耗时耗力且无法实现标准化流水线作业。\n- 修复后的图像在纹理连贯性上表现较差，经常断裂或出现色块拼接痕迹，无法满足档案级的高清保存要求。\n\n### 使用 PConv-Keras 后\n- 利用其核心的部分卷积（Partial Convolution）层，能够动态忽略无效区域，完美适配任意形状的不规则霉斑与划痕。\n- 网络在计算过程中自动更新掩码，确保每次卷积仅基于有效像素信息，从而生成纹理自然、逻辑连贯的填充内容。\n- 借助预训练的 UNet 架构，团队可直接加载权重对海量受损照片进行端到端的批量推理，无需针对单图反复调参。\n- 输出结果在视觉上将缺失部分与原始背景无缝融合，不仅消除了伪影，还高度还原了老照片特有的颗粒质感。\n\nPConv-Keras 通过独创的掩码更新机制，将原本依赖人工精修的非规则图像修复任务转化为高效、高质量的自动化流程。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FMathiasGruber_PConv-Keras_1df99a6d.png","MathiasGruber","Mathias Gruber","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FMathiasGruber_47c557c6.jpg","Chief Data Scientist","Leo Pharma","Copenhagen, Denmark","nano.mathias@gmail.com",null,"https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fnanomathias\u002F","https:\u002F\u002Fgithub.com\u002FMathiasGruber",[84,88],{"name":85,"color":86,"percentage":87},"Jupyter Notebook","#DA5B0B",99.7,{"name":89,"color":90,"percentage":91},"Python","#3572A5",0.3,907,247,"2026-04-14T02:33:11","MIT","","未明确说明必需，但文中提及在 NVIDIA 1080Ti 上测试，训练耗时较长","未说明",{"notes":100,"python":101,"dependencies":102},"该项目基于较旧的 TensorFlow 1.12 和 Keras 2.2.4 版本。训练分为两个阶段：第一阶段启用批归一化（50 个 epoch），第二阶段在编码层禁用批归一化（50 个 epoch）。在 ImageNet 数据集上使用批量大小为 1 进行训练，每个 epoch 包含 10,000 个批次。需手动下载预训练的 VGG16 权重文件（已从 PyTorch 转换）。","3.6",[103,104,105],"Keras==2.2.4","Tensorflow==1.12","OpenCV",[14,13,15],[108,109,110,111,112,113,114],"deep-learning","ai","inpainting","nvidia","keras","tensorflow","python","2026-03-27T02:49:30.150509","2026-04-17T09:53:27.453854",[118,123,128,133,138,143],{"id":119,"question_zh":120,"answer_zh":121,"source_url":122},37115,"如何获取预训练权重文件？","维护者未在 Issue 中直接提供文件下载链接，但指出代码运行需要特定的权重文件（如 50_weights_*.h5 等）。用户需按照项目文档中的步骤自行训练模型以生成这些权重，或者检查项目 Release 页面是否提供了预训练模型。如果加载权重时出错，请确保文件名格式包含 epoch 信息（例如：name.epoch-loss.h5），否则代码解析文件名时会报错。","https:\u002F\u002Fgithub.com\u002FMathiasGruber\u002FPConv-Keras\u002Fissues\u002F1",{"id":124,"question_zh":125,"answer_zh":126,"source_url":127},37116,"预测生成的图像出现异常色块（如蓝色区域或黑白方块）怎么办？","这种情况通常发生在输入掩码（mask）过大时，特别是当对分割掩码进行了膨胀（dilation）操作后。解决方案是对模型进行微调（fine-tune），使用更大的掩码数据进行训练，以适应大范围的缺失区域。此外，确保未随意修改核心代码逻辑，并检查输入数据预处理是否符合要求。","https:\u002F\u002Fgithub.com\u002FMathiasGruber\u002FPConv-Keras\u002Fissues\u002F41",{"id":129,"question_zh":130,"answer_zh":131,"source_url":132},37117,"加载权重时遇到 'ValueError: expects 3 weights, but the saved weights have 2 elements' 错误如何解决？","该错误主要由 TensorFlow\u002FKeras 版本不兼容引起。原项目是基于特定旧版本开发的（通常是 TF 1.x 和对应的 Keras 版本）。解决方法是严格按照作者提供的 requirements.txt 安装指定版本的依赖库，不要使用 TensorFlow 2.0 或更高版本，除非你打算自行修改代码以适配新版本。","https:\u002F\u002Fgithub.com\u002FMathiasGruber\u002FPConv-Keras\u002Fissues\u002F50",{"id":134,"question_zh":135,"answer_zh":136,"source_url":137},37118,"加载模型时报错 'ValueError: invalid literal for int() with base 10: h5' 是什么原因？","这是因为代码在加载权重时试图从文件名中解析 epoch 数值，要求文件名必须遵循特定格式（例如：name.epoch-loss.h5）。如果文件名仅为 'pconv_imagenet.h5' 而不包含数字 epoch 标识，解析就会失败。解决方法是将权重文件重命名为符合格式的命名（如 'pconv_imagenet.26-1.01.h5'），或者修改源码中的文件名解析逻辑。","https:\u002F\u002Fgithub.com\u002FMathiasGruber\u002FPConv-Keras\u002Fissues\u002F25",{"id":139,"question_zh":140,"answer_zh":141,"source_url":142},37119,"如何使用非 512x512 分辨率的图片进行测试或训练？","理论上，由于网络全由卷积层组成，参数数量与输入尺寸无关，因此可以直接使用训练好的权重测试任意尺寸的图像。但在实际应用中，直接输入大尺寸图像会导致显存爆炸。推荐的解决方案是采用“图像分块”（image chunking）策略，将大图切分成小块分别处理后再拼接。目前官方尚未提供直接处理超大图像的优化方案。","https:\u002F\u002Fgithub.com\u002FMathiasGruber\u002FPConv-Keras\u002Fissues\u002F4",{"id":144,"question_zh":145,"answer_zh":146,"source_url":147},37120,"代码中的 PConv 层实现与论文描述的 sum(M) 逻辑是否一致？","早期版本中，该实现使用的是全局均值而非论文中的局部窗口和 sum(M)，这与 NVIDIA 官方实现有所不同。维护者已更新代码以使用局部 sum(M)。不过根据社区测试，使用部分卷积（Partial Conv）还是普通卷积对最终结果影响不大，真正对效果产生显著提升的是感知损失（perceptual loss）和风格损失（style loss）的使用。","https:\u002F\u002Fgithub.com\u002FMathiasGruber\u002FPConv-Keras\u002Fissues\u002F14",[]]