Metallsuche und ... neuronales Netzwerk

Das Funktionsprinzip eines Pulsmetalldetektors
Eine der beliebtesten Optionen für den Bau von Metallsuchgeräten ist ein Pulsmetalldetektor ( Induktionsmetalldetektor ( PI )) - ein unprätentiöses und zuverlässiges Gerät (gute Detektionstiefe, Beständigkeit gegen erhöhte Bodenmineralisierung, Fähigkeit, in Salzwasser zu arbeiten), das verschiedene Anwendungsbereiche hat - aus militärischen Angelegenheiten (traditionelle Benutzer von "Impulsen") vor der Suche nach Gold (dieses Hobby ist in Australien besonders beliebt).
Er hat aber auch einen erheblichen Nachteil - große Schwierigkeiten bei der Diskriminierung, d.h. indem Sie beispielsweise die Art des Ziels bestimmen, um herauszufinden, ob es aus Nichteisenmetall oder Schwarz besteht, oder um eine Antipersonenmine in einem Kunststoffgehäuse von einem Haufen Metallabfälle zu unterscheiden? Was ist die Ursache für dieses Problem?
Betrachten Sie das Funktionsprinzip eines gepulsten Metalldetektors.


Ein elektronischer Schlüssel (normalerweise ein MOSFET , der Spannungen von mehreren hundert Volt standhalten kann - beispielsweise wird in dieser Arbeit von malaysischen Ingenieuren der beliebte IRF740 verwendet, und der weniger leistungsstarke IRF730 wird auf der Grundlage der programmierbaren GreenPAK- Analog-Digital-Matrix verwendet) steuert den Anschluss der Suchspule an eine Stromquelle (Batterie) Batterie). Wenn ein Steuerimpuls (normalerweise mit einer Frequenz von mehreren Zehntausend Hertz) an das Gate des Transistors angelegt wird, öffnet sich der MOSFET - der Stromkreis wird geschlossen und ein zunehmender Strom (allmählich aufgrund des Übergangsprozesses) beginnt durch die Spule zu fließen. Wir warten auf einige zehn oder hundert Mikrosekunden Stromanstieg auf das gewünschte Niveau und ... wir unterbrechen den Stromkreis - der Steuerimpuls ist beendet. Strom ich durch die Spule und dementsprechend den Magnetfluss  P h i Die Spule nimmt stark ab (um den Schließvorgang des MOSFET zu beschleunigen , wird der Steuerimpuls nicht direkt dem Gate zugeführt, sondern über einen speziellen Treiber), was aufgrund des Phänomens der elektromagnetischen Induktion das Auftreten einer EMF-Selbstinduktion verursacht e L = - w d P h i o v e r d t   und ein starker Anstieg der Spulenspannung. Dann beginnt der Spannungspegel an der Spule abzunehmen. Befindet sich jedoch ein leitfähiges Objekt („Ziel“) in der Nähe der Spule, induziert der mit dem Strom durch die Spule abnehmende Magnetfluss Wirbelströme i i n in diesem Ziel. Diese Wirbelströme erzeugen ihren eigenen Magnetfluss.  P h i i n , die versucht, das schwindende Magnetfeld der Spule aufrechtzuerhalten. Dieser Effekt führt zu einer Verlängerung der Dauer der Dämpfung der Spannung an der Spule, was ein Indikator für das Fehlen oder Vorhandensein eines Ziels ist (die Entscheidung wird entweder durch Integrieren des Signals und Schätzen des Integralwerts ( a ) oder basierend auf den Signalwerten an mehreren Punkten ( b ) getroffen):


Hinweis : Impulse können auch bipolar sein (z. B. im Metalldetektor Vallon VMH2 - einem klassischen Gerät für die Minenräumung):

( Quelle )
Gleichzeitig liegt der Durchschnittswert (konstante Komponente) des vom Metalldetektor erzeugten Magnetfelds nahe Null, was (wie in den Katalogen sorgfältig „laut Hersteller“ angegeben) verhindern sollte, dass bei der Suche nach Minen, die auf ein Magnetfeld reagieren, untergraben wird (obwohl, wie im Buch angegeben) "Metalldetektor Handbuch für humanitäre Minenräumung", mit einer humanitären Minenräumung ist ein solcher Vorfall unwahrscheinlich).

