Pesquisa de metais e ... rede neural

O princípio de operação de um detector de metais por pulso
Uma das opções populares para o design de dispositivos de busca de metais é um detector de metais por pulso ( indução ( PI )) - um dispositivo despretensioso e confiável (boa profundidade de detecção, resistência a maior mineralização do solo, capacidade de trabalhar em água salgada), que possui vários campos de aplicação - de assuntos militares (usuários tradicionais de "impulsos") antes da pesquisa de ouro (esse hobby é especialmente popular na Austrália).
Mas ele também tem uma desvantagem significativa - grandes dificuldades com a discriminação, ou seja, determinando o tipo de alvo, por exemplo, para descobrir se é feito de metal não ferroso ou preto ou para distinguir uma mina antipessoal em uma caixa de plástico de uma pilha de detritos metálicos? Qual é a causa desse problema?
Considere o princípio de operação de um detector de metal pulsado.


Uma chave eletrônica (geralmente um MOSFET que pode suportar tensões de várias centenas de volts - por exemplo, o popular IRF740 é usado neste trabalho de engenheiros da Malásia, e o menos poderoso IRF730 é usado com base na matriz analógica-digital programável GreenPAK controla a conexão da bobina de pesquisa a uma fonte de energia (bateria bateria). Quando um pulso de controle (geralmente com uma frequência de várias dezenas de centenas de hertz) é aplicado à porta do transistor, o MOSFET se abre - o circuito é fechado e uma corrente crescente (gradualmente devido ao processo transitório) começa a fluir através da bobina. Estamos aguardando várias dezenas ou centenas de microssegundos de aumento de corrente até o nível desejado e ... interrompemos o circuito - o pulso de controle terminou. Atual i através da bobina e, consequentemente, o fluxo magnético  Phi a bobina diminui acentuadamente (para acelerar o processo de fechamento do MOSFET, o pulso de controle é fornecido não diretamente ao portão, mas através de um acionador especial), que, devido ao fenômeno da indução eletromagnética, causa o aparecimento de auto-indução de CEM eL=wd Phi overdt e um aumento acentuado na tensão da bobina. Então, o nível de tensão na bobina começa a diminuir. Mas se um objeto condutor ("alvo") estiver localizado próximo à bobina, o fluxo magnético diminuindo junto com a corrente através da bobina induz correntes de Foucault iin neste alvo. Essas correntes parasitas criam seu próprio fluxo magnético.  Phiin , que está tentando manter o campo magnético de amortecimento da bobina. Este efeito leva a um aumento na duração da atenuação da tensão através da bobina, que é um indicador da ausência ou presença de um alvo (a decisão é tomada integrando o sinal e estimando o valor integral ( a ) ou com base nos valores do sinal em vários pontos ( b )):


Nota : os pulsos também podem ser bipolares (por exemplo, no detector de metais Vallon VMH2 - um dispositivo clássico usado na remoção de minas):

( fonte )
Ao mesmo tempo, o valor médio (componente constante) do campo magnético gerado pelo detector de metais é próximo de zero, o que deve (como os catálogos dizem com cuidado, “de acordo com o fabricante”) impedir que prejudique a pesquisa de minas que respondem a um campo magnético (embora, como o livro diz “Manual do detector de metais para desminagem humanitária”, com uma remoção humanitária de minas como um incidente improvável).

Juntamente com a opção descrita com uma única bobina, combinando as funções de transmissão e recepção, existem detectores de metal por pulso com duas bobinas separadas. Esse esquema é usado não apenas no campo de pesquisa de metais, mas também na detecção de falhas (teste de corrente de redemoinho pulsado (PEC) ) - link 1 , link 2 . Nesse caso, uma das bobinas (bobina de transmissão / transmissão ) serve para excitar as correntes de Foucault no alvo, e a outra ( bobina de recepção / captação ) é um sensor de campo magnético. Essa abordagem permite analisar o campo magnético não apenas no estágio de diminuição (após desconectar a fonte de energia da bobina transmissora), mas também no estágio crescente (após conectar a fonte de energia na bobina transmissora):

Aqui está uma ótima descrição dessa tecnologia:
O método de decaimento por correntes de Foucault para caracterização de resistividade de metais de alta pureza

Problema de discriminação
O problema de reconhecer o tipo de metal surge devido ao fato de que a curva de tensão resultante na bobina é afetada pelo tamanho e formato do alvo, sua distância da bobina e eletricidade (condutividade específica  sigma ) e magnético (permeabilidade magnética  mu ) propriedades do material alvo.
Aqui estão algumas citações sobre este assunto:

(fonte: Ahmet S. Turk, Koksal A. Hocaoglu, Alexey A. Vertiy Subsurface Sensing)
Discriminação de tipos de metal - Como a indução de pulso detecta metal pelo período de tempo necessário para que os pulsos das anomalias se deteriorem, geralmente é usado apenas para detectar o metal, em vez de determinar o tipo de metal.
( fonte )
... tamanho, profundidade, alvos circundantes e resposta do solo podem alterar o sinal de forma que a discriminação adequada não seja possível.
( fonte )
Muitas tentativas foram feitas para criar detectores de metais pulsados ​​capazes de distinguir entre ferro, prata e cobre, mas todas essas tentativas tiveram um sucesso muito limitado. Isto é devido à física do sinal de pulso.
( fonte )

Uma abordagem para solucionar esse problema é usar bobinas de duplo D ( DD ) em vez do loop mono usual, por exemplo, nos populares detectores de metais da série GPX da Minelab :

( fonte )
Nessa bobina, os enrolamentos de transmissão ( TX ) e de recepção ( RX ) são divididos:

( fonte )
Nesse caso, uma análise do sinal do alvo é realizada não apenas quando diminui, mas também à medida que a corrente aumenta na bobina transmissora. Mas essa discriminação não é muito confiável:

( fonte )
Mas e uma bobina mono loop? Muitos trabalhos ( link 1 link 2 link 3 ) indicam que o sinal na bobina do alvo pode ser representado como uma soma ponderada de sinais exponenciais em decomposição, cujos valores máximos e constantes de tempo são individuais e dependem do material, tamanho e forma do alvo:
u(t)= sumNi=1Aiet/ taui
Experimentos de discriminação com o detector de metais padrão do Exército dos EUA relataram que objetos pequenos eram bem caracterizados por um único expoente em experimentos realizados pelos autores do artigo. Ae alphat , e para objetos grandes, dois já eram necessários - Ae alphat+Seja betat .
Este artigo indica que a constante de tempo do componente exponencial pode ser representada como a razão da indutância e resistência equivalentes  taue=Le acimadeR e sua expressão é dada para um cilindro com um raio da base R e alto h :
 tau= mur mu0 sigmaR2h acimade8
Neste artigo , é dada uma expressão para a constante de tempo de decaimento das correntes de Foucault para uma esfera de raio R :
 tau= mur mu0 sigmaR2 over chi2 ,
onde  chi É o resultado da resolução da equação tg chi=( mur1) chi sobre mur1+ chi2

Nota : essas expressões analíticas só podem ser obtidas para corpos simétricos simples. Portanto, para estudar correntes parasitas, pode-se usar pacotes de software para simulação numérica de processos eletromagnéticos. Um exemplo é a simulação de um freio eletromagnético por corrente de Foucault no pacote COMSOL Multiphysics :

( fonte )

Como pode ser visto, as expressões para a constante de tempo juntas incluem permeabilidade magnética, condutividade elétrica e tamanho do alvo. Separar a influência desses fatores separadamente, necessária para a discriminação, não é tão simples.
No trabalho já mencionado, propõe-se o uso do classificador bayesiano para distinguir minas de detritos metálicos (duas hipóteses são testadas: H0 - lixo H1 - mina), mas isso requer estimativas adicionais da simetria do sinal etc. (É interessante que a composição dos fatores utilizados inclua a energia do sinal, estimada como  sumNi=1u2i cdot Deltat )
Para ilustrar, construí na tela do meu suporte experimental o design original de um gráfico da tensão na bobina para vários alvos:
sem alvo:

alvo número 1 (metal ferroso) a diferentes distâncias da bobina:

objetivo número 2 (metal ferroso):

alvo número 3 (metal não ferroso) a diferentes distâncias da bobina:

objetivo número 4 (metal não ferroso):

Como você pode ver, devido à maior permeabilidade magnética, os alvos do metal ferroso têm um nível de sinal inicial mais alto do que os alvos do metal não ferroso, mas o sinal atenua mais rapidamente devido à menor condutividade elétrica.
REDE NEURAL
Como, então, com base nessas características muito rigorosas, classificar o alvo, principalmente ao alterar a distância do alvo à bobina do detector de metais? Temos uma ferramenta maravilhosa - uma rede neural artificial. As redes neurais jogam jogo da velha , blackjack , pôquer , prevêem o clima e a qualidade do vinho , calculam a resistência ao movimento de máquinas agrícolas ... Para que possamos usar uma rede neural para resolver o problema da discriminação!
A prova de que isso é possível é o artigo “Melhorando o desempenho dos sistemas PI através do uso de rede neural” por pesquisadores iranianos:

Dados para uma rede neural
Para preencher a matriz de dados para treinamento, validação e teste da rede neural, quando pressiono um botão no corpo da minha bancada de testes, 8 pontos são medidos (o número de pontos selecionados empiricamente) na curva de tensão e o ATmega328 ADC lê em forma simbólica na porta serial conectada ao conector USB do computador.
No suporte em frente à entrada do amplificador operacional, um limitador de diodo é ativado, mas, como a simulação mostrou, na área de interesse para nós (com uma baixa tensão na bobina), seu efeito no valor da tensão é insignificante:

Ativando o modo de registro em um programa terminal (por exemplo, Tera Term ), obtemos dados "brutos" (por conveniência, comentários podem ser adicionados ao protocolo no Tera Term ). Um pequeno utilitário escrito em Go converte esses dados em um formato adequado para consumo por uma rede neural:
i1 i2 ... i8 o1 o2
Exemplo de uma linha com um conjunto de valores:
588 352 312 280 252 240 206 192 0 1
Os dados de entrada i1 i2 ... i8 são amostras de um ADC de 10 bits no intervalo de 0 a 1023.
A saída o1 o2 é apresentada na forma:
“Metal ferroso” ( 1 0), “metal não ferroso” (0 1 ).
Coletei dados quando havia um alvo feito de metal ferroso próximo à bobina (alvo nº 1, alvo nº 2) e um alvo de metal não ferroso (alvo nº 3, alvo nº 4), e os alvos estavam localizados a distâncias diferentes da bobina de pesquisa. Para uso posterior, selecionamos dados correspondentes a um nível de sinal suficiente - com pelo menos dois valores diferentes de zero. Os conjuntos de dados correspondentes à sobrecarga de entrada do ADC também foram descartados - contendo vários valores máximos possíveis (1023):

Para ilustrar, realizei uma análise de regressão para um conjunto de dados:

O sinal recebido é bem descrito pela soma de dois exponenciais:
437,9e0,29x+93,1e12,1x onde x - número de referência.
Aloquei a maioria dos dados (110 conjuntos de valores, arquivo train.dat ) para treinamento ( conjunto de dados de treinamento ) (eles são adicionalmente randomizados - baralhados durante o carregamento) e a parte menor (40 conjuntos, arquivo test.dat ) - para validação de rede neural ( validação conjunto de dados ) - faz uma verificação cruzada em sua forma mais simples (em dados adiados ( conjunto de dados de validação )).
Estrutura de rede neural
A rede neural clássica de distribuição direta clássica criada terá três camadas:
a camada de entrada - de 8 neurônios - percebe os pontos da curva de tensão;
camada oculta - de três neurônios;
camada de saída - de dois neurônios.

(rede "8-3-2")
Os iranianos no trabalho acima usaram duas amostras (respectivamente, dois neurônios de entrada) e três neurônios em duas camadas ocultas (o diagrama da rede neural é representado e descrito em seu artigo de maneira não muito clara).
Estado do neurônio z definido como ponderado ( w - peso) quantidade n sinais de entrada x (percebida pelos dendritos) e preconceitos b :
z= sumni=1wi cdotxi+wi+1 cdotb
(a adição de viés pode ser representada como o efeito de um viés de neurônio adicional)
O estado do neurônio é convertido em um sinal de saída (nos terminais do axônio) usando a função de ativação f :
y=f(z)
Os sinais de entrada da rede neural que chegam aos neurônios da camada de entrada são transmitidos para suas saídas inalteradas, o que corresponde a uma função de ativação linear:
f(z)=z
Para neurônios da camada oculta e de saída, uma função de ativação não linear, o "sigmóide", ou melhor, sua opção muito popular, a função logística, é usada com um intervalo de valores (0; 1):
f(z)=1 over1+ez
Essa escolha da função de ativação é ótima para amostras ADC não negativas. Mas isso requer, é claro, a normalização dos valores de entrada - divida-os por 1024, o que garante um valor menor que 1.
Os iranianos usavam a tangente hiperbólica como função de ativação.
Os valores nas saídas dos neurônios da camada de saída determinam os resultados da rede neural. O neurônio com o valor máximo de saída indicará a decisão (a classe vencedora) tomada pela rede: a primeira classe é "metal ferroso", a segunda classe é "metal não ferroso".
Os iranianos usaram três neurônios de saída, indicando ferro, cobre e chumbo.
O Python é frequentemente usado para resolver problemas de aprendizado de máquina - PyTorch , Keras , TensorFlow , CNTK , bibliotecas e estruturas para redes neurais também são criadas para JavaScript - Synaptic , Java - Deeplearning4j , C ++ - CNTK e MATLAB .
Porém, para o uso subsequente do "campo" em um detector de metais, essas estruturas / bibliotecas são de pouca utilidade; portanto, para uma compreensão detalhada do processo, construí minha rede neural sem usar bibliotecas de suporte da ANN adicionais. Obviamente, uma rede neural também pode ser escrita em BASIC :-). Mas, sob a influência de minhas preferências subjetivas, escolhi Go .
Treinamento e validação de redes neurais
Ao criar uma rede, os pesos são inicializados com valores aleatórios no intervalo (-0,1; 0,1).
Usei o método de descida de gradiente estocástico ( SGD ) para treinar a rede.
A rede neural executa uma iteração do processo de aprendizado, usando um dos conjuntos de dados fornecidos para o treinamento em sequência. Nesse caso, a operação de distribuição direta é executada primeiro - a rede processa o conjunto de sinais fornecidos pelo exemplo de treinamento fornecido à entrada. Em seguida, com base na solução obtida, o algoritmo de retropropagação é implementado. Para atualizar as escalas no processo de aprendizagem, apliquei a fórmula da descida do gradiente "baunilha", que usa um hiperparâmetro - o coeficiente da taxa de aprendizagem  alpha (às vezes indicado  eta ), ou seja, segundo parâmetro hiperparâmetro popular - fator momento  gama ( fator de momento ).
A era do aprendizado termina após o uso de toda a gama de dados de treinamento. Após o final da era, o quadrado médio do erro ( MSE ) do treinamento é calculado, a rede neural recebe um conjunto de valores para validação (verificação cruzada de dados diferidos), o quadrado médio do erro de validação é determinado, a precisão das previsões ( precisão ) e as repetições do ciclo. O ciclo para após atingir o nível requerido do quadrado médio do erro de validação.
Após compilar o código-fonte (arquivo nn4md.go ) e iniciar o arquivo executável, o processo de aprendizado é exibido no número da era do console ( Epoch ), quadrado médio dos erros de aprendizado e validação ( MSE ) e precisão das previsões no conjunto de dados para validação ( Acc .).
Aqui está um fragmento desse protocolo:

Uma mudança no número inicial afeta os valores iniciais dos pesos da rede neural, o que leva a pequenas diferenças no processo de aprendizagem. Com um fator de velocidade de aprendizado de 0,1, o aprendizado é concluído (quando MSE = 0,01 no conjunto de testes) em cerca de 300 épocas.
A precisão das decisões sobre o conjunto de dados para validação é de 100% (o programa fornece o número do neurônio vencedor, começando de 0 - “0” - o primeiro neurônio, metal ferroso; “1” - o segundo neurônio, metal não ferroso):
0 -> 0
0 -> 0
0 -> 0
...
1 -> 1
1 -> 1
1 -> 1

Os pesos da rede neural resultantes após o treinamento são armazenados para uso posterior no arquivo de texto nn4md.json no formato JSON . A propósito, para codificar estruturas JSON no Go , é conveniente usar essa ferramenta online .
Como ainda não existe um padrão universalmente aceito e conveniente para armazenar as configurações de redes neurais (embora exista, é claro, o NNEF - mas para uma rede tão simples isso é demais IMHO ), usei meu próprio formato:

Teste de rede neural
E agora estamos testando uma rede neural treinada no reconhecimento de novos alvos ( conjunto de dados de teste ).
Objetivo número 5 (de metais ferrosos) :
Tipo de curva:

Conjunto de valores:
768 224 96 48 14 0 0 0
Objetivo número 6 (de metais não ferrosos) :
Tipo de curva:

Conjunto de valores:
655 352 254 192 152 124 96 78
Após concluir o treinamento, o programa espera a entrada de dados para teste.
Verifique o objetivo número 5:

Sucesso - "0" - metal ferroso.
Agora verifique o objetivo número 6:

Sucesso - “1” - metal não ferroso.
Isso quase acabou por ser " prova de conceito ".
Arquivos de conjunto de dados, um arquivo de peso de rede e código-fonte estão disponíveis no repositório no GitHub.

Source: https://habr.com/ru/post/pt435884/


All Articles