Prever Ações Humanas

Repositório GitHub do Projeto

skr

Detalhes

Este projeto foi o projeto nº 3 para a aula de Robótica Centrada no Humano (CSCI473) do Dr. Zhang na Colorado School of Mines durante o semestre da primavera de 2020. Foi projetado para fornecer uma introdução ao aprendizado de máquina em robótica através do uso de Máquinas de Vetor de Suporte (SVM). As entregas/descrição originais do projeto podem ser visualizadas aqui.

skr

Para este projeto, o Conjunto de Dados MSR Daily Activity 3D (Figura 2), com algumas modificações, foi usado. Este conjunto de dados contém 16 atividades humanas coletadas de um sensor Xbox Kinect e armazenadas como esqueletos. Esqueletos são um array de coordenadas do mundo real, (x, y, z), de 20 juntas de um humano registradas em um quadro. Aqui está uma figura que mostra o que é um esqueleto:

skr

Para alcançar a previsão de ações humanas, os dados brutos devem ser representados em uma forma que possa ser processada por um SVM. Para este projeto, as seguintes representações foram usadas:

  • Representação de Ângulos Relativos e Distâncias (RAD)
  • Representação de Histograma de Diferenças de Posição das Juntas (HJPD)

Para classificação, a(s) representação(ões) são enviadas para um SVM, alimentado por LIBSVM, para criar um modelo que possa prever ações humanas. Dois modelos serão criados, um usando RAD e outro usando HJPD. O objetivo é tornar esses modelos o mais precisos possível e ver qual representação tem o melhor desempenho.

Sabendo disso, aqui está uma visão geral do que o código faz:

  1. Carregar os dados brutos do conjunto de dados modificado
  2. Remover quaisquer dados outliers e/ou com erro do conjunto de dados carregado
  3. Converter os dados brutos finais em representações RAD e HJPD
  4. As representações são enviadas para SVM(s) ajustados para gerar dois modelos
  5. Os dois modelos são então alimentados com dados brutos de teste e uma matriz de confusão é gerada para medir como o(s) modelo(s) se desempenharam.

Resultados

Após executar o código e ajustar os modelos ao melhor da minha capacidade, aqui está a matriz de confusão final para ambos os modelos RAD e HJPD:

Representation: RAD
Accuracy: 62.5%
LIBSVM Classification   8.0   10.0  12.0  13.0  15.0  16.0
Actual Activity Number
8.0                        8     0     0     0     0     0
10.0                       1     5     0     0     1     1
12.0                       0     1     1     0     3     3
13.0                       0     0     0     6     1     1
15.0                       0     0     0     1     5     2
16.0                       0     0     0     0     3     5
Representation: HJPD
Accuracy: 70.83%
LIBSVM Classification   8.0   10.0  12.0  13.0  15.0  16.0
Actual Activity Number
8.0                        7     1     0     0     0     0
10.0                       1     5     0     0     0     2
12.0                       0     0     7     0     1     0
13.0                       2     0     1     5     0     0
15.0                       0     0     0     0     7     1
16.0                       0     2     0     0     3     3

Conclusão

Como ambas as precisões estão acima de 50%, este projeto foi um sucesso. Além disso, a representação HJPD parece ser a representação mais precisa para usar nessas classificações. Com isso, há um(s) modelo(s) que prevê(m) ações humanas usando dados de esqueleto. O(s) modelo(s) aqui estão longe de ser perfeitos, mas é melhor do que aleatório. Este projeto foi o que deu origem ao projeto Moving Pose posteriormente.

Notas Adicionais: