Le principe de fonctionnement d'un détecteur de métaux à impulsionsL'une des options populaires pour la conception de dispositifs de recherche de métaux est un détecteur de métaux à impulsion (
induction (
PI )) - un dispositif sans prétention et fiable (bonne profondeur de détection, résistance à une minéralisation accrue du sol, capacité à travailler dans l'eau salée), qui a différents domaines d'application - des affaires militaires (utilisateurs traditionnels d '"impulsions") avant la recherche d'or (ce passe-temps est particulièrement populaire en Australie).
Mais il a également un inconvénient important - de grandes difficultés avec la discrimination, c'est-à-dire en déterminant le type de cible, par exemple, pour savoir si elle est en métal non ferreux ou noir, ou pour distinguer une mine antipersonnel dans un boîtier en plastique d'un tas de débris métalliques? Quelle est la cause de ce problème?
Considérez le principe de fonctionnement d'un détecteur de métaux pulsé.

Une clé électronique (généralement un
MOSFET pouvant supporter des tensions de plusieurs centaines de volts - par exemple, le populaire
IRF740 est utilisé dans
ce travail d' ingénieurs malaisiens, et le moins puissant
IRF730 est utilisé sur la base de la
matrice analogique-numérique programmable
GreenPAK ) contrôle la connexion de la bobine de recherche à une source d'alimentation (batterie batterie). Lorsqu'une impulsion de commande (généralement avec une fréquence de plusieurs dizaines de centaines de hertz) est appliquée à la grille du transistor, le
MOSFET s'ouvre - le circuit est fermé, un courant croissant (graduellement en raison du processus transitoire) commence à traverser la bobine. Nous attendons plusieurs dizaines ou centaines de microsecondes d'augmentation de courant au niveau souhaité et ... nous coupons le circuit - l'impulsion de commande est terminée. Courant
i à travers la bobine et, par conséquent, le flux magnétique
Phi la bobine diminue fortement (pour accélérer le processus de fermeture du
MOSFET , l'impulsion de commande est fournie non pas directement à la porte, mais via un pilote spécial), ce qui, en raison du phénomène d'induction électromagnétique, provoque l'apparition d'auto-induction EMF
eL=−wd Phi overdt et une forte augmentation de la tension de la bobine. Ensuite, le niveau de tension sur la bobine commence à diminuer. Mais si un objet conducteur («cible») est situé près de la bobine, le flux magnétique diminuant avec le courant à travers la bobine induit des courants de Foucault
iin dans cet objectif. Ces courants de Foucault créent leur propre flux magnétique.
Phiin , qui essaie de maintenir le champ magnétique d'amortissement de la bobine. Cet effet conduit à une augmentation de la durée de l'atténuation de la tension aux bornes de la bobine, qui est un indicateur de l'absence ou de la présence d'une cible (la décision est prise soit en intégrant le signal et en estimant la valeur intégrale (
a ), soit sur la base des valeurs du signal en plusieurs points (
b )):
Remarque : les impulsions peuvent également être bipolaires (par exemple, dans le détecteur de métaux
Vallon VMH2 - un appareil classique utilisé pour le déminage):

(
source )
Dans le même temps, la valeur moyenne (composante constante) du champ magnétique généré par le détecteur de métaux est proche de zéro, ce qui devrait (comme le disent soigneusement les catalogues, "selon le fabricant") éviter de saper lors de la recherche de mines qui répondent à un champ magnétique (bien que, comme le dit le livre
«Manuel du détecteur de métaux pour le déminage humanitaire», avec un
déminage humanitaire, un tel incident est peu probable).
En plus de l'option décrite avec une seule bobine, combinant les fonctions de transmission et de réception, il existe des détecteurs de métaux à impulsions avec deux bobines distinctes. Ce schéma est utilisé non seulement dans le domaine de la recherche de métaux, mais aussi dans la détection de défauts (
test par courants de Foucault pulsés (PEC) ) -
lien 1 ,
lien 2 . Dans ce cas, l'une des bobines (
bobine d'émission / d'entraînement ) sert à exciter les courants de Foucault dans la cible, et l'autre (
bobine de réception / de capture ) est un capteur de champ magnétique. Cette approche permet d'analyser le champ magnétique non seulement au stade de la décroissance (après avoir déconnecté la source d'alimentation de la bobine émettrice), mais également à l'étape croissante (après avoir connecté la source d'alimentation à la bobine émettrice):

Voici une excellente description de cette technologie:
La méthode de désintégration par courants de Foucault pour la caractérisation de la résistivité des métaux de haute pureté Problème de discriminationLe problème de la reconnaissance du type de métal se pose du fait que la courbe de tension résultante sur la bobine est affectée par la taille et la forme de la cible, sa distance par rapport à la bobine et électrique (conductivité spécifique
sigma ) et magnétique (perméabilité magnétique
mu ) propriétés du matériau cible.
Voici quelques citations à ce sujet:

(source:
Ahmet S. Turk, Koksal A. Hocaoglu, Alexey A. Vertiy Subsurface Sensing)
Discrimination des types de métaux - Étant donné que l'induction par impulsions détecte le métal via le temps qu'il faut pour que les impulsions des anomalies se désintègrent, il n'est généralement utilisé que pour détecter le métal, plutôt que pour déterminer le type de métal.
(
source )
... la taille, la profondeur, les cibles environnantes et la réponse du sol peuvent altérer le signal de telle sorte qu'une discrimination appropriée n'est pas possible.
(
source )
De nombreuses tentatives ont été faites pour créer des détecteurs de métaux pulsés capables de distinguer le fer, l'argent et le cuivre, mais toutes ces tentatives ont eu un succès très limité. Cela est dû à la physique du signal d'impulsion.
(
source )
Une approche pour résoudre ce problème consiste à utiliser des bobines
Double-D (
DD ) au lieu de la
boucle mono habituelle, par exemple, dans les détecteurs de métaux populaires de la série
Minelab GPX :

(
source )
Dans une telle bobine, les enroulements d'émission (
TX ) et de réception (
RX ) sont divisés:

(
source )
Dans ce cas, une analyse du signal de la cible est effectuée non seulement lorsqu'elle diminue, mais également lorsque le courant augmente dans la bobine émettrice. Mais une telle discrimination n'est pas très fiable:

(
source )
Mais qu'en est-il d'une bobine mono boucle? De nombreux travaux (
lien 1 lien 2 lien 3 ) indiquent que le signal dans la bobine de la cible peut être représenté comme une somme pondérée de signaux exponentiels en décomposition, dont les valeurs maximales et les constantes de temps sont individuelles et dépendent du matériau, de la taille et de la forme de la cible:
u(t)= sumNi=1Aie−t/ tauiDes expériences de discrimination avec le détecteur de métaux standard de l'armée américaine ont indiqué que les petits objets étaient bien caractérisés par un seul exposant dans les expériences effectuées par les auteurs de l'article.
Ae− alphat , et pour les gros objets, deux étaient déjà nécessaires -
Ae− alphat+Be− betat .
Cet article indique que la constante de temps de la composante exponentielle peut être représentée comme le rapport de l'inductance et de la résistance équivalentes
taue=Le surR et son expression est donnée pour un cylindre avec un rayon de la base
R et grand
h :
tau= mur mu0 sigmaR2h sur8Dans
cet article , une expression est donnée pour la constante de temps de décroissance des courants de Foucault pour une sphère de rayon
R :
tau= mur mu0 sigmaR2 over chi2 ,
où
chi Est le résultat de la résolution de l'équation
tg chi=( mur−1) chi over mur−1+ chi2Remarque : de telles expressions analytiques ne peuvent être obtenues que pour des corps symétriques simples. Par conséquent, pour étudier les courants de Foucault, on peut utiliser des progiciels pour la simulation numérique des processus électromagnétiques. Un exemple est la simulation d'un frein électromagnétique à courants de Foucault dans le package
COMSOL Multiphysics :

(
source )
Comme on peut le voir, les expressions de la constante de temps ensemble incluent la perméabilité magnétique, la conductivité électrique et la taille de la cible. Séparer séparément l'influence de ces facteurs, ce qui est nécessaire pour la discrimination, n'est pas si simple.
Dans les travaux déjà mentionnés,
il est proposé d'utiliser le classificateur bayésien pour distinguer les mines des débris métalliques (deux hypothèses sont testées:
H0 - poubelle
H1 - le mien), mais cela nécessite des estimations supplémentaires de la symétrie du signal, etc. (Il est intéressant de noter que la composition des facteurs utilisés comprend l'énergie du signal, estimée comme
sumNi=1u2i cdot Deltat )
Pour illustrer, j'ai construit sur l'écran de mon stand expérimental la conception originale d'un graphique de la tension aux bornes de la bobine pour différentes cibles:
aucun objectif:
cible numéro 1 (métal ferreux) à différentes distances de la bobine:
cible numéro 2 (métal ferreux):
cible numéro 3 (métal non ferreux) à différentes distances de la bobine:
objectif numéro 4 (métal non ferreux):
Comme on peut le voir, en raison de la plus grande perméabilité magnétique, les cibles en métal ferreux ont un niveau de signal initial plus élevé que les cibles en métal non ferreux, mais le signal s'atténue plus rapidement en raison d'une conductivité électrique plus faible.
RÉSEAU NEURALComment alors, sur la base de ces caractéristiques très peu contraignantes, classer la cible, notamment lors du changement de distance de la cible à la bobine du détecteur de métaux? Nous avons un merveilleux outil - un réseau neuronal artificiel. Les réseaux de neurones jouent au
tic-tac-toe , au
blackjack , au
poker , prédisent la
météo et la
qualité du vin , calculent la
résistance au mouvement des machines agricoles ... Nous allons donc utiliser un réseau de neurones pour résoudre le problème de la discrimination!
La preuve que cela est possible est l'article
«Améliorer les performances des systèmes PI grâce à l'utilisation d'un réseau de neurones» par des chercheurs iraniens:
Données pour un réseau de neuronesPour remplir le tableau de données pour la formation, la validation et les tests du réseau neuronal, lorsque j'appuie sur un bouton sur le corps de mon banc de test, 8 points sont mesurés (le nombre de points sélectionnés empiriquement) sur la courbe de tension et l'ADC ATmega328 lit sous forme symbolique dans le port série connecté au connecteur USB de l'ordinateur.
Sur le socle devant l'entrée de l'amplificateur opérationnel, un limiteur de diode est activé, mais, comme la simulation l'a montré, dans la zone qui nous intéresse (avec une basse tension sur la bobine), son effet sur la valeur de la tension est négligeable:

En activant le mode d'enregistrement dans un programme de terminal (par exemple,
Tera Term ), nous obtenons des données «brutes» (pour plus de commodité, des commentaires peuvent être ajoutés au protocole dans
Tera Term ). Un petit utilitaire écrit en
Go convertit ces données dans un format adapté à la consommation par un réseau de neurones:
i1 i2 ... i8 o1 o2
Exemple d'une ligne avec un ensemble de valeurs:
588 352 312 280 252 240 206 192 0 1Les données d'entrée i1 i2 ... i8 sont des échantillons d'un ADC 10 bits dans la plage 0 ... 1023.
La sortie o1 o2 se présente sous la forme:
«Métal ferreux» (
1 0), «métal non ferreux» (0
1 ).
J'ai collecté des données quand il y avait une cible en métal ferreux près de la bobine (cible n ° 1, cible n ° 2) et une cible en métal non ferreux (cible n ° 3, cible n ° 4), et les cibles étaient situées à des distances différentes de la bobine de recherche. Pour une utilisation ultérieure, nous avons sélectionné des données correspondant à un
niveau de signal suffisant - avec au moins deux valeurs non nulles. Les ensembles de données correspondant à la
surcharge d'entrée ADC ont également
été supprimés - contenant plusieurs valeurs maximales possibles (1023):

