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 Algo | orientations | pixelsPerCell | cellsPerBlock | Score | Time |
---|---|---|---|---|---|
SVM | 2 | (2, 2) | (1, 1) | 0.5677 | 447.74 |
DTC | 2 | (2, 2) | (1, 1) | 0.8107 | 402.42 |
Random Forest | 2 | (2, 2) | (1, 1) | 0.9475 | 413.58 |
SVM | 2 | (2, 2) | (2, 2) | 0.7965 | 496.72 |
DTC | 2 | (2, 2) | (2, 2) | 0.8193 | 480.40 |
Random Forest | 2 | (2, 2) | (2, 2) | 0.9521 | 417.86 |
SVM | 2 | (2, 2) | (3, 3) | 0.8219 | 404.21 |
DTC | 2 | (2, 2) | (3, 3) | 0.8193 | 416.96 |
Random Forest | 2 | (2, 2) | (3, 3) | 0.9556 | 376.84 |
SVM | 2 | (2, 2) | (4, 4) | 0.8322 | 407.08 |
DTC | 2 | (2, 2) | (4, 4) | 0.8180 | 416.41 |
Random Forest | 2 | (2, 2) | (4, 4) | 0.9520 | 340.62 |
... (llinhas omitidas) | |||||
Random Forest | 6 | (4, 4) | (3, 3) | 0.9683 | 95.93 |
SVM | 6 | (4, 4) | (4, 4) | 0.8986 | 63.41 |
DTC | 6 | (4, 4) | (4, 4) | 0.8573 | 99.39 |
... best result: | |||||
Random Forest | 6 | (4, 4) | (4, 4) | 0.9701 | 79.80 |
SVM | 6 | (4, 4) | (5, 5) | 0.8772 | 47.23 |
DTC | 6 | (4, 4) | (5, 5) | 0.8548 | 72.41 |
Random Forest | 6 | (4, 4) | (5, 5) | 0.9695 | 60.55 |
SVM | 18 | (2, 2) | (1, 1) | 0.8022 | 415.57 |
... | |||||
Random Forest | 24 | (4, 4) | (1, 1) | 0.9541 | 118.87 |
SVM | 24 | (4, 4) | (2, 2) | 0.9225 | 308.32 |
DTC | 24 | (4, 4) | (2, 2) | 0.8289 | 158.07 |
Random Forest | 24 | (4, 4) | (2, 2) | 0.9607 | 124.95 |
SVM | 24 | (4, 4) | (3, 3) | 0.9333 | 227.19 |
DTC | 24 | (4, 4) | (3, 3) | 0.8346 | 196.75 |
Random Forest | 24 | (4, 4) | (3, 3) | 0.9588 | 117.16 |
SVM | 24 | (4, 4) | (4, 4) | 0.9114 | 81.49 |
DTC | 24 | (4, 4) | (4, 4) | 0.8286 | 200.64 |
Random Forest | 24 | (4, 4) | (4, 4) | 0.9600 | 99.57 |
SVM | 24 | (4, 4) | (5, 5) | 0.8918 | 63.80 |
DTC | 24 | (4, 4) | (5, 5) | 0.8283 | 163.17 |
Random Forest | 24 | (4, 4) | (5, 5) | 0.9618 | 80.01 |
Summary totalPass each: 90 (many lines ommited in above table for brevity, see file: eval_output.txt for complete result)
AVG Score | |
---|---|
SVM | 0.85 |
DTC | 0.82 |
Random Forest | 0.95 |
AVG Time | |
---|---|
SVM | 281.85 |
DTC | 332.58 |
Random Forest | 219.89 |
Max Score | |
---|---|
SVM | 0.9333 |
DTC | 0.8752 |
Random Forest | 0.9707 |