Instalando e executando a SEGAN no Ubuntu 16.04

Tito Spadini
6 min readJul 3, 2019

No ano de 2014, a publicação do artigo de Ian Goodfellow que deu origem à Rede Adversária Geradora (GAN, Generative Adversarial Network) foi um marco em diversas áreas de Inteligência Artificial por todo o mundo. Desde então, vários trabalhos vêm sendo desenvolvidos com o uso dessas estruturas que, a priori, parecem ter a capacidade de reproduzir o comportamento estatístico observado em um conjunto de amostras de referência.

Apesar de haver um número impressionantemente maior de trabalhos relacionados a imagens — talvez, devido ao fato de o próprio trabalho original sobre GANs ter-se utilizado exclusivamente de abordagens que explorassem tais aplicações — , trabalhos que exploram outras aplicações também começaram a surgir um pouco mais tarde. Aplicações que trabalham com outros tipos de mídias, como áudio, voz e acústica também passaram a ser pesquisadas e desenvolvidas. Uma dessas aplicações é a conhecida como melhoramento de voz (SE, Speech Enhancement). Com o objetivo de se realizar especificamente essa tarefa de melhoramento explorando-se as capacidades das GANs, foi feita a Speech Enhancement Generative Adversarial Network, que visa melhorar o sinal de voz por meio de GAN.

Arquitetura do Auto-Encoder explorado pela rede Geradora da SEGAN.

Os autores da SEGAN tiveram a decência de compartilhar suas implementações computacionais por meio da plataforma Github; e, além disso, inseriram diversas instruções, inclusive um modelo lá treinado e um conjunto de dados que pode ser explorado em eventuais testes preliminares para que se possa saber se, de fato, tudo está funcionando como deveria. Contudo, apesar do gesto notoriamente nobre, existem certas dificuldades referentes ao uso da SEGAN e que estão associadas à instalação e à configuração. Depois de muito tempo instalando e configurando a SEGAN em diferentes máquinas, tive a impressão de que ela funciona melhor se executada sob certas configurações específicas, que eu ouso chamar aqui de “dependências” — colocadas com aspas aqui porque não é bem esse o caso; eu apenas não consegui encontrar uma configuração que permitisse seu funcionamento de forma adequada —; que são:

  • Ubuntu 16.04 LTS
  • Python 2.7
  • CUDA 8.0
  • cuDNN 5.1
  • git
  • sox

Além dessas “dependências”, os autores disponibilizaram, ainda dentro do próprio repositório do Github, um arquivo contendo todas as bibliotecas que compõe a lista de requisitos para que a SEGAN funcione. Essa versão, em particular, é a que foi construída em cima de TensorFlow. Devem estar instaladas as seguintes bibliotecas:

  • numpy 1.12.1
  • scipy 0.18.1
  • tensorflow_gpu 0.12.1
  • toml 0.9.2

Instalação

Ao longo deste tutorial, veremos como proceder para que seja possível ter uma máquina com Ubuntu 16.04 LTS pronta para rodar a SEGAN. Então, trabalharemos com a ideia de que quem seguirá este tutorial utilizará uma máquina com esse sistema operacional. É muito importante que todas as versões sejam rigorosamente respeitadas; caso contrário, não há qualquer garantia de que este tutorial resultará no que se deseja.

Serão realizados os seguintes passos ao longo deste tutorial:

  1. Instalação do CUDA Toolkit v8.0
  2. Instalação do cuDNN v5.1
  3. Instalação do git
  4. Instalação do SoX
  5. Clonagem do repositório da SEGAN
  6. Instalação das bibliotecas de Python

Instalação do CUDA Toolkit v8.0

wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.debsudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.debsudo apt updatesudo apt -y install cuda-8-0

Instalação do cuDNN v5.1

Antes de iniciar os comandos de instalação do cuDNN, acesse o endereço https://developer.nvidia.com/rdp/cudnn-download, efetue o login (caso necessário, faça uma conta gratuita) e abra a lista de versões mais antigas clicando em Archived cuDNN Releases.

Então, faça Download do cuDNN versão 5.1 para CUDA 8.0.

Assim que o Download tiver sido feito, garanta que o arquivo está nomeado como "cudnn-8.0-linux-x64-v5.1.tgz", então execute os seguintes comandos:

tar -xzvf cudnn-8.0-linux-x64-v5.1.tgzsudo cp -P cuda/include/cudnn.h /usr/local/cuda-8.0/includesudo cp -P cuda/lib64/libcudnn* /usr/local/cuda-8.0/lib64/sudo chmod a+r /usr/local/cuda-8.0/lib64/libcudnn*

Então, configure as variáveis associadas ao path:

export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64\${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

Instalação do git

O git será utilizado para clonar o repositório que está no Github. Para instalar o git, basta executar o seguinte comando:

sudo apt install git

Instalação do SoX

SoX é uma ferramenta conhecida como "canivete suíço" para quem trabalha com arquivos de áudio. Para instalar o SoX, execute o seguinte:

sudo apt install sox

Clonagem do repositório do Github

O que está sendo chamado aqui de "clonagem" é simplesmente a cópia de todos os arquivos que estejam dentro de um repositório no Github para um diretório local. Para clonar o repositório, execute o comando a seguir:

git clone https://github.com/santi-pdp/segan

Instalações das bibliotecas de Python

Para que a SEGAN possa funcionar adequadamente, é preciso garantir que as bibliotecas das quais ela depende estejam devidamente instaladas. Para garantir que as bibliotecas sejam instaladas respeitando-se as versões corretas, há um arquivo de texto chamado "requirements.txt" no repositório clonado no passo anterior. Para instalar todos os requisitos utilizando esse arquivo, execute isso:

pip install -r requirements.txt

Habilitando execuções para os arquivos .sh

A forma como a SEGAN foi desenvolvida permite que sejam executados arquivos .sh para facilitar todo um conjunto de comandos organizados para um dado fim, tal como o autor estabelece em seu repositório virtual no Github. Para que esses arquivos .sh possam ser executados, é preciso utilizar o seguinte comando estando no mesmo diretório do repositório local para o qual fora clonado o repositório da SEGAN:

chmod +x *.sh

Execução

Tratando-se de um modelo essencialmente dependente de uma abordagem supervisionada, há aqui a dependência de um treinamento a ser feito com dados rotulados. Vale ressaltar aqui o fato de que, além de o autor do repositório original ter se preocupado em fornecer amostras suficientes para se fazer um treinamento simples, ele se preocupou em fornecer um modelo já treinado para ser utilizado para efetuar o processo de melhoramento. Contudo, é importante lembrar que, para finalidades distintas das exploradas pelo trabalho original, é recomendável que o treinamento seja efetuado utilizando-se amostras que caracterizem melhor o cenário ao qual o modelo treinado será aplicado, ou seja, será, sim, necessário realizar o treinamento de um modelo personalizado.

Se suas intenções forem as de utilizar apenas o modelo já treinado pelo autor original, então baixe e descompacte o modelo no diretório do repositório local da SEGAN, então pule as etapas de preparação e treinamento a seguir, indo direto para a de melhoramento.

Para preparar os dados a serem utilizados em um futuro treinamento, execute:

./prepare_data.sh

Observe que os arquivos de áudio se localizam em uma pasta chamada data. Para treinar o modelo utilizando esses áudios, execute:

./train_segan.sh

Por fim, quando quiser realizar um processo de melhoramento com o modelo pronto, basta executar o seguinte comando, lembrando de substituir as regiões genéricas pelos valores desejados:

./clean_wav.sh AUDIO_RUIDOSO.wav DIRETÓRIO_DE_SAÍDA/ 

Considerações finais

Desta forma, todos os pré-requisitos necessários para que a SEGAN funcione estarão instalados.

Caso deseje trabalhar com múltiplos projetos que possam demandar versões diferentes de pacotes Python, procure utilizar ambientes virtuais para garantir que os pacotes não serão sobrescritos.

--

--

Tito Spadini

Ph.D. student in information engineering, scientist, researcher, writer, programmer, and gamer.