Neben der beschriebenen Option mit einer einzelnen Spule, die die Funktionen eines Senders und eines Empfängers kombiniert, gibt es Pulsmetalldetektoren mit zwei separaten Spulen. Dieses Schema wird nicht nur im Bereich der Metallsuche verwendet, sondern auch bei der Fehlererkennung ( Pulsed Eddy Current (PEC) Testing ) - Link 1 , Link 2 . In diesem Fall dient eine der Spulen ( Sende- / Ansteuerspule ) dazu, Wirbelströme im Ziel anzuregen, und die andere ( Empfangs- / Aufnahmespule ) ist ein Magnetfeldsensor. Dieser Ansatz ermöglicht es, das Magnetfeld nicht nur im Stadium der Abnahme (nach dem Trennen der Stromquelle von der Sendespule), sondern auch im zunehmenden Stadium (nach dem Anschließen der Stromquelle an die Sendespule) zu analysieren:

Hier ist eine großartige Beschreibung dieser Technologie:
Die Wirbelstromabfallmethode zur Charakterisierung des spezifischen Widerstands von hochreinen Metallen

Diskriminierungsproblem
Das Problem der Erkennung der Metallart ergibt sich aus der Tatsache, dass die resultierende Spannungskurve an der Spule von der Größe und Form des Targets, seinem Abstand von der Spule und der elektrischen (spezifische Leitfähigkeit) beeinflusst wird  s i g m a ) und magnetisch (magnetische Permeabilität  m u ) Eigenschaften des Zielmaterials.
Hier einige Zitate zu diesem Thema:

(Quelle: Ahmet S. Turk, Koksal A. Hocaoglu, Alexey A. Vertiy Subsurface Sensing)
Unterscheidung von Metalltypen - Da die Impulsinduktion Metall über die Zeitspanne erkennt, die die Anomalien für den Abfall der Anomalien benötigen, wird sie normalerweise nur zur Erkennung des Metalls verwendet, anstatt die Metallart zu bestimmen.
( Quelle )
... Größe, Tiefe, umgebende Ziele und Bodenreaktion können das Signal so verändern, dass eine ordnungsgemäße Unterscheidung nicht möglich ist.
( Quelle )
Es wurden viele Versuche unternommen, gepulste Metalldetektoren herzustellen, die in der Lage sind, zwischen Eisen, Silber und Kupfer zu unterscheiden, aber alle diese Versuche hatten nur sehr begrenzten Erfolg. Dies liegt an der Physik des Impulssignals.
( Quelle )

Ein Ansatz zur Lösung dieses Problems besteht darin, Double-D ( DD ) -Spulen anstelle der üblichen Monoschleife zu verwenden , beispielsweise in den beliebten Metalldetektoren der Minelab GPX- Serie:

( Quelle )
In einer solchen Spule sind die Sende- ( TX ) und Empfangswicklungen ( RX ) unterteilt:

( Quelle )
In diesem Fall wird das Signal vom Ziel nicht nur analysiert, wenn es abnimmt, sondern auch, wenn der Strom in der Sendespule zunimmt. Eine solche Diskriminierung ist jedoch nicht sehr zuverlässig:

( Quelle )
Aber was ist mit einer Mono-Loop-Spule? Viele Arbeiten ( Link 1 Link 2 Link 3 ) weisen darauf hin, dass das Signal in der Spule vom Ziel als gewichtete Summe abklingender Exponentialsignale dargestellt werden kann, deren Maximalwerte und Zeitkonstanten individuell sind und vom Material, der Größe und Form des Ziels abhängen:
u ( t ) = s u m N i = 1 A i e - t / t a u i  
Diskriminierungsexperimente mit dem Standard-Metalldetektor der US-Armee zeigten, dass kleine Objekte in Experimenten, die von den Autoren des Artikels durchgeführt wurden, durch einen einzelnen Exponenten gut charakterisiert waren. A e - a l p h a t  und für große Objekte waren bereits zwei erforderlich - Ae alphat+Be betat .
Dieser Artikel zeigt, dass die Zeitkonstante der Exponentialkomponente als Verhältnis der äquivalenten Induktivität und des Widerstands dargestellt werden kann  taue=Le overR und sein Ausdruck ist für einen Zylinder mit einem Radius der Basis angegeben R und groß h ::
 tau= mur mu0 sigmaR2h über8
In dieser Arbeit wird ein Ausdruck für die Abklingzeitkonstante von Wirbelströmen für eine Kugel mit Radius gegeben R ::
 tau= mur mu0 sigmaR2 over chi2 ,
wo  chi Ist das Ergebnis der Lösung der Gleichung tg chi=( mur1) chi über mur1+ chi2

Hinweis : Solche analytischen Ausdrücke können nur für einfache symmetrische Körper erhalten werden. Um Wirbelströme zu untersuchen, kann man daher Softwarepakete zur numerischen Simulation elektromagnetischer Prozesse verwenden. Ein Beispiel ist die Simulation einer elektromagnetischen Wirbelstrombremse im COMSOL Multiphysics- Paket:

( Quelle )

Wie zu sehen ist, umfassen die Ausdrücke für die Zeitkonstante zusammen die magnetische Permeabilität, die elektrische Leitfähigkeit und die Zielgröße. Es ist nicht so einfach, den Einfluss dieser Faktoren, der für die Diskriminierung erforderlich ist, getrennt zu trennen.
In der bereits erwähnten Arbeit wird vorgeschlagen, den Bayes'schen Klassifikator zu verwenden, um Minen von Metallabfällen zu unterscheiden (zwei Hypothesen werden getestet: H0 - Müll H1 - meins), dies erfordert jedoch zusätzliche Schätzungen der Symmetrie des Signals usw. (Es ist interessant, dass die Zusammensetzung der verwendeten Faktoren die Signalenergie enthält, geschätzt als  sumNi=1u2i cdot Deltat )
Zur Veranschaulichung habe ich auf dem Bildschirm meines Versuchsstandes das ursprüngliche Design eines Diagramms der Spannung an der Spule für verschiedene Ziele erstellt:
kein Ziel:

Ziel Nummer 1 (Eisenmetall) in unterschiedlichen Abständen von der Spule:

Ziel Nummer 2 (Eisenmetall):

Ziel Nummer 3 (Nichteisenmetall) in unterschiedlichen Abständen von der Spule:

Ziel Nummer 4 (Nichteisenmetall):

Wie Sie sehen können, haben Targets aus Eisenmetall aufgrund der größeren magnetischen Permeabilität einen höheren Anfangssignalpegel als Targets aus Nichteisenmetall, aber das Signal wird aufgrund der geringeren elektrischen Leitfähigkeit schneller gedämpft.
NEURALES NETZWERK
Wie kann man dann, basierend auf diesen sehr nicht strengen Merkmalen, das Ziel klassifizieren, insbesondere wenn der Abstand vom Ziel zur Metalldetektorspule geändert wird? Wir haben ein wunderbares Werkzeug - ein künstliches neuronales Netzwerk. Neuronale Netze spielen Tic-Tac-Toe , Blackjack , Poker , sagen das Wetter und die Qualität des Weins voraus, berechnen den Widerstand gegen die Bewegung landwirtschaftlicher Maschinen ... Wir können also ein neuronales Netz verwenden, um das Problem der Diskriminierung zu lösen!
Der Beweis, dass dies möglich ist, ist der Artikel „Verbesserung der Leistung der PI-Systeme durch Verwendung eines neuronalen Netzwerks“ von iranischen Forschern:

Daten für ein neuronales Netzwerk
Um das Datenfeld für das Training, die Validierung und das Testen des neuronalen Netzwerks zu füllen, werden beim Drücken einer Taste am Körper meines Prüfstands 8 Punkte (die Anzahl der empirisch ausgewählten Punkte) auf der Spannungskurve gemessen, und der ATmega328 ADC liest symbolisch die serielle Schnittstelle, die an den USB-Anschluss des Computers angeschlossen ist.
Im Ständer vor dem Eingang des Operationsverstärkers ist ein Diodenbegrenzer eingeschaltet, aber wie die Simulation gezeigt hat, ist in dem für uns interessanten Bereich (mit einer niedrigen Spannung an der Spule) seine Auswirkung auf den Spannungswert vernachlässigbar:

Wenn Sie den Protokollierungsmodus in einem Terminalprogramm (z. B. Tera Term ) aktivieren , erhalten Sie „Rohdaten“ (der Einfachheit halber können dem Protokoll in Tera Term Kommentare hinzugefügt werden). Ein kleines in Go geschriebenes Dienstprogramm konvertiert diese Daten in ein Format, das für den Verbrauch durch ein neuronales Netzwerk geeignet ist:
i1 i2 ... i8 o1 o2
Beispiel einer Zeile mit einer Reihe von Werten:
588 352 312 280 252 240 206 192 0 1
Die Eingangsdaten i1 i2 ... i8 sind Abtastwerte eines 10-Bit-ADC im Bereich 0 ... 1023.
Die Ausgabe o1 o2 wird in folgender Form dargestellt:
"Eisenmetall" ( 1 0), "Nichteisenmetall" (0 1 ).
Ich habe Daten gesammelt, als sich in der Nähe der Spule ein Ziel aus Eisenmetall (Ziel Nr. 1, Ziel Nr. 2) und ein Ziel aus Nichteisenmetall (Ziel Nr. 3, Ziel Nr. 4) befand und sich die Ziele in unterschiedlichen Abständen von der Suchspule befanden. Für die weitere Verwendung haben wir Daten ausgewählt, die einem ausreichenden Signalpegel entsprechen - mit mindestens zwei Werten ungleich Null. Datensätze, die der ADC-Eingangsüberlastung entsprechen, wurden ebenfalls verworfen - mit mehreren maximal möglichen Werten (1023):

