07-19-2019 02:14 AM - 編集済み 12-20-2019 01:11 AM
「その日は、雲が低く垂れ込めた、どんよりとした日だった。
部屋の中は、いつものように最適な温度と湿度。洋子さんは、だらしない格好でカウチに座り、くだらないゲームで時間を潰している。でも、私には話しかけてこない。ヒマだ。ヒマでヒマでしょうがない。」
この文章を読んでどう思われたでしょうか。やや不思議な感じがしたでしょうか。実はこれ、AIが書いたショートショートの冒頭部分です。 (コンピュータが小説を書く日: 一部引用)面白いのはただ単に文章として文法的に成立するだけではなく、「読ませる」文章になっています。
このように、AIがその汎用性を活かし、様々な分野で活躍していくことに世界中で期待が集まっています。一方で周りをみわたすと、なかなかものづくりの世界ではこうした技術が実用的な段階で浸透しているとは言い辛い状況です。
この原因として1.ビジネス面として合理的な投資となる応用先がまだ限られていること2.既存の資産を活かした上でアプリケーション、製品やプロセスにAIを組み込むという具体的な手法での壁がある 等が挙げられると私は考えています。そんな中、LabVIEW(及びNI)は着々と2.の問題を解消すべく、機能向上に取り組んでいたりします。
以前コチラで紹介いたしましたとおり、LabVIEWの機械学習ツールキットにはさまざまな種類の機械学習アルゴリズムが含まれています。その中でも今回はニューラルネットワークを使った機械学習にスポットを当ててご紹介します。この学習の目的は1.データを読ませ 2.モデルを作り 3.入ってきたテストデータを自動的に分類するという3要素になります。こちらはいわゆる教師あり学習ですので、学習に用いるデーター(画像)に対して、人の手でこれは「〇〇」、これは「△△」というように目印となるラベルを付けて学習させておきます。「深い」という用語は以下の図のようなニューラルネットワーク内の隠れ層(中間層)が一つ以上存在していることに対応しています。この隠れ層を持つことにより、入ってくるデータの分類をより緻密に行うことができます。
層が多くなるほどに数式の表現力は上がり、150の隠れ層を持たせる事例もあります。 ただしLabVIEWのツールキットに用意されているニューラルネットワークモデルは入力層のサイズは変えられるものの、隠れ層が一つしかないシンプルなものになります。つまり言い換えれば幅広いなアプリケーション(データ)に対応はできるが、判定の精度には限界があるといえます。こういった仔細な説明は専門書に譲るとして、今回はこんな問題をLabVIEWで解決してみようと思います。
機械学習を身近にしたい!というコンセプトで以前Googleが公開したブラウザベースのサービスがあります。
Now anyone can explore machine learning, no coding required
1.PCに付属するWebカメラからの画像をデータ材料
2.利用者が3つラベルを付与した上でモデルを作成
3.テスト画像を撮影し、モデルに与えることで、テスト画像が学習済みの3つ画像のどれに近いか分類した結果を表示
するというものです。
応用範囲はいろいろあるかと思いますが、画像検査、例えば今生産している布の生地の模様に応じて出荷先を分けたり、お店での自動レジ等の開発などに使えるかもしれません。
今回はLabVIEWでこちらを実装してみました。このデモでは学習用データ(怒っている顔、笑っている顔)とモデル検証データを使います。図の青枠の10枚の画像でモデル作成。次に赤枠内のテスト画像を使用。そしてモデルとテスト画像を比較し、テスト画像が怒っているか、笑っているかどちらに近いのかを%表示で算出します。
コードをみてまいりましょう。以下の画像がコードの全体像になります。
ソフトウェア環境としてはLabVIEWに加えてVision Development Module (画像処理)+Analytics and Machine Learning Toolkitをインストールしてあります。
1.のテスト画像読み出しでは既に保存された画像データ、あるいはカメラからの画像をリアルタイムで読み出すことが可能です。
2.について機械学習では機械が判別しやすいように生データに処理を加えデータ量を減らし「特徴量」と呼ばれるデータに変換をした上で学習=>モデル生成を行うパターンが常套手段です。特筆すべきはこの特徴量生成部分をLabVIEWで編集することで良く名前を聞くMT法とは異なり、音、振動、統計データ、画像など様々な対象についての機械学習を手軽に行うことができます。
このサンプルの例では、(2)の部分でVisionツールキットに標準で用意される「IMAQ Extract LBP Feature Vector VI」の関数を使用して2次元の画像を配列データとしています。
より具体的に言うと、LBPはLocalBinaryPattern(LBP)はデータベクトルを作るのに使用しています。処理の内容は画像をグレースケールに変換し、画像を局所的に分割、画像に応じたヒストグラムを作成し、正規化した上で配列にして学習データとして利用します。曖昧な画像等の判断に強みをもち、顔検出、顔認識、表情分析、人口統計などの多様なアプリケーションに応用されています。
(出展)Local Binary Patterns - Scholarpedia. 2019. Local Binary Patterns - Scholarpedia. [ONLINE] Available at: http://www.scholarpedia.org/article/Local_Binary_Patterns?source=post_page [Accessed 19 July 2019].
3.さらに今回はテスト画像を2種類以上のカテゴリに判別させるアプリケーションを想定していますので、教師あり学習、いわゆるラベル付も行えるようにしています。
作成した特徴量、またそれに対応するラベル(笑っている顔=0。起こっている顔=1)をまとめて
モデル作成部分(4)に送ります。ちなみにモデル作成部分では以下のようなパラーメータが変更可能です。入力のニューロンの個数や伝達、正規化の方法(関数)が見えます。
学習部分のパラメータ変更画面
設定できる項目は限りがあるので、あくまでもパッと使えるニューラルネットワークという位置づけでしょうか。
そしてテスト画像もモデルが解釈できるように特徴量に変換、(4)で作成した学習済みモデルに与えることで判定を行っています。
こちらの実行の様子を動画で撮影したので御覧ください。(フリーソフトで収録したので透かしが入っている点はご容赦ください・・)
きっとアイデア次第で身近にこうした機械学習を応用できるアプリケーションは転がっているはずです。
機械学習/AIはなかなか初期投資を含めたハードルが高いというイメージはありますが、
今お使いいただいてるLabVIEWのスキルを使用すれば、データ収集、モデル作成、モデル検証をすべてLabVIEWで行うことが可能となり、モデル開発効率が飛躍的に向上します。
今回使用した、Vision Development Module, Analytics and Machine Learning Toolkitは1ヶ月半無償で試用が可能です。
使ってみたい、本アプリケーションの詳細に興味がある方は私までお気軽にご連絡ください。
次回はLabVIEWにデザインパターンの続きを弊社大阪担当の高村よりご案内しますので、ご期待ください。
この記事を書いた人
阿部 敏朗
熊本県熊本市生まれ。茨城育ち。
日本ナショナルインスツルメンツ(NI)にて九州、中四国地方を担当。
LabVIEWや製品が日に日に新しくなるので日々勉強しつつ活動しています。
趣味は毎日の食事、AI関連の記事をよむこと、温泉、ロングウォーキング。
ご相談・お問い合わせなどありましたら、こちらよりお気軽にお問い合わせください。
07-23-2019 01:06 AM
記事、大変興味深かったです。
医療従事者として画像診断に興味があり、実際に試してみたいと考えています。
記事の中で紹介して頂いたプログラムですが、これを共有していただくことは可能でしょうか?ご検討いただければ幸いです。
07-23-2019 05:02 AM
コメントありがとうございます。
記事を執筆しました、日本NIの阿部です。
よろしければ、以下のアドレスにご連絡いただけますでしょうか。
コードと使用方法を簡単にお話させていただければ幸いです。
toshiro.abe[at]ni.com (at は@に変換ください。)
07-28-2019 07:06 PM
ご返信、ありがとうございます。
LabVIEWについてはある程度経験があるので、まずは眺めて見たいのですが、WEB上にサンプルをアップロードしていただくことは難しいでしょうか?
ご検討のほど、宜しくお願いします。
P.S.
営業の方と話すのは敷居が高いけれど、試してみたいという好奇心があるユーザーは一定数いるのではないかと思います。
07-31-2019 02:46 AM
ご返信遅れまして申し訳ありません。
営業に話すのは敷居が高いのですね・・、もうすこし気軽な存在になれるように
活動してまいります。
さてプログラムですが、添付させていただきましたので
ご覧ください。不明点あればおしらせください。
よろしくお願いいたします。
02-20-2020 10:40 PM
掲載していただいたサンプルをもとに画像(グラフ)の解析を行っています。
特徴的な波形(A)を抽出するものなのですが、それ以外の波形のパターンが様々です。
サンプル数を増やしながらやってみたのですが、信頼度が上がっていきません。
Aとそれ以外 と分別するのは、この方法では難しいのでしょうか?
A,B,C,D,E といくつか画像のパターンを分ける方が良いのでしょうか?
02-26-2020 07:22 PM
投稿ありがとうございます。NI 阿部です。
完全にイメージができているわけではないですが
①波形Aが非常に整った形であればパターンマッチングの検討
②波形Aが整形度において揺れがある場合は
学習時に波形Aにノイズを加えて、サンプル画像を製作してモデルを作るとよいかと思います。
これは過学習を防ぐことにもなります。
また信頼度を考えた際に、本ツールキットのNNの隠れ層は一層ですので
対称の形状が非常に複雑な場合、その精度の向上には制限がございます。
よろしくお願いいたします。
02-27-2020 05:45 PM
ありがとうございます。
サンプルを改造して頑張りたいと思います。
03-17-2020 02:20 AM
ある程度形になってきたとのことで、良かったです。また面白いソフトを作成されたらぜひ公開いただければ幸いです。
09-19-2022 06:19 AM
LabVIEW2021で作成しているプログラムにdeep learningを組み込みたいのですが、Analytics and Machine Learning Toolkitをインストールしようとしたところ、LabVIEW2018しか対応していないとメッセージが表示されてうまくいきませんでした。良い方法は無いでしょうか?