Búsqueda de metales y ... red neuronal

El principio de funcionamiento de un detector de pulso de metales.
Una de las opciones populares para la construcción de dispositivos de búsqueda de metales es un detector de metales por pulso ( inducción ( PI )): un dispositivo confiable y sin pretensiones (buena profundidad de detección, resistencia al aumento de la mineralización del suelo, la capacidad de trabajar en agua salada), que tiene varios campos de aplicación, desde asuntos militares (usuarios tradicionales de "impulsos") antes de la búsqueda de oro (este pasatiempo es especialmente popular en Australia).
Pero también tiene un inconveniente significativo: grandes dificultades con la discriminación, es decir determinando el tipo de objetivo, por ejemplo, para averiguar si está hecho de metal no ferroso o negro, o para distinguir una mina antipersonal en una caja de plástico de un montón de desechos metálicos. ¿Cuál es la causa de este problema?
Considere el principio de funcionamiento de un detector de metales pulsado.


Una llave electrónica (generalmente un MOSFET que puede soportar voltajes de varios cientos de voltios; por ejemplo, el popular IRF740 se usa en este trabajo de ingenieros malayos, y el IRF730 menos potente se usa sobre la base de la matriz analógica a digital programable GreenPAK ) controla la conexión de la bobina de búsqueda a una fuente de alimentación (batería batería). Cuando se aplica un pulso de control (generalmente con una frecuencia de varias decenas y cientos de hertzios) a la puerta del transistor, el MOSFET se abre: el circuito se cierra, una corriente creciente (gradualmente debido al proceso transitorio) comienza a fluir a través de la bobina. Estamos esperando varias decenas o cientos de microsegundos de aumento de corriente al nivel deseado y ... interrumpimos el circuito: el pulso de control ha terminado. Actual yo a través de la bobina y, en consecuencia, el flujo magnético  P h i la bobina disminuye bruscamente (para acelerar el proceso de cierre del MOSFET, el pulso de control se suministra no directamente a la puerta, sino a través de un controlador especial) que, debido al fenómeno de la inducción electromagnética, provoca la aparición de autoinducción EMF e L = - w d P h i o v e r d t   y un fuerte aumento en el voltaje de la bobina. Entonces el nivel de voltaje en la bobina comienza a disminuir. Pero si un objeto conductor ("objetivo") se encuentra cerca de la bobina, entonces el flujo magnético que disminuye junto con la corriente a través de la bobina induce corrientes parásitas i i n en este objetivo Estas corrientes parásitas crean su propio flujo magnético.  P h i i n , que intenta mantener el campo magnético de amortiguación de la bobina. Este efecto conduce a un aumento en la duración de la atenuación del voltaje a través de la bobina, que es un indicador de la ausencia o presencia de un objetivo (la decisión se toma integrando la señal y estimando el valor integral ( a ) o en función de los valores de la señal en varios puntos ( b )):


Nota : los pulsos también pueden ser bipolares (por ejemplo, en el detector de metales Vallon VMH2 , un dispositivo clásico utilizado en la remoción de minas):

( fuente )
Al mismo tiempo, el valor promedio (componente constante) del campo magnético generado por el detector de metales es cercano a cero, lo que debería (como dicen cuidadosamente los catálogos, "según el fabricante") evitar el debilitamiento al buscar minas que respondan a un campo magnético (aunque, como dice el libro "Manual de detectores de metales para desminado humanitario", con un despeje humanitario de minas, tal incidente es poco probable).

Junto con la opción descrita con una sola bobina, que combina las funciones de transmisión y recepción, hay detectores de pulso de metal con dos bobinas separadas. Este esquema se usa no solo en el campo de la búsqueda de metales, sino también en la detección de fallas ( prueba de corriente de Foucault pulsada (PEC) ) - enlace 1 , enlace 2 . En este caso, una de las bobinas (bobina de transmisión / accionamiento ) sirve para excitar las corrientes parásitas en el objetivo, y la otra ( bobina de recepción / captación ) es un sensor de campo magnético. Este enfoque hace posible analizar el campo magnético no solo en la etapa de disminución (después de desconectar la fuente de energía de la bobina de transmisión), sino también en la etapa de aumento (después de conectar la fuente de energía a la bobina de transmisión):

Aquí hay una gran descripción de esta tecnología:
El método de decaimiento de la corriente de Foucault para la caracterización de resistividad de metales de alta pureza

Problema de discriminación
El problema de reconocer el tipo de metal surge del hecho de que la curva de voltaje resultante en la bobina está influenciada por el tamaño y la forma del objetivo, su distancia desde la bobina y la electricidad (conductividad específica  s i g m a ) y magnético (permeabilidad magnética  m U ) propiedades del material de destino.
Aquí hay algunas citas sobre este tema:

