Este repositório contém uma implementação PyTorch do algoritmo Deep Dream (:link: blog de Mordvintstev et al.).
Possui suporte completo para uso de linha de comando e um Jupyter Notebook !
E isso lhe dará o poder de criar essas imagens estranhas e de aparência psicodélica:
Nada mal, hein?
Eu sugiro fortemente que você comece com o notebook Jupyter que criei!
Observação: é muito grande, aproximadamente 10 MB, portanto, podem ser necessárias algumas tentativas para carregá-lo no navegador aqui no GitHub.
Resumindo, o algoritmo maximiza as ativações das camadas de rede escolhidas fazendo uma subida gradiente .
Então, a partir de uma imagem de entrada como a da esquerda depois de “sonhar”, obtemos a imagem da direita:
Quem diria que as redes neurais tinham essa criatividade escondida dentro de si? ?
A maioria dos repositórios originais do Deep Dream foram escritos em Caffe e os escritos em PyTorch são geralmente muito difíceis de ler e entender. Este repositório é uma tentativa de fazer o repositório DeepDream mais limpo que eu conheço + está escrito em PyTorch! ❤️
Aqui estão alguns exemplos que você pode criar usando este código!
Ao usar camadas mais superficiais de redes neurais, você obterá padrões de nível inferior (arestas, círculos, cores, etc.) como saída:
Aqui as 2 primeiras imagens vieram do ResNet50 e a última veio do GoogLeNet (ambas pré-treinadas no ImageNet).
Ao usar camadas de rede mais profundas, você obterá padrões de nível superior (olhos, focinhos, cabeças de animais):
O primeiro e o terceiro foram criados usando VGG 16 (ImageNet) e o do meio usando ResNet50 pré-treinado no Places 365.
Se mantivermos todos os outros parâmetros iguais, mas trocarmos os pesos pré-treinados, obteremos o seguinte:
Esquerda: ResNet50-ImageNet (podemos ver mais características de animais) Direita: ResNet50-Places365 (coisas construídas por humanos, etc.).
O sonho é realizado em múltiplas resoluções de imagens empilhadas "verticalmente" (chamamos isso de pirâmide de imagens ).
Indo da esquerda para a direita o único parâmetro que mudou foi o tamanho da pirâmide (da esquerda para a direita: 3, 7, 9 níveis).
Brincar com a proporção da pirâmide tem um efeito semelhante/relacionado - a ideia básica é que a área relativa da imagem que os neurônios mais profundos podem modificar e "ver" (o chamado campo receptivo da rede) está aumentando e ficamos cada vez maiores características como olhos saltando (da esquerda para a direita: 1,1, 1,5, 1,8):
Nota: você pode ver os parâmetros exatos usados para criar essas imagens codificadas no nome do arquivo!
Não deixe de conferir o notebook Jupyter!, já expliquei isso detalhadamente.
Aqui estão mais alguns exemplos que você pode criar usando este código!
A ideia aqui é que seja o que for que a rede sonhe, apenas alimente isso de volta à sua entrada e aplique uma transformação geométrica.
Se aplicarmos apenas o zoom central, obteremos isto:
Aplicar o zoom central e ao mesmo tempo aplicar uma rotação de 3 graus por quadro produz o seguinte:
Finalmente, se fizermos uma tradução simples (5 px por quadro da parte superior esquerda para a parte inferior direita):
Esperamos que isso não tenha quebrado seu cérebro - parece a web 1.0 do início dos anos 2000. Tenha paciência comigo.
Em vez de realimentar a saída na entrada, apenas aplicamos o algoritmo por quadro e aplicamos alguma combinação linear:
A mesclagem linear apenas combina o quadro atual com o último para reduzir a cintilação (aqui usei 0,85)
Nota: todas as imagens/GIFs do deepdream foram produzidas por mim, os créditos dos artistas das imagens originais são fornecidos abaixo.
git clone https://github.com/gordicaleksa/pytorch-deepdream
cd path_to_repo
conda env create
no diretório do projeto (isso criará um novo ambiente conda).activate pytorch-deepdream
(para executar scripts em seu console ou configurar o interpretador em seu IDE)É isso! Ele deve funcionar imediatamente executando o arquivo Environment.yml que lida com dependências.
Nota: Se você deseja usar as funções de vídeo que possuo, você precisará do ffmpeg no caminho do sistema.
O pacote PyTorch pip virá com alguma versão do CUDA/cuDNN, mas é altamente recomendável que você instale um CUDA para todo o sistema com antecedência, principalmente por causa dos drivers da GPU. Também recomendo usar o instalador Miniconda como forma de obter o conda em seu sistema. Siga os pontos 1 e 2 desta configuração e use as versões mais atualizadas do Miniconda e CUDA/cuDNN para o seu sistema.
Basta executar jupyter notebook
em seu console Anaconda e ele abrirá uma sessão em seu navegador padrão.
Abra The Annotated DeepDream.ipynb
e você está pronto para jogar!
Nota: se você obtiver DLL load failed while importing win32api: The specified module could not be found
Basta fazer pip uninstall pywin32
e então pip install pywin32
ou conda install pywin32
deve consertar!
Você só precisa vincular o ambiente Python criado na seção de configuração.
Navegue para/ative seu ambiente se estiver usando o Anaconda (e espero que sim) e você pode usar os comandos que linkei abaixo.
Dica: Coloque suas imagens/vídeos dentro do diretório data/input/
e você poderá simplesmente referenciar seus arquivos (imagens/vídeos) pelo nome em vez de usar caminhos absolutos/relativos.
Para criar algumas imagens estáticas do Deep Dream, execute o seguinte comando:
python deepdream.py --input <img_name> --img_width 600
Isso usará as configurações padrão, mas você obterá imediatamente um resultado significativo salvo em:
data/out-images/VGG16_EXPERIMENTAL_IMAGENET/
Nota: o diretório de saída mudará dependendo do modelo e dos pesos pré-treinados que você usar.
Para obter o vídeo Ouroboros de 30 quadros pronto para uso, faça o seguinte:
python deepdream.py --input <img_name> --create_ouroboros --ouroboros_length 30
Ele irá despejar os quadros intermediários em data/out-videos/VGG16_EXPERIMENTAL_IMAGENET/
e salvará o vídeo final em data/out-videos
.
Para criar um vídeo do Deep Dream, execute este comando:
python deepdream.py --input <mp4 video name>
Ele irá despejar os quadros intermediários em data/out-videos/tmp_out
e salvará o vídeo final em data/out-videos
.
Bem, divirta-se brincando com este projeto! Aqui estão alguns resultados adicionais lindos:
Uma GPU com mais de 2 GB será mais que suficiente.
Você poderá criar imagens DeepDream, Ouroboros e vídeos DeepDream.
Se você não tiver uma GPU, o código será executado automaticamente na CPU, mas um pouco mais lento (especialmente para vídeos).
Se você está tendo dificuldades para entender o DeepDream, fiz uma visão geral do algoritmo neste vídeo:
E também o Jupyter Notebook que criei é o melhor lugar para começar!
Achei esses repositórios úteis (durante o desenvolvimento deste):
Encontrei as imagens que estava usando aqui:
Outras imagens já são clássicos nos mundos NST e DeepDream.
Locais 365 modelos pré-treinados vieram deste repositório incrível.
Se você achar este código útil para sua pesquisa, cite o seguinte:
@misc{Gordić2020DeepDream,
author = {Gordić, Aleksa},
title = {pytorch-deepdream},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/gordicaleksa/pytorch-deepdream}},
}
Se você gostaria de ter mais conteúdo relacionado à IA em sua vida? Considere: