Pencarian logam dan ... jaringan saraf

Prinsip pengoperasian detektor logam pulsa
Salah satu opsi yang populer untuk pembangunan perangkat pencarian logam adalah detektor logam pulsa ( induksi ) - perangkat yang bersahaja dan dapat diandalkan (kedalaman deteksi yang baik, ketahanan terhadap peningkatan mineralisasi tanah, kemampuan untuk bekerja dalam air garam), yang memiliki berbagai bidang aplikasi - dari urusan militer (pengguna tradisional "impuls") sebelum mencari emas (hobi ini sangat populer di Australia).
Tetapi dia juga memiliki kelemahan yang signifikan - kesulitan besar dengan diskriminasi, yaitu dengan menentukan jenis target, misalnya, untuk mengetahui apakah itu terbuat dari logam non-ferro atau hitam, atau untuk membedakan tambang anti-personil dalam kasus plastik dari tumpukan puing-puing logam? Apa penyebab masalah ini?
Pertimbangkan prinsip pengoperasian detektor logam berdenyut.


Kunci elektronik (biasanya MOSFET yang dapat menahan tegangan beberapa ratus volt - misalnya, IRF740 yang populer digunakan dalam pekerjaan insinyur Malaysia ini, dan IRF730 yang kurang kuat digunakan pada matriks analog-ke-digital yang diprogram GreenPAK dalam proyek ini ) mengontrol koneksi kumparan pencarian ke sumber daya (baterai) baterai). Ketika pulsa kontrol (biasanya dengan frekuensi beberapa ratus-hertz) diterapkan pada gerbang transistor, MOSFET terbuka - sirkuit ditutup, arus yang meningkat (secara bertahap karena proses transien) mulai mengalir melalui koil. Kami menunggu beberapa puluh atau ratusan mikrodetik dari peningkatan saat ini ke tingkat yang diinginkan dan ... kami memutus sirkuit - pulsa kontrol telah berakhir. Saat ini i melalui koil dan, karenanya, fluks magnet  Phi kumparan berkurang tajam (untuk mempercepat proses penutupan MOSFET , pulsa kontrol disuplai tidak langsung ke gerbang, tetapi melalui driver khusus), yang, karena fenomena induksi elektromagnetik, menyebabkan munculnya EMF induksi diri eL=wd Phi overdt dan peningkatan tegangan koil yang tajam. Kemudian level tegangan pada koil mulai berkurang. Tetapi jika benda konduktif ("target") terletak di dekat kumparan, maka fluks magnet menurun bersama dengan arus melalui kumparan menginduksi arus eddy iin di target ini. Arus eddy ini menciptakan fluks magnetnya sendiri.  Phiin , yang mencoba mempertahankan medan magnet redaman koil. Efek ini mengarah pada peningkatan durasi pelemahan tegangan di seluruh koil, yang merupakan indikator tidak adanya atau adanya target (keputusan dibuat dengan mengintegrasikan sinyal dan memperkirakan nilai integral ( a ) atau berdasarkan nilai sinyal di beberapa titik ( b )):


Catatan : pulsa juga bisa bipolar (misalnya, dalam detektor logam Vallon VMH2 - perangkat klasik yang digunakan dalam pembersihan ranjau):

( sumber )
Pada saat yang sama, nilai rata-rata (komponen konstan) dari medan magnet yang dihasilkan oleh detektor logam mendekati nol, yang seharusnya (seperti yang disebutkan dalam katalog, "sesuai dengan pabrikan") mencegah perusakan saat mencari tambang yang merespons medan magnet (meskipun, seperti yang dikatakan buku itu) "Buku pegangan detektor logam untuk penghapusan ranjau kemanusiaan," dengan izin ranjau kemanusiaan insiden seperti itu tidak mungkin).

Bersamaan dengan opsi yang dijelaskan dengan satu kumparan, menggabungkan fungsi mengirim dan menerima, ada detektor logam pulsa dengan dua kumparan terpisah. Skema ini digunakan tidak hanya di bidang pencarian logam, tetapi juga dalam deteksi cacat ( Pulsed Eddy Current (PEC) Testing ) - tautan 1 , tautan 2 . Dalam hal ini, salah satu kumparan (kumparan transmit / drive ) berfungsi untuk membangkitkan arus eddy pada target, dan yang lainnya ( kumparan terima / pikup ) adalah sensor medan magnet. Pendekatan ini memungkinkan untuk menganalisis medan magnet tidak hanya pada tahap penurunan (setelah melepaskan sumber daya dari kumparan transmisi), tetapi juga pada tahap peningkatan (setelah menghubungkan sumber daya ke kumparan transmisi):

Berikut ini adalah deskripsi yang bagus dari teknologi ini:
Metode Peluruhan Arus Eddy untuk Karakterisasi Tahanan Logam Kemurnian Tinggi

Masalah diskriminasi
Masalah mengenali jenis logam muncul dari kenyataan bahwa kurva tegangan yang dihasilkan pada kumparan dipengaruhi oleh ukuran dan bentuk target, jaraknya dari kumparan dan listrik (konduktivitas spesifik).  sigma ) dan magnetik (permeabilitas magnetik  mu ) properti dari bahan target.
Berikut beberapa kutipan tentang hal ini:

(sumber: Ahmet S. Turk, Koksal A. Hocaoglu, Alexey A. Vertiy Sensing Subsurface )
Diskriminasi Jenis Logam - Karena Pulse Induction mendeteksi logam melalui lamanya waktu yang dibutuhkan untuk pulsa anomali untuk membusuk, biasanya hanya digunakan untuk mendeteksi logam, daripada menentukan jenis logam.
( sumber )
... ukuran, kedalaman, target sekitar dan respon tanah dapat mengubah sinyal sedemikian rupa sehingga diskriminasi yang tepat tidak dimungkinkan.
( sumber )
Banyak upaya telah dilakukan untuk membuat detektor logam berdenyut yang mampu membedakan antara besi, perak dan tembaga, tetapi semua upaya ini memiliki keberhasilan yang sangat terbatas. Ini disebabkan oleh fisika sinyal pulsa.
( sumber )

Salah satu pendekatan untuk memecahkan masalah ini adalah dengan menggunakan kumparan Double-D ( DD ) alih-alih mono loop biasa, misalnya, dalam detektor logam seri Minelab GPX yang populer:

( sumber )
Dalam gulungan seperti itu, belitan pemancar ( TX ) dan penerima ( RX ) dibagi:

( sumber )
Dalam hal ini, analisis sinyal dari target dilakukan tidak hanya ketika berkurang, tetapi juga saat arus naik di koil transmisi. Tetapi diskriminasi semacam itu tidak terlalu bisa diandalkan:

( sumber )
Tapi bagaimana dengan kumparan mono loop? Banyak karya ( tautan 1 tautan 2 tautan 3 ) menunjukkan bahwa sinyal dalam koil dari target dapat direpresentasikan sebagai jumlah tertimbang dari sinyal eksponensial yang membusuk, nilai maksimum dan konstanta waktu yang bersifat individual dan tergantung pada bahan, ukuran dan bentuk target:
u(t)= sumNi=1Aiet/ taui
Eksperimen diskriminasi dengan detektor logam standar Angkatan Darat AS melaporkan bahwa benda-benda kecil ditandai dengan baik oleh satu eksponen dalam percobaan yang dilakukan oleh penulis artikel. Ae alphat , dan untuk objek besar dua sudah diperlukan - Ae alphat+Be betat .
Artikel ini menunjukkan bahwa konstanta waktu dari komponen eksponensial dapat direpresentasikan sebagai rasio induktansi dan tahanan yang setara  taue=Le lebihdariR dan ekspresinya diberikan untuk silinder dengan jari-jari alas R dan tinggi h :
 tau= mur mu0 sigmaR2h lebihdari8
Dalam tulisan ini , ekspresi diberikan untuk konstanta waktu peluruhan arus eddy untuk bidang radius R :
 tau= mur mu0 sigmaR2 over chi2 ,
dimana  chi Merupakan hasil penyelesaian persamaan tg chi=( mur1) chi over mur1+ chi2

