Utilizando MapReduce no pré-processamento de grandes quantidades de imagens para problemas de classificação Luiz Carlos A. M. Cavalcanti1 1 Instituto de Computação – Universidade Federal do Amazonas (UFAM) [email protected] Abstract. This work presents technics for the pre-processing of images for machine learning (specially classification) problems using the MapReduce framework. Several cases are shown, with the intention to serve as a reference to very common issues found in those kinds of problems. Finally, experimentation results are presented, all using Apache Hadoop, an open-source implementation of the MapReduce framework. Resumo. Este trabalho apresenta técnicas para pré-processamento de imagens para algoritmos de aprendizagem de máquina (majoritariamente classificação) utilizando o framework MapReduce. Diversos casos são apresentados, com o intuito de fornecer uma referência a problemas normalmente enfrentados nesse tipo de abordagem. Por fim, resultados de diversos experimentos são apresentados, todos utilizando Apache Hadoop, uma implementação de código-livre do framework MapReduce. 1. Introdução Os problemas de processamento de imagens podem ser classificados como: locais, nãolocais, iterativos e não-iterativos. Problemas locais envolvem apenas uma imagem, ou seja, não há necessidade de comparação ou utilização de outras imagens. Problemas nãolocais necessitam de dados de outras imagens além da que está em processamento para serem resolvidos. Deste grupo de problemas, podemos citar a busca por imagens similares como o problema mais recorrente. Problemas iterativos exigem que refinamentos ou transformações sucessivas sejam realizadas a fim de obter o resultado desejado, enquanto problemas não-iterativos podem ser resolvidos em apenas um passo. Métodos de extração de caracterı́sticas de imagens para posterior classificação costumam ser custosos, tanto em tempo quanto em recursos computacionais. Quando o volume de dados é maciço, é importante reduzir a quantidade de imagens similares ou que não possuem importância para o problema de classificação. Também é importante procurar maneiras mais rápidas de extrair caracterı́sticas dessas imagens. Para facilitar o processamento distribuı́do de grandes quantidades de dados que extrapolam a memória de um único computador, foi criado o framework MapReduce [Dean and Ghemawat 2008]. MapReduce é um modelo de programação para processamento e geração de grandes conjuntos de dados. A computação a ser realizada é exprimida através de duas funções: Map e Reduce. Uma vez implementadas, as funções podem ser executadas em um cluster de máquinas que executarão, separadamente, as etapas do processament. Quando se trata de imagens vindas da internet ou obtidas a partir de vı́deos, o volume de imagens repetitivas é potencialmente grande. Uma técnica ou procedimento que vise a redução da quantidade de imagens a ser classificadas, através da identificação de imagens duplicadas ou muito parecidas (quadros subjacentes de vı́deos, por exemplo), tem grande valor, visto que minimiza o tempo necessário para classificação dessas imagens. Um solução para o problema que seja paralelizável e que possa ser executada em um ambiente distribuı́do, se torna muito interessante. Utilizar uma ferramenta como o Hadoop, que abstrai os complicados detalhes técnicos de infra-estrutura e permite que algoritmos de MapReduce sejam executados com relativa facilidade, de forma paralela, minimiza o tempo gasto no processo como um todo. Este trabalho busca apresentar propostas para execução paralela de problemas comuns na disciplina de processamento de imagens, em especial problemas locais e nãolocais, majoritariamente não-iterativos, tendo como finalidade a redução de carga e processamento no processo de classificação de imagens com alto potencial de repetição. 2. Trabalhos relacionados Embora a quantidade de publicações sobre MapReduce e processamento distribuı́do de imagens seja enorme, poucos trabalhos se propuseram, até então, a unir os dois assuntos. Em [Yamamoto and Kaneko 2012] são apresentadas técnicas para processamento de uma base de dados de vı́deos utilizando o framework MapReduce. A abordagem tomada é a divisão de cada quadro dos vı́deos em sub-imagens que são, por sua vez, processadas em paralelo. Diversos experimentos são feitos para determinar o número ótimo de sub-imagens por quadro. Por fim, o trabalho apresenta os resultados de um experimento comparativo entre o processamento dos vı́deos utilizando uma abordagem tradicional standalone e uma abordagem de processamento distribuı́do utilizando MapReduce em uma configuração pseudo-distribuı́da (um nó de processamento apenas). Ainda na linha de processamento de grandes quantidades de vı́deos de forma distribuı́da, vale ressaltar a contribuição de [Pereira et al. 2010], que utiliza uma estratégia de divisão e união (split & merge) para processar vı́deos com bom desempenho utilizando o framework MapReduce. Em [Potisepp 2013] são apresentadas técnicas para o processamento distribuı́do de duas coleções: uma com centenas de milhares de imagens, em um total de 256 Gigabytes de arquivos, outra com poucas imagens de cerca de 7 Gigapixels. O trabalho apresentado aqui é fortemente influenciado por essa publicação, pois ela propõe soluções simples para o problema de processamento local não-iterativo em uma grande coleção de imagens, bem como estratégias para o processamento de imagens de grandes dimensões. Ambos problemas apresentados por essas duas diferentes coleções são abordados mais a frente, neste trabalho. Os trabalhos de [Pass et al. 1997], [Pass and Zabih 1999] e [Huttenlocher et al. 1993] contém importantes contribuições nas técnicas para comparações de imagens utilizadas nesse trabalho, muito embora não tenham sido diretamente aproveitadas. 3. Problemas propostos As seções a seguir apresentam alguns do problemas ou tarefas mais comuns ao préprocessamento de imagens para fins de classificação das mesma. 3.1. Extração de caracterı́sticas Um dos importantes passos na classificação de imagens é a extração de suas caracterı́sticas. Diversos tipos de técnicas de aprendizagem e classificação diferentes exigem que as mais diversas caracterı́sticas sejam extraı́das das imagens em questão. Para este trabalho foram escolhidas as seguintes caracterı́sticas: • Histograma colorido • Histograma em tons de cinza • Cor média Dea cordo com [Gonzalez and Woods 2002], essas caracterı́sticas podem ser extraı́das através de processamento local não-iterativo. Esse tipo de problema é ideal para a topologia MapReduce, pois não precisamos nos preocupar com a distribuição das imagens visto que não estamos analisando o contexto das imagens, nem seu agrupamento em fase posterior. A chave gerada pelo algoritmo Map pode ser simplesmente o nome do arquivo original, e seus valores, o conjunto de caracterı́sticas extraı́dos. O algoritmo Reduce geralmente não faz nenhum tipo de processamento, apenas replicando cada par chave/valor na saı́da final do processo (figura 1). Figura 1. Extração de caracterı́sticas usando MapReduce Ainda usando a mesma técnica, pode-se utilizar o MapReduce para efetuar transformações em imagens de forma distribuı́da. Dentre os casos descritos em literatura, podemos destacar: • Esqueletização [Yamamoto and Kaneko 2012] • Fragmentação de imagens [Potisepp 2013] • Suavização [Potisepp 2013] 3.2. Processamento de grandes imagens Alguns domı́nios especı́ficos como cartografia, sensoriamento remoto, biologia e medicina apresentam desafios ao processamento de imagens no que tange o tamanho dos objetos a serem processados. Alguns microscópios eletrônicos, por exemplo, produzem imagens de até 6,9 Gigapixels [Potisepp 2013], o que torna seu armazenamento em memória para processamento muito caro ou inviável. Quando a técnica aplicada permite, devemos dividir essas imagens em blocos menores, processá-los separadamente e por fim, juntá-los em um único arquivo se necessário. O problema em se dividir uma imagem em sub-imagens para processamento não-local e iterativo apresenta seus próprios desafios que não se estão no escopo deste trabalho, são abordados por outros autores ([Wiley et al. 2011], [Yang et al. 2009] e [Almeer 2012]). Neste trabalho, apenas experimentamos com a transformação de imagens muito grandes em uma versão em tons de cinza. Essa simplificação nos permite separar a imagem em sub-imagens, processar os pedaços individualmente e posteriormente uni-los, sem nos preocuparmos com iterações e contexto não-local de cada sub-imagem. O principal cuidado que se deve ter ao subdividir uma imagem grande em subimagens é encontrar o tamanho certo para a subdivisão. Deve-se levar em conta o tamanho que um bloco ocupa em memória para que, ao mesmo tempo, a imagem caiba em um único bloco do sistema de arquivos distribuı́do (DFS) do framework MapReduce e que possa ser reduzida a quantidade de leituras/escritas em disco. Dividir em a grande imagem em sub-imagens pequenas demais garante que cada imagem caiba um único bloco do DFS, mas aumenta bastante a quantidade de leituras em disco necessárias pelos algoritmos de Map e Reduce. Dividir em sub-imagens grandes demais pode fazer com que uma imagem extrapole o limite de seu bloco no DFS, fazendo com que mais de um bloco tenha que ser transmitido para os nós de processamento, prejudicando o desempenho de leitura/escrita tanto no DFS quanto na infra-estrutura de comunicação entre os nós. O desafio está em encontrar o tamanho ideal das sub-imagens. Como pode ser observado na figura 2, a modelagem do processo MapReduce é bastante simplificada. Figura 2. Processamento de grandes imagens usando MapReduce 3.3. Busca por imagens similares Um dos problemas em se processar imagens vindas de uma coleção de vı́deos é a grande quantidade de imagens repetidas, ou excessivamente similares. O objetivo é diminuir a quantidade de imagens a serem processadas posteriormente. Comparar imagens tem um custo computacional alto, visto que é necessário na implementação tradicional, realizar comparação de cada imagem com todas as outras. O custo assintótico desta operação é de ordem O(n2 ). Uma abordagem MapReduce pode ser utilizada para reduzir drasticamente o número de comparações. Imagens demasiadamente similares são sobreposições, cópias exatas, a mesma imagem em um formato diferente ou com diferentes efeitos de pós-processamento aplicados. Imagens demasiadamente opostas são normalmente negativos. Em um primeiro momento é preciso escolher uma imagem externa a coleção, que será chamada de imagem pivô (pImg). Esta imagem está presente em todos os nós de processamento e é a partir dela que será calculado o ı́ndice preliminar de similaridade de cada imagem (iSim). Ou seja, ao invés de realizarmos um cálculo de ı́ndice entre cada um dos pares de imagens possı́veis de toda a coleção, o Map consiste em realizar o processamento local entre a imagem em questão e a imagem pivô. Esse procedimento evita com que tenhamos que ter todas as imagens disponı́veis em todos os nós. O ı́ndice de similaridade preliminar obtido para cada uma das imagens da coleção será utilizado como chave para o registro de sua respectiva imagem. O cálculo de similaridade entre duas imagens foi baseado na implementação do software GQView ([GQview ]). O processo consiste em dividir cada imagem em 1024 blocos (32x32 blocos), calcular a cor RGB média de cada bloco e gerar uma assinatura da imagem, baseada nessas informações. O resultado dessa etapa é uma assinatura da imagem em questão, representada por 3 vetores com 1024 posições cada. A última etapa é o cálculo do ı́ndice de similaridade, realizado através da equação 1, descrita abaixo. O valor resultante varia de 0 (imagens completamente opostas) a 1 (imagens praticamente iguais). iSim = 1 − |r[img1] − r[img2]| + |b[img1] − b[img2]| + |g[img1] − g[img2]| 255 × 1024 × 3 (1) Uma vez calculado o ı́ndice preliminar de similaridade entre a imagem em questão e a imagem pivô, o algoritmo de Map determina quão preciso será esse ı́ndice que representará a chave da imagem no processo de MapReduce. Isso é feito regulando a precisão do número de ponto flutuante resultado do algoritmo descrito anteriormente. Durante o Reduce, todas as imagens que possuı́rem uma mesma chave serão processadas em conjunto. Neste momento realizamos o cálculo de similaridade tradicional em que todas as imagens são comparadas entre si. Embora o processo seja custoso, a coleção agora consiste apenas das imagens com mesmo ı́ndice aproximado de similaridade, não mais de todas as imagens do problema. Após o cálculo de cada par de imagens, o algoritmo de Reduce determina se as duas imagens em questão têm ı́ndice de similaridade final maior que o limiar definido pelo usuário. Em caso positivo, uma das imagens é descartada da coleção. Figura 3. Busca de imagens similares usando MapReduce 4. Experimentos Para os experimentos, foi utilizada o framework Apache Hadoop, versão 1.2.1 em modo pseudo-distribuı́do, ou seja, apenas um nó de processamento foi disponibilizado. O equipamento utilizado nos experimentos encontra-se descrito na tabela 1. Processador Intel Core i5 2.4 GHz Memória RAM 8 GB Disco Rı́gido 256 GB SSD Sistema Operacional Mac OS 10.9.1 Tabela 1. Especificação técnica do equipamento utilizado nos experimentos 4.1. Extração de caracterı́sticas Algumas coleções de imagens foram utilizadas nos experimentos de extração de caracterı́sticas. A quantidade de imagens em cada experimento estão descritas na tabela 2. Número de Imagens 10 100 1.000 10.000 210.380 Tamanho da colecão Tempo de execução (em s) 256 KB 16 2,5 MB 29 24,8 MB 147 253 MB 1.003 5,63 GB 14.478 Tabela 2. Experimentos realizados em extração de caracterı́sticas de imagens O desempenho do algoritmo implementado para extração de caracterı́sticas de imagens obteve um bom desempenho, e cresceu de forma quase linear à medida que o número de imagens crescia (figura 4). Figura 4. Desempenho do algoritmo de extração de caracterı́sticas 4.2. Processamento de grandes imagens Para o experimento de processamento de grandes imagens, um conjunto de imagens de tamanhos diferentes foram utilizados. Para cada iteração, diferentemente dos outros experimentos, apenas uma imagem foi utilizada. A tabela 3 descreve os resultados das iterações. Tamanho da Imagem 9372 × 9372 (14,7 MB) 9372 × 9372 (14,7 MB) 21600 × 21600 (421 MB) 21600 × 21600 (421 MB) Sub-imagens 4 16 16 64 Tempo (em s) 23 25 1425 1389 Tabela 3. Experimentos realizados em processamento de grandes imagens 4.3. Busca por imagens similares As coleções utilizadas no experimento de busca por imagens similares foram os mesmos do experimento de extração de caracterı́sticas (seção 4.1). O resultado dos experimentos estão descritos na tabela 4. Número de Imagens 10 100 1.000 10.000 210.380 Tamanho da colecão Tempo de execução (em s) 256 KB 17 2,5 MB 26 24,8 MB 111 253 MB 768 5,63 GB 20.235 Tabela 4. Experimentos realizados em busca de imagens similares O desempenho do algoritmo implementado para extração de caracterı́sticas de imagens obteve um bom desempenho, e cresceu de forma quase linear à medida que o número de imagens crescia (figura 5). A figura 6 apresenta a distribuição de imagens por ı́ndice de similaridade no experimento com 210.380 imagens. O pior caso encontrado nessa iteração concentrou 3,419 imagens em uma única chave, o que representa cerca de 1,62% das imagens. Isso demonstra o ganho em número de comparações entre imagens, que seria quadrático em relação ao número de imagens em uma abordagem tradicional. Figura 5. Desempenho do algoritmo de busca por imagens similares Figura 6. Distribuição de imagens por ı́ndice de similaridade 5. Conclusão Este trabalho apresentou propostas de paralelização utilizando MapReduce para vários problemas comuns no pré-processamento de imagens para algoritmos de aprendizado de máquina. Foram abordadas topologias de MapReduce para processamento de grandes imagens, extração de caracterı́sticas e busca por imagens similares. Ao final, experimentos foram realizados para cada uma das técnicas apresentadas, avaliando o desempenho de cada um em diferentes cenários e coleções de dados. É possı́vel perceber que podemos acelerar o pré-processamento de imagens com fim de diminuir a carga dos algoritmos de aprendizagem de máquina, agilizando a extração de caracterı́sticas, transformações e particionamento do problema. 6. Trabalhos futuros Trabalhos futuros devem buscar solucionar os problemas em se executar métodos iterativos e não-locais em ambiente MapReduce. Também deve ser estudada a possibilidade de realizar as tarefas de aprendizagem de máquina, principalmente métodos para classificação como kNN, K-Means e árvores de decisão utilizando o mesmo ambiente. Outra oportunidade é apresentar um trabalho comparativo de desempenho entre um ambiente MapReduce multi-nó e os experimentos apresentados neste trabalho, que foram executados em apenas um nó de processamento. Referências Almeer, M. H. (2012). Cloud hadoop map reduce for remote sensing image analysis. Journal of Emerging Trends in Computing and Information Sciences, 3(4):637–644. Dean, J. and Ghemawat, S. (2008). Mapreduce: simplified data processing on large clusters. Communications of the ACM, 51(1):107–113. Gonzalez, R. C. and Woods, R. E. (2002). Digital image processing. Prentice Hall. GQview. http://fossies.org/linux/misc/gqview-2.1.5.tar.gz:a/gqview-2.1.5/src/similar.c. gqview-2.1.5. Huttenlocher, D. P., Klanderman, G. A., and Rucklidge, W. J. (1993). Comparing images using the hausdorff distance. Pattern Analysis and Machine Intelligence, IEEE Transactions on, 15(9):850–863. Pass, G. and Zabih, R. (1999). Comparing images using joint histograms. Multimedia systems, 7(3):234–240. Pass, G., Zabih, R., and Miller, J. (1997). Comparing images using color coherence vectors. In Proceedings of the fourth ACM international conference on Multimedia, pages 65–73. ACM. Pereira, R., Azambuja, M., Breitman, K., and Endler, M. (2010). An architecture for distributed high performance video processing in the cloud. In Cloud Computing (CLOUD), 2010 IEEE 3rd International Conference on, pages 482–489. IEEE. Potisepp, K. (2013). Large-scale image processing using mapreduce. Master’s thesis. Wiley, K., Connolly, A., Gardner, J., Krughoff, S., Balazinska, M., Howe, B., Kwon, Y., and Bu, Y. (2011). Astronomy in the cloud: using mapreduce for image co-addition. Astronomy, 123(901):366–380. Yamamoto, M. and Kaneko, K. (2012). Parallel image database processing with mapreduce and performance evaluation in pseudo distributed mode. International Journal of Electronic Commerce, 3(2):211–228. Yang, Z., Kamata, S.-i., and Ahrary, A. (2009). Nir: Content based image retrieval on cloud computing. In Intelligent Computing and Intelligent Systems, 2009. ICIS 2009. IEEE International Conference on, volume 3, pages 556–559. IEEE.