Este proyecto consiste clasificar imágenes usando una red neuronal convolucional (CNN). Para ello utilizamos la arquitectura de LeNet ya que es una de las primeras usadas para clasificar imágenes cuyos resultados son óptimos.
- Dos conjuntos de capas convolucionales, de activación y agrupación. Seguidas de dos capas fully connected y otra de activación. Finalmente un clasificador con función softmax
- 25 épocas
- batch size de 32
- Imágenes pre-procesadas 28x28 - grises
Se recomienda usar un entorno virtual para instalar las dependencias del proyecto
virtualenv env --python python3
El listado de dependencias se encuentra en el archivo requirements.txt, para instalarlo facilmente usaremos pip
pip install -r requirements.txt
Es necesario tener la siguiente estructura de archivos para poder entrenar la red:
.
├── ...
├── images
│ ├── meme
│ │ └── ... # Aquí deben estar las imágenes de memes
│ ├── not_meme
│ └── ... # Aquí deben estar las imágenes que no son memes
└── ...
Para realizar el entrenamiento de la red se debe ejecutar el script train_network.py
python train_network.py
Este script se encargará de cargar las imágenes, procesarlas, entrenar la cnn y crear plots de los resultados del entrenamiento. Finalmente como resultado creará un archivo llamado meme_not_meme.model el cual contendrá nuestra red ya entrenada, adicionalmente creará los archivos plot.png y confusion.png que contendrán los resultados del entrenamiento.
En este proyecto ya se encuentra un archivo meme_not_meme.model el cual contiene ya nuestro resultado actual del entrenamiento.
Tambien hay un archivo meme_no_meme.ipynb el cual puede ser revisado usando Jupyter notebook o abriendolo desde el repositorio en github.com.
Para analizar un archivo y ver el porcentaje de coincidencia si es meme o no lo es, utilizamos el archivo test_network.py ejecutandolo con el siguiente comando
python test_network.py --model meme_not_meme.model --image ./path/to/image.jpg
Como resultado tendremos un plot que indicará el porcentaje de coincidencia; para cerrarlo presione 0.
Para ejecutar la interfaz y clasificar toda una carpeta de imágenes, use el archivo interface5.py
python interface5.py
Llenar el cuadro de texto con la ruta completa de la carpeta a ser analizada y dar click en el botón process. Finalmente el script moverá las imágenes que considere memes a una subcarpeta que creará con el nombre de "memes".
.
├── ...
├── galeria
│ └── ... # Aquí se encuentran todas las imágenes mezcladas
└── ...
.
├── ...
├── galeria
│ ├── ... # Aquí se encuentran los no memes
│ └── memes
│ └── ... # Aquí se encuentran los memes
└── ...
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.