Pour illustrer, j'ai effectué une analyse de régression pour un ensemble de données:

Le signal reçu est bien décrit par la somme de deux exponentielles:

où
x - numéro de référence.
J'ai alloué la plupart des données (110 ensembles de valeurs, fichier
train.dat ) pour la formation (
ensemble de données de formation ) (elles sont en outre randomisées - mélangées pendant le chargement), et la plus petite partie (40 ensembles, fichier
test.dat ) - pour la
validation du réseau neuronal (
validation jeu de données ) - recoupements dans sa forme la plus simple (sur les données différées (
jeu de données d'exclusion )).
Structure du réseau neuronalLe réseau neuronal classique à distribution directe créé comprendra trois couches:
la couche d'entrée - de 8 neurones - perçoit les points de la courbe de tension;
couche cachée - de trois neurones;
couche de sortie - de deux neurones.

(réseau "8-3-2")
Les Iraniens dans le travail ci-dessus ont utilisé deux échantillons (respectivement, deux neurones d'entrée) et trois neurones dans deux couches cachées (le diagramme du réseau neuronal est décrit et décrit dans leur article pas trop clairement).État des neurones
z défini comme pondéré (
w - poids) montant
n signaux d'entrée
x (perçus par les dendrites) et les biais
b :
z= sumni=1wi cdotxi+wi+1 cdotb(l'ajout de biais peut être représenté comme l'effet d'un biais neuronal supplémentaire)
L'état du neurone est converti en un signal de sortie (aux bornes des axones) à l'aide de la fonction d'activation
f :
y=f(z)Les signaux d'entrée du réseau neuronal arrivant aux neurones de la couche d'entrée sont transmis à leurs sorties inchangés, ce qui correspond à une fonction d'activation linéaire:
f(z)=zPour les neurones de la couche cachée et de sortie, une fonction d'activation non linéaire, la «sigmoïde», ou plutôt son option très populaire, la fonction logistique, est utilisée avec un intervalle de valeurs (0; 1):
f(z)=1 sur1+e−zCe choix de fonction d'activation est idéal pour les échantillons ADC non négatifs. Mais cela nécessite, bien sûr, la normalisation des valeurs d'entrée - divisez-les par 1024, ce qui garantit une valeur inférieure à 1.
Les Iraniens ont utilisé la tangente hyperbolique comme fonction d'activation.Les valeurs aux sorties des neurones de la couche de sortie déterminent les résultats du réseau neuronal. Le neurone avec la valeur de sortie maximale indiquera la solution (la classe gagnante) faite par le réseau: la première classe est "métal ferreux", la deuxième classe est "métal non ferreux".
Les Iraniens ont utilisé trois neurones de sortie, indiquant le fer, le cuivre et le plomb.Python est souvent utilisé pour résoudre des problèmes d'apprentissage automatique -
PyTorch ,
Keras ,
TensorFlow ,
CNTK , des bibliothèques et des cadres pour réseaux de neurones sont également créés pour
JavaScript -
Synaptic ,
Java -
Deeplearning4j ,
C ++ -
CNTK et
MATLAB n'est pas
loin derrière.
Mais pour une utilisation ultérieure sur le terrain dans un détecteur de métaux, ces cadres / bibliothèques sont de peu d'utilité, donc, pour une compréhension détaillée du processus, j'ai construit mon réseau de neurones sans utiliser de bibliothèques de support ANN supplémentaires. Bien sûr, un réseau de neurones peut également être écrit en
BASIC :-). Mais sous l'influence de mes préférences subjectives, j'ai choisi
Go .
Formation et validation du réseau neuronalLors de la création d'un réseau, les pondérations sont initialisées avec des valeurs aléatoires dans la plage (-0,1; 0,1).
J'ai utilisé la méthode de
descente de gradient stochastique (
SGD ) pour entraîner le réseau.
Le réseau neuronal effectue une itération du processus d'apprentissage, en utilisant l'un des ensembles de données fournis pour la formation en séquence. Dans ce cas, l'opération de distribution directe est effectuée en premier - le réseau traite l'ensemble des signaux fournis par l'exemple d'apprentissage fourni à l'entrée. Ensuite, en fonction de la solution obtenue, l'algorithme de rétropropagation est implémenté. Pour mettre à jour les échelles dans le processus d'apprentissage, j'ai appliqué la formule de descente de gradient "vanille", qui utilise un hyperparamètre - le coefficient de
taux d'apprentissage alpha (parfois indiqué
eta ), c'est-à-dire non utilisé deuxième hyperparamètre populaire - facteur de moment
gamma (
facteur d'élan ).
L'ère de l'apprentissage se termine après l'utilisation de l'ensemble des données de formation. Après la fin de l'ère, le carré moyen de l'erreur (
Mean Squared Error (
MSE )) de la formation est calculé, le réseau de neurones est alimenté par un ensemble de valeurs pour la validation (recoupement sur les données différées), le carré moyen de l'erreur de validation est déterminé, la précision des prédictions (
précision ) et le cycle se répète. Le cycle s'arrête après avoir atteint le niveau requis du carré moyen de l'erreur de validation.
Après avoir compilé le code source (fichier
nn4md.go ) et lancé le fichier exécutable, le processus d'apprentissage est affiché dans le numéro de l'ère de la console (
Epoch ), le carré moyen des erreurs d'apprentissage et de validation (
MSE ) et la précision des prédictions sur l'ensemble de données pour la validation (
Acc .).
Voici un fragment d'un tel protocole:

Un changement dans le nombre de départ affecte les valeurs initiales des poids du réseau neuronal, ce qui conduit à de petites différences dans le processus d'apprentissage. Avec un facteur de vitesse d'apprentissage de 0,1, l'apprentissage est terminé (lorsque
MSE = 0,01 sur l'ensemble de test) en environ 300 époques.
La précision des décisions sur l'ensemble de données à valider est de 100% (le programme donne le numéro du neurone gagnant, à partir de 0- «0» - le premier neurone, métal ferreux; «1» - le deuxième neurone, métal non ferreux):
0 -> 0
0 -> 0
0 -> 0
...
1 -> 1
1 -> 1
1 -> 1
Les poids résultants du réseau neuronal après l'entraînement sont enregistrés pour une utilisation ultérieure dans le fichier texte
nn4md.json au format
JSON . Soit dit en passant, pour encoder
des structures
JSON sur
Go, il est pratique d'utiliser cet
outil en ligne .
Puisqu'une norme généralement acceptée et pratique pour le format de stockage des paramètres des réseaux de neurones n'a pas encore été développée (bien qu'il y ait, bien sûr,
NNEF - mais pour un réseau aussi simple, c'est trop
IMHO ), j'ai utilisé mon propre format:
Test de réseau neuronalEt maintenant, nous testons un réseau neuronal formé sur la reconnaissance de nouvelles cibles (
ensemble de données de test ).
Numéro cible 5 (en métal ferreux) :
Type de courbe:

Ensemble de valeurs:
768 224 96 48 14 0 0 0Numéro cible 6 (en métal non ferreux) :
Type de courbe:

Ensemble de valeurs:
655 352 254 192 152 124 96 78Après avoir terminé la formation, le programme attend la saisie des données pour les tests.
Vérifiez la cible numéro 5:

Succès - «0» - métal ferreux.
Maintenant, vérifiez la cible numéro 6:

Succès - «1» - métal non ferreux.
Cela s'est avéré être une "
preuve de concept ".
Les fichiers de jeu de données, un fichier de pondération réseau et le code source sont disponibles dans le
référentiel sur GitHub.