尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Windows部署AI老照片修复项目BOPBL:从环境配置到实战避坑指南

Windows部署AI老照片修复项目BOPBL:从环境配置到实战避坑指南 1. 项目缘起与核心价值最近在整理家里的老相册翻出不少泛黄、破损甚至人脸都模糊不清的老照片。这些照片承载着珍贵的记忆但物理上的损伤让它们难以长久保存。作为一名技术从业者我的第一反应不是送去照相馆修复而是琢磨着能不能自己动手用AI技术让它们“重获新生”。于是我盯上了微软亚洲研究院开源的经典项目——Bringing-Old-Photos-Back-to-Life以下简称BOPBL。这个项目在AI修复老照片领域名气不小它不仅能处理划痕、噪点还能对缺失的人脸五官进行“脑补”式重建效果相当惊艳。然而理想很丰满现实往往很骨感。这个项目虽然开源但其部署过程尤其是在Windows环境下堪称一场“硬仗”。官方文档和社区讨论大多基于Linux对于Windows用户来说从环境配置、依赖安装到模型下载每一步都可能藏着意想不到的坑。我花了整整一个周末的时间从满怀希望到濒临放弃再到最终成功跑通整个过程可以说是一步一个脚印或者说一步一个坑踩过来的。这篇文章就是我这趟“实战踩坑之旅”的完整记录。我会详细拆解在Windows 11系统上从零开始部署BOPBL的每一个步骤重点分享那些官方没明说、搜索引擎也难找的“坑点”和解决方案。无论你是AI爱好者、有老照片修复需求的普通用户还是想学习复杂开源项目部署流程的开发者相信这篇近万字的实操指南都能给你带来实实在在的帮助。2. 战前准备理解项目结构与核心依赖在撸起袖子开干之前我们先花点时间搞清楚我们要面对的是什么。盲目安装只会导致错误百出事倍功半。BOPBL项目本质上是一个基于深度学习的图像修复pipeline它并非一个单一的模型而是由多个子模块协同工作的复杂系统。2.1 项目核心组件拆解浏览其GitHub仓库后你会发现它的修复流程大致分为三个阶段全局修复首先用一个预训练模型处理照片的整体退化问题比如全局泛黄、对比度失衡、大面积污渍等。这一步可以理解为给照片做个“全身SPA”。人脸局部修复如果检测到照片中有人脸并且人脸区域破损严重项目会调用一个专门的人脸修复模型。这个模型非常强大它能够根据人脸的结构先验信息对缺失的眼睛、鼻子、嘴巴等部位进行高保真生成。这是该项目最出彩的部分。融合与增强将全局修复和局部人脸修复的结果无缝融合起来并进行最后的色彩、细节增强输出最终的高清修复图。2.2 环境依赖全景图理解了流程我们来看看它依赖的技术栈这直接决定了我们的安装策略Python: 项目的基石。BOPBL代码基于Python编写版本兼容性是第一个需要跨过的坎。PyTorch: 核心深度学习框架。所有模型都基于PyTorch实现和运行。这里涉及到PyTorch版本、CUDA版本如果你用GPU和Python版本三者之间复杂的兼容性问题是最大的坑点来源。其他Python包: 包括opencv-python用于图像处理scikit-image,pillow,numpy等科学计算和图像库以及face-alignment,dlib用于人脸关键点检测。这些库的版本冲突同样不容小觑。系统级依赖主要是CMake和C编译环境。因为dlib这个库在安装时需要从源码编译而Windows上编译需要Visual Studio的C构建工具。我的作战环境是Windows 11 专业版配备 NVIDIA GeForce RTX 4060 Laptop GPU8GB显存。虽然有GPU但为了确保流程的通用性我也会说明纯CPU运行的配置方法。接下来我们就进入实战环节。3. 基础环境搭建避开第一个连环坑万事开头难而BOPBL的开头尤其难。很多教程让你直接git clone然后pip install -r requirements.txt但在Windows上这么做的结果99%是失败。我们必须步步为营。3.1 Python版本的选择与安装首先不要使用系统自带的Python也不要安装最新的Python版本如3.12。经过多次测试Python 3.8或3.9是与当前项目代码及所需PyTorch版本兼容性最好的选择。我选择了Python 3.9.13。注意在安装时务必勾选“Add Python 3.9 to PATH”这样可以在命令行中直接使用python和pip。安装完成后打开命令提示符CMD或 PowerShell输入python --version和pip --version验证是否安装成功。3.2 安装Visual Studio Build Tools关键这是Windows部署中最容易被忽略但至关重要的一步。后面安装dlib时需要编译C扩展。我们需要安装Visual Studio 2019/2022的构建工具。访问微软官网下载Visual Studio Build Tools。运行安装程序在“工作负载”选项卡中必须勾选“使用C的桌面开发”。在右侧的“安装详细信息”中确保“Windows 10 SDK”或“Windows 11 SDK”被选中版本不重要有一个就行。点击安装等待完成。这个过程可能需要下载几个GB的文件请保持网络通畅。3.3 创建并激活虚拟环境永远不要在系统全局Python环境中安装项目依赖除非你想把系统环境搞得一团糟。使用虚拟环境是Python开发的最佳实践。# 打开CMD或PowerShell进入你打算存放项目的目录例如 D:\Projects cd D:\Projects # 创建名为 bopbl_env 的虚拟环境 python -m venv bopbl_env # 激活虚拟环境 # 在CMD中 bopbl_env\Scripts\activate.bat # 在PowerShell中可能需要先执行 Set-ExecutionPolicy RemoteSigned bopbl_env\Scripts\Activate.ps1激活后你的命令行提示符前面会出现(bopbl_env)表示你已经在这个独立的“沙箱”里了。4. PyTorch与CUDA的“版本婚姻”最大的挑战这是整个部署过程中最复杂、最容易出错的一环。BOPBL项目代码对PyTorch版本有一定要求而PyTorch版本又必须与你的CUDA版本或CPU匹配同时还要兼顾Python版本。4.1 确定CUDA版本首先检查你的NVIDIA显卡驱动支持的CUDA版本。打开CMD输入nvidia-smi查看右上角显示的“CUDA Version”。例如我这里是“12.4”。注意这个版本是你的驱动支持的最高CUDA版本不代表你已经安装了该版本的CUDA Toolkit。PyTorch会自带运行所需的CUDA库我们通常不需要单独安装完整的CUDA Toolkit但需要根据这个支持版本来选择PyTorch。4.2 选择正确的PyTorch安装命令访问 PyTorch官网 使用其安装命令生成器。根据我的环境Python 3.9 CUDA 12.1我选择的配置是PyTorch Build: Stable (2.2.2)Your OS: WindowsPackage: PipLanguage: PythonCompute Platform: CUDA 12.1它给出的命令是pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121但是直接安装这个最新稳定版大概率会与BOPBL项目冲突。我查阅了项目的requirements.txt和setup.py文件发现它倾向于使用较旧的PyTorch 1.x版本。经过反复尝试我发现一个比较稳定的组合是PyTorch 1.10.0 CUDA 11.3。即使你的驱动支持CUDA 12.xPyTorch 1.10.0 with CUDA 11.3的二进制包也能良好运行。因此我执行的命令是pip install torch1.10.0cu113 torchvision0.11.1cu113 torchaudio0.10.0cu113 -f https://download.pytorch.org/whl/torch_stable.html踩坑实录我曾尝试安装PyTorch 2.x CUDA 12.x结果在运行模型时出现各种诡异的错误例如RuntimeError: Expected all tensors to be on the same device或AttributeError: module torch has no attribute _six。这些都是版本不兼容的典型症状。退回1.10.0后这些问题迎刃而解。如果你的显卡比较新担心CUDA 11.3兼容性问题可以尝试PyTorch 1.12.0 CUDA 11.6的组合但1.10.0是社区验证较多的版本。安装完成后在Python交互环境中验证import torch print(torch.__version__) # 应输出 1.10.0cu113 print(torch.cuda.is_available()) # 应输出 True print(torch.cuda.get_device_name(0)) # 应输出你的显卡型号5. 攻克依赖安装逐个击破拒绝“一键安装”有了稳定的PyTorch基础接下来安装其他依赖。再次强调不要直接运行pip install -r requirements.txt这个文件里的版本约束可能在Windows上失效。我们需要手动、有策略地安装。5.1 安装无需编译的依赖首先安装一些简单的、纯Python的包pip install opencv-python4.5.5.64 pip install scikit-image0.19.2 pip install Pillow9.0.1 pip install numpy1.21.6 pip install scipy1.7.3 pip install yacs0.1.8 pip install dominate2.7.0 pip install visdom0.1.8.9 pip install tb-nightly2.5.0a20210809 pip install future0.18.25.2 安装 face-alignment这个包用于人脸关键点检测是后续人脸修复的前提。pip install face-alignment1.3.45.3 安装 dlibWindows上的“硬骨头”dlib是face-alignment的底层依赖需要在Windows上编译。这是最棘手的部分。直接pip install dlib几乎百分之百失败。成功方案访问 Christoph Gohlke的非官方Windows二进制包页面 。这是一个宝藏网站提供了大量预编译好的Windows Python包。在这个页面找到dlib部分。根据你的Python版本和系统架构下载对应的.whl文件。例如我的是Python 3.9 64位系统所以下载dlib‑19.22.99‑cp39‑cp39‑win_amd64.whl。将下载的.whl文件放到你的项目目录下然后使用pip本地安装pip install dlib-19.22.99-cp39-cp39-win_amd64.whl验证安装python -c import dlib; print(dlib.__version__)应该能成功输出版本号。5.4 安装项目特定依赖最后安装BOPBL项目自己定义的一些依赖来自其requirements.txtpip install -e githttps://github.com/cientgu/GitGAN#eggpkg pip install -e githttps://github.com/cientgu/pytorch_face_landmark#eggpkg这两个命令会从GitHub克隆特定的代码库并以“可编辑”模式安装。确保你的网络能够访问GitHub。6. 获取代码与预训练模型6.1 克隆项目代码git clone https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life.git cd Bringing-Old-Photos-Back-to-Life6.2 下载预训练模型巨坑预警模型是项目的灵魂。官方提供了Google Drive的下载链接但在国内下载大文件速度慢且不稳定。项目脚本scripts/download_model.sh是bash脚本在Windows上无法直接运行。手动下载方案你需要下载两个模型包Face_Enhancement/checkpoints.zipGlobal/checkpoints.zip你可以尝试使用代理工具或离线下载工具获取这些文件。如果实在困难可以在一些开源模型集散网站如Hugging Face Models上搜索项目名有时会有好心人上传的镜像。下载完成后不要解压到当前目录正确的做法是将Face_Enhancement/checkpoints.zip解压到./Face_Enhancement/目录下确保解压后存在./Face_Enhancement/checkpoints/文件夹。将Global/checkpoints.zip解压到./Global/目录下确保解压后存在./Global/checkpoints/文件夹。目录结构检查 完成后你的Bringing-Old-Photos-Back-to-Life文件夹内应该至少包含Face_Enhancement/ ├── checkpoints/ (内含很多.pth模型文件) ├── datasets/ ├── ... Global/ ├── checkpoints/ (内含很多.pth模型文件) ├── datasets/ ├── ... scripts/ run.py ...踩坑实录我最初将checkpoints.zip直接解压在项目根目录导致生成了./checkpoints/文件夹。运行时报错找不到模型因为代码里写死了从Face_Enhancement/checkpoints/和Global/checkpoints/加载。务必注意路径7. 运行测试与实战修复激动人心的时刻到了我们终于可以尝试运行修复脚本了。7.1 准备输入照片在项目根目录下有一个test_images/文件夹。你可以将想要修复的老照片建议先裁剪或缩放单边分辨率最好在1024像素以下以控制显存占用复制到这个文件夹或者新建一个自己的文件夹。7.2 执行修复命令项目提供了run.py作为统一入口。基本命令格式如下python run.py --input_folder [你的输入图片文件夹路径] --output_folder [输出结果文件夹路径] --GPU 0例如我在test_images/里放了一张名为old_portrait.jpg的照片想输出到results/python run.py --input_folder ./test_images --output_folder ./results --GPU 0--GPU 0: 指定使用第一块GPU索引为0。如果你的电脑只有CPU则使用--CPU参数。7.3 过程解析与可能遇到的错误运行后程序会依次执行检测人脸使用dlib和face-alignment定位照片中的人脸。如果没检测到则跳过人脸增强阶段。全局修复加载全局模型处理整体退化。人脸修复如果检测到人脸且破损严重会裁剪人脸区域送入人脸修复模型进行高清重建再贴回原图。融合输出生成最终图片保存在输出文件夹。通常会有中间过程图如*_restored.png全局修复结果和*_final.png最终结果。常见运行错误及解决错误ModuleNotFoundError: No module named pkg原因前面用-e可编辑模式安装的GitGAN和pytorch_face_landmark包其导入方式可能有问题。解决找到项目根目录下的run.py在文件开头的import部分附近手动添加以下代码import sys sys.path.insert(0, ./src) # 如果还有问题尝试找到pkg的实际路径并添加 # sys.path.insert(0, /path/to/your/venv/lib/site-packages)错误CUDA out of memory原因图片分辨率太高或模型太大显存不足。解决减小输入图片尺寸。在命令中添加--with_scratch参数如果原图有划痕并使用--HR高分辨率模式时显存需求激增。对于普通照片可以不加--HR。终极方案使用--CPU参数在CPU上运行但速度会慢几十倍。错误TypeError: cant convert cuda:0 device type tensor to numpy. Use Tensor.cpu()原因PyTorch张量在GPU上但某些OpenCV或numpy操作需要CPU上的numpy数组。解决这通常是项目代码在特定版本下的bug。你需要定位到报错的文件和行数在将Tensor转换为numpy数组之前显式调用.cpu()方法。例如将tensor.numpy()改为tensor.cpu().numpy()。8. 效果评估、参数调优与进阶使用成功运行并得到输出图片后我们来看看效果如何以及如何调整。8.1 效果评估将*_final.png与原图对比。BOPBL在以下几个方面通常表现卓越色彩校正能有效减轻泛黄恢复更自然的白平衡。划痕与污渍去除对于细小的划痕和点状污渍去除效果很好。人脸修复对于面部严重破损如眼睛、嘴巴区域缺失的照片其生成效果往往令人震惊五官合理且自然。但它也有局限复杂背景修复对于非人脸部分的复杂纹理如花纹、文字破损修复效果可能模糊或不合理。大块缺失照片有大块缺失时补全的内容可能不符合上下文。过度平滑有时为了去除噪点会导致图片细节丢失看起来有点“塑料感”。8.2 关键参数调优run.py提供了多个参数可以影响修复过程--with_scratch: 如果原图有物理划痕一定要加上这个参数它会启用专门的划痕处理流程。--HR: 启用高分辨率模式。这会使用更复杂的模型生成更精细的结果但显存消耗巨大可能需要10GB以上。普通照片1024x768左右在8GB显存上不加--HR比较安全。--face_enhance: 强制进行人脸增强即使检测到的人脸区域看起来不破损。有时检测不准可以手动开启。--size_h和--size_w: 可以指定处理图片的尺寸。程序会先将图片缩放到这个尺寸进行处理再放大回原图输出。降低这个尺寸可以显著节省显存和计算时间适合批量处理或低配置机器。示例命令处理有划痕的照片并限制处理尺寸python run.py --input_folder ./damaged_photos --output_folder ./output --GPU 0 --with_scratch --size_h 512 --size_w 5128.3 批量处理与自动化你可以写一个简单的Python脚本或Shell脚本在Windows上可以用PowerShell脚本来遍历一个文件夹下的所有图片并依次调用run.py。核心是循环执行系统命令。这里提供一个Python示例import os import subprocess input_root “./old_photos” output_root “./restored_photos” os.makedirs(output_root, exist_okTrue) for img_name in os.listdir(input_root): if img_name.lower().endswith((‘.jpg‘, ‘.jpeg‘, ‘.png‘, ‘.bmp‘)): img_input_path os.path.join(input_root, img_name) # 为每张图片创建一个单独的输出子文件夹避免文件名冲突 img_output_dir os.path.join(output_root, os.path.splitext(img_name)[0]) os.makedirs(img_output_dir, exist_okTrue) cmd [ ‘python‘, ‘run.py‘, ‘--input_folder‘, img_input_path, ‘--output_folder‘, img_output_dir, ‘--GPU‘, ‘0‘, ‘--with_scratch‘ # 根据是否需要添加 ] print(f“Processing: {img_name}“) subprocess.run(cmd) print(f“Finished: {img_name}“)将这个脚本保存为batch_run.py放在项目根目录并在虚拟环境中运行即可。9. 部署总结与核心避坑指南回顾整个部署过程在Windows上成功运行BOPBL的关键在于精确控制版本和环境。以下是我用血泪教训换来的核心避坑清单Python版本锁定坚决使用Python 3.8 或 3.9。3.10及以上版本与PyTorch 1.x的兼容性风险极高。PyTorch版本是基石优先尝试PyTorch 1.10.0 CUDA 11.3这个组合。这是经过大量社区实践验证的相对稳定组合。不要盲目追求最新版。C编译环境前置在安装任何依赖之前务必先安装好Visual Studio Build Tools带C桌面开发。这是dlib编译成功的先决条件。虚拟环境是护身符始终在虚拟环境中操作。这样即使环境搞崩了删除虚拟环境文件夹即可重来不影响系统。手动安装dlib放弃pip install dlib直接从Christoph Gohlke的网站下载对应版本的.whl文件进行安装这是Windows下的唯一正道。模型路径要对下载的checkpoints.zip一定要解压到对应的Face_Enhancement/和Global/子目录下而不是项目根目录。显存管理意识处理前先评估图片大小。对于普通照片可以不使用--HR模式。如果显存不足小于6GB务必使用--size_h和--size_w将处理尺寸缩小如512x512。耐心阅读错误信息运行出错时完整的错误信息Traceback是你的最佳朋友。它通常会精确指出是哪一行代码、哪一个模块出了问题。根据错误关键词如ModuleNotFoundError,CUDA out of memory,TypeError去搜索大概率能找到解决方案。这个项目就像一台精密的古董钟表每一个齿轮依赖都必须严丝合缝。一旦某个环节版本不对整个系统就无法运转。我的体会是在开源世界尤其是在Windows平台上部署一个为Linux环境优化的复杂项目需要的不仅是技术更是耐心、搜索能力和解决问题的韧性。当你看到一张破损严重的老照片在屏幕上一点点被修复亲人模糊的面容重新变得清晰时你会觉得这一切折腾都是值得的。技术不再是冰冷的代码它成了连接过去与现在的桥梁。希望这篇详尽的指南能帮你更平稳地架起这座桥。
返回列表