(fuente: Ahmet S. Turk, Koksal A. Hocaoglu, Alexey A. Vertiy Sensores del subsuelo)
Discriminación de tipos de metales: dado que la inducción de pulso detecta el metal a través del tiempo que tardan en decaer los pulsos de las anomalías, generalmente solo se usa para detectar el metal, en lugar de determinar el tipo de metal.
( fuente )
... el tamaño, la profundidad, los objetivos circundantes y la respuesta del suelo pueden alterar la señal de tal manera que no sea posible una discriminación adecuada.
( fuente )
Se han hecho muchos intentos para crear detectores de metales pulsados ​​capaces de distinguir entre hierro, plata y cobre, pero todos estos intentos han tenido un éxito muy limitado. Esto se debe a la física de la señal de pulso.
( fuente )

Un enfoque para resolver este problema es utilizar bobinas Double-D ( DD ) en lugar del bucle mono habitual, por ejemplo, en los populares detectores de metales de la serie GPX de Minelab :

( fuente )
En dicha bobina, los devanados de transmisión ( TX ) y de recepción ( RX ) se dividen:

( fuente )
En este caso, se realiza un análisis de la señal del objetivo no solo cuando disminuye, sino también a medida que aumenta la corriente en la bobina de transmisión. Pero tal discriminación no es muy confiable:

( fuente )
Pero, ¿qué pasa con una bobina mono loop? Muchos trabajos ( enlace 1 enlace 2 enlace 3 ) indican que la señal en la bobina desde el objetivo puede representarse como una suma ponderada de señales exponenciales en descomposición, cuyos valores máximos y constantes de tiempo son individuales y dependen del material, tamaño y forma del objetivo:
u ( t ) = s u m N i = 1 A i e - t / t a u i  
Los experimentos de discriminación con el detector de metales estándar del Ejército de los EE. UU. Informaron que los objetos pequeños se caracterizaron bien por un solo exponente en los experimentos realizados por los autores del artículo. A e - a l p h a t  , y para objetos grandes ya se necesitaban dos: Ae alphat+Be betat .
Este artículo indica que la constante de tiempo del componente exponencial se puede representar como la relación de la inductancia y resistencia equivalentes  taue=Le overR y su expresión se da para un cilindro con un radio de la base R y alto h :
 tau= mur mu0 sigmaR2h másde8
En este artículo , se da una expresión para la constante de tiempo de decaimiento de las corrientes parásitas para una esfera de radio R :
 tau= mur mu0 sigmaR2 over chi2 ,
donde  chi Es el resultado de resolver la ecuación. tg chi=( mur1) chi over mur1+ chi2

Nota : tales expresiones analíticas solo pueden obtenerse para cuerpos simétricos simples. Por lo tanto, para estudiar las corrientes de Foucault, se pueden usar paquetes de software para la simulación numérica de procesos electromagnéticos. Un ejemplo es la simulación de un freno electromagnético de corriente parásita en el paquete COMSOL Multiphysics :

( fuente )

Como se puede ver, las expresiones para la constante de tiempo juntas incluyen permeabilidad magnética, conductividad eléctrica y tamaño objetivo. Separar la influencia de estos factores por separado, que se requiere para la discriminación, no es tan simple.
En el trabajo ya mencionado, se propone utilizar el clasificador bayesiano para distinguir las minas de los desechos metálicos (se prueban dos hipótesis: H0 basura H1 - mío), pero esto requiere estimaciones adicionales de la simetría de la señal, etc. (Es interesante que la composición de los factores utilizados incluya la energía de la señal, estimada como  sumNi=1u2i cdot Deltat )
Para ilustrar, construí en la pantalla de mi stand experimental el diseño original de un gráfico del voltaje a través de la bobina para varios objetivos:
sin objetivo:

objetivo número 1 (metal ferroso) a diferentes distancias de la bobina:

objetivo número 2 (metal ferroso):

objetivo número 3 (metal no ferroso) a diferentes distancias de la bobina:

objetivo número 4 (metal no ferroso):

Como puede ver, debido a la mayor permeabilidad magnética, los objetivos de metales ferrosos tienen un nivel de señal inicial más alto que los objetivos de metales no ferrosos, pero la señal se atenúa más rápido debido a la menor conductividad eléctrica.
RED NEURAL
Entonces, ¿cómo, en base a estas características muy estrictas, clasificar el objetivo, especialmente al cambiar la distancia desde el objetivo hasta la bobina del detector de metales? Tenemos una herramienta maravillosa: una red neuronal artificial. Las redes neuronales juegan al tic-tac-toe , al blackjack , al póker , predicen el clima y la calidad del vino , calculan la resistencia al movimiento de la maquinaria agrícola ... ¡De modo que podemos usar una red neuronal para resolver el problema de la discriminación!
La prueba de que esto es posible es el artículo "Mejora del rendimiento de los sistemas de PI mediante el uso de redes neuronales" por investigadores iraníes:

Datos para una red neuronal
Para llenar la matriz de datos para el entrenamiento, la validación y las pruebas de la red neuronal, cuando presiono un botón en el cuerpo de mi banco de pruebas, se miden 8 puntos (el número de puntos seleccionados empíricamente) en la curva de voltaje y el ATmega328 ADC se lee en forma simbólica en el puerto serie conectado al conector USB de la computadora.
En el stand frente a la entrada del amplificador operacional, se enciende un limitador de diodo, pero, como lo ha demostrado la simulación, en el área de interés para nosotros (con un voltaje bajo en la bobina) su efecto sobre el valor del voltaje es insignificante:

Al activar el modo de registro en un programa de terminal (por ejemplo, Tera Term ), obtenemos datos "en bruto" (por conveniencia, se pueden agregar comentarios al protocolo en Tera Term ). Una pequeña utilidad escrita en Go convierte estos datos en un formato adecuado para el consumo de una red neuronal:
i1 i2 ... i8 o1 o2
Ejemplo de una fila con un conjunto de valores:
588 352 312 280 252 240 206 192 0 1
Los datos de entrada i1 i2 ... i8 son muestras de un ADC de 10 bits en el rango 0 ... 1023.
La salida o1 o2 se presenta en la forma:
"Metal ferroso" ( 1 0), "metal no ferroso" (0 1 ).
Recopilé datos cuando había un objetivo hecho de metal ferroso cerca de la bobina (objetivo n. ° 1, objetivo n. ° 2) y un objetivo de metal no ferroso (objetivo n. ° 3, objetivo n. ° 4), y los objetivos estaban ubicados a diferentes distancias de la bobina de búsqueda. Para su uso posterior, seleccionamos datos correspondientes a un nivel de señal suficiente , con al menos dos valores distintos de cero. También se descartaron los conjuntos de datos correspondientes a la sobrecarga de entrada del ADC , que contienen varios valores máximos posibles (1023):

Para ilustrar, realicé un análisis de regresión para un conjunto de datos:

La señal recibida está bien descrita por la suma de dos exponenciales:
437.9e0.29x+93.1e12.1x donde x - número de referencia.
Asigné la mayoría de los datos (110 conjuntos de valores, archivo train.dat ) para entrenamiento ( conjunto de datos de entrenamiento ) (se aleatorizan adicionalmente - barajados durante la carga), y la parte más pequeña (40 sets, archivo test.dat ) - para la validación de la red neuronal ( validación conjunto de datos ): verificaciones cruzadas en su forma más simple (en datos diferidos ( conjunto de datos de reserva )).
Estructura de la red neuronal
La red neuronal de distribución directa clásica creada tendrá tres capas:
la capa de entrada , de 8 neuronas, percibe los puntos de la curva de voltaje;
capa oculta - de tres neuronas;
capa de salida - de dos neuronas.

