Comece a usar imagens 3D agora

1. Descrição

        Esta história apresenta o uso desse tipo de dados para treinar modelos 3D de aprendizado de máquina. Em particular, discutimos a versão 3D do conjunto de dados MNIST disponível no Kaggle e como usar Keras para treinar um modelo para reconhecer dígitos 3D.

        Os dados 3D estão em toda parte. Como queremos construir IA para interagir com nosso mundo físico, faz todo o sentido usar dados 3D para treinar nossos modelos.

2. De onde vêm os dados 3D?

        Agora olhe para os objetos ao seu redor. Eles são entidades 3D que ocupam uma sala 3D, e você - também uma entidade 3D - está aqui e agora. Se tudo nesta sala for estático, podemos modelar este ambiente como dados espaciais 3D.

                                                                Varreduras de construção —  Fontes

        Os dados 3D vêm de várias fontes, como sequências de imagens 2D e dados de scanner 3D. Nesta história, decidimos processar dados 3D usando uma versão 3D gerada sinteticamente da nuvem de pontos do popular conjunto de dados MNIST.

3. Conjunto de dados 3D MNIST

        Caso você ainda não saiba, MNIST é uma famosa coleção de imagens 2D de dígitos manuscritos. Os elementos no MNIST são pequenas imagens em tons de cinza de 28x28. Nesta história, usaremos a versão 3D do MNIST :

Dígitos brutos em MNIST

                                                        Versão 3D modificada

Este conjunto de dados         pode ser gerado usando este notebook jupyter .

        As imagens 3D em MNIST 3D Aumentado são obtidas a partir das imagens 2D originais em MNIST modificadas por um conjunto de transformações:

1 -  Dilatação : Este é  o processo de empilhar  a mesma imagem digital N vezes para obter um corpo 2D a partir de um 3D digital.

                                        Versão ampliada de dígitos manuscritos 3

2 - Ruído: aplique ruído gaussiano significativo a cada ponto 3D

                                                        Mesma imagem com ruído gaussiano

3 -  Colorização : Os registros no MNIST são imagens em tons de cinza. Para tornar as coisas mais desafiadoras, vamos convertê-los para incluir cores aleatórias

4 - Rotação: Uma vez que são objetos 3D podemos girá- los, é isso que fazemos

                                        mesma imagem com rotação diferente

        Mais detalhes sobre o conjunto de dados 3D MNIST podem ser encontrados no Kaggle. Agora, vamos pular direto para o processo passo a passo:

4. Obtenha e carregue dados

        Primeiras coisas primeiro: baixe o arquivo do conjunto de dados do Kaggle . Descompacte o arquivo para obter  3d-mnist.h5 . Em seguida, carregue o conjunto de dados

        Resumindo, cada registrador em train_x ou test_x é um cubo de 16x16x16. Cada cubo contém dados de nuvem de pontos digitais 3D. Você pode facilmente extrair qualquer registro do conjunto de dados:

        O resultado é o seguinte:

Na verdade, esta é uma versão 181D aprimorada do terceiro elemento no MNIST:

Agora que carregamos o conjunto de dados, podemos usá-lo para treinar nosso modelo.

4.1 Definir o modelo

        Queremos treinar um modelo para reconhecer representações 3D de números em cubos. O modelo usado para reconhecer dígitos manuscritos na versão canônica 2D do MNIST não é adequado para a versão 3D do conjunto de dados. Portanto, para processar dados 3D, é necessário usar transformações 3D, como convolutional 3D e 3D max pooling. Na verdade, o Keras suporta esse tipo de filtro.

Definir um modelo 3D para lidar com nossos dados 3D é muito simples:

        É um modelo bem simples, mas dá conta do recado. Lembre-se, você pode obter o código-fonte completo aqui .

4.2 Modelo de treinamento

Vamos treinar o modelo usando gradiente descendente estocástico. Sinta-se à vontade para usar outro otimizador de sua preferência ( adam , RMSProp , etc):

model = define_model()
model.compile(loss=tensorflow.keras.losses.categorical_crossentropy,optimizer=tensorflow.keras.optimizers.SGD(learning_rate=0.01, momentum=0.9), metrics=['accuracy'])
history = model.fit(train_X_3D, train_y, batch_size=32, epochs=4, verbose=1, validation_split=0.2)

Acabei de executar este código e esta é a minha saída:

4.3 Resultados do Treinamento

        Este é o nosso primeiro julgamento. Após apenas 4 épocas, alcançamos 96,34% de precisão no conjunto de validação! Claro, esse desempenho pode ser melhor compreendido com uma análise adequada da matriz de confusão. Mas, pelo menos na primeira execução, esses resultados são animadores!

        Observe que a perda de validação vem diminuindo há 4 épocas. Aparentemente, este trem terminou antes do necessário. Da próxima vez, podemos definir um número maior de épocas e usar condições de parada mais detalhadas.

Vamos ver como ele se comporta nos dados de teste!

4.4 Modelo de avaliação

        Veja como verificaremos o desempenho:

score = model.evaluate(test_X_3D, test_y, verbose=0)
print('Test accuracy: %.2f%% Test loss: %.3f' % (score[1]*100, score[0])) 

        Aqui estão nossos resultados atuais:

        Devo dizer que fiquei realmente surpreso. Este modelo simples alcança bom desempenho mesmo quando os dados são pouco modificados por ruído, rotação e mapas de cores aleatórios.

        Além disso, dada a quantidade de dados e não usando a GPU, a velocidade de treinamento é muito rápida! frio!

        Podemos ajustar hiperparâmetros e treinar otimizadores para obter melhores resultados facilmente. No entanto, alto desempenho não é nosso objetivo.

        Aprendemos como usar convoluções 3D, agora sabemos como criar uma rede CNN simples, mas poderosa, para processar nossos dados 3D.

Cinco, o próximo passo é

O próximo passo é treinar o modelo para reconhecer eventos em dados 3D gerados a partir de uma série temporal de imagens 4D. Fique atento!

Acho que você gosta

Origin blog.csdn.net/gongdiwudu/article/details/132178916
Recomendado
Clasificación