金属検索デバイスの設計のための一般的なオプションの1つは、パルス( 誘導 ( PI ))金属検出器です-気取らない信頼できるデバイス(良好な検出深度、土壌無機化の増加に対する耐性、塩水での作業能力)、軍事分野から- (「インパルス」の伝統的なユーザー)、金を検索する前に(この趣味はオーストラリアで特に人気があります)。
しかし、彼には重大な欠点もあります-差別、すなわち たとえば、ターゲットが非鉄金属であるか黒色であるかを調べるために、またはプラスチックケースの対人地雷を金属破片の山から区別するために、ターゲットのタイプを決定しますか? この問題の原因は何ですか?
パルス金属検出器の動作原理を考慮してください。
![](https://habrastorage.org/webt/p5/pm/xv/p5pmxv_sdcfzc2krvqibsjf5ijk.png)
電子キー(通常は数百ボルトの電圧に耐えることができるMOSFET-たとえば、人気のIRF740はマレーシアのエンジニアのこの作業で使用され、 GreenPAKプログラマブルアナログ-デジタルマトリックスに基づいてより強力でないIRF730が使用されます)は、検索コイルの電源(バッテリー)への接続を制御しますバッテリー)。 制御パルス(通常は数百ヘルツの周波数)がトランジスタのゲートに印加されると、 MOSFETが開きます-回路が閉じられ、電流が徐々に増加します(過渡的なプロセスにより)コイルを流れ始めます。 数十または数百マイクロ秒の電流が所望のレベルまで増加するのを待っています...そして回路を破壊します-制御パルスは終了しました。 現在の コイルを通過し、それに応じて、磁束 コイルは急激に減少します( MOSFETのクローズプロセスを加速するために、制御パルスはゲートに直接供給されませんが、特別なドライバーを介して)、電磁誘導現象により、自己誘導EMFが発生します コイル両端の電圧が急激に増加します。 その後、コイルの電圧レベルが低下し始めます。 しかし、導電性の物体(「ターゲット」)がコイルの近くにある場合、磁束はコイルを流れる電流とともに減少し、渦電流を誘導します このターゲットで。 これらの渦電流は、独自の磁束を作成します。 、コイルの減衰磁場を維持しようとしています。 この効果により、コイルの電圧減衰の持続時間が長くなります。これは、ターゲットの有無の指標です(信号を積分して積分値を推定するか( a )、またはいくつかのポイントの信号値に基づいて決定します( b ))。
![](https://habrastorage.org/webt/em/qz/zb/emqzzbodtx_odmnhlyo8bxkuwni.png)
注 :パルスは双極でもあります(たとえば、 Vallon VMH2金属探知器-地雷除去で使用される古典的なデバイス):
![](https://habrastorage.org/webt/ke/ih/a9/keiha9k7l6zzluwu1sawkfwznac.png)
( ソース )
この場合、金属探知機によって生成される磁場の平均値(定数成分)はゼロに近く、カタログに注意深く記載されているように(「製造元によると」)、磁場に反応する地雷を検索するときの損壊を防ぐ必要があります(ただし、本で述べているように) 「人道的地雷除去のための金属探知機ハンドブック」 、そのような事件を人道的地雷除去することは考えにくい。
送信機と受信機の機能を組み合わせた、単一のコイルを使用して説明したオプションに加えて、2つの独立したコイルを備えたパルス金属検出器があります。 このスキームは、金属検索の分野だけでなく、欠陥検出( パルス渦電流(PEC)テスト )- リンク1 、 リンク2でも使用されます。 この場合、コイルの一方( 送信/駆動コイル )はターゲット内の渦電流を励起する役割を果たし、もう一方( 受信/ピックアップコイル )は磁場センサーです。 このアプローチにより、磁場を減少の段階(送信コイルから電源を切断した後)だけでなく、増加段階(電源を送信コイルに接続した後)でも解析できます。
![](https://habrastorage.org/webt/lq/pw/ti/lqpwtit2_pt-xddsnudpxhyufmw.png)
この技術の素晴らしい説明は次のとおりです。
高純度金属の抵抗率特性化のための渦電流減衰法
差別問題
金属の種類を認識する問題は、コイルに結果として生じる電圧曲線が、ターゲットのサイズと形状、コイルからの距離、および電気(特定の導電率)によって影響を受けるという事実のために発生します )および磁気(透磁率 )ターゲット材料の特性。
このテーマに関するいくつかの引用を以下に示します。
![](https://habrastorage.org/webt/7p/ys/nz/7pysnzrgdvkhc4ebzwkw-ciqlwi.png)
(ソース: Ahmet S. Turk、Koksal A. Hocaoglu、Alexey A. Vertiy Subsurface Sensing)
金属の種類の判別-パルス誘導は、異常のパルスが減衰するまでの時間で金属を検出するため、通常、金属の種類を判別するのではなく、金属の検出にのみ使用されます。( ソース )
...サイズ、深さ、周囲のターゲット、土壌の反応により、信号が変化し、適切な識別ができない場合があります。( ソース )
鉄、銀、銅を区別できるパルス金属検出器を作成するための多くの試みが行われましたが、これらの試みはすべて非常に限られた成功しか収めていません。 これは、パルス信号の物理的性質によるものです。( ソース )
この問題を解決する1つのアプローチは、たとえば一般的なMinelab GPXシリーズの金属探知機で、通常のモノループの代わりにDouble-D ( DD )コイルを使用することです。
![](https://habrastorage.org/webt/u1/t9/ea/u1t9eaahty0hjzffnqevyeicykg.png)
( ソース )
このようなコイルでは、送信( TX )巻線と受信( RX )巻線が分割されます。
![](https://habrastorage.org/webt/cv/xy/ec/cvxyecti_uium-9-myms0hbukdy.png)
( ソース )
この場合、ターゲットからの信号は、減少したときだけでなく、送信コイルの電流が増加したときにも分析されます。 しかし、そのような差別はあまり信頼できません:
![](https://habrastorage.org/webt/1e/kz/a3/1ekza3meun2hjg0lknxyvithkzm.png)
( ソース )
しかし、モノループコイルはどうですか? 多くの作品( リンク1 リンク2 リンク3 )は、ターゲットからのコイル内の信号が減衰指数信号の重み付き和として表現できることを示しています。最大値と時定数は個別であり、ターゲットの材料、サイズ、形状に依存します。
米陸軍の標準的な金属探知機による識別実験では 、この記事の著者が行った実験では、小さな物体は1つの指数で十分に特徴付けられていることが報告されました。 、および大きなオブジェクトの場合は2つがすでに必要です 。
この記事は、指数成分の時定数が等価インダクタンスと抵抗の比として表せることを示しています そして、その表現は底の半径を持つ円柱に対して与えられます そして背が高い :
この論文では、半径の球に対する渦電流の減衰時定数の式が与えられます :
、
どこで 方程式を解いた結果です
注 :このような解析式は、単純な対称ボディに対してのみ取得できます。 したがって、渦電流を調べるには、電磁プロセスの数値シミュレーションにソフトウェアパッケージを使用できます。 例は、 COMSOL Multiphysicsパッケージの渦電流電磁ブレーキのシミュレーションです。
![](https://habrastorage.org/webt/q6/63/sx/q663sxtlofgquatrfvfwnlr22t0.png)
( ソース )
ご覧のように、時定数の式には、透磁率、電気伝導率、およびターゲットサイズが含まれています。 差別に必要なこれらの要因の影響を別々に分離することはそれほど簡単ではありません。
すでに述べた研究では 、ベイズ分類器を使用して鉱山と金属破片を区別することが提案されています(2つの仮説がテストされています: -ゴミ -鉱山)、しかし、これは信号の対称性などの追加の推定値を必要とします (使用される因子の構成には、次のように推定される信号エネルギーが含まれることが興味深い )
説明のため、実験スタンドの画面上に、さまざまなターゲットのコイルの電圧グラフの元の設計を作成しました。
ターゲットなし:
![](https://habrastorage.org/webt/rv/79/46/rv79469i6ru4awvyk0dli2sv5ro.jpeg)
コイルから異なる距離にあるターゲット番号1(鉄金属):
![](https://habrastorage.org/webt/hr/8o/xl/hr8oxlj7svactoksbkcqm0wm_vy.jpeg)
ターゲット番号2(鉄金属):
![](https://habrastorage.org/webt/-r/qg/vy/-rqgvygzzgqnc8-nu2bbmbmrxyw.jpeg)
コイルから異なる距離にあるターゲット番号3(非鉄金属):
![](https://habrastorage.org/webt/ye/l2/wn/yel2wncpaqumfh_jnfv_-5vyrgi.jpeg)
ターゲット番号4(非鉄金属):
![](https://habrastorage.org/webt/05/7o/ca/057ocam93p1jsoymfoczt1ftacw.jpeg)
ご覧のとおり、透磁率が大きいため、鉄金属のターゲットは非鉄金属のターゲットよりも初期信号レベルが高くなりますが、電気伝導度が低いため信号はより速く減衰します。
ニューラルネットワーク
これらの非常に厳格な機能に基づいて、特にターゲットから金属探知器コイルまでの距離を変更する場合、どのようにターゲットを分類しますか? 素晴らしいツールがあります-人工ニューラルネットワークです。 ニューラルネットワークは、 三目並べ 、 ブラックジャック 、 ポーカーをプレイし、 天気とワインの品質を予測し、 農業機械の動きに対する抵抗を計算します。したがって、ニューラルネットワークを使用して差別の問題を解決できます。
これが可能であるという証拠は、イランの研究者による「ニューラルネットワークの使用によるPIシステムのパフォーマンスの向上」というタイトルの記事で提供されています 。
![](https://habrastorage.org/webt/ij/48/q7/ij48q7tjwffkbsskhgx6iv43n14.png)
ニューラルネットワークのデータ
ニューラルネットワークのトレーニング、検証、テストのためにデータ配列を埋めるために、テストベンチの本体のボタンを押すと、電圧曲線上で8ポイントが測定され(経験的に選択されたポイントの数)、ATmega328 ADCはコンピューターのUSBコネクタに接続されたシリアルポートにシンボル形式で読み取ります
オペアンプの入力の前のスタンドでは、ダイオードリミッターがオンになっていますが、シミュレーションが示したように、関心のある領域(コイルに低電圧がある場合)では、電圧値への影響は無視できます。
![](https://habrastorage.org/webt/3h/p2/ql/3hp2qlklouyjxtxejtoxz7-2gqa.png)
端末プログラム( Tera Termなど )でロギングモードをオンにすると、生データが取得されます(便宜上、 Tera Termのプロトコルにコメントを追加できます)。 Goで書かれた小さなユーティリティは、このデータをニューラルネットワークによる消費に適した形式に変換します。
i1 i2 ... i8 o1 o2
値のセットを持つ行の例:
588352312280252240206192192 0 1
入力データi1 i2 ... i8は、0〜1023の範囲の10ビットADCのサンプルです。
出力o1 o2は次の形式で表示されます。
「非鉄金属」( 1 0)、「非鉄金属」(0 1 )。
コイルの近くに鉄金属で作られたターゲット(ターゲットNo.1、ターゲットNo.2)、および非鉄金属のターゲット(ターゲットNo.3、ターゲットNo.4)があり、ターゲットがサーチコイルから異なる距離にあるときにデータを収集しました。 さらに使用するために、 十分な信号レベルに対応するデータを選択しました-少なくとも2つの非ゼロ値を使用します。 ADC入力の過負荷に対応するデータセットも破棄されました。いくつかの最大値(1023)が含まれています。
![](https://habrastorage.org/webt/eo/io/ag/eoioagkni1zpbdd0xt3a6nlbhaa.png)
説明のために、1つのデータセットに対して回帰分析を実行しました。
![](https://habrastorage.org/webt/zc/el/j1/zcelj1fukkgbth6wc4z_y6imdgs.png)
受信した信号は、2つの指数の合計によって適切に説明されます。
どこで -参照番号。
ほとんどのデータ(110セットの値、 train.datファイル)をトレーニング( トレーニングデータセット )に割り当て(さらにランダム化-ロード中にシャッフル)、小さい部分(40セット、 test.datファイル)をニューラルネットワークの検証 ( 検証dataset )-最も単純な形式(遅延データ( holdout dataset )上)でのクロスチェック。
ニューラルネットワーク構造
作成された古典的直接分布ニューラルネットワークには、3つの層があります。
入力層 -8つのニューロン-電圧曲線の点を知覚します。
隠れ層 -3つのニューロン;
出力層 -2つのニューロン。
![](https://habrastorage.org/webt/ki/zj/hb/kizjhbkzmxs_vdwil8x8bdgeoje.png)
(ネットワーク「8-3-2」)
上記の作業のイラン人は、2つのサンプル(それぞれ2つの入力ニューロン)と2つの隠れ層の3つのニューロンを使用しました(ニューラルネットワーク図は、あまり明確に説明されていません)。
ニューロンの状態 加重として定義( -重量)量 入力信号 (樹状突起によって知覚される)とバイアス :
(バイアスの追加は、追加のニューロンバイアスの効果として表すことができます)
ニューロンの状態は、活性化関数を使用して(軸索端子で)出力信号に変換されます。 :
入力層のニューロンに到達するニューラルネットワークの入力信号は、線形活性化関数に対応する出力にそのまま送信されます。
隠れ層と出力層のニューロンの場合、非線形活性化関数「シグモイド」またはむしろ非常に一般的なオプションであるロジスティック関数が、値の間隔(0; 1)で使用されます。
アクティベーション関数のこの選択は、非負のADCサンプルに最適です。 ただし、これには、当然、入力値の正規化が必要です。それらを1024で除算すると、1未満の値が保証されます。
イラン人は、活性化関数として双曲線正接を使用しました。
出力層のニューロンの出力の値は、ニューラルネットワークの動作の結果を決定します。 最大出力値を持つニューロンは、ネットワークによって行われた決定(勝ったクラス)を示します。最初のクラスは「鉄金属」、2番目のクラスは「非鉄金属」です。
イラン人は、鉄、銅、鉛を示す3つの出力ニューロンを使用しました。
Pythonは、機械学習の問題を解決するためによく使用されます-PyTorch 、 Keras 、 TensorFlow 、 CNTK 、ニューラルネットワーク用のライブラリとフレームワークもJavaScript用に作成されます -Synaptic 、 Java - Deeplearning4j 、 C ++ - CNTK 、およびMATLABはそう遠く ありません。
しかし、その後の金属探知機での「フィールド」使用では、これらのフレームワーク/ライブラリはほとんど使用されないため、プロセスを詳細に理解するために、追加のANNサポートライブラリを使用せずにニューラルネットワークを構築しました。 もちろん、ニューラルネットワークはBASICでも作成できます:-)。 しかし、主観的な好みの影響で、 Goを選択しました。
ニューラルネットワークのトレーニングと検証
ネットワークを作成するとき、重みは範囲(-0.1; 0.1)のランダムな値で初期化されます。
ネットワークのトレーニングには確率的勾配降下法( SGD )を使用しました。
ニューラルネットワークは、一連のトレーニング用に提供されたデータセットの1つを使用して、学習プロセスの1つの反復を実行します。 この場合、直接分配操作が最初に実行されます。ネットワークは、入力に供給されるトレーニング例から供給される信号のセットを処理します。 次に、取得したソリューションに基づいて、逆伝播アルゴリズムが実装されます。 学習プロセスのスケールを更新するために、1つのハイパーパラメーター( 学習率係数)を使用する「バニラ」勾配降下の式を適用しました (時々示される )、つまり 使用されていない2番目の一般的なハイパーパラメーター-モーメント係数 ( 運動量係数 )。
学習データの配列全体を使用した後、学習の時代は終わります。 時代の終わりの後、トレーニングの誤差の二乗平均 ( 平均二乗誤差 ( MSE ))が計算され、ニューラルネットワークに検証用の値セット(保留データのクロスチェック)が供給され、検証誤差の二乗平均が決定され、予測の精度 ( 正確性 )、およびサイクルの繰り返しが行われます。 検証エラーの平均二乗の必要なレベルに達した後、サイクルは停止します。
ソースコード(ファイルnn4md.go )をコンパイルし、実行可能ファイルを起動すると、学習プロセスがコンソールに表示されます-時代番号( Epoch )、学習および検証エラーの平均二乗( MSE )、検証用データセットの予測の精度( Acc )。
そのようなプロトコルのフラグメントを次に示します。
![](https://habrastorage.org/webt/r2/eu/2h/r2eu2hp3uxi2moi9wvszmp7bjck.png)
開始数を変更すると、ニューラルネットワークの重みの初期値に影響し、学習プロセスにわずかな違いが生じます。 学習速度係数が0.1の場合、学習は約300エポックで完了します(テストセットでMSE = 0.01の場合)。
検証用のデータセットの決定の精度は100%です(プログラムは、0から始まる勝者ニューロンの数を示します-「0」-最初のニューロン、鉄金属;「1」-2番目のニューロン、非鉄金属):
0-> 0
0-> 0
0-> 0
...
1-> 1
1-> 1
1-> 1
トレーニング後のニューラルネットワークの重みは、 JSON形式のnn4md.jsonテキストファイルに後で使用するために保存されます。 ちなみに、 GoでJSON構造をエンコードするには、このオンラインツールを使用すると便利です 。
ニューラルネットワークの設定を保存するための普遍的に受け入れられた便利な標準はまだないので(もちろん、 NNEFがあります -しかし、このような単純なネットワークではこれは私見です )
![](https://habrastorage.org/webt/am/j6/xp/amj6xpqmbovlio5xh-evovuqr60.png)
ニューラルネットワークのテスト
そして今、新しいターゲットの認識で訓練されたニューラルネットワークをテストします( テストデータセット )。
ターゲット番号5(鉄から) :
曲線タイプ:
![](https://habrastorage.org/webt/6x/rq/qb/6xrqqbqhaa6e7wssbjjja9yjqdi.jpeg)
値のセット:
768224 96 48 14 0 0 0
ターゲット番号6(非鉄金属製) :
曲線タイプ:
![](https://habrastorage.org/webt/nl/jh/hf/nljhhfd9qycpmlnfyj0a-tx-5d8.jpeg)
値のセット:
655352254192152124 96 78
トレーニングの完了後、プログラムはテスト用のデータ入力を期待しています。
ターゲット番号5を確認します。
![](https://habrastorage.org/webt/lm/z6/md/lmz6mdtj953tknp0l8bauxbfgho.png)
成功-「0」-非鉄金属。
次に、ターゲット番号6を確認します。
![](https://habrastorage.org/webt/tw/cm/va/twcmvayfclqocywjiklkoxuuzj4.png)
成功-「1」-非鉄金属。
それはほとんど「 概念実証 」 であることが判明しました。
データセットを含むファイル、ネットワークウェイトファイル、およびソースコードは、GitHubのリポジトリで利用できます。