Grupo: HPC: High Phofocas & Condiments
Integrantes: Alice Barbarino Santos, Bruno Ferreira Brischi e Maria Eduarda de Oliveira Crist
Instituição: Ilum - Escola de ciência
Este GitHub compõe um dos dois trabalhos finais de Redes Neurais e Algoritmos Genéticos, disciplina ministrada por Daniel Roberto Cassar na Ilum - Escola de Ciências. Dessa forma, esse projeto busca reconstruir imagens usando uma implementação de Algoritmos Genéticos com python.
- GA reconstruidor.ipynb: Jupyter Notebook que apresenta o algoritmo genético e sua implementação.
- resultados/: diretório que possui todas as imagens que foram obtidas pelo callback durante a execução do algoritmo.
- image_test.py: classe da referência [1] para criar e manipular imagens.
- elitism_callback.py: classe da referência [1] para modificar a função
eaSimple
dadeap
, implementando elitismo e callback. - callback.py: classe adaptada da
elitism_callback.py
, removendo o sistema de elitismo e deixando apenas o callback_. - Mona_Lisa_head.png: imagem que será usada como teste do algoritmo genético.
- HPC_logo: Logo da equipe para exibi-lá no github e no notebook.
- images: diretório que contém os resultados do algoritmo a cada 100 gerações.
- comparativo_livro.png: captura de tela da referência [1] para ser exibida no notebook.
Algoritmos genéticos são ferramentas poderosas inspirados na biologia e que auxiliam na resolução de problemas de otimização, sendo muito populares pela sua capacidade de evoluirem e conseguirem soluções melhores com o decorrer do tempo, sendo uma alternativa aos métodos de otimização por busca em grade e busca aleatória [3][4]. Assim, a reconstrução de imagens é um método importante em processamento de imagem, já que pode ser aplicada em recuperar imagens corrompidas e em redução de ruído [2]. Então, propomos com esse projeto fazer uma implementação do algoritmo proposto pelos autores da referência [1], mas tentando realizar mudanças para melhorar a convergência da solução e aperfeiçoá-lo.
É necessário o python instalado, além do Jupyter habilitado com as bibliotecas: PIL
, skimage
, deap
, IPython
, cv2
(OpenCV), matplotlib
, numpy
, os
, seaborn
e random
, que são usadas em momentos variados do código.
As principais bibliotecas utilizadas nesse trabalho são:
PIL
para criar imagens e "desenhar" polígonos nela.skimage
para computar o SSIM (uma das funções de fitness) e processar imagens.cv2
para usar color maps RGB na imagem criada.matplotlib
para plotar as imagens e gráficos de resultado.deap
para construir e implementar todo o algoritmo genético.IPython
para visualização de imagem em formato PIL.random
para gerar valores aleatórios.os
para criar diretórios e salvar as imagens do resultado.seaborn
para definir um aspecto pontual do plot do resultado.
Nesse repositório, o usuário tem acesso à um notebook executável, que pode ser baixado e executado pelo usuário, com o intuito de que ele entenda passo a passo da construção do algoritmo genético, além de acompanhar sua evolução. Por já apresentar a rede neural treinada, o usuário pode usufruir desse notebook para fazer previsões por si só, desfrutando do modelo apresentado.
Obs.: o notebook foi executado em um Lenovo ThinkPad E14 i5, demorando algumas horas para sua execução completa; devido ao fato de ser um código pesado, recomendamos seu uso em uma máquina com um bom processador.
[1] Wirsansky, E. (2020). Hands-on genetic algorithms with Python: applying genetic algorithms to solve real-world deep learning and artificial intelligence problems. Packt Publishing Ltd.
[2] Mirjalili, S., Song Dong, J., Sadiq, A. S., & Faris, H. (2020). Genetic algorithm: Theory, literature review, and application in image reconstruction. Nature-inspired optimizers: Theories, literature reviews and applications, 69-85.
[3] Notebok 1.3 e 1.5 da disciplina de Algoritmos Genéticos, de autoria do professor.
[4] Notebook 2.3 da disciplina de Algoritmos Genéticos, de autoria do professor.