# Bringing-Old-Photos-Back-to-Life
**Repository Path**: mirrors_microsoft/Bringing-Old-Photos-Back-to-Life
## Basic Information
- **Project Name**: Bringing-Old-Photos-Back-to-Life
- **Description**: 微软研究团队开发了一种全新的修复旧照片的工具
- **Primary Language**: Python
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 48
- **Forks**: 28
- **Created**: 2020-09-18
- **Last Updated**: 2025-11-01
## Categories & Tags
**Categories**: image-processing, ai
**Tags**: None
## README
# Old Photo Restoration (Official PyTorch Implementation)
### [Project Page](http://raywzy.com/Old_Photo/) | [Paper (CVPR version)](https://arxiv.org/abs/2004.09484) | [Paper (Journal version)](https://arxiv.org/pdf/2009.07047v1.pdf) | [Pretrained Model](https://hkustconnect-my.sharepoint.com/:f:/g/personal/bzhangai_connect_ust_hk/Em0KnYOeSSxFtp4g_dhWdf0BdeT3tY12jIYJ6qvSf300cA?e=nXkJH2) | [Colab Demo](https://colab.research.google.com/drive/1NEm6AsybIiC5TwTU_4DqDkQO0nFRB-uA?usp=sharing) | [Replicate Demo & Docker Image](https://replicate.ai/zhangmozhe/bringing-old-photos-back-to-life) :fire:
**Bringing Old Photos Back to Life, CVPR2020 (Oral)**
**Old Photo Restoration via Deep Latent Space Translation, TPAMI 2022**
[Ziyu Wan](http://raywzy.com/)1,
[Bo Zhang](https://www.microsoft.com/en-us/research/people/zhanbo/)2,
[Dongdong Chen](http://www.dongdongchen.bid/)3,
[Pan Zhang](https://panzhang0212.github.io/)4,
[Dong Chen](https://www.microsoft.com/en-us/research/people/doch/)2,
[Jing Liao](https://liaojing.github.io/html/)1,
[Fang Wen](https://www.microsoft.com/en-us/research/people/fangwen/)2
1City University of Hong Kong, 2Microsoft Research Asia, 3Microsoft Cloud AI, 4USTC
## :sparkles: News
**2022.3.31**: Our new work regarding old film restoration will be published in CVPR 2022. For more details, please refer to the [project website](http://raywzy.com/Old_Film/) and [github repo](https://github.com/raywzy/Bringing-Old-Films-Back-to-Life).
The framework now supports the restoration of high-resolution input.
Training code is available and welcome to have a try and learn the training details.
You can now play with our [Colab](https://colab.research.google.com/drive/1NEm6AsybIiC5TwTU_4DqDkQO0nFRB-uA?usp=sharing) and try it on your photos.
## Requirement
The code is tested on Ubuntu with Nvidia GPUs and CUDA installed. Python>=3.6 is required to run the code.
## Installation
Clone the Synchronized-BatchNorm-PyTorch repository for
```
cd Face_Enhancement/models/networks/
git clone https://github.com/vacancy/Synchronized-BatchNorm-PyTorch
cp -rf Synchronized-BatchNorm-PyTorch/sync_batchnorm .
cd ../../../
```
```
cd Global/detection_models
git clone https://github.com/vacancy/Synchronized-BatchNorm-PyTorch
cp -rf Synchronized-BatchNorm-PyTorch/sync_batchnorm .
cd ../../
```
Download the landmark detection pretrained model
```
cd Face_Detection/
wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
bzip2 -d shape_predictor_68_face_landmarks.dat.bz2
cd ../
```
Download the pretrained model, put the file `Face_Enhancement/checkpoints.zip` under `./Face_Enhancement`, and put the file `Global/checkpoints.zip` under `./Global`. Then unzip them respectively.
```
cd Face_Enhancement/
wget https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life/releases/download/v1.0/face_checkpoints.zip
unzip face_checkpoints.zip
cd ../
cd Global/
wget https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life/releases/download/v1.0/global_checkpoints.zip
unzip global_checkpoints.zip
cd ../
```
Install dependencies:
```bash
pip install -r requirements.txt
```
## :rocket: How to use?
**Note**: GPU can be set 0 or 0,1,2 or 0,2; use -1 for CPU
### 1) Full Pipeline
You could easily restore the old photos with one simple command after installation and downloading the pretrained model.
For images without scratches:
```
python run.py --input_folder [test_image_folder_path] \
--output_folder [output_path] \
--GPU 0
```
For scratched images:
```
python run.py --input_folder [test_image_folder_path] \
--output_folder [output_path] \
--GPU 0 \
--with_scratch
```
**For high-resolution images with scratches**:
```
python run.py --input_folder [test_image_folder_path] \
--output_folder [output_path] \
--GPU 0 \
--with_scratch \
--HR
```
Note: Please try to use the absolute path. The final results will be saved in `./output_path/final_output/`. You could also check the produced results of different steps in `output_path`.
### 2) Scratch Detection
Currently we don't plan to release the scratched old photos dataset with labels directly. If you want to get the paired data, you could use our pretrained model to test the collected images to obtain the labels.
```
cd Global/
python detection.py --test_path [test_image_folder_path] \
--output_dir [output_path] \
--input_size [resize_256|full_size|scale_256]
```
### 3) Global Restoration
A triplet domain translation network is proposed to solve both structured degradation and unstructured degradation of old photos.
### 4) Face Enhancement
We use a progressive generator to refine the face regions of old photos. More details could be found in our journal submission and `./Face_Enhancement` folder.
> *NOTE*:
> This repo is mainly for research purpose and we have not yet optimized the running performance.
>
> Since the model is pretrained with 256*256 images, the model may not work ideally for arbitrary resolution.
### 5) GUI
A user-friendly GUI which takes input of image by user and shows result in respective window.
#### How it works:
1. Run GUI.py file.
2. Click browse and select your image from test_images/old_w_scratch folder to remove scratches.
3. Click Modify Photo button.
4. Wait for a while and see results on GUI window.
5. Exit window by clicking Exit Window and get your result image in output folder.