Rede neural convolucional e sua integração no iOS (parte 2)



Na parte anterior, preparamos os dados e também examinamos as ferramentas de implementação e a arquitetura da rede neural ( link ). Vamos começar o próximo estágio de desenvolvimento com o pré-processamento de dados.

Atualizações O

Keras fornece uma ampla gama de ferramentas para pré-processamento de dados, especialmente para imagens. O método ImageDataGenerator (Fig. 7) permite expandir o conjunto de dados com transformações artificiais.


Fig. 7. - gerador de dados.

O primeiro número rotation_range é um número aleatório para girar imagens dentro do gerador. Range_shift_range - mostra quanto você pode reduzir os valores de pixel em largura. Height_shift_range - o coeficiente pelo qual cada pixel será multiplicado para compactar em altura. Shear_range - taxa de cisalhamento, ângulo de mudança no sentido anti-horário em graus. Zoom_range - intervalo para escala aleatória. Horizontal_flip - imagem aleatória exibida horizontalmente. Vertical_flip - exibição aleatória de imagem vertical. Fill_mode - pontos fora dos dados de entrada são preenchidos de acordo com o modo especificado. Data_format - formato de dados da imagem. Assim, a rede neural terá uma melhor generalização, porque o conjunto de dados original basicamente possui pixels limpos, os números estão no centro.Em fotografias reais, outras situações são possíveis quando o gesto está em um canto ou embaçado. O processo de aprendizado está sendo reescrito com novos dados.

Na Fig. 8, o gráfico de teste começou a diminuir, então o treinamento foi interrompido. Se a métrica val_acc não fosse usada para parar, o algoritmo continuaria seu trabalho, resultando em uma rede neural reciclada.

Comparado com resultados anteriores, o valor da função de perda diminuiu e, portanto, o grau de confiança do algoritmo nas previsões aumentou. A precisão aumentou um pouco mais de 2% (Fig. 8, Fig. 9).


Fig. 8 - Cronograma de treinamento para novos dados.


Fig. 9. - Métricas de modelo.

Conversão

Para integração ao aplicativo iOS, é necessário obter uma rede neural de um determinado formato. Isso permite que você faça a estrutura CoreML. Permite executar modelos treinados de aprendizado de máquina em um formato. mlmodel em aplicações. Para trabalhar com imagens, existe uma visão da estrutura baseada no Core ML e ajuda no rastreamento e reconhecimento de rostos, textos, objetos e códigos de barras. Determinação de horizonte e aquisição de matriz para alinhamento de imagem também estão disponíveis.

Para converter um modelo de .h5 para. mlmodel é usado pela biblioteca em Python Coremltools. Esta biblioteca suporta a conversão para o formato mlmodel.

Para a conclusão correta do modelo, é especificado um dicionário que corresponderá a 10 dígitos. A próxima linha declara, Model_check.h5 é o nome do modelo, além disso é indicado que ele receberá imagens na camada de entrada da rede neural. O campo image_scale levará a padronizar a matriz de pixels. (Fig. 10) Fig. 10


. Conversão.

Aplicativo móvel. Trabalhe com um modelo preparado.

Um exemplo do site oficial dos desenvolvedores da Apple é usado como base para o projeto. O mais recente ambiente de desenvolvimento do Xcode, a linguagem de programação é a quinta versão do Swift.

Arquivos (Fig. 11) contendo o código no projeto são considerados. AppDelegate.swift inicia a janela inicial do aplicativo e inicializa todos os arquivos conectados ao projeto.


Fig. 11. - A estrutura do aplicativo.

Um modelo preparado é adicionado ao projeto após a conversão do sign_lang.mlmodel (Fig. 12).


Fig. 12. - Modelo no Xcode.

A linha Tipo indica que o Modelo de aprendizado de máquina adicionado ao projeto é de fato uma rede neural classificadora. Para prever o modelo, serão exibidas imagens em preto e branco com elementos cinzentos da dimensão 64x64, o programa as converterá nesse formato usando o Vision. A saída será um dicionário no qual os pares serão a linha com o rótulo que foi especificado durante a conversão e a confiança (probabilidade) com a qual o neural o prevê.

Os principais arquivos do aplicativo.

O arquivo principal é considerado - Image Classification View Controller.swift

ImageView - uma janela para exibir a imagem atual na tela do telefone, enviada para a entrada do modelo.

CameraButton - um botão que, quando clicado, exibe um menu de contexto, oferecendo ao usuário as seguintes ações: Tirar foto, Escolher foto. A primeira ação abrirá a câmera do smartphone, na qual o modo de foto estará disponível. (Fig. 13)

Ao escolher uma ação alternativa, Escolha Foto, uma galeria interna será aberta. Pressionar o botão Usar Foto retornará o usuário à tela principal, onde a rede neural analisará as imagens e fornecerá sua previsão, conforme mostrado na Fig. 14)

Após a palavra Classificação, vemos a conclusão dos dois resultados mais prováveis ​​que o modelo previu. O número entre parênteses é a confiança da rede neural de que sua previsão está correta. Na Fig. 14, pode-se ver que o algoritmo com uma confiança de 0,99 diz que o número 0. é mostrado e isso coincide com a realidade. Nenhum algoritmo de aprendizado de máquina pode fornecer 100% de precisão em dados reais, e a rede neural construída não é exceção, e previsões falsas são possíveis, o que pode ser visto na Fig. 15.


Fig. 13. - Trabalhe com a câmera.


Fig. 14. - Previsão da rede neural.


Fig. 15. - previsão falsa.

Como resultado, projetamos a arquitetura de uma rede neural convolucional para reconhecer dígitos da linguagem de sinais. Foi realizado treinamento em rede neural e, como resultado da expansão dos dados de treinamento e da seleção de hiperparâmetros, foi obtida uma precisão de 81% em um conjunto de dados de teste. O algoritmo foi convertido com sucesso para portar para um smartphone. Um aplicativo móvel foi desenvolvido no qual uma rede neural foi integrada.

Código Link

All Articles