06-24-2020 02:01 AM - 最終編集日: 12-18-2024 11:40 AM 、編集者: Content Cleaner
前回の記事ではLabVIEWからPython Keras APIを読み込み、手書き文字認識のモデルを訓練するプログラムをご案内しました。Part 2 となる本記事では、LabVIEWビジョンライブラリとPythonノードを使用し、学習済みモデルを流用した実用的な画像・物体認識プログラムをご紹介します。
スマホにはタッチディスプレイ、スピーカー、カメラ、WiFi、アンテナ、GPS、バッテリ、マイクロチップ等のコンポーネントをすべて繋げて、シームレスに連携して動いています。その合計として、100メータ以上の配線になると言われています。この多種多様なコンポーネント間の通信はプリント基板(PCB)上にはんだ付けされたワイヤ、レジスタ、コンデンサー等のパーツで実装されています。
スマホに限らず、パソコン、テレビ、エアコン、USBドライブなど、あらゆる電子機器に欠かせないプリント基板ですが、技術の進化によりプリント基板は毎年複雑化しています。特に、コンポーネントやその他部品の増加により、故障が発生しうる要素は増加しています。
例えば、一つのパーツでも欠陥があると、デバイスの正常動作が保証できず、デバイスの寿命も落ちてしまいます。そうすると、修理対応や無償交換のコストなどに影響していきます。
コンポーネンツの数の増加や複雑化している中、日本製が誇りとする「品質」を伸ばしていく必要があると私は考えています。
プリント基板の品質を担保するには、出荷前に電気部品のコンポーネントの正常動作をテストする必要があり、よく用いられる方法は、インサーキットテスタ(ICT)を用いて、基板に実装された様々なコンポーネントやパーツを電気的に検査を行う装置です。この手法では、レジスタやコンデンサー、はんだ接合に欠陥がないかをテストすることができます。ただし、ICTは総括的なテストではなく、不具合の85-90%しかカバーできないと言われています。
ICTに加え、マシンビジョンを用いた画像検査をテストシステムに追加することで、不良品の出荷をより抑えることができます。さらにPCBが複雑なほど、ICTを用いた評価に時間がかかります。そのためICT検査を実施する前に画像検査を行うことで、不要なICT試験を避けることができます。
このマシンビジョンを用いたテストでは、多くの場合パターンマッチング法を用いて行います。あらかじめ用意した良品の画像と、生産ラインで流れる生産物の画像と比較して、欠陥を検出する手法です。ただ、この手法は、照明、角度、位置、色、といった要因を各生産物の画像取得時再現しないと、誤った不具合判定(偽陽性)が下される可能性が高くなります。
1.機械学習を用いた画像検査システムにおける課題
画像検査システムに柔軟性を持たせたい場合は、機械学習を欠陥検出に用います。
このアプローチをとることで、画像の再現性等をさほど考慮せずに、
偽陽性の確率を抑え、真陽性を検知する確率を大幅に向上させることができます。
下記のイメージでは、本記事でご紹介する「Yolo V3」機械学習モデルアーキテクチャをベースとし、PCB物体検出モデルを実装した結果です。
ただ、一般的に機械学習のプロジェクトでは以下の問題が発生します。
2. NI LabVIEWを使用するメリット
3. 学習済みモデルを用いた物体検出
こちらの記事では、学習済みのモデルを用いた物体認識プログラムをご案内します。
学習済みのモデルを用いることで、ある物体の判別や認識に特化したアルゴリズムを流用し、そこを起点とし、用途に合わせた学習をさせることができます。(これをTransfer Learningと呼びます)
物体検出は画像を取り込み、画像の中から定められた物体の位置とカテゴリー(クラス)を検出することを指します。
たとえば以下の応用先が考えられます。
1)自動運転・ADAS: 周りの車や人間などの危険を及ぼす物体を検出して、それに応じて操作を行う
2)ロボティクス: 物体の位置によってロボットアーム制御をより的確に動かす
3)趣味:ノートPCを使って、機械学習について学ぶ
上記が代表例になりますが、皆さんはまた他のアイディアあるかもしれません。
※上記アニメ―ションはYolo V3を使用していますが、応用先は自動運転等です!
4.実際に動かしてみる
今回ご紹介するのは学習済みのモデルを用いて、カメラから取得した画像に対してラベル付けをする画像認識プログラムです。
こちらのサンプルは、LabVIEWの強みである:
1)データ収集(カメラで画像取得)
2)画像処理(イメージから配列等)
3)他のアプリケーションとの連動(Python)
の利点をフル活用したプログラムになります。
プログラム動かす前のチェックリスト
まず、Pythonの環境を構築して、LabVIEWから呼び出すには前回の記事をご確認のうえ、
こちらの記事をご参考にしてください。LabVIEWでPythonノードを用いる際は、
様々な注意点を理解していないとエラーが発生してしまう可能性が高いです。
1)まず、こちらのサンプルを使うには、LabVIEWに加え、以下のNIビジョン関連ソフトが必要になります。
・画像収録用の「Vision Acquisition Software」有償ライセンス
・画像処理用の「Vision Development Module」有償ライセンス
2)カメラ付きノートPCや、USBカメラ等のハードウェア
NI-MAXから「マイシステム」→「デバイスとインターフェース」にて、カメラのマークで「”cam#”」と自動的に認識されるはずです。
3)Pythonに追加に「 MatPlotlib」ライブラリのインストールが必要になります。
Windows コマンドラインから [>>pip install matplotlib]
フロントパネルでプログラムの動作確認
上記がフロントパネル(GUI)になります。
「Camera Session」にてカメラを選択し、
「Model File Path」で学習済みのKeras .h5モデルファイルを選択します。
(本サンプルで使用するには、コメント欄に記載したリンクから入手できる「model.h5」でございます)
「Load Model」ボタンを押すと、リアルタイムでカメラから収録した画像に対して、
オブジェクトの位置とラベルが自動的に表示されます。
ブロックダイアグラムのアルゴリズムを確認
初期化コードの処理説明:
・Python Nodeのセッションを開く
・Python Nodeを用いて学習済みのモデルをロードする
・ビジョン関数を使用して、画像収録(IMAQdx)セッションを開く
メインループ(Main関数)の処理説明:
Pythonコードの処理を確認
本記事で使用した学習済みモデルとPythonコードは下記のリンクを参考にさせていだきました。
YOLOv3 Keras - Image Object Detection | Kaggle
https://www.kaggle.com/fanconic/yolov3-keras-image-object-detection?select=model.h5
上記リンクの内容をほぼ応用し、実装しています。注意点としてPython Nodeの出力は複数のデータタイプ(例:数値と文字列)を含むことはできません。そのため、ラベル、位置、スコアを含むFloat型配列として出力して、LabVIEW側で受け取った生データ(Double型配列)を有意義なデータに変換する必要があります。
本記事のPython Nodeで出力される生の1D配列データの構成は以下の通りです。
N = 認識されたオブジェクトの数
LabVIEW側では、この生の1Dダブル型配列データを"Left, Top, Right, Bottom, Label, Score"のように各物体の有意義なデータに変換します。(ブロックダイアグラムの6に当たります)
※Pythonのソースコード「main_Cifar10.py」では、「boxes_to_array」関数で生データの準備をしています。
5.まとめ
LabVIEWの強みである
1)データ収集・制御(カメラで画像取得、アナログ信号、デジタル信号等)
2)データ処理・解析(信号処理、PID、FFT、フィルタ等)
3)他のアプリケーションとの連動(Python, C, C#等)
をフル活用し、より性能が高い検査システムの構築が可能になります。
AI・機械学習を用いたテストシステムの構築をご検討されている方々は、ぜひお声がけください。
弊社のプラットフォームを用いて、どのようにAIプロジェクトを進めるべきかなどご案内できればと思います。
この記事を書いた人 水野 智生 沖縄生まれ、カリフォルニア育ち、アメリカンな純日本人。 アメリカ滞在中は日本のメーカが日本人として誇りで、その素晴らしい日系企業に貢献したいと思い日本ナショナルインスツルメンツ(NI)に入社。 最先端のテクノロジーについて勉強するのが好きで、特にパソコンやスマホの課題、トレンド、進化を常にチェックしています! |
06-24-2020 02:12 AM - 編集済み 06-24-2020 02:13 AM
添付が本記事でご紹介したサンプルになります。
「Keras_Advanced_Example.lvproj」を開いていただき、「KerasMain.vi」をご選択ください。
(LabVIEW 2019 64ビット以上のバージョンが必要になります)
学習済みの.h5ファイルは、下記のリンクから入手できます。
YOLOv3 Keras - Image Object Detection | Kaggle
https://www.kaggle.com/fanconic/yolov3-keras-image-object-detection?select=model.h5