Criação de um detector de humor para cães usando o Google Cloud e o Raspberry Pi baseado no braço

KDPV estrelado por Bob, a canção de Deniskin



Hoje , smartphones , smartwatches e rastreadores de fitness estão por toda parte. Eles são úteis para monitorar a nós mesmos, nosso entorno, podem enviar notificações e até mesmo detectar problemas graves como a fibrilação atrial. E estamos apenas no início do movimento de micromonitoramento.



Neste artigo, daremos uma olhada na ideia de um detector de humor para cães. Vamos criar um dispositivo que ouve os sons do ambiente e, se um cachorro estiver presente, tenta determinar que som ele está fazendo: latido amigável, ganido assustado ou rosnado agressivo. Dependendo da preferência do usuário, o aparelho vibra quando acha que é necessário verificar o cão. Isso pode ajudar os proprietários a rastrear seus cães quando eles estiverem fora do alcance da voz. Claro, este é apenas um protótipo, e os resultados dessa ideia ainda não foram testados em condições reais.



Estaremos usando um computador Raspberry Pi baseado no Arm para fazer o protótipo deste dispositivo. É uma ótima plataforma para implementar aprendizado de máquina em dispositivos de usuário final. Os processadores Arm não são usados ​​apenas no Raspberry Pi, eles também funcionam em muitos telefones celulares, consoles de jogos móveis e uma série de outros dispositivos. O processador com eficiência energética nesses computadores tem amplo poder de processamento e pode ser comprado por um preço acessível em qualquer lugar.






Infelizmente, até agora os recursos de pequenos dispositivos são frequentemente limitados pelo poder de processamento, falta de conectividade com a Internet e, como regra, pequenas quantidades de armazenamento de dados. Embora esses dispositivos possam concluir muitas observações em um curto espaço de tempo, se não houver conexão com a Internet devido a limitações de armazenamento, muitas vezes é impossível salvar todas as observações para sincronização posterior. Além disso, o envio de grandes quantidades de dados sem fio também consome uma já pequena quantidade de energia da bateria.



Para aproveitar ao máximo os sinais gravados, é imperativo mover o estágio de processamento do sinal para os próprios dispositivos do usuário final.



Na última década, o aprendizado de máquinafez avanços significativos na precisão de muitas tarefas de processamento de sinal, como detecção de objetos em imagens, reconhecimento de gestos de vídeo e reconhecimento de fala. Hoje, estamos apenas arranhando a superfície do possível. O uso de ML em dispositivos pequenos oferece inúmeras outras maneiras de melhorar a vida das pessoas.



Começar



Vamos dar uma olhada no Google AudioSet para treinamento . Esta é a maior coleção de clipes de áudio de 10 segundos de vídeos do YouTube. Os dados são fornecidos em um formato pré-processado compatível com o starter kit YouTube-8M . Ele será usado para treinar um modelo capaz de classificar clipes de áudio.



Pode levar algum tempo para treinar esse modelo, então vamos mover o processamento para a plataforma Google Cloud AI.e após sua conclusão, carregue o modelo. Com todos os componentes prontos, vamos transferir o modelo para o Raspberry Pi. Também criaremos um script Python para capturar a entrada do microfone conectado e tentar prever a cada segundo sons de cães identificados.



Criando o modelo desejado



Primeiro, vamos criar uma pasta em algum lugar para todo o trabalho que vamos fazer.



Para criar um modelo, um conjunto de dados deve ser carregado . Ele está disponível no link sob o título Conjunto de dados de recursos. A maneira mais fácil é baixar um arquivo arquivado gzip para o seu computador local.

 

Em seguida, descompacte-o e extraia os arquivos. Existem três pastas neste pacote: uma contém o conjunto de treinamento balanceado, a outra o conjunto de avaliação e a terceira o conjunto de treinamento não balanceado. Cada pasta contém mais de 4000 arquivos.



Os arquivos TFRecord contêm tags pré-processadas. Os nomes dos arquivos começam com os dois primeiros caracteres do ID do vídeo do YouTube. Como os IDs de vídeo diferenciam maiúsculas de minúsculas, você deve ter cuidado ao extrair arquivos se o sistema de arquivos local não diferencia maiúsculas de minúsculas, como no Windows.



