Bibliotecas GAN para aprendizado profundo

Conteúdo

Visão geral

  • GANs são modelos generativos, acredite no que você os alimenta.
  • Nós listamos 4 bibliotecas GAN apresentadas

Introdução

Atualmente, GAN é considerada uma das áreas de pesquisa mais interessantes em visão computacional. Sua capacidade de processamento de imagem é incomparável e, ser um cientista de dados, não explorar seria um erro. Mesmo pessoas eminentes como Yann LeCun descreveram os GANs como “a ideia mais interessante em aprendizado de máquina nos últimos 10 anos”.

please-make-a-featured-image-using-this-8311319

Quando trabalhei pela primeira vez com GAN, Eu o desenvolvi do zero usando PyTorch e era uma tarefa tediosa. Fica ainda mais difícil quando o resultado não é satisfatório e você quer tentar outra arquitetura, já que agora você tem que reescrever o código. Mas felizmente, Pesquisadores que trabalham em vários gigantes técnicos desenvolveram várias bibliotecas GAN para ajudá-lo a explorar e desenvolver aplicativos baseados em GAN.

Neste artigo, Vamos ver 4 Bibliotecas GAN interessantes que você definitivamente deve conhecer. O que mais, Vou te dar uma visão geral do GAN, para começar.

Eu recomendo que você consulte nosso completo Programa de visão artificial para começar neste campo.

Tabela de conteúdo

  • Uma rápida visão geral dos GANs
  • Bibliotecas GAN
  • TF-GAN
  • Torch-GAN
  • Mimetismo
  • IBM Toolkit- GAN

Uma rápida visão geral dos GANs

Ian Good Fellow apresentou GAN em 2014 e é um método de aprendizado profundo de última geração. É um membro da família do Modelo Gerativo que passa pelo treinamento do adversário.

A modelagem gerativa é um método poderoso no qual a rede aprende a distribuição dos dados de entrada e tenta gerar o novo ponto de dados com base em uma distribuição semelhante.. Se olharmos para os exemplos de modelos generativos, temos Codificadores Automáticos, máquinas Boltzmann, redes geradoras adversárias, redes bayesianas, etc.

Arquitetura GAN

GANs consistem em duas redes neurais, um gerador GRAMA e um discriminador D. O que mais, esses dois modelos estão envolvidos em um jogo de soma zero durante o treinamento.

A rede do gerador aprende a distribuição dos dados de treinamento. E quando fornecemos ruído aleatório como entrada, gera alguns dados sintéticos que tentam imitar as amostras de treinamento.

Agora aí vem o modelo discriminador (D). Designa um rótulo: Real ou falso para os dados gerados por GRAMA com base na distribuição de dados. Isso significa que a nova imagem vem das imagens de treinamento ou é uma imagem gerada artificialmente.

O caso quando D reconhecer com sucesso a imagem como real ou falsa leva ao aumento da perda do gerador. Do mesmo modo, quando GRAMA consegue construir imagens de boa qualidade semelhantes às reais e engana o D, perda de discriminador aumenta. O que mais, o gerador aprende com o processo e gera imagens melhores e mais realistas na próxima iteração.

Basicamente, pode ser considerado um jogo MIN-MAX para dois jogadores. Aqui, o desempenho de ambas as redes melhora com o tempo. Ambas as redes passam por várias iterações de treinamento. Com o tempo e várias atualizações nos parâmetros do modelo, como pesos e vieses, atingir o estado estacionário, também conhecido como equilíbrio de Nash.

Qual é o equilíbrio de Nash?

O equilíbrio de Nash é um estado estável de um sistema que envolve a interação de diferentes participantes, em que nenhum participante pode vencer por meio de uma mudança unilateral de estratégia se as estratégias dos outros permanecerem inalteradas.

Em última instância, neste jogo de soma zero, podemos gerar com sucesso imagens artificiais ou falsas que se parecem principalmente com o conjunto de dados de treinamento real.

Exemplo-

Vamos ver como os GANs podem ser úteis.

Por exemplo, durante o bloqueio, teve a chance de revisar seu antigo álbum de fotos. Em um momento tão estressante, é uma boa crítica para reviver suas memórias. Mas como este álbum esteve em seu armário por anos, intacto, algumas fotos foram danificadas e isso te deixou triste. E foi exatamente quando você decidiu usar GAN.

A imagem abaixo foi restaurada com sucesso com a ajuda de GAN, usando um método chamado Image Inpainting.

image_inpainting-4463766

Imagem original vs. imagem restaurada

Fonte da imagem: Bertalmío et al., 2000.

A pintura de imagens é a arte de restaurar imagens danificadas reconstruindo as partes que faltam usando as informações de fundo disponíveis.. Esta técnica também é usada para remover objetos indesejados das imagens fornecidas.

Esta foi apenas uma revisão rápida do GAN. Se você quiser saber mais sobre isso, Eu sugiro que você leia os seguintes artigos.

Agora veremos algumas bibliotecas GAN interessantes.

TF-GAN

Tensorflow GAN, também conhecido como TF-GAN, é uma biblioteca python leve de código aberto. Ele foi desenvolvido por pesquisadores de IA do Google para uma implementação GAN fácil e eficaz.

TF-GAN fornece uma infraestrutura bem desenvolvida para treinar e avaliar a Rede Adversarial Gerativa junto com funções de perda efetivamente comprovadas e métricas de avaliação. A biblioteca consiste em vários módulos para implementar o modelo. Fornece chamadas de função simples que um usuário pode aplicar em seus próprios dados sem escrever o código do zero.

É fácil de instalar e usar como outros pacotes como NumPy e pandas, uma vez que fornece o pacote PyPi. Use o seguinte código

#Instalando a biblioteca
pip instalar tensorflow-gan
#importing the library
importar tenorflow_gan como tfgan

A seguir está um código para gerar imagens do conjunto de dados MNIST usando TF-Gan-

# Configure a entrada.
imagens = mnist_data_provider.provide_data(BANDEIRAS.tamanho do batch)
barulho = tf.random_normal([BANDEIRAS.tamanho do batch, BANDEIRAS.noise_dims])

# Construir o gerador e discriminador.
gan_model = tfgan.gan_model(
    generator_fn=mnist.unconditional_generator,  # você define
    discriminator_fn=mnist.unconditional_discriminator,  # você define
    dados_real=imagens,
    generator_inputs=barulho)

# Construa a perda de GAN.
gan_loss = tfgan.gan_loss(
    gan_model,
    generator_loss_fn=tfgan_losses.wasserstein_generator_loss,
    discriminator_loss_fn=tfgan_losses.wasserstein_discriminator_loss)

# Crie as operações de trem, que calculam gradientes e aplicam atualizações aos pesos.
train_ops = tfgan.gan_train_ops(
    gan_model,
    gan_loss,
    generator_optimizer=tf.train.AdamOptimizer(gen_lr, 0.5),
    discriminator_optimizer=tf.train.AdamOptimizer(dis_lr, 0.5))

# Execute as operações de trem no esquema de treinamento alternado.
tfgan.gan_train(
    train_ops,
    ganchos=[tf.train.StopAtStepHook(num_steps=BANDEIRAS.max_number_of_steps)],
    logdir=BANDEIRAS.train_log_dir)

O que eu gosto na biblioteca

  1. Uma coisa importante sobre a biblioteca é que o TF-GAN atualmente suporta Tensorflow-2.0, quer dizer, a versão mais recente do TensorFlow. O que mais, você pode usá-lo de forma eficiente com outras estruturas.
  2. Treinar um modelo de adversário gerador é uma tarefa de processamento pesada, isso costumava levar semanas. TF-GAN é compatível com Cloud TPU. Portanto, o processo de treinamento é concluído em poucas horas. Para saber mais sobre como usar TF-GAN em TPU, pode ver Está tutorial de autores de biblioteca.
  3. Caso você precise comparar os resultados de vários artigos, TF-GAN fornece métricas padrão que tornam mais fácil para o usuário comparar de forma eficiente e fácil diferentes artigos de pesquisa sem qualquer tendência estatística..

A seguir estão alguns projetos implementados com TF-GAN-

O que mais, para saber mais sobre esta interessante biblioteca GAN usada por pesquisadores do Google, Leia o documento oficial.

Torch-GAN

Torch-GAN é uma estrutura baseada em PyTorch para escrever códigos curtos e fáceis de entender para desenvolver GAN. Este pacote consiste em várias redes geradoras de adversários junto com os utilitários necessários para sua implementação..

Geralmente, GANs compartilham um design padrão que tem vários componentes, como o modelo do gerador, o modelo discriminador, a função de perda e as métricas de avaliação. Enquanto Torch GAN imita o design de GANs por meio de uma API simples e permite que os componentes sejam personalizados quando necessário.

screenshot-from-2020-08-24-07-32-34-1229273

Fonte

Esta biblioteca GAN facilita a interação entre os componentes GAN por meio de um treinador altamente versátil que se adapta automaticamente aos padrões e perdas definidos pelo usuário..

Instalar a biblioteca é simples usando pip. Você só precisa usar o comando abaixo e voila.

pip3 instalar tocchgan

Implementação de modelos Torch-GAN

No centro do design, temos um módulo de treinador responsável pela flexibilidade e facilidade de uso. O usuário deve fornecer as especificações exigidas, quer dizer, a arquitetura dos modelos gerador e discriminador, junto com o otimizador associado. O usuário também deve fornecer as funções de perda e métricas de avaliação.

A biblioteca oferece a liberdade de escolher suas especificações a partir da ampla gama disponível ou suas próprias variantes personalizadas. Na imagem a seguir, podemos ver a implementação do DC-GAN apenas em 10 linhas de código, não é surpreendente?

screenshot-from-2020-08-24-07-38-55-6766079

Fonte

O que eu gosto nesta biblioteca GAN?

    1. A ampla variedade de arquitetura GAN que suporta. Você nomeia a arquitetura e você encontrará a implementação TorchGAN dela. Por exemplo, Vanilla GAN, DCGAN, CycleGan, GAN condicional, Rede multi-adversária generativa e muito mais.
    2. Outra característica importante do quadro é sua extensibilidade e flexibilidade.. Torch-GAN é um pacote compreensível. Podemos usá-lo de forma eficiente com funcionalidades integradas ou definidas pelo usuário.
    3. O que mais, fornece exibição de desempenho eficiente por meio de um objeto Logger. Suporta registro de console e visualização de desempenho usando TensorBoard e Vizdom.

Se você quiser ir mais fundo, não se esqueça de ler o documentação oficial de TorchGAN.

Mimetismo

Com o aumento da pesquisa no campo, podemos ver várias implementações GAN. Difícil de comparar várias implementações desenvolvidas usando diferentes estruturas, treinados em diferentes condições e avaliados usando diferentes métricas. Essa comparação é uma tarefa inevitável para os pesquisadores. Portanto, esta foi a principal motivação por trás do desenvolvimento do Mimetismo.

mimcry-4050562

fonte

Mimetismo é uma biblioteca PyTorch leve para reprodutibilidade GAN. Fornece funcionalidades comuns necessárias para treinar e avaliar um modelo Gan. Isso permite que os pesquisadores se concentrem na implementação do modelo, em vez de escrever o mesmo código clichê repetidamente..

Esta biblioteca GAN fornece a implementação padrão de várias arquiteturas GAN, como DCGAN, Wasserstein GAN com penalidade gradiente (WGAN-GP), GAN auto-monitorado (SSGAN), etc. mesmo tamanho de modelo, treinado em condições semelhantes.

Como as outras duas bibliotecas, podemos facilmente instalar o Mimicry usando pip e está pronto para usar.

pip instalar tocha-mimetismo

Aqui está a implementação rápida de SNGAN usando mimetismo

importar tocha
importar torch.optim Como ótimo
importar torch_mimicry Como mmc
a partir de torch_mimicry.nets importar Sngan


# Objetos de manipulação de dados
dispositivo = tocha.dispositivo('milagres:0' E se tocha.milagres.está disponível() outro "CPU")
conjunto de dados = mmc.conjuntos de dados.load_dataset(raiz='./datasets', nome='cifar10')
dataloader = tocha.útil.dados.DataLoader(
        conjunto de dados, tamanho do batch=64, embaralhar=Verdade, num_workers=4)

