使用Ansible自动化部署Bringing-Old-Photos-Back-to-Life项目指南
项目概述
Bringing-Old-Photos-Back-to-Life是一个由微软开发的基于深度学习的照片修复项目,能够自动修复老照片中的各种缺陷,包括划痕、褪色、模糊等问题。该项目结合了多种计算机视觉和深度学习技术,为老照片提供高质量的修复效果。
Ansible自动化部署方案
Ansible是一种强大的自动化运维工具,可以帮助我们快速、一致地部署复杂的软件系统。下面将详细介绍如何使用Ansible自动化部署Bringing-Old-Photos-Back-to-Life项目。
基础环境准备
部署前需要确保目标系统满足以下要求:
- 操作系统:Ubuntu 18.04/20.04或Debian 10
- 管理员权限(用于安装系统级软件包)
系统依赖安装
Ansible脚本首先会安装所有必要的系统依赖:
- name: install packages
package:
name:
- python3
- python3-pip
- python3-venv
- git
- unzip
- tar
- lbzip2
- build-essential
- cmake
- ffmpeg
- libsm6
- libxext6
- libgl1-mesa-glx
state: latest
become: yes
这些依赖包括:
- Python 3及相关工具:项目运行的基础环境
- Git:用于克隆代码仓库
- 压缩工具:用于处理下载的压缩文件
- 构建工具:编译部分依赖项
- 多媒体库:图像处理所需
项目代码获取
通过Git克隆项目主仓库:
- name: git clone repo
git:
repo: 'https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life.git'
dest: Bringing-Old-Photos-Back-to-Life
clone: yes
Python虚拟环境配置
项目使用Python虚拟环境隔离依赖:
- name: requirements setup
pip:
requirements: "~/Bringing-Old-Photos-Back-to-Life/requirements.txt"
virtualenv: "~/Bringing-Old-Photos-Back-to-Life/.venv"
virtualenv_command: /usr/bin/python3 -m venv .venv
同时补充安装一些必要的额外包:
- name: additional pip packages
pip:
name:
- setuptools
- wheel
- scikit-build
virtualenv: "~/Bringing-Old-Photos-Back-to-Life/.venv"
同步批归一化模块安装
项目依赖Synchronized-BatchNorm-PyTorch库,需要单独安装:
- name: git clone batchnorm-pytorch
git:
repo: 'https://github.com/vacancy/Synchronized-BatchNorm-PyTorch'
dest: Synchronized-BatchNorm-PyTorch
clone: yes
然后将相关模块复制到项目指定位置:
- name: copy sync_batchnorm to face_enhancement
copy:
src: Synchronized-BatchNorm-PyTorch/sync_batchnorm
dest: Bringing-Old-Photos-Back-to-Life/Face_Enhancement/models/networks/
remote_src: yes
- name: copy sync_batchnorm to global
copy:
src: Synchronized-BatchNorm-PyTorch/sync_batchnorm
dest: Bringing-Old-Photos-Back-to-Life/Global/detection_models
remote_src: yes
人脸检测模型准备
项目需要dlib的人脸特征点检测模型:
- name: check if shape_predictor_68_face_landmarks.dat
stat:
path: Bringing-Old-Photos-Back-to-Life/Face_Detection/shape_predictor_68_face_landmarks.dat
register: p
- name: get shape_predictor_68_face_landmarks.dat.bz2
get_url:
url: http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
dest: Bringing-Old-Photos-Back-to-Life/Face_Detection/
when: p.stat.exists == False
- name: unarchive shape_predictor_68_face_landmarks.dat.bz2
shell: 'bzip2 -d Bringing-Old-Photos-Back-to-Life/Face_Detection/shape_predictor_68_face_landmarks.dat.bz2'
when: p.stat.exists == False
预训练模型下载
项目需要下载两个预训练模型:
- 人脸增强模型:
- name: check if face_enhancement
stat:
path: Bringing-Old-Photos-Back-to-Life/Face_Enhancement/checkpoints/Setting_9_epoch_100/latest_net_G.pth
register: fc
- name: unarchive Face_Enhancement/checkpoints.zip
unarchive:
src: https://facevc.blob.core.windows.net/zhanbo/old_photo/pretrain/Face_Enhancement/checkpoints.zip
dest: Bringing-Old-Photos-Back-to-Life/Face_Enhancement/
remote_src: yes
when: fc.stat.exists == False
- 全局修复模型:
- name: check if global
stat:
path: Bringing-Old-Photos-Back-to-Life/Global/checkpoints/detection/FT_Epoch_latest.pt
register: gc
- name: unarchive Global/checkpoints.zip
unarchive:
src: https://facevc.blob.core.windows.net/zhanbo/old_photo/pretrain/Global/checkpoints.zip
dest: Bringing-Old-Photos-Back-to-Life/Global/
remote_src: yes
when: gc.stat.exists == False
部署后注意事项
部署完成后,在使用项目前需要激活Python虚拟环境:
source ~/Bringing-Old-Photos-Back-to-Life/.venv/bin/activate
技术要点解析
-
批归一化同步:项目使用Synchronized BatchNorm来确保在多GPU训练时批归一化层的统计信息能够正确同步。
-
模块化设计:项目分为全局修复和面部增强两个主要模块,分别处理不同类型的照片缺陷。
-
预训练模型:项目依赖预训练模型,这些模型已经在大规模数据集上训练完成,可以直接用于推理。
-
人脸特征点检测:使用dlib的68点人脸特征点检测器来精确定位面部区域,实现更精准的面部修复。
常见问题解决
-
依赖安装失败:确保系统已更新(
sudo apt update && sudo apt upgrade
)后再运行Ansible脚本。 -
模型下载缓慢:可以考虑手动下载模型文件并放到指定位置,跳过自动下载步骤。
-
虚拟环境问题:如果虚拟环境创建失败,检查Python3和venv模块是否已正确安装。
通过这套Ansible自动化部署方案,可以快速、一致地在多台机器上部署Bringing-Old-Photos-Back-to-Life项目,大大减少了手动配置的工作量和出错的可能性。