240 likes | 341 Views
Detector de barba em fotografias. Redes Neurais/Inteligência Artificial Gean Paulo Barros Kláudio Henrique M. Medeiros Laura Dutra de Menezes. Definição do problema. Em bancos de dados com muitas imagens, é importante nos apoiarmos em algumas características para separar os dados.
E N D
Detector de barba em fotografias Redes Neurais/Inteligência Artificial Gean Paulo Barros Kláudio Henrique M. MedeirosLaura Dutra de Menezes
Definição do problema • Em bancos de dados com muitas imagens, é importante nos apoiarmos em algumas características para separar os dados. • Se a quantidade de dados for muito grande, fica inviável para um humano separar manualmente.
Descrição do projeto • O projeto consiste na construção e treinamento de uma rede neural que classifique as pessoas em imagens passadas para ela como barbadas ou não.
Estratégias para resolução • Para resolver o problema, usamos técnicas de Visão Computacional, Inteligência Artificial e Redes Neurais. • Visão Computacional: detecção de faces, segmentação de imagens e extração de características. • Redes Neurais: uso da abordagem Multi-LayerPerceptron, backpropagation.
Estratégias para resolução • Durante este projeto, duas estratégias foram utilizadas. • Usamos um limiar para binarização da imagem, uma máscara de pesos e treinamos a rede. Uma pessoa seria classificada como barbada se a taxa de pixels pretos após a binarização fosse alto o suficiente. • Usamos a técnica de Local BinaryPatterns (LBP) para calcular o valor de nível de cinza de um pixel em função de seus vizinhos, construímos um histograma de nível de cinza e treinamos a rede. Uma pessoa seria considerada barbada se houvesse uma quantidade suficiente de descontinuidades nas cores.
Elementos de Visão Computacional • Binarização da imagem, segmentação da barba, cálculo de pontos pretos em cada segmento da imagem.
Elementos de Redes Neurais • A rede neural Multi-LayerPerceptron usa backpropagation e minimização de erro no treinamento. • A quantidade de épocas é critério de parada do treinamento (foi usado 3000). • Usamos fotos de pessoas barbadas e não-barbadas para treinamento e fotos de pessoas barbadas, não-barbadas e fotos “confusas” no teste.
Elementos de Redes Neurais • Rede neural usada para classificação.
Resultados obtidos • Épocas = 2000 • Output: 0.9861940648297871 Expected: 1.0 Output: 0.8499247580569687 Expected: 1.0 • Output: 0.4974562224208351 Expected: 1.0 Output: 0.9655933631094192 Expected: 1.0 • Output: 0.9055234623791313 Expected: 1.0 Output: 0.6433688735570527 Expected: 1.0 • Output: 0.08323963777354385 Expected: 1.0 Output: 0.9690658663292349 Expected: 1.0 • Output: 0.9814613448314898 Expected: 1.0 Output: 0.9766023027282116 Expected: 1.0 • Output: 0.7412806201628845 Expected: 1.0 Output: 0.9884775881275171 Expected: 1.0 • Output: 0.6863341054133643 Expected: 1.0 Output: 0.1307606382428527 Expected: 1.0 • Output: 0.5671966845275148 Expected: 1.0 Output: 0.9889073758230608 Expected: 1.0 • Output: 0.5451663257364684 Expected: 1.0 Output: 0.07119817749191974 Expected: 1.0 • Output: 0.98766946748858 Expected: 1.0 Output: 0.057927497883103404 Expected: 0.0 • Output: 0.9843062543500479 Expected: 0.0 Output: 0.47601732132310626 Expected: 0.0 • Output: 0.05902913101226488 Expected: 0.0 Output: 0.06978186363516721 Expected: 0.0 • Output: 0.8505239279329824 Expected: 0.0 Output: 0.2149094373597048 Expected: 0.0 • Output: 0.3531585424936426 Expected: 0.0 Output: 0.12615414563207858 Expected: 0.0 • Output: 0.05913727882027054 Expected: 0.0 Output: 0.1227239715194805 Expected: 0.0 • Output: 0.0755282671741752 Expected: 0.0 Output: 0.48149579464021913 Expected: 0.0 • Output: 0.12240226503302304 Expected: 0.0 Output: 0.11497987503729333 Expected: 0.0 • Output: 0.3338233316324114 Expected: 0.0 Output: 0.11477105761239936 Expected: 0.0 • Output: 0.4346140797043658 Expected: 0.0 Output: 0.13429158160800791 Expected: 0.0 • Taxa de acerto = 32/38 (84%)
Resultados obtidos • Épocas = 1000000 • Output: 0.9990560600298203 Expected: 1.0 Output: 0.9999995112464399 Expected: 1.0 • Output: 0.9603911266474611 Expected: 1.0 Output: 0.9967099816803642 Expected: 1.0 • Output: 0.9998438550050472 Expected: 1.0 Output: 0.9999996554133375 Expected: 1.0 • Output: 1.8320158219234922E-6 Expected: 1.0 Output: 0.9999990802136012 Expected: • Output: 0.999999599121801 Expected: 1.0 Output: 0.030907532128465892 Expected: 1.0 • Output: 1.3332350512144617E-5 Expected: 1.0 Output: 0.5039459426070423 Expected: 1.0 • Output: 2.3433824405011217E-9 Expected: 1.0 Output: 3.4269322122683765E-5 Expected: 1.0 • Output: 0.9999996259705186 Expected: 1.0 Output: 0.9999987574404331 Expected: 1.0 • Output: 0.9960728802392983 Expected: 1.0 Output: 2.106918322554876E-4 Expected: 1.0 • Output: 0.9999992423825035 Expected: 1.0 Output: 4.332590588857187E-4 Expected: 0.0 • Output: 0.9999995956172157 Expected: 0.0 Output: 5.11768947992957E-7 Expected: 0.0 • Output: 9.158039471360628E-6 Expected: 0.0 Output: 4.46242065990349E-5 Expected: 0.0 • Output: 0.8373958844934365 Expected: 0.0 Output: 0.08437344221589521 Expected: 0.0 • Output: 2.6802413067578826E-6 Expected: 0.0 Output: 3.6490155089645226E-5 Expected: 0.0 • Output: 4.247963336188048E-6 Expected: 0.0 Output: 5.849972942174981E-4 Expected: 0.0 • Output: 3.1890247213250536E-5 Expected: 0.0 Output: 0.9711538974359608 Expected: 0.0 • Output: 4.392869102630845E-6 Expected: 0.0 Output: 2.103780130897108E-6 Expected: 0.0 • Output: 2.553857494999205E-5 Expected: 0.0 Output: 0.0032539739902122853 Expected: 0.0 • Output: 0.025578791156717247 Expected: 0.0 Output: 0.002110720342746829 Expected: 0.0 • Taxa de acerto = 29/38 (76%)
Casos positivos (binarização) • Ótimo para classificar pessoas com barba escura. • Bom para classificar pessoas com barba densa.
Casos negativos (binarização) • Péssimo para classificar pessoas com pele escura ou barba clara. • Não muito bom para pessoas de barba rala. • Não muito bom com pessoas que usam roupas escuras (podem eventualmente aparecer na segmentação).
Local BinaryPatterns • LBP é uma técnica usada em reconhecimento de faces e detecção de texturas. • O valor de um pixel será substituído pelo código gerado.
Local BinaryPatterns • Na implementação mais usual de LBP, são feitas comparações na forma: if (valor do pixel < centro) then ligue o bit correspondente no código • Conseguimos um resultado melhor adaptando estes trechos para: if (Math.abs(valor do pixel – centro) > 20) then ligue o bit correspondente no código
Histograma de Local BinaryPattern • Feito este processo, foi construído um histograma com 256 entradas. Para cada entrada, foi calculado a porcentagem de pixels na imagem naquela classe.
Elementos de Redes Neurais • A rede neural Multi-LayerPerceptron usa backpropagation e minimização de erro no treinamento. • A quantidade de épocas é critério de parada do treinamento (foi usado 150000). • A quantidade de entradas na rede agora é 256 (uma para cada nível de cinza após o LBP), portanto foi necessário uma quantidade (bem) maior de épocas.
Resultados obtidos • Output: 0.9114529741515617 Expected: 1.0 Output: 0.3982417911106177 Expected: 1.0 • Output: 0.9124925910136579 Expected: 1.0 Output: 0.9598221406647397 Expected: 1.0 • Output: 0.843119351791984 Expected: 1.0 Output: 0.9617807778391703 Expected: 1.0 • Output: 0.9857677544485014 Expected: 1.0 Output: 0.6274472184253603 Expected: 1.0 • Output: 0.5626601414147145 Expected: 1.0 Output: 0.9986364404854209 Expected: 1.0 • Output: 0.6603521564570772 Expected: 1.0 Output: 0.9878773636889654 Expected: 1.0 • Output: 0.9954454342329163 Expected: 1.0 Output: 0.9998156875574431 Expected: 1.0 • Output: 0.7333281845245864 Expected: 1.0 Output: 0.4615983938519976 Expected: 1.0 • Output: 3.022780226149874E-4 Expected: 1.0 Output: 0.8848915379119332 Expected: 1.0 • Output: 0.9745685120388294 Expected: 1.0 Output: 0.5785584152548727 Expected: 0.0 • Output: 0.43966680152573373 Expected: 0.0 Output: 0.1844652063782568 Expected: 0.0 • Output: 0.23474918162530425 Expected: 0.0 Output: 0.18706911968938753 Expected: 0.0 • Output: 0.35334640686704694 Expected: 0.0 Output: 0.4609657301114388 Expected: 0.0 • Output: 0.26353455900305706 Expected: 0.0 Output: 0.13096397214102945 Expected: 0.0 • Output: 0.02503435144239927 Expected: 0.0 Output: 0.5860238742037481 Expected: 0.0 • Output: 0.5317327222567582 Expected: 0.0 Output: 0.18513086771119108 Expected: 0.0 • Output: 0.4634602274177311 Expected: 0.0 Output: 0.28937650200895765 Expected: 0.0 • Output: 0.19816276935828137 Expected: 0.0 Output: 0.03936934463117415 Expected: 0.0 • Output: 0.9626539972310897 Expected: 0.0 Output: 0.9749989526056474 Expected: 0.0 • Taxa de acerto: 30/38 (78%)
Casos positivos (LBP) • Muito bom para detectar barba rala ou curta. • Bom com pessoas de barba mais clara (pois o LBP irá tratar barbas claras e escuras da mesma forma).
Casos negativos (LBP) • Mau quando a barba é densa a ponto de não haver textura. • Se a pele for porosa ou os pelos de barba forem muito curtos, a rede pode confundir com textura de barba.
Binarizaçãovs LBP • Binarização funciona bem em alguns casos, mas é uma implementação que funciona mal com barbas claras (não serão barbadas) e pessoas negras (serão barbadas). • Local BinaryPatterns trata textura e não cor, e possui resultados mais coerentes em uma diversidade maior de situações. Porém é bastante sensível a barbas curtas demais (o indivíduo será barbado mesmo que tenha pouca barba). • Concluímos então que LBP é a técnica mais apropriada para esta situação.