Como executar o PULSE (face-depixelizer) no Linux no Windows 10 (WSL)? Tutorial

Numa noite de primavera de 2020, li um artigo sobre a rede neural do depixelizador de rosto . Depois de estudá-lo, verificou-se que esse é um tipo de interface para o mecanismo PULSE . Que é baseado na rede neural StyleGAN (gera rostos com recursos aleatórios).



Neste tutorial, mostrarei as etapas e mostrarei como instalei o Ubuntu no Windows 10 (WSL), configurei um ambiente para experimentar o PULSE , carreguei outra foto original e obtive um bom resultado.

O resultado da restauração da imagem original em PULSE

Morph animação e vídeo tutorial - mais.





O que nos foi dado





O Face-Depixelizer é um frontend para trabalhar com o PULSE.



PULSE é um mecanismo baseado na rede neural StyleGAN. Seu significado é que restaura imagens do rosto de uma pessoa a partir de uma fotografia distorcida. E, a propósito, este é um trabalho científico para CFV .



O StyleGAN é uma rede neural adversária generativa da NVidia que gera uma face aleatória de uma pessoa inexistente (na verdade, será engraçado se essa pessoa já existir).





PULSE , finalmente, nos dirá aproximadamente como é a mesma pessoa que piscou nesta foto!





Assumindo o PULSO





Eu me perguntava o que havia sob o capô do PULSE e, em geral, como ele poderia ser iniciado localmente.

Por interesse, tendo examinado na diagonal um artigo científico, comecei a pensar em como começar e como estabelecer tudo (apesar de nunca ter me definido uma "rede neural").



E comecei dizendo que, assim que possível, antes que o github caísse (se é que você me entende), mudei para o projeto PULSE . Onde o autor indicou esta opção de instalação: anaconda e python. Essa. em qualquer caso, são necessários pacotes específicos da plataforma (bibliotecas). Eu sou mais usuário do Windows que Linux. Mas, mesmo assim, gostaria de rodar sem edição e seleção tediosa de bibliotecas. E sem o Linux, isso não pode ser feito.



Algum tempo atrás, alguns especialistas em TI estavam falando sobre Linux no Windows. E eu vou te dizer isso, para mim - em vão. A coisa é conveniente, embora ainda não tenha sido concluída.

O WSL , o Windows Subsystem para Linux, permite que os desenvolvedores executem o ambiente GNU / Linux, incluindo a maioria dos programas, utilitários e aplicativos de linha de comando, diretamente no Windows sem nenhuma modificação, eliminando a necessidade de uma máquina virtual separada.


Essa. este é o acesso à linha de comando do linux a partir do windows. Um terminal com Linux é tão fácil de iniciar quanto o cmd. Convenientemente.



Vamos começar



Para trabalhar com o terminal, aqui e no vídeo eu usarei o Terminal do Windows (da Windows Store).


Em resumo



Verificando os requisitos



  • Placa de vídeo NVidia com suporte para CUDA (a rede neural StyleGAN usa CUDA). Lista de placas de vídeo suportadas aqui
  • NVidia CUDA WSL2 ( , ).
  • Windows 10 version 2004 build 20150 ( Windows Insider Program ), .
  • WSL2 (4.19.121 ; Windows) linux .
  • Ubuntu 18.04 WSL2 Windows Store.


Ubuntu





CUDA



  1. CUDA
  2. .




Baixe e instale o anaconda.



Instalar PULSE



  1. Fazendo download no github PULSE
  2. Editando pulse.yml:



    • Adicionar canais anaconda, conda-forge
    • Removendo referências a montagens específicas
  3. Instale o ambiente PULSE usando o arquivo editado
  4. Verificando o desempenho do Pytorch e do CUDA Toolkit no Python.


Experimentando



  1. Usando o pip update jupyter notebook para a versão mais recente
  2. Ajustando a imagem (na edição eles escrevem que PULSE funciona com uma imagem quadrada de 1024 * 1024 e três canais RGB, ou seja, sem transparência)
  3. Aumentamos / diminuímos o número de etapas e o erro
  4. ...
  5. LUCRO!




Acima está uma animação de metamorfose criada a partir de imagens intermediárias.