(red "8-3-2")
Los iraníes en el trabajo anterior utilizaron dos muestras (respectivamente, dos neuronas de entrada) y tres neuronas en dos capas ocultas (el diagrama de la red neuronal se representa y describe en su artículo no con demasiada claridad).
Estado de la neurona z definido como ponderado ( w - peso) cantidad n señales de entrada x (percibido por dendritas) y sesgos b :
z= sumni=1wi cdotxi+wi+1 cdotb
(la adición de sesgo se puede representar como el efecto de un sesgo neuronal adicional)
El estado de la neurona se convierte en una señal de salida (en los terminales del axón) usando la función de activación f :
y=f(z)
Las señales de entrada de la red neuronal que llegan a las neuronas de la capa de entrada se transmiten a sus salidas sin cambios, lo que corresponde a una función de activación lineal:
f(z)=z
Para las neuronas de la capa oculta y de salida, se utiliza una función de activación no lineal, el "sigmoide", o más bien su opción muy popular, la función logística, con un intervalo de valores (0; 1):
f(z)=1 over1+ez
Esta elección de la función de activación es excelente para muestras de ADC no negativas. Pero esto requiere, por supuesto, la normalización de los valores de entrada: divídalos por 1024, lo que garantiza un valor inferior a 1.
Los iraníes usaron la tangente hiperbólica como función de activación.
Los valores en las salidas de las neuronas de la capa de salida determinan los resultados de la red neuronal. La neurona con el valor de salida máximo indicará la decisión (la clase ganadora) tomada por la red: la primera clase es "metal ferroso", la segunda clase es "metal no ferroso".
Los iraníes usaron tres neuronas de salida, que indican hierro, cobre y plomo.
Python se usa a menudo para resolver problemas de aprendizaje automático: PyTorch , Keras , TensorFlow , CNTK , bibliotecas y marcos para redes neuronales también se crean para JavaScript - Synaptic , Java - Deeplearning4j , C ++ - CNTK , y MATLAB no se queda atrás.
Pero para el uso posterior de "campo" en un detector de metales, estos marcos / bibliotecas son de poca utilidad, por lo tanto, para una comprensión detallada del proceso, construí mi red neuronal sin usar bibliotecas de soporte adicionales de ANN. Por supuesto, una red neuronal también se puede escribir en BASIC :-). Pero bajo la influencia de mis preferencias subjetivas, elegí Ir .
Entrenamiento y validación de redes neuronales
Al crear una red, los pesos se inicializan con valores aleatorios en el rango (-0.1; 0.1).
Utilicé el método de descenso de gradiente estocástico ( SGD ) para entrenar la red.
La red neuronal realiza una iteración del proceso de aprendizaje, utilizando uno de los conjuntos de datos proporcionados para el entrenamiento en secuencia. En este caso, la operación de distribución directa se realiza primero: la red procesa el conjunto de señales suministradas desde el ejemplo de capacitación suministrado a la entrada. Luego, en base a la solución obtenida, se implementa el algoritmo de retropropagación. Para actualizar las escalas en el proceso de aprendizaje, apliqué la fórmula del descenso de gradiente "vainilla", que utiliza un hiperparámetro: el coeficiente de velocidad de aprendizaje  alpha (a veces indicado  eta ), es decir segundo hiperparámetro popular no utilizado - factor de momento  gamma ( factor de impulso ).
La era del aprendizaje termina después de usar toda la gama de datos de entrenamiento. Después del final de la era, se calcula el cuadrado medio del error ( Error Cuadrático Medio ( MSE )) del entrenamiento, la red neuronal se alimenta con un conjunto de valores para la validación (verificación cruzada de datos diferidos), se determina el cuadrado promedio del error de validación, la precisión de las predicciones ( precisión ) y las repeticiones del ciclo. El ciclo se detiene después de alcanzar el nivel requerido del cuadrado medio del error de validación.
Después de compilar el código fuente (archivo nn4md.go ) e iniciar el archivo ejecutable, el proceso de aprendizaje se muestra en el número de era de la consola ( Epoch ), el cuadrado promedio de errores de aprendizaje y validación ( MSE ) y la precisión de las predicciones en el conjunto de datos para la validación ( Acc .).
Aquí hay un fragmento de dicho protocolo:

Un cambio en el número inicial afecta los valores iniciales de los pesos de la red neuronal, lo que conduce a pequeñas diferencias en el proceso de aprendizaje. Con un factor de velocidad de aprendizaje de 0.1, el aprendizaje se completa (cuando MSE = 0.01 en el conjunto de prueba) en aproximadamente 300 épocas.
La precisión de las decisiones sobre el conjunto de datos para la validación es del 100% (el programa proporciona el número de la neurona ganadora, comenzando desde 0- "0" - la primera neurona, metal ferroso; "1" - la segunda neurona, metal no ferroso):
0 -> 0
0 -> 0
0 -> 0
...
1 -> 1
1 -> 1
1 -> 1

Los pesos de red neuronal resultantes después del entrenamiento se almacenan para su uso posterior en el archivo de texto nn4md.json en formato JSON . Por cierto, para codificar estructuras JSON en Go , es conveniente utilizar esta herramienta en línea .
Dado que todavía no se ha desarrollado un estándar generalmente aceptado y conveniente para el formato de almacenamiento de la configuración de las redes neuronales (aunque, por supuesto, existe NNEF , pero para una red tan simple esto es demasiado en mi humilde opinión ), utilicé mi propio formato:

Prueba de red neuronal
Y ahora estamos probando una red neuronal capacitada en el reconocimiento de nuevos objetivos ( conjunto de datos de prueba ).
Objetivo número 5 (del metal ferroso) :
Tipo de curva:

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

Conjunto de valores:
655352254192152124 96 78
Después de completar la capacitación, el programa espera la entrada de datos para las pruebas.
Verifique el objetivo número 5:

Éxito - "0" - metal ferroso.
Ahora verifique el objetivo número 6:

Éxito - "1" - metal no ferroso.
Eso casi resultó ser una " prueba de concepto ".
Los archivos de conjunto de datos, un archivo de peso de red y el código fuente están disponibles en el repositorio en GitHub.

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


All Articles