# Installation ## Contents - [Requirements](#requirements) - [BASICSR_EXT and BASICSR_JIT environment variables](#basicsr_ext-and-basicsr_jit-environment-variables) - [Installation Options](#installation-options) - [Install from PyPI](#install-from-pypi) - [Install from a local clone](#Install-from-a-local-clone) ## Requirements - Python >= 3.7 (Recommend to use [Anaconda](https://www.anaconda.com/download/#linux) or [Miniconda](https://docs.conda.io/en/latest/miniconda.html)) - [PyTorch >= 1.7](https://pytorch.org/) - NVIDIA GPU + [CUDA](https://developer.nvidia.com/cuda-downloads) - Linux (We have not tested on Windows) ## BASICSR_EXT and BASICSR_JIT Environment Variables If you want to use PyTorch C++ extensions:
 deformable convolution: [*dcn* for EDVR](basicsr/ops) (For torchvision>=0.9.0, we use the official `torchvision.ops.deform_conv2d` instead)
 StyleGAN customized operators: [*upfirdn2d* and *fused_act* for StyleGAN2](basicsr/ops)
you also need to: 1. **compile** the PyTorch C++ extensions during installation 2. OR **load** the PyTorch C++ extensions just-in-time (JIT) You may choose one of the options according to your needs. | Option | Pros| Cons | Cases | Env Variable| | :--- | :--- | :--- | :--- |:--- | | **Compile** PyTorch C++ extensions during installation | **Quickly load** the compiled extensions during running | May have more stringent requirements for the environment, and you may encounter annoying issues | If you need to train/inference those models for many times, it will save your time| Set `BASICSR_EXT=True` during **installation**| | **Load** PyTorch C++ extensions just-in-time (JIT) | Have less requirements, may have less issues | Each time you run the model, it will takes several minutes to load extensions again | If you just want to do simple inferences, it is more convenient| Set `BASICSR_JIT=True` during **running** (not **installation**) | For those who need to compile the PyTorch C++ extensions during installation, remember: - Make sure that your gcc and g++ version: gcc & g++ >= 5 Note that: - The `BASICSR_JIT` has higher priority, that is, even you have successfully compiled PyTorch C++ extensions during installation, it will still load the extensions just-in-time if you set `BASICSR_JIT=True` in your running commands. - :x: Do not set `BASICSR_JIT` during installation. Installation commands are in [Installation Options](#installation-options). - :heavy_check_mark: If you want to load PyTorch C++ extensions just-in-time (JIT), just set `BASICSR_JIT=True` before your **running** commands. For example, `BASICSR_JIT=True python inference/inference_stylegan2.py`. If you do not need those PyTorch C++ extensions, just skip it. There is no need to set `BASICSR_EXT` or `BASICSR_JIT` environment variables. ## Installation Options There are two options to install BASICSR, according to your needs. - If you just want to use BASICSR as a **package** (just like [GFPGAN](https://github.com/TencentARC/GFPGAN) and []()), it is recommended to install from PyPI. - If you want to **investigate** the details of BASICSR OR **develop** it OR **modify** it to fulfill your needs, it is better to install from a local clone. ### Install from PyPI - If you do not need C++ extensions (more details are [here](#basicsr_ext-and-basicsr_jit-environment-variables)): ```bash pip install basicsr ``` - If you want to use C++ extensions in **JIT mode** without compiling them during installatoin (more details are [here](#basicsr_ext-and-basicsr_jit-environment-variables)): ```bash pip install basicsr ``` - If you want to **compile C++ extensions during installation**, please set the environment variable `BASICSR_EXT=True`: ```bash BASICSR_EXT=True pip install basicsr ``` The compilation may fail without any error prints. If you encounter running errors, such as `ImportError: cannot import name 'deform_conv_ext' | 'fused_act_ext' | 'upfirdn2d_ext'`, you may check the compilation process by re-installation. The following command will print detailed log: ```bash BASICSR_EXT=True pip install basicsr -vvv ``` You may also want to specify the CUDA paths: ```bash CUDA_HOME=/usr/local/cuda \ CUDNN_INCLUDE_DIR=/usr/local/cuda \ CUDNN_LIB_DIR=/usr/local/cuda \ BASICSR_EXT=True pip install basicsr ``` ### Install from a local clone 1. Clone the repo ```bash git clone https://github.com/xinntao/BasicSR.git ``` 1. Install dependent packages ```bash cd BasicSR pip install -r requirements.txt ``` 1. Install BasicSR
Please run the following commands in the **BasicSR root path** to install BasicSR:
- If you do not need C++ extensions (more details are [here](#basicsr_ext-and-basicsr_jit-environment-variables)): ```bash python setup.py develop ``` - If you want to use C++ extensions in **JIT mode** without compiling them during installatoin (more details are [here](#basicsr_ext-and-basicsr_jit-environment-variables)): ```bash python setup.py develop ``` - If you want to **compile C++ extensions during installation**, please set the environment variable `BASICSR_EXT=True`: ```bash BASICSR_EXT=True python setup.py develop ``` You may also want to specify the CUDA paths: ```bash CUDA_HOME=/usr/local/cuda \ CUDNN_INCLUDE_DIR=/usr/local/cuda \ CUDNN_LIB_DIR=/usr/local/cuda \ BASICSR_EXT=True python setup.py develop ```