Como diz o ditado: "é melhor ver uma vez do que ouvir cem vezes". O vídeo mostra todas as etapas, começando com a atualização do WSL2 e instalando o Ubuntu.







E agora…



Mais detalhes



Exigências



Mais uma vez repetirei os requisitos (... e após a centésima edição, lembrarei de Fowler pela centésima vez):



  • Windows 10 versão 2004 build 20150 ou superior
  • WSL2 (versão 4.19.121 e superior)
  • O Ubuntu 18.04 para WSL2 é a própria distribuição da Windows Store. Instalado após o avanço de todas as atualizações do Windows 10 Insider , incl. WSL2
  • NVidia Driver WSL é uma versão experimental de drivers com suporte para a nova versão do WSL2. Requer consentimento para participar do Programa Experimental da NVidia. Mas nem todo cartão funcionará .


Preparação do SO



Windows 10


O objetivo : Windows 10 versão 2004, compilação 20150 e anterior ao



pré - tratamento :



  1. Iniciando atualizações
  2. Em seguida, usando o aplicativo winver, verificamos a versão atual do Windows
  3. Se sua versão do Windows for inferior à versão 2004 do Windows 10, compilação 20150, você precisará seguir as etapas abaixo
  4. E se estiver tudo bem, parabéns, você não precisa ingressar no Windows Insider Program! Sinta-se livre para avançar para a próxima etapa!


O que fazemos :



  1. Como entrar no programa Windows Insider
  2. Além disso, nos parâmetros do sistema "Atualização e segurança":

    • Guia Insider Program (se estiver em branco, consulte a seção Solução de problemas abaixo):



      1. Opções de avaliação: acesso antecipado
      2. Clique em "Iniciar".
    • Guia Windows Update:



      1. No "Avançado", certifique-se de permitir "Ao atualizar para receber atualizações de outros produtos da Microsoft" (isto é para instalar o WSL2 4.19.121 e superior)
      2. Estamos atualizando.


Verificação : lançamento winver. Na caixa de diálogo exibida, veja a versão.



Driver NVidia CUDA WSL


Objetivo : Instalar a versão mais recente do NVidia Driver CUDA WSL



O que fazemos :



  1. Vá para a página
  2. Se você ainda não se cadastrou, nós registramos; concorda em participar do programa experimental
  3. Baixar e instalar.


Verificação : estará na fase de "verificação de operacionalidade CUDA"



WSL2


O objetivo : WSL2 versão 4.19.121 e



pré - tratamento superior :



  1. Atualizamos o Windows para o Windows 10 versão 2004, compilação 20150 e superior, se não for atualizado nas etapas acima
  2. Se, após a execução no terminal:



    wsl --update
    o conteúdo da ajuda será exibido (a la wsl --help), e você terá uma versão antiga. Em seguida, siga as etapas abaixo
  3. Se uma versão de 4.19.121 e superior for exibida, pularemos este estágio.


O que fazemos :



  1. Inicie o PowerShell como administrador e execute sequencialmente:

    • Incluímos o componente adicional "Windows Subsystem for Linux":



      dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    • Em seguida, ative o componente "Virtual Machine Platform":



      dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    • Nós reiniciamos.
  2. Atualizando WSL:



    wsl --update
  3. Em seguida, instalamos a segunda versão do WSL - como padrão para todas as distribuições futuras:

    Para fazer isso, inicie o PowerShell com direitos de administrador e execute:



    wsl --set-default-version 2


Verifique : comando:



wsl --update
[depois de instalar a atualização] exibirá a versão 4.19.121 e superior.



Ubuntu 18.04 no WSL2


O objetivo : Ubuntu 18.04 no



pré - tratamento WSL2 : se (eu não testei o seguinte ramo, mas seria bom se você especificar nos comentários, quem enfrentou se ajudou) no WSL foi instalado o Ubuntu 18.04:



  • Verificamos na lista:



    wsl --list --all -v
  • Para esta distribuição, alterne a versão WSL para a versão 2:



    wsl --set-version Distro 2


    Por exemplo:



    wsl --set-version Ubuntu-18.04 2
  • Nós reiniciamos.


