---
# System prepended metadata

title: Bringing-Old-Photos-Back-to-Life

---

# Bringing-Old-Photos-Back-to-Life
照片修復技術
## 功能:
1. 舊照片全景修復
2. 照片摺痕識別、修復
3. 照片人臉識別、修復

## 原始碼
[官方網址](https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life)
1. 官方下載zip檔並解壓縮
2. 配置環境: 
**Global 權重配置:**
[https://facevc.blob.core.windows.net/zhanbo/old_photo/pretrain/Global/checkpoints.zip](https://facevc.blob.core.windows.net/zhanbo/old_photo/pretrain/Global/checkpoints.zip)
下載後把文件解壓放在Global資料夾裡

![](https://i.imgur.com/ELEA4ft.png)

**Face_Detection權重配置:**
人臉增強清晰化這個功能，首先採用人臉識別，需要使用dlib這個第三方模組，因為dlib後期不再提供whl檔，需要使用C++自行編譯，過程有些繁瑣，但成功率高

開始安裝dlib:
1. 安裝visual studio [官網](https://visualstudio.microsoft.com/zh-hant/)
2. 安裝過程中點擊「使用 C++ 的桌面開發」，並確定有勾選「適用於 Windows 的 C++ CMake 工具」
3. 安裝完成後開啟 **x64 Native Tools Command Prompt for VS 2019** 初始化開發人員模式
4. 輸入 `pip install dlib` 
(若是出現pip不是內部或外部命令，則是環境變數並沒有加入python/script，或是重下載python)[教學連結](https://hackmd.io/@yizhewang/B1zdXG4br)
5. 完成後輸入 `pip show dlib` 確認安裝是否成功

人臉識別需要一個權重文件
[http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2](
http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2)
下載解壓縮至 Face_Enhancement 資料夾裡

![](https://i.imgur.com/lODi4TP.png)
**Synchronized-BatchNorm-PyTorch 下載** 
這是pytorch框架裡同步BatchNorm的一個分支
[git下載](https://github.com/vacancy/Synchronized-BatchNorm-PyTorch)
下載解壓縮後，複製檔案裡的 **sync_batchnorm**

![](https://i.imgur.com/Smmcekv.png)
將 **sync_batchnorm** 複製到**Face_Enhancement/models/network** 文件夾下，還需要改動一點原始碼碼，找到 **Face_Enhancement/models/network/normalize.py** 程式，更改第 8 行程式碼，將
```
from models.networks.sync_batchnorm import SynchronizedBatchNorm2d
```
改成
```
from models.networks.sync_batchnorm.batchnorm import SynchronizedBatchNorm2d
```

將 **sync_batchnorm** 複製到 **Global/detection_models** ，找到 **Global/detection_models/network.py** 程式，更改第  7 行程式碼，將
```
from detection_models.sync_batchnorm import DataParallelWithCallback
```
改成
```
from detection_models.sync_batchnorm.replicate import DataParallelWithCallback
```

3. 安裝所需套件
torch
torchvision
~~dlib~~
scikit-image
easydict
PyYAML
dominate>=2.3.1
dill
tensorboardX
scipy
opencv-python
einops
PySimpleGUI

4. 環境配置成功後，確認 test_images 裡面有官方給的測試老照片，之後可以放自己的測試照片

![](https://i.imgur.com/fjoPjaA.png)

5. 開始執行程式，在終端機輸入 `python run.py --GPU -1`
--GPU -1 代表使用CPU運行，而非GPU，默認為0

6. 若是要修復帶摺痕的照片，則輸入 `python run.py --GPU -1 --with_scratch`

7. 問題
若在直譯器裡直接執行`run.py`，pytorch cpu會出現錯誤
> AttributeError: module 'torch._C' has no attribute '_cuda_setDevice'

解決方法: 到base_option裡面把 `self.parser.add_argument(
            "--gpu_ids", type=str, default="0", help="gpu ids: e.g. 0  0,1,2, 0,2. use -1 for CPU"`
中的default="0"改成-1

[原理解說連結](https://hackmd.io/bxAsks1SQlejfhKZON7AZw?view)