Catatan : ekspresi analitik seperti itu hanya dapat diperoleh untuk benda simetris sederhana. Oleh karena itu, untuk mempelajari arus eddy, seseorang dapat menggunakan paket perangkat lunak untuk simulasi numerik proses elektromagnetik. Contohnya adalah simulasi rem elektromagnetik arus eddy dalam paket COMSOL Multiphysics :

( sumber )

Seperti dapat dilihat, ekspresi untuk konstanta waktu bersama termasuk permeabilitas magnetik, konduktivitas listrik, dan ukuran target. Memisahkan pengaruh faktor-faktor ini secara terpisah, yang diperlukan untuk diskriminasi, tidak begitu sederhana.
Dalam karya yang telah disebutkan, diusulkan untuk menggunakan classifier Bayesian untuk membedakan ranjau dari puing-puing logam (dua hipotesis diuji: H0 - sampah H1 - milikku), tetapi ini membutuhkan perkiraan tambahan dari simetri sinyal, dll. (Sangat menarik bahwa komposisi faktor yang digunakan termasuk energi sinyal, diperkirakan  sumNi=1u2i cdot Deltat )
Untuk mengilustrasikannya, saya membuat layar eksperimental saya dengan desain asli dari grafik voltase di seluruh koil untuk berbagai target:
tidak ada target:

target nomor 1 (logam besi) pada jarak yang berbeda dari koil:

target nomor 2 (logam besi):

target nomor 3 (logam non-ferrous) pada jarak yang berbeda dari koil:

target nomor 4 (logam non-ferrous):

Seperti dapat dilihat, karena permeabilitas magnetik yang lebih besar, target logam besi memiliki tingkat sinyal awal yang lebih tinggi daripada target logam non-ferro, tetapi sinyal melemahkan lebih cepat karena konduktivitas listrik yang lebih rendah.
JARINGAN SARAF
Lalu, bagaimana, berdasarkan fitur yang sangat tidak ketat ini, untuk mengklasifikasikan target, terutama ketika mengubah jarak dari target ke koil detektor logam? Kami memiliki alat yang luar biasa - jaringan saraf tiruan. Jaringan saraf memainkan tic-tac-toe , blackjack , poker , memprediksi cuaca dan kualitas anggur , menghitung resistensi terhadap pergerakan mesin pertanian ... Jadi kita akan menggunakan jaringan saraf untuk menyelesaikan masalah diskriminasi!
Bukti bahwa ini mungkin adalah artikel "Meningkatkan kinerja sistem PI melalui penggunaan jaringan saraf" oleh para peneliti Iran:

Data untuk jaringan saraf
Untuk mengisi array data untuk pelatihan, validasi, dan pengujian jaringan saraf, ketika saya menekan tombol di badan bangku tes saya, 8 titik diukur (jumlah titik yang dipilih secara empiris) pada kurva tegangan dan ATmega328 ADC membaca dalam bentuk simbolis dalam port serial yang terhubung ke konektor USB komputer.
Di dudukan di depan input penguat operasional, pembatas dioda dihidupkan, tetapi, seperti yang ditunjukkan oleh simulasi, di bidang yang menarik bagi kami (dengan tegangan rendah pada koil) pengaruhnya terhadap nilai tegangan dapat diabaikan:

Mengaktifkan mode logging dalam program terminal (misalnya, Tera Term ), kami mendapatkan data "mentah" (untuk kenyamanan, komentar dapat ditambahkan ke protokol dalam Tera Term ). Utilitas kecil yang ditulis dalam Go mengubah data ini menjadi format yang cocok untuk dikonsumsi oleh jaringan saraf:
i1 i2 ... i8 o1 o2
Contoh baris dengan sekumpulan nilai:
588 352 312 280 252 240 206 192 0 1
Data input i1 i2 ... i8 adalah sampel dari ADC 10-bit dalam kisaran 0 ... 1023.
Output o1 o2 disajikan dalam bentuk:
"Ferrous metal" ( 1 0), "non-ferrous metal" (0 1 ).
Saya mengumpulkan data ketika ada target yang terbuat dari logam besi di dekat koil (target No. 1, target No. 2), dan target logam non-ferro (target No. 3, target No. 4), dan target terletak pada jarak yang berbeda dari koil pencarian. Untuk penggunaan lebih lanjut, kami memilih data yang sesuai dengan level sinyal yang memadai - dengan setidaknya dua nilai bukan nol. Kumpulan data yang terkait dengan kelebihan input ADC juga dibuang - berisi beberapa nilai maksimum yang mungkin (1023):

Sebagai ilustrasi, saya melakukan analisis regresi untuk satu dataset:

Sinyal yang diterima dijelaskan dengan baik oleh jumlah dari dua eksponensial:
437.9e0.29x+93.1e12.1x dimana x - nomor referensi.
Saya memilih sebagian besar data (110 set nilai, file train.dat ) untuk pelatihan ( dataset pelatihan ) (mereka juga diacak - diacak selama pemuatan), dan bagian yang lebih kecil (40 set, file test.dat ) untuk validasi jaringan saraf ( validasi dataset ) - pengecekan silang dalam bentuknya yang paling sederhana (pada data yang ditangguhkan ( dataset holdout )).
Struktur jaringan saraf
Jaringan saraf distribusi langsung klasik yang dibuat akan memiliki tiga lapisan:
lapisan input - dari 8 neuron - melihat titik-titik kurva tegangan;
lapisan tersembunyi - dari tiga neuron;
lapisan keluaran - dari dua neuron.

(jaringan "8-3-2")
Iran dalam pekerjaan di atas menggunakan dua sampel (masing-masing, dua neuron input) dan tiga neuron dalam dua lapisan tersembunyi (diagram jaringan saraf digambarkan dan dijelaskan dalam artikel mereka tidak terlalu jelas).
Keadaan neuron z didefinisikan sebagai tertimbang ( w - berat) jumlah n sinyal input x (dipersepsikan oleh dendrit) dan bias b :
z= sumni=1wi cdotxi+wi+1 cdotb
(penambahan bias dapat direpresentasikan sebagai efek dari bias neuron tambahan)
Keadaan neuron diubah menjadi sinyal keluaran (di terminal akson) menggunakan fungsi aktivasi f :
y=f(z)
Sinyal input dari jaringan saraf yang tiba di neuron lapisan input ditransmisikan ke output mereka tidak berubah, yang sesuai dengan fungsi aktivasi linier:
f(z)=z
Untuk neuron dari lapisan tersembunyi dan keluaran, fungsi aktivasi nonlinier, "sigmoid", atau lebih tepatnya opsi yang sangat populer, fungsi logistik, digunakan dengan interval nilai (0; 1):
f(z)=1 over1+ez
Pilihan fungsi aktivasi ini bagus untuk sampel ADC non-negatif. Tapi ini tentu saja memerlukan normalisasi nilai input - bagi dengan 1024, yang menjamin nilai kurang dari 1.
Orang Iran menggunakan tangen hiperbolik sebagai fungsi aktivasi.
Nilai-nilai pada output neuron dari lapisan output menentukan hasil dari jaringan saraf. Neuron dengan nilai output maksimum akan menunjukkan solusi (kelas yang menang) yang dibuat oleh jaringan: kelas pertama adalah "logam besi", kelas kedua adalah "logam non-besi".
Orang Iran menggunakan tiga neuron keluaran, yang menunjukkan zat besi, tembaga, dan timah.
Python sering digunakan untuk memecahkan masalah pembelajaran mesin - PyTorch , Keras , TensorFlow , CNTK , perpustakaan dan kerangka kerja untuk jaringan saraf juga dibuat untuk JavaScript - Synaptic , Java - Deeplearning4j , C ++ - CNTK , dan MATLAB tidak jauh di belakang.
Tetapi untuk penggunaan "lapangan" berikutnya dalam detektor logam, kerangka / pustaka ini tidak banyak digunakan, oleh karena itu, untuk pemahaman rinci tentang proses, saya membangun jaringan saraf saya tanpa menggunakan perpustakaan dukungan ANN tambahan. Tentu saja, jaringan saraf juga dapat ditulis dalam BASIC :-). Tetapi di bawah pengaruh preferensi subjektif saya, saya memilih Go .
Pelatihan dan validasi jaringan saraf
Saat membuat jaringan, bobot diinisialisasi dengan nilai acak dalam rentang (-0.1; 0,1).
Saya menggunakan metode stochastic gradient descent ( SGD ) untuk melatih jaringan.
Jaringan saraf melakukan satu iterasi dari proses pembelajaran, menggunakan salah satu dari set data yang disediakan untuk pelatihan secara berurutan. Dalam hal ini, operasi distribusi langsung dilakukan terlebih dahulu - jaringan memproses set sinyal yang dipasok dari contoh pelatihan yang diberikan ke input. Kemudian, berdasarkan solusi yang diperoleh, algoritma backpropagation diimplementasikan. Untuk memperbarui skala dalam proses pembelajaran, saya menerapkan rumus penurunan gradien "vanilla", yang menggunakan satu hyperparameter - koefisien laju pembelajaran  alpha (terkadang ditunjukkan  eta ), yaitu tidak menggunakan hiperparameter populer kedua - faktor momen  gamma ( faktor momentum ).
Era pembelajaran berakhir setelah menggunakan seluruh array data pelatihan. Setelah akhir era, kuadrat kesalahan rata-rata ( Mean Squared Error ( MSE )) dari pelatihan dihitung, jaringan saraf diumpankan sejumlah nilai untuk validasi (pengecekan silang pada data yang ditangguhkan), kuadrat rata-rata dari kesalahan validasi ditentukan, keakuratan prediksi ( akurasi ) dan siklus berulang. Siklus berhenti setelah mencapai tingkat kuadrat rata-rata yang diperlukan dari kesalahan validasi.
Setelah mengkompilasi kode sumber (file nn4md.go ) dan meluncurkan file yang dapat dieksekusi, proses pembelajaran ditampilkan dalam nomor era konsol ( Epoch ), rata-rata kuadrat pembelajaran dan kesalahan validasi ( MSE ) dan akurasi prediksi pada set data untuk validasi ( Acc .).
Ini adalah bagian dari protokol semacam itu:

Perubahan dalam jumlah awal mempengaruhi nilai awal dari bobot jaringan saraf, yang mengarah ke perbedaan kecil dalam proses pembelajaran. Dengan faktor kecepatan belajar 0,1, pembelajaran selesai (ketika MSE = 0,01 pada set tes) di sekitar 300 zaman.
Keakuratan keputusan pada set data untuk validasi adalah 100% (program memberikan jumlah neuron pemenang, mulai dari 0 - 0 "- neuron pertama, logam besi;" 1 "- neuron kedua, logam non-ferro):
0 -> 0
0 -> 0
0 -> 0
...
1 -> 1
1 -> 1
1 -> 1

Bobot jaringan saraf yang dihasilkan setelah pelatihan disimpan untuk digunakan nanti dalam file teks nn4md.json dalam format JSON . Omong-omong, untuk menyandikan struktur JSON di Go , mudah untuk menggunakan alat online ini.
Karena standar yang diterima secara umum dan nyaman untuk format penyimpanan pengaturan jaringan saraf belum dikembangkan (walaupun, tentu saja, NNEF - tetapi untuk jaringan yang sederhana ini terlalu IMHO ), saya menggunakan format saya sendiri:

Pengujian jaringan saraf
Dan sekarang kami sedang menguji jaringan saraf yang terlatih tentang pengenalan target baru ( dataset uji ).
Target nomor 5 (dari logam besi) :
Jenis Kurva:

Set nilai:
768 224 96 48 14 0 0 0
Target nomor 6 (dari logam non-ferrous) :
Jenis Kurva:

Set nilai:
655 352 254 192 152 124 96 78
Setelah selesai pelatihan, program mengharapkan entri data untuk pengujian.
Periksa nomor target 5:

Sukses - "0" - logam besi.
Sekarang periksa nomor target 6:

Sukses - "1" - logam non-ferrous.
Itu hampir berubah menjadi " bukti konsep ".
File dataset, file jaringan, dan kode sumber tersedia di repositori di GitHub.

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


All Articles