Você está na página 1de 10

Classificao de Gnero por Foto utlizando Multilayer

Perceptron
Rodrigo S. Rodrigues, Felipe R. R. Magalhes
Departamento de Computao
Centro Federal de Educao Tecnolgica de Minas Gerais (CEFET-MG)
Av. Amazonas, 7675 - Nova Gameleira - Belo Horizonte MG - Brasil
rodrigostsrodrigues@gmail.com, felipe_rrm@hotmail.com

Resumo. Este trabalho como objetivo a construo de um sistema


computacional baseado em rede neural artificial que dada uma foto de uma
pessoa seja capaz de classificar o seu gnero. Foram utilizados dois datasets
e desenvolvidas duas solues em ambientes diferentes. Aps o treinamento
ambas as solues no foram capazes de classificar corretamente as fotos. A
incapacidade da classificao se deve a escolha de features que no
diferenciam uma foto de homem de uma foto de mulher.

1. Introduo
Este trabalho teve como objetivo a construo de um sistema computacional baseado em
rede neural artificial que dada uma foto de uma pessoa seja capaz de classificar o seu
gnero.
O desenvolvimento ocorre em duas etapas distintas que resultaram em dois
sistemas distintos com o mesmo objetivo. A primeira etapa (soluo I) foi construda em
ambiente Android com linguagem Java. A etapa dois (soluo II) por sua vez foi
codificada em um computador tipo desktop, para sanar deficincias de memria de um
dispositivo Android, com a linguagem Python.

2. Datasets utilizados
Para a realizao deste trabalho foram obtidos dois datasets contendo faces de invduos
para a identificao.
2.1. Labeled Faces in the Wild
O dataset lfw (Huang, Jain, & Learned-Mill, 2016) contm 13233 imagens coletadas da
internet de 5749 pessoas. As imagens so separadas em pastas pelos nomes dos
indivduos e no existe separao por gnero.
Exemplo de fotos deste dataset podem ser vistas na Figura 1.

Figura 1. Exemplo de imagens de lfw

2.2. Faces94
O dataset Faces94 (Spacek, 2016) consiste de fotos de 153 indivduos, sendo 20
imagens de cada um deles. Os dados so separados por gnero e contm 20 mulheres e
133 homens. Os arquivos tem resoluo de 180 x 200 pixels em formato .jpg e esto
separarados em pastas de acordo com o gnero.
As capturas tem fundo verde, nenhuma escala, pouca alterao de inclinao, o
mnimo de variao nas posies dos rostos, nenhuma mudana de iluminao e
diversas alteraes de expresses faciais. Exemplo de fotos deste dataset podem ser
vistas na Figura 2.

Figura 2. Examplo de imagens de faces94

3. Dependncias de cdigo
Para a construo, edio e execuo dos cdigos deste trabalho necessria a
instalao de bibliotecas no ambiente de desenvolvimento.
4.1. Soluo I - Ambiente android

Cawc-camera (Murph, 2016)


Android Camera API.

Glide (Bump Technologies, 2016)


Biblioteca de carregamento de imagen e caching para Android focada em
rolagem suave.

Multi-Layer-Perceptron (Jimenez, 2016)


Multi-Layer Perceptron implementado em Java.

Neuroph (Sevarac, et al., 2016)


Biblioteca de rede neural e ferramente GUI que oferece criao, treinamento e
salvamento de redes neurais.

Gson (Google, 2016)


Biblioteca de serializao/desserializao para converso entre JSON e objetos
JAVA.

4.2. Soluo II - Ambiente Python

Requests (Reitz, 2016)


Biblioteca de requisioes HTTP para Python.

OpenCV (OpenCV, 2016)


Biblioteca de viso computacional e aprendizado de mquina.

NumPy (NumPy Developers, 2016)


Biblioteca para processamento de vetores.

SciPy (SciPy Developers, 2016)


Biblioteca cientfica para Python.

PyBrain (Schaul, et al., 2016)


Biblioteca modular de aprendizado de mquina para Python.

Scikit-learn (Cournapeau, et al., 2016)


Biblioteca de aprendizado de mquina em Python.

Milk (Coelho, 2016)


Toolkit para aprendizado de mquina em Python.

Neurolab (Evgenij, 2016)


Biblioteca de redes neurais para Python.