# Defina modelos e otimizadores
netG = Sngan.SNGANGenerator32().para(dispositivo)
netD = Sngan.SNGANDiscriminator32().para(dispositivo)
optD = ótimo.Adão(netD.parametros(), 2e-4, betas=(0.0, 0.9))
optG = ótimo.Adão(netG.parametros(), 2e-4, betas=(0.0, 0.9))

# Comece a treinar
treinador = mmc.Treinamento.Treinador(
    netD=netD,
    netG=netG,
    optD=optD,
    optG=optG,
    n_dis=5,
    num_steps=100000,
    lr_decay='linear',
    dataloader=dataloader,
    log_dir='./log/example',
    dispositivo=dispositivo)
treinador.Comboio()

Outro recurso importante do mimetismo é que ele fornece suporte Tensorboard para visualização de desempenho. Portanto, você pode criar uma curva de perda e probabilidade para monitorar o treinamento. Pode exibir imagens geradas aleatoriamente para verificar a variedade.

Mimetismo é um desenvolvimento interessante que visa ajudar os pesquisadores. Eu irei pessoalmente sugerir que você leia o Papel de imitação.

IBM GAN Toolkit

Até agora, vimos algumas bibliotecas GAN muito eficientes e de ponta. Existem muitas outras bibliotecas GAN como Keras-GAN, PyTorch-GAN, PyGAN, etc. Quando olhamos de perto, vemos algumas coisas em comum entre essas bibliotecas GAN. Eles usam muitos códigos. Se você quiser usar algum deles, deve ser bem versado em

  • O conhecimento e implementação do GAN.
  • Fluente em Python
  • Como usar o quadro particular

É um pouco difícil saber tudo para um programador de software. Para resolver o problema, aqui temos uma ferramenta GAN fácil de usar: IBM GAN-Toolkit.

O GAN Toolkit fornece uma variante altamente flexível, sem código, para implementar modelos GAN. O que mais, fornece um alto nível de abstração para implementar o modelo GAN. Aqui, o usuário só precisa fornecer detalhes do modelo usando o arquivo de configuração ou o argumento da linha de comando. Então o framework cuidará de todo o resto. Eu pessoalmente achei muito interessante.

As etapas a seguir irão ajudá-lo com a instalação:

  1. Em primeiro lugar, nós clonamos o código
    $ https clone git://github.com/IBM/gan-toolkit
    $ CD gan-toolkit

  2. Em seguida, instale todos os requisitos
    $ pip install -r requisitos.txt

    Agora você está pronto para usar. Finalmente, para treinar a rede, temos que dar a ela um arquivo de configuração no formato JSON como segue

    { 
            "gerador":{
                "escolha":"gan"
            },
            "discriminador":{
                "escolha":"gan"
            },
            "data_path":"datasets / dataset1.p",
            "metric_evaluate":"MMD"
        }
    $ python main.py --config my_gan.json

O kit de ferramentas implementa várias arquiteturas GAN como vanilla GAN, DC-GAN, GAN condicional e mais.

Vantagens do GAN Toolkit

  1. Fornece uma maneira livre de código para implementar a tecnologia de visão computacional de próxima geração. Apenas um arquivo JSON simples é necessário para definir uma arquitetura GAN. Não é necessário escrever o código de treinamento, pois a estrutura cuidará disso.
  2. Fornece suporte para várias bibliotecas, quer dizer, PyTorch, Keras e TensorFlow também.
  3. O que mais, no kit de ferramentas GAN, temos a liberdade de misturar e combinar facilmente os componentes de diferentes modelos. Por exemplo, pode usar o modelo de gerador DC-GAN, o discriminador C-GAN e o processo de treinamento vanilla gan.

Agora é só ler o documento e jogue GANs do seu jeito.

Notas finais

GANs são um campo ativo de pesquisa. Vemos atualizações regulares quase que semanalmente na próxima versão do GAN. Você pode verificar o trabalho que os pesquisadores fizeram aqui.

Para concluir, Neste artigo, discutimos o 4 Bibliotecas GAN mais importantes que podem ser facilmente implementadas em Python. Diariamente, vemos desenvolvimentos tremendos e vemos novas aplicações de GAN. O artigo a seguir explica alguns desses aplicativos incríveis:

Quais são as bibliotecas GAN que você usa? Você acha que eu deveria ter incluído alguma outra biblioteca? Deixe-nos saber nos comentários abaixo!.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.