# 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)