quinta-feira, novembro 30, 2017

Comparar descritores e algoritmos de Machine Learning para classificar imagens

Comparar descritores HOG e Algoritmos de Aprendizado de Máquina


Vamos ver aqui como comparar diferentes parâmetros do descritor de HOG e abordagens ML para classificação de imagens com inteligência artificial.

O script python eval_train_classify.py (veja link open source no fim do artigo) executa as seguintes tarefas:


  • Ler todo o conjunto de dados, divida no treino e teste
  • Criar descritores HOG para todos os conjuntos de dados do trem para uma variação dos parâmetros HOG
  • Criar modelos para diferentes algoritmos de aprendizado de máquina como SVM, floresta aleatória
  • classifique imediatamente o conjunto de testes dividido e obtenha precisão do modelo
  • Criar uma tabela com todos os resultados


O objetivo é usar a tabela para decidir o melhor algoritmo e parâmetros HOG para usar para resolver o problema.
Aqui, o conjunto de dados de imagem é MNIST, o conjunto de dados de dígitos de escrita manual. Você pode usar qualquer conjunto de dados de imagem com poucas modificações.

Conjunto de dados MNIST


MNIST é um conjunto de dados amplamente utilizado para visão por computador. Tem décimos de milhares de dígitos marcados em imagens cinzas de tamanho de 28x28 pixels. Além disso, há um conjunto de testes, significa também um grande conjunto de imagens não gravadas (em Kaggle) para que se possa testar seu modelo. O conjunto de dados usado neste repositório é de https://www.kaggle.com/c/digit-recognizer/data. (baixe os arquivos train.csv e test.csv e coloque no diretório / dados)

Exemplo de dígito MNIST:


Classificação da imagem


Uma abordagem para executar a classificação MNIST é através de descritores HOG.

HOG significa Histograma de Gradientes Orientados. Ele gera um histograma de gradientes de imagens e bordas. Com este descritor de imagem, podemos comparar imagens e verificar se elas são semelhantes (mesmo dígito) ou não.

O algoritmo de aprendizagem de máquina leva muitos exemplos (conjunto de dados de trem) de imagens de dígitos, rótulo de dígitos (o nome de dígitos) e o descritor HOG de muitas amostras e aprende com ele.

Depois que o modelo de aprendizagem é criado, pode-se prever o novo rótulo de dígitos (valores) do conjunto de dados do teste.

Em seguida, comparamos os valores reais com os valores previstos. Com esses valores, calculamos a precisão. A tabela abaixo mostra a precisão de cada algoritmo de Aprendizagem em Máquina nesta lista:


  • SVM - Máquina de vetores de suporte
  • DTC - Classificador de árvore de decisão
  • Random Forest - um conjunto de árvores de decisão divididas para uma melhor previsão
  • (mais em breve)

E muitas configurações diferentes do descritor HOG com os seguintes parâmetros:


  • Orientações
  • Pixels por célula
  • Células por bloco

Como podemos ver, mudar esses parâmetros afeta completamente a precisão.

Com esta ferramenta, pode-se comparar as classificações baseadas na imagem com base em HOG e encontrar o melhor resultado para treinar um modelo real para o seu sistema e depois prever.

Stack técnico


  • Python
  • sklearn


Para acessar o código fonte deste projeto entre em:

https://github.com/dpetrini/mnist_compare


Saida do comando

Veja abaixo um exemplo de tabela gerada. Podemos facilmente obter os parâmetros e algoritmo de melhor performance e preparar nosso modelo otimizado!

Saida:


Train data shape (29399, 28, 28) T
arget shape (29399,) 
Unique elements in targets: [0 1 2 3 4 5 6 7 8 9] Feature: HOG
ML AlgoorientationspixelsPerCellcellsPerBlockScoreTime
SVM2(2, 2)(1, 1)0.5677447.74
DTC2(2, 2)(1, 1)0.8107402.42
Random Forest2(2, 2)(1, 1)0.9475413.58
SVM2(2, 2)(2, 2)0.7965496.72
DTC2(2, 2)(2, 2)0.8193480.40
Random Forest2(2, 2)(2, 2)0.9521417.86
SVM2(2, 2)(3, 3)0.8219404.21
DTC2(2, 2)(3, 3)0.8193416.96
Random Forest2(2, 2)(3, 3)0.9556376.84
SVM2(2, 2)(4, 4)0.8322407.08
DTC2(2, 2)(4, 4)0.8180416.41
Random Forest2(2, 2)(4, 4)0.9520340.62
... (llinhas omitidas)
Random Forest6(4, 4)(3, 3)0.968395.93
SVM6(4, 4)(4, 4)0.898663.41
DTC6(4, 4)(4, 4)0.857399.39
... best result:
Random Forest6(4, 4)(4, 4)0.970179.80
SVM6(4, 4)(5, 5)0.877247.23
DTC6(4, 4)(5, 5)0.854872.41
Random Forest6(4, 4)(5, 5)0.969560.55
SVM18(2, 2)(1, 1)0.8022415.57
...
Random Forest24(4, 4)(1, 1)0.9541118.87
SVM24(4, 4)(2, 2)0.9225308.32
DTC24(4, 4)(2, 2)0.8289158.07
Random Forest24(4, 4)(2, 2)0.9607124.95
SVM24(4, 4)(3, 3)0.9333227.19
DTC24(4, 4)(3, 3)0.8346196.75
Random Forest24(4, 4)(3, 3)0.9588117.16
SVM24(4, 4)(4, 4)0.911481.49
DTC24(4, 4)(4, 4)0.8286200.64
Random Forest24(4, 4)(4, 4)0.960099.57
SVM24(4, 4)(5, 5)0.891863.80
DTC24(4, 4)(5, 5)0.8283163.17
Random Forest24(4, 4)(5, 5)0.961880.01

Summary totalPass each: 90 (many lines ommited in above table for brevity, see file: eval_output.txt for complete result)
AVG Score
SVM0.85
DTC0.82
Random Forest0.95
AVG Time
SVM281.85
DTC332.58
Random Forest219.89
Max Score
SVM0.9333
DTC0.8752
Random Forest0.9707