Zur Veranschaulichung habe ich eine Regressionsanalyse für einen Datensatz durchgeführt:

Das empfangene Signal wird durch die Summe zweier Exponentiale gut beschrieben:
437.9e0.29x+93.1e12.1x wo x - Referenznummer.
Ich habe die meisten Daten (110 Wertesätze , train.dat- Datei) für das Training ( Trainingsdatensatz ) (sie werden zusätzlich randomisiert - beim Laden gemischt) und den kleineren Teil (40 Sätze, test.dat- Datei) - für die Validierung des neuronalen Netzwerks ( Validierung ) zugewiesen Datensatz ) - Gegenprüfungen in ihrer einfachsten Form (auf zurückgestellte Daten ( Holdout-Datensatz )).
Neuronale Netzwerkstruktur
Das erstellte klassische neuronale Netzwerk mit direkter Verteilung wird drei Schichten haben:
die Eingangsschicht - von 8 Neuronen - nimmt die Punkte der Spannungskurve wahr;
versteckte Schicht - von drei Neuronen;
Ausgangsschicht - von zwei Neuronen.

(Netzwerk "8-3-2")
Die Iraner in der obigen Arbeit verwendeten zwei Proben (jeweils zwei Eingangsneuronen) und drei Neuronen in zwei verborgenen Schichten (das Diagramm des neuronalen Netzwerks ist in ihrem Artikel nicht zu klar dargestellt und beschrieben).
Neuronenzustand z definiert als gewichtet ( w - Gewicht) Menge n Eingangssignale x (von Dendriten wahrgenommen) und Vorurteile b ::
z= sumni=1wi cdotxi+wi+1 cdotb
(Das Hinzufügen einer Vorspannung kann als der Effekt einer zusätzlichen Neuronenvorspannung dargestellt werden.)
Der Zustand des Neurons wird unter Verwendung der Aktivierungsfunktion in ein Ausgangssignal (an den Axonterminals) umgewandelt f ::
y=f(z)
Die Eingangssignale des neuronalen Netzwerks, die an den Neuronen der Eingangsschicht ankommen, werden unverändert zu ihren Ausgängen übertragen, was einer linearen Aktivierungsfunktion entspricht:
f(z)=z
Für Neuronen der verborgenen Schicht und der Ausgangsschicht wird eine nichtlineare Aktivierungsfunktion, das „Sigmoid“ oder vielmehr seine sehr beliebte Option, die logistische Funktion, mit einem Intervall von Werten (0; 1) verwendet:
f(z)=1 über1+ez
Diese Wahl der Aktivierungsfunktion eignet sich hervorragend für nicht negative ADC-Proben. Dies erfordert natürlich die Normalisierung der Eingabewerte - dividieren Sie sie durch 1024, was einen Wert von weniger als 1 garantiert.
Die Iraner verwendeten hyperbolische Tangenten als Aktivierungsfunktion.
Die Werte an den Ausgängen der Neuronen der Ausgangsschicht bestimmen die Ergebnisse des neuronalen Netzwerks. Das Neuron mit dem maximalen Ausgabewert gibt die vom Netzwerk hergestellte Lösung (die Gewinnerklasse) an: Die erste Klasse ist „Eisenmetall“, die zweite Klasse ist „Nichteisenmetall“.
Die Iraner verwendeten drei Ausgangsneuronen, die auf Eisen, Kupfer und Blei hinweisen.
Python wird häufig zur Lösung von Problemen des maschinellen Lernens verwendet - PyTorch , Keras , TensorFlow , CNTK , Bibliotheken und Frameworks für neuronale Netze werden auch für JavaScript erstellt - Synaptic , Java - Deeplearning4j , C ++ - CNTK und MATLAB liegen nicht weit dahinter.
Für die spätere Verwendung vor Ort in einem Metalldetektor sind diese Frameworks / Bibliotheken jedoch von geringem Nutzen. Für ein detailliertes Verständnis des Prozesses habe ich mein neuronales Netzwerk ohne Verwendung zusätzlicher ANN-Unterstützungsbibliotheken aufgebaut. Natürlich kann ein neuronales Netzwerk auch in BASIC geschrieben werden :-). Aber unter dem Einfluss meiner subjektiven Vorlieben entschied ich mich für Go .
Training und Validierung neuronaler Netze
Beim Erstellen eines Netzwerks werden Gewichte mit zufälligen Werten im Bereich (-0,1; 0,1) initialisiert.
Ich habe die stochastische Gradientenabstiegsmethode ( SGD ) zum Trainieren des Netzwerks verwendet.
Das neuronale Netzwerk führt eine Iteration des Lernprozesses durch, wobei einer der Datensätze verwendet wird, die für das sequentielle Training bereitgestellt werden. In diesem Fall wird zuerst die Direktverteilungsoperation ausgeführt - das Netzwerk verarbeitet den Satz von Signalen, die von dem an den Eingang gelieferten Trainingsbeispiel geliefert werden. Basierend auf der erhaltenen Lösung wird dann der Backpropagation-Algorithmus implementiert. Um die Skalen im Lernprozess zu aktualisieren, habe ich die Formel des "Vanille" -Gradientenabfalls angewendet, bei der ein Hyperparameter verwendet wird - der Lernratenkoeffizient  alpha (manchmal angegeben  eta ), d.h. nicht verwendeter zweiter populärer Hyperparameter - Momentfaktor  gamma ( Impulsfaktor ).
Die Ära des Lernens endet, nachdem alle Trainingsdaten verwendet wurden. Nach dem Ende der Ära wird das mittlere Quadrat des Fehlers ( mittlerer quadratischer Fehler ( MSE )) des Trainings berechnet, dem neuronalen Netzwerk wird ein Satz von Werten zur Validierung zugeführt (Gegenprüfung auf zurückgestellte Daten), das durchschnittliche Quadrat des Validierungsfehlers wird bestimmt, die Genauigkeit der Vorhersagen ( Genauigkeit ) und die Zykluswiederholungen. Der Zyklus stoppt nach Erreichen des erforderlichen Niveaus des mittleren Quadrats des Validierungsfehlers.
Nach dem Kompilieren des Quellcodes (Datei nn4md.go ) und dem Starten der ausführbaren Datei wird der Lernprozess in der Konsolenzahl ( Epoche ), dem durchschnittlichen Quadrat der Lern- und Validierungsfehler ( MSE ) und der Genauigkeit der Vorhersagen für den zu validierenden Datensatz ( Acc .) Angezeigt .
Hier ist ein Fragment eines solchen Protokolls:

Eine Änderung der Startzahl wirkt sich auf die Anfangswerte der Gewichte des neuronalen Netzwerks aus, was zu kleinen Unterschieden im Lernprozess führt. Mit einem Lerngeschwindigkeitsfaktor von 0,1 ist das Lernen (wenn MSE = 0,01 auf dem Testsatz ist) in ungefähr 300 Epochen abgeschlossen.
Die Genauigkeit der Entscheidungen über den zu validierenden Datensatz beträgt 100% (das Programm gibt die Nummer des siegreichen Neurons an, beginnend mit 0 - „0“ - das erste Neuron, Eisenmetall; „1“ - das zweite Neuron, Nichteisenmetall):
0 -> 0
0 -> 0
0 -> 0
...
1 -> 1
1 -> 1
1 -> 1

Die nach dem Training resultierenden Gewichte des neuronalen Netzwerks werden zur späteren Verwendung in der Textdatei nn4md.json im JSON- Format gespeichert. Übrigens ist es für die Codierung von JSON- Strukturen auf Go bequem, dieses Online-Tool zu verwenden .
Da noch kein allgemein anerkannter und praktischer Standard für das Format zum Speichern der Einstellungen neuronaler Netze entwickelt wurde (obwohl es natürlich NNEF gibt - aber für ein so einfaches Netz ist dies meiner Meinung nach zu viel), habe ich mein eigenes Format verwendet:

Testen neuronaler Netze
Und jetzt testen wir ein trainiertes neuronales Netzwerk auf die Erkennung neuer Ziele ( Testdatensatz ).
Ziel Nummer 5 (aus Eisenmetall) :
Kurventyp:

Wertesatz:
768 224 96 48 14 0 0 0
Ziel Nummer 6 (aus Nichteisenmetall) :
Kurventyp:

Wertesatz:
655 352 254 192 152 124 96 78
Nach Abschluss der Schulung erwartet das Programm die Dateneingabe zum Testen.
Auf Zielnummer 5 prüfen:

Erfolg - "0" - Eisenmetall.
Suchen Sie nun nach Zielnummer 6:

Erfolg - "1" - Nichteisenmetall.
Das stellte sich fast als " Proof-of-Concept " heraus.
Datensatzdateien, eine Netzwerkgewichtsdatei und Quellcode sind im Repository auf GitHub verfügbar.

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


All Articles