O que fazemos :



  1. Vá para a Windows Store
  2. Estamos procurando pelo Ubuntu 18.04 e instale


Verifique : abra um terminal, execute:



wsl --list --all -v


Vejo Ubuntu 18.04 Version 2



Preparando o Ubuntu



Pré-preparação


  1. Atualizando índices de pacotes:



    sudo apt update
  2. Instale o cmake (para instalar o dlib):



    sudo apt install cmake
  3. Para descompactar arquivos zip, instale, por exemplo, o utilitário descompactar :



    sudo apt install unzip


Instalando o CUDA Toolkit


  1. Adicione CUDA ao índice do pacote:



    sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
    
    sudo sh -c 'echo "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 /" > /etc/apt/sources.list.d/cuda.list'
    
    sudo apt update
  2. Instale o CUDA Toolkit:



    sudo apt install -y cuda-toolkit-11-0


Verificando o desempenho do CUDA Toolkit




Para fazer isso, execute os exemplos (o programa deviceQuery é informativo):



  1. Baixando:



    wget https://github.com/NVIDIA/cuda-samples/archive/master.zip
  2. Descompactar:



    unzip master.zip
  3. Vá em frente e construa (tudo):



    make
  4. Corre:



    ./bin/x86_64/linux/release/deviceQuery


    O aplicativo exibirá uma lista de dispositivos compatíveis.


Instalando o Anaconda


  1. Faça o download da distribuição no link
  2. Corre:



    bash Anaconda3-2020.02-Linux-x86_64.sh


    Durante a instalação:



    1. Concordar com uma licença
    2. Deixamos PREFIXO
    3. Nós concordamos com a inicialização
  3. Reinicie o terminal ou execute:



    source ~/.bashrc


Configurando o ambiente no anaconda



Configurando PULSE


  1. Baixando:



    wget https://github.com/adamian98/pulse/archive/master.zip
  2. Descompactar:



    unzip master.zip
  3. Crie um backup do pulse.yml:



    cp pulse.yml pulse.yml.bak
  4. Corrija pulse.yml:



    1. Adicione canais (estas são fontes de pacotes):

      • conda-forge
      • anaconda
    2. Removemos todas as referências para uma versão específica do pacote.

      Exemplo : zstd=1.3.7=h5bba6e5_0remova a última parte da linha " ", começando com o sinal de igual: " =h5bba6e5_0". Como resultado, obtemos " zstd=1.3.7".



      Fazemo-lo manualmente ou através do utilitário sed:



      sed '/==/b; s/=\([^=]*\)$//' pulse.yml > pulse1.yml


      : , , "==", regexp
  5. pulse1.yml:



    conda env create -f pulse1.yml
  6. , - NotResolverPackage. libfortran 3.0.1:



    1. conda libfortran
    2. Anaconda Cloud Files (3.0.1), , , osx-64
    3. Anaconda Cloud, cloud-forge 3.0.0-1 linux-64. !
    4. pulse1.yml libfortran=3.0.1 libfortran=3.0.0=1
    5. :



      conda env create -f pulse1.yml
    6. , !
    7. Se você precisar de outros pacotes, preste atenção aos canais, adicione se necessário.
  7. Estamos aguardando a instalação
  8. Então ativamos:



    conda activate pulse


Verificando o desempenho do Pytorch e CUDA em python


  1. Este script:



    from __future__ import print_function
    import torch
    x = torch.rand(5, 3)
    print(x)


    Deve produzir algo como isto:



    tensor([[0.3380, 0.3845, 0.3217],
    	[0.8337, 0.9050, 0.2650],
    	[0.2979, 0.7141, 0.9069],
    	[0.1449, 0.1132, 0.1375],
    	[0.4675, 0.3947, 0.1426]])
  2. E este:



    import torch
    torch.cuda.is_available()


    Saída:



    True


Nesta fase, em teoria, você pode parar. Mas fui em frente e instalei o notebook jupyter para experimentos.

O Jupyter Notebook é uma ferramenta incrivelmente poderosa para desenvolver e apresentar interativamente projetos de ciência de dados.




Trabalhando com PULSE





Vamos começar




  1. Ativamos o ambiente de pulso:



    conda activate pulse
  2. Instalando o Jupiter:



    pip install jupyter
  3. Corre:



    jupyter notebook
    E mais:

    1. Crie um novo notebook Novo-> Python3 (notebook)
    2. Cole o código do arquivo lá
    3. Jogamos o arquivo de origem na raiz do projeto, renomeando-o para source.png:



      cp /mnt/c/Users//Desktop/face1.png source.png
    4. Nós lançamos. Nós esperamos


Notas


  1. , 500-800, eps
  2. :

    1. , , 1024*1024
    2. PNG
    3. (RGB) RGBA
  3. : "Could not find a face that downscales correctly within epsilon", :



    steps \ eps, , (steps), eps L2. .



    :



    BEST (400) | L2: 0.0013 GEOGROSS: | TOTAL: | time: ...


    Onde 400 é o número (especificado) alcançado de etapas (etapas), L2 é o valor do interesse, deve ser menor que o eps especificado (pelo que entendi, essa é a precisão da otimização; camaradas desenvolvedores de IA, me diga o que é?).



    Portanto, por exemplo, você precisa aumentar uma coisa ou todas juntas: etapas (coloque mais de 400) e \ ou eps (coloque eps = 0,0013 e mais, ou seja, deve ser para que eps> = L2) ...

  4. Se você quiser ver fotos intermediárias para cada etapa, adicione o parâmetro As -save_intermediate

    imagens são salvas na pasta runs/: na pasta HR- alta resolução, na pasta LR- baixa resolução)


Os possíveis problemas estão abaixo.



Solução de problemas



Se você não apenas encontrou erros, mas também os resolveu, escreva, adicionarei aqui.


Tela branca no programa Windows Insider


Opção : você está com um usuário diferente, não possui privilégios suficientes.

Solução : veja o link . Mas eu resolvi isso sem alterar o registro.



Amostras CUDA não iniciam


Opções :



  1. Sua placa gráfica não é suportada
  2. Você não lançou o WSL2 mais recente
  3. Você não instalou a versão mais recente (experimental) do NVidia Driver CUDA WSL


jupyter notebookLança um erro na inicialização


Erro : Start : This command cannot be run due to the error: The system cannot find the file specified.

Solução : copie a cadeia de conexão para o navegador (não entendi outras soluções).



Ao iniciar o PULSE, ocorre um erro constante


Erro : Google Quota Exceeded

Solução : copie o arquivo de origem de mim e jogue-o na raiz - na pasta de cache (crie-o se não estiver lá).



Ou:



  1. Faça o download do arquivo usando o primeiro link do google em PULSE.py
  2. Renomeie-o usando o modelo md5hash _synthesis.pt, em que md5hash é o hash md5 do arquivo baixado (na versão atual 6b943ee69b8491ac40e8e9ced6175659_synthesis.pt)
  3. Nós o jogamos na pasta de cache (crie-o se não estiver na raiz do diretório em que o PULSE está localizado)


Ao iniciar o PULSE ou ao verificar o Pytorch, ocorre um erro


Erro : ModuleNotFoundError: No module named 'torch'

Solução : Se você verificou o pytorch e ele funciona, significa que você não ativou o ambiente de pulso. Para fazer isso, execute o seguinte comando:



conda activate pulse


Conclusão



O próximo passo é estudar o StyleGAN e outras "redes neurais" com base nele.

Eu ficaria feliz em ler seus comentários sobre o artigo, recomendações (inclusive na apresentação, já que este é meu primeiro artigo público), alterações.



Obrigado a todos pela leitura!



Referências e links para utilitários, drivers



  1. Instruções de instalação do driver NVidia para CUDA no WSL
  2. Drivers NVidia para CUDA sob WSL
  3. Lista de placas de vídeo CUDA suportadas
  4. Exemplos CUDA
  5. Instruções para instalar o WSL2 no Windows 10
  6. Ajuda e Introdução ao Programa Windows Insider - Windows Early Access
  7. Instruções para instalar o Anaconda no sistema Linux
  8. Lista de distribuições Anaconda
  9. Jupyter Notbook - Análises e experiências
  10. Repositório PULSE
  11. Repositório Face-Depixelizer
  12. Repositório do StyleGAN



All Articles