Conselho util! O programa 7zip é usado para extrair esses arquivos de características. 7zip suporta opções de linha de comando. Isso permite que você renomeie automaticamente os arquivos existentes, garantindo que os arquivos sejam renomeados em vez de substituídos.



Tendo recebido o conjunto de dados extraído corretamente, clonamos o repositório Github do YouTube-8Mque contém o código para treinar o modelo. Recomenda-se cloná-lo na pasta que foi criada para o conjunto de dados extraído.



Em seguida, atualize o arquivo readers.py na pasta YouTube-8M para suportar os arquivos AudioSet TFRecord antigos. Este processo inclui duas etapas:



  • Altere todas as ocorrências de "id" para "video_id".
  • Altere o valor padrão do parâmetro num_classes para 527. Este número corresponde ao número de categorias diferentes neste conjunto de dados de áudio.



O identificador precisa ser alterado em cinco lugares e num_classes em dois.



Para executar este programa, implante um novo ambiente virtual Python 3.6+ e instale o tensorflow == 1.14. Também é conveniente agora definir os requisitos  para o script de saída que criaremos na próxima etapa. Embora os números de versão sejam diferentes para cada pacote, o único requisito difícil é usar o tensorflow versão 1.14. Para outros pacotes, você pode simplesmente instalar a versão mais recente.



Neste ponto, você está pronto para treinar o modelo. Primeiro, execute o script de treinamento localmente para testá-lo. Não vai demorar muito em um conjunto de treinamento equilibrado. Abra uma janela de prompt de comando, navegue até a pasta criada na primeira etapa desta seção e digite o seguinte comando (observe que tudo isso é uma linha):