4. Metodologia
4.3. Obteno dos gneros para o dataset lfw
Como o dataset lfw no possui identifao de gnero para as fotos foi necessrio obter o
gnero de cada foto atravs da utilizao de outro recurso. Como as fotos so
identificadas por nomes essa informao pode ser utilizada para determinar o gnero de
cada pessoa.
Foi utilizado um servio que determina a probabilidade de gnero de um nome,
Genderize.io (Strmgren, 2016), para obter o gnero de cada nome prprio.
Exemplo de obteno do gnero no servio para o nome Rogrio.

https://api.genderize.io/?name=rogerio
O resultado em JSON para essa requisio :
{"name":"rogerio","gender":"male","probability":"0.99","count":68}
Que indica a probabilidade de rogerio ser o nome de um homem ser de 0,99.
Foi definida que a probalidade aceitvel para considerar o gnero de um nome
deveria ser de pelo menos 0.9. Respeitadas as restries de limite de requisies do
servio foram encontrados 680 nomes que atendiam a probabilidade mnima desejada.
4.2. Ambiente Android
O aplicativo foi feito para funcionar em smartphones com o sistema operacional
Android e foi desenvolvido de forma nativa (utilizando a linguagem de programao
Java, no Android Studio). O aplicativo tem o propsito de classificar uma foto tirada na
hora em grupos previamente definidos dentro de sua prpria interface.
O aplicativo permite a criao de grupos, nos quais so inseridos arquivos de
imagens que sero utilizados para treinar a rede. Os grupos podem ser criados e as
imagens de treinamento inseridas tambm por meio do sistema de arquivos. Para criar
grupos, basta inserir uma pasta com o nome do grupo no seguinte caminho, a partir da
pasta raiz do dispositivo: \Pictures\AndroidClassification.
A rede escolhida para solucionar o problema de classificao foi o Multilayer
Perceptron, com algoritmo de treinamento backpropagation utilizando a tcnica de
otimizao do gradiente descendente.
A rede foi modelada de modo que cada neurnio da camada de entrada recebesse
um pixel das fotos para realizar o treinamento e a classificao. Desse modo, todas as
imagens includas nos grupos tm de passar por um pr-processamento, de modo a
deixa-las consistentes com o que esperado na rede.
Durante o pr-processamento, as fotos so convertidas para uma escala de cinza
(pois as fotos coloridas iriam exigir trs vezes mais neurnios, um para cada uma das
cores do RGB), e redimensionadas para uma resoluo de 30 pixels de largura e 30
pixels de altura. O resultado do pr-processamento de uma foto pode ser observador na
Figura 3. Essas configuraes de resoluo da foto foram obtidas atravs de testes,
valores maiores que 30x30 ultrapassavam o limite mximo de memria permitido.

Figura 3. Foto de G. W. Bush aps pr-processamento

Para imagens de 30 pixels por 30 pixels, tm-se, no total, 900 pixels, o que
resultou em uma camada de entrada na rede de 900 neurnios. Escolhemos trabalhar
apenas com uma camada oculta (hidden layer), tambm com 900 neurnios. A camada
de sada da rede tem o nmero de neurnios equivalente ao nmero de grupos
existentes.
Durante o treinamento, o vetor de sada esperada para cada foto preenchido
com 0s, exceto pela posio que representa seu grupo. Desse modo, aps o treinamento,
ao se entrar com uma foto na rede, espera-se obter na sada dos neurnios da camada de
sada valores que representem o pertencimento da foto a cada grupo. O treinamento da
rede feito at se chegar em um valor de erro desejado, que, pela literatura, sugerimos
ser menor ou igual a 0.001.
4.3. Ambiente Python
Para desenvolver uma soluo que no tivesse limitaes de memria da plataforma
mobile foi realizada a construo do sistema em desktop. Para utilizao da biblioteca
OpenCV na obteno de features das fotos foi escolhida a linguagem Python.
Foi definida a utilizao como feature nas fotos os pontos do rosto, como nariz,
olhos, bocas e cabelos. Uma forma de obter esses pontos a identificao dos pontos de
borda da imagem.
Foi utilizada a mplementao nativa do OpenCV de detector de borda de ShiTomasi. Esse detector exige que as imagens estejam em preto e branco ou escala de
cinza, por isso, as fotos so transformadas para escala de cinza antes de passarem por
esse processo. Os resultados da obteno de 50 features com distncia mnima de 10
pixels com a utilizao desse detector pode ser observada nas Figuras 4 e 5. .

Figure 4. Features obtidos de uma foto de faces94

Figure 5. Features obtidos de uma foto de lfw

Os pontos obtidos nessa etapa so ordenados em ordem crescente da distncia


em relao ao meio da imagem e so inseridos na entrada da rede neural com separao
de x e y (cada um se torna uma entrada). Portanto as redes neurais possuem o nmero de
features vezes dois entradas.
As redes utilizadas foram de trs camadas, com a primeira camada de tamanho
igual ao nmero de features, a segunda camada com a metade do tamanho da primeira e
a camada de sada com um neurnio.
A sada da rede varia entre 0 e 1. O valor 0 identifica um homem e o valor 1
identifica uma mulher.
Foram realizados treinamentos com 10, 25 e 50 features. As condies de parada
de treinamento foram definidas como erro menor que 0.01 e o nmero mximo de
pocas de treinamento como 500. Para o dataset faces94 foram utilizadas fotos de 5
mulheres e 25 homens no treinamento e para o dataset lfw foram utilizados 150 nomes
de ambos dos gneros.

5. Resultados
Na soluo I os testes, incluiam dois grupos, um representando homens e outro
representando mulheres, foram inseridas 10 fotos no grupo de mulheres e 8 fotos no
grupo de homens para realizar o treinamento.
O treinamento estava demorando muito. Ajustes na taxa de aprendizado tambm
foram feitos, mas, para valores maiores que utilizado, o erro tendia ao infinito (devido
ao gradiente descendente).
Nossos testes foram feitos em um smartphone com hardware highend, com
processador Snapdragon 801 e 3Gb de memria RAM. Ao tentar classificar imagens, a
rede se mostrou extremamente ineficiente, no retornando os valores esperados, como
pode ser observado na Figura 6.

Figure 6. Resultado de teste na Soluo I

Os treinamento da Soluo II foram todos interrompidos por nmero mximo de


pocas de treinamento, o que indica que a soluo desenvolvida foi incapaz de reduzir o
erro nmero de pocas estipular ou que o erro se torna estvel acima do limiar desejado.
A Figura 7 mostra o erro no treinamento de uma rede utilizando 10 features.

Figure 7. Features obtidos de uma foto de faces94

A Figura 8 mostra o erro no treinamento de uma rede utilizando 25 features.

Figure 8. Features obtidos de uma foto de faces94

A Figura 9 mostra o erro no treinamento de uma rede utilizando 50 features.

Figure 9. Features obtidos de uma foto de faces94

O Quatro mostra o erro de cinco execues aps as 500 pocas de treinamento nas
configuraes testas.
Quadro 1. Erros aps os treinamentos das redes

Features /
Execuo

Mdia

10

0,12486

0,14770

0,12497

0,12485

0,12501

0,12948

25

0,13968

0,12500

0,13387

0,12647

0,12654

0,13031

50

0.12949

0.12656

0.13992

0.12499

0.12500

0.12919

Aps os treinamentos da rede na Soluo II nenhuma das configuraes


utilizadas foi capaz de classificar corretamente as fotos testadas. Em todos os testes as
fotos foram classificadas como sendo fotos de homens. possvel observar que o erro

se torna estvel bem acima do limiar desejado indicando que o conjunto de dados de
treinamento incapaz de permitir um treinamento correto da rede neural.

6. Concluso
Apesar de ser uma soluo muito prtica poder pegar seu celular do bolso, tirar uma
foto, e j obter a classificao dela, de acordo com grupos previamente estabelecidos,
aparentemente o hardware dos smartphones ainda no nos permitem isso.
O objetivo inicial do trabalho de classificar o gnero a partir de fotos no foi
alcanado em nenhumas das solues. Isso se deve s features utilizadas, que no foram
capazes de diferenciar os indivduos entre homem e mulher. Tanto homem quanto
mulher possuam caractersticas semelhantes por causa do processo escolhido para
gerao de features.

7. Melhorias propostas e trabalhos futuros


Para resolver o problema da falta de memria dos telefones uma soluo possvel seria
passar toda a lgica de treinamento e gerenciamento da rede para um backend, com o
qual o smartphone se comunicaria apenas para enviar a foto e receber os resultados da
classificao. Isso iria permitir redes muito mais complexas e resultados mais precisos.
Algumas melhorias tambm poderiam ser implementadas durante o prprocessamento, de modo a facilitar o processo de treinamento, como a retirada do
background das imagens, por exemplo, mantendo apenas a pessoa na foto.
Para melhorar o resultado da classficao pode ser utilizada uma base de dados
mais homognea j que as bases utilizadas apresentavam nmero muito maior de
homens do que de mulheres.
Durante a apresentao do trabalho foram indicadas duas tcnicas que poderiam
melhorar os resultados da rede neural. Uso de PCA no vetor de pixels de escala de cinza
para reduzir o nmero de entradas e utilizao das entradas mais relevantes para os
dados utilizados no treinamento e o uso de transformadas Wavelet para obteno de
features.
8. Arquivos
Junto deste documento, no mesmo pacote .zip, esto os cdigos-fonte desenvolvidos
para o trabalho. Os dataset contendo as fotos no esto inclusos porque tem tamanho
superior ao limite permite pelo moodle mas podem ser obtidos a partir dos links nas
referncias.
Os cdigos esto nas pastas Codigos/AndroidGenderClassification,
Codigos/PythonGenderClassification e Codigos/PythonLfwGenderize. As apresentaes
esto na pasta Apresentaes.

9. Referncias
Bump Technologies. (2016, Junho 30). bumptech/glide: An image loading and caching
library for Android focused on smooth scrolling. Retrieved from GitHub:
https://github.com/bumptech/glide

Coelho, L. P. (30 de Junho de 2016). milk 0.6.1. Fonte: Python Package Index:
https://pypi.python.org/pypi/milk/
Cournapeau, D., Brucher, M., Pedregosa, F., Varoquaux, G., Gramfort, A., & Michel, V.
(2016, Junho 30). scikit-learn: machine learning in Python . Retrieved from
scikit-learn: machine learning in Python: http://scikit-learn.org/stable/
Evgenij, Z. (30 de Junho de 2016). Neurolab 0.3.5. Fonte: Python Package Index:
https://pypi.python.org/pypi/neurolab/0.3.5
Google. (30 de Junho de 2016). google/gson: A Java serialization/deserialization
library that can convert Java Objects into JSON and back. Fonte: GitHub:
https://github.com/google/gson
Huang, G. B., Jain, V., & Learned-Mill, E. (30 de Junho de 2016). LFW Face Database.
Fonte: Computer Vision Lab - University of Massachussets: http://viswww.cs.umass.edu/lfw/
Jimenez, M. (2016, Junho 30). jimmikaelkael/multi-layer-perceptron: This is small
example of the Multi Layer Perceptron implemented in Java. It can be used for
educational purpose or experiments on this kind of neural networks. Retrieved
from GitHub: https://github.com/jimmikaelkael/multi-layer-perceptron
Murph, M. (2016, Junho 30). commonsguy/cwac-camera: CWAC-Camera: Taking
Pictures.
Made
Sensible.
Retrieved
from
GitHub:
https://github.com/commonsguy/cwac-camera
NumPy Developers. (2016, Junho 30). NumPy - NumPy. Retrieved from NumPy:
http://www.numpy.org/
OpenCV. (2016 de Junho de 2016). OpenCV. Fonte: OpenCV: http://opencv.org/
Reitz, K. (30 de Junho de 2016). Requests: Http for Humans. Fonte: Requests: Http for
Humans: http://docs.python-requests.org/en/master/
Schaul, T., Bayer, J., Wierstra, D., Sun, Y., Felder, M., Sehnke, F., . . . Schmidhuber, J.
(2016, Junho 30). PyBrain. Retrieved from PyBrain: The Python Machine
Learning Library: http://pybrain.org/
SciPy Developers. (30 de Junho de 2016). SciPy.org - SciPy.org. Fonte: SciPy.org:
https://www.scipy.org/
Sevarac, Z., Goloskokovic, I., Tait, J., Carter-Greaves, L., Morgan, A., & Steinhauer, V.
(2016, Junho 30). Java Neural Network Framework. Retrieved from
Sourceforge: http://neuroph.sourceforge.net/
Spacek, L. (30 de Junho de 2016). Face Recognition Data. Fonte: Computer Vision
Science Research Projects: http://cswww.essex.ac.uk/mv/allfaces/faces94.html
Strmgren, C. (2016, Junho 30). Genderize.io. Retrieved from Genderize.io:
https://genderize.io/

Você também pode gostar