python youtube-8m/train.py \ --train_data_pattern=./audioset_v1_embeddings/bal_train/*.tfrecord \
--num_epochs=100 \
--feature_names="audio_embedding" \
--feature_sizes="128" \
--frame_features \
--batch_size=512 \
--train_dir ./trained_models/yt8m \
--model=FrameLevelLogisticModel \
--start_new_model
      
      





Observe também que, embora os caracteres de quebra de linha \ funcionem bem em sistemas Linux, eles devem ser substituídos pelo caractere ^ no Windows.



Após 100 épocas, isso continua até atingir aproximadamente a etapa 8500. O FrameLevelLogisticModel operará com uma precisão máxima de aproximadamente 58–59%. Em nosso sistema de teste, todo o processo levou menos de 20 minutos.



Outros modelos estão incluídos neste kit inicial, incluindo DbofModel e LstmModel. Cada um deles fornecerá uma precisão quase perfeita nos dados de treinamento, mas ambos serão muito sobrecarregados em um conjunto de treinamento equilibrado quando testados com um conjunto de pontuação.



Treine o modelo na nuvem



Uma alternativa é treinar em um conjunto completo de sons usando um conjunto de dados não balanceado. Nesse caso, o processamento vai demorar muito mais, mas as GPUs baseadas na plataforma Google Cloud AI podem ajudar significativamente. Um modelo logístico simples atinge uma precisão de cerca de 88% em um conjunto de treinamento não balanceado.



Para executar esse processo na nuvem, inscreva-se e faça login em sua conta da plataforma Google Cloud AI, ative o faturamento e baixe as ferramentas de linha de comando detalhadas aqui .



Com tudo configurado, vá para o console da nuvem, crie um novo projeto e uma nova cesta de armazenamento. O nome do intervalo de armazenamento deve ser globalmente exclusivo. É mais fácil se incluir o nome da conta do usuário. Carregue todas as pastas audioset_v1_embeddings e youtube-8m nesta cesta de armazenamento.



Se feito corretamente, devemos ser capazes de abrir o shell do Google Cloud SDK e executar os comandos abaixo para começar. Certifique-se de substituir seu-nome-do-projeto e seu-nome-do-intervalo de armazenamento pelos valores de conta apropriados. Isso foi escrito para sistemas baseados em Unix. Faça as correções apropriadas para sistemas Windows.



BUCKET_NAME=gs://${USER}_yt8m_train_bucket

gsutil mb -p your-project-name $BUCKET_NAME

JOB_NAME=yt8m_train_$(date +%Y%m%d_%H%M%S)

gcloud --verbosity=debug ml-engine jobs submit training $JOB_NAME 
--python-version 3.5  --package-path=youtube-8m --module-name=youtube-8m.train --staging-bucket=$BUCKET_NAME --region=us-east1 --config=youtube-8m/cloudml-gpu.yaml -- --train_data_pattern='gs://your-storage-bucket-name/audioset_v1_embeddings/unbal_train/*.tfrecord' --model=FrameLevelLogisticModel --train_dir=$BUCKET_NAME/yt8m_train_frame_level_logistic_model
      
      





Novamente, observe que a última chamada para gcloud é um comando longo com opções de configuração.

Isso levará mais de meio dia para ser concluído. Quando tudo estiver dito e feito, carregue a saída do modelo do seu intervalo de armazenamento em nuvem:



$BUCKET_NAME/yt8m_train_frame_level_logistic_model
      
      





Execução em Raspberry Pi



Estamos demonstrando este aplicativo em um computador Raspberry Pi 4 baseado em Arm executando Raspbian OS com Python 3 instalado. Instale PyAudio neste dispositivo. Em caso de problemas, esta resposta deve ajudar.



Conecte um microfone USB (com um fone de ouvido opcional para saída de áudio para teste). Neste ponto, o microfone é mais fácil de configurar como o dispositivo padrão. Vá para a área de trabalho do Raspian e clique no ícone do alto-falante ao lado do relógio no canto superior direito e selecione o microfone a ser usado.



A última etapa importante é obter instrumentos que processem áudio bruto com a mesma compactação 128-D do AudioSet. A ferramenta usada para isso está incluída em o repositório Github de modelos Tensorflow mencionado anteriormente. Siga exatamente o mesmo procedimento de instalação no Pi e não se esqueça de instalá-lo em sua instância do Python 3. Além disso, clone este repositório na mesma pasta onde você clonou o conjunto de dados e repositório do YouTube-8M.



Execute o script vggish_smoke_test.py para verificar se tudo está instalado corretamente.

 

Agora copie o modelo baixado da plataforma Google Cloud para a pasta com o script de escuta do microfone .



Execute este script. Ele começará a escutar no dispositivo padrão e escreverá as previsões no console.

 

Se o dispositivo desejado não puder ser configurado como o dispositivo padrão, execute o comando “python model-run.py list” para exibir uma lista de todos os dispositivos por índice. Encontre o índice do dispositivo e execute o comando novamente com esse índice. Por exemplo:



python model-run.py 3
      
      





Copie todo o conteúdo desta pasta para o seu Raspberry Pi e execute o script com o código novamente. Uma vez por segundo, deve haver previsões de quanto barulho o dispositivo pensa que o cão está fazendo! A fase de retirada pode ser substituída por qualquer mecanismo mais apropriado para o dispositivo e o usuário alvo.



Conclusão



Hoje examinamos uma possível aplicação de aprendizado de máquina baseado em som, com suporte em dispositivos móveis baseados em Arm. Este conceito precisa ser testado em mais detalhes antes de ir para o mercado, mas a capacidade de executar um modelo de detecção de áudio arbitrário em um dispositivo móvel já existe.

 

Os dados do AudioSet incluem 527 tags com uma ontologia robusta de sons urbanos. Também há possibilidades de melhorar o processamento de som antes de passá-lo para nosso preditor, como aplicar um algoritmo de festa e passar cada fonte de som por um filtro vggish .



Executar um detector de humor de cachorro em um Raspberry Pi com um microprocessador Arm é muito emocionante. Para tornar isso ainda mais interessante, você pode transformar e digitalizar o modelo usando as ferramentas do pacote TensorFlow e, em seguida, executá-lo em um microcontrolador Arm de baixo custo e baixo consumo de energia usando o pacote de microcontrolador TensorFlow Lite .



Soa interessante? Experimente e descubra qual problema essa abordagem pode resolver. Você nunca sabe o quanto pode influenciar a vida de alguém. E para descobrir do que mais o aprendizado de máquina é capaz nas mãos certas, venha aprender (sem se esquecer do código promocional HABR, é claro).





Outras profissões e cursos
PROFISSÃO








CURSOS







imagem



All Articles