第32回 教師なしで勉強できますか?(ミニ探究学習)

第32回 教師なしで勉強できますか?

「探究学習をやってみよう(その3):不良品の検出(CNN+One_Class_SVM)」の探究活動

皆さん、こんにちは。テラオカ電子です。今回のタイトルは、「教師なしで勉強できますか?」です。なぜかと言うと、機械学習の一分野である「教師なし機械学習」を扱います。「正解」を教えなくてもコンピュータに「学習」させることができるのかと疑問のある方も見えるかもしれませんが、この分野も古くから研究されています。今回の探究活度を通して、理解を深めてもらえれば幸いです。

いきなり「教師なし機械学習」という分野が出てきましたが、ここで、AIの「地図」を整理しておきます。

AIについてこのような分類がよくあります。「分類」することは学問の基本なのですが、AIに関しては技術の進歩が速いので、この地図も今となっては古いかもしれません。ですが、「地図」なしで、AIの森(世界)をさ迷っていても、その全体像をつかむことはできません。多少古い地図でも使ってみる価値はあります。

「教師なし学習」は、機械学習の一分野です。主に、データのクラスター分けやポジショニングに使われます。詳しくは、以下のサイトで確認してください。とにかく、AIといっても、機械学習といっても、様々な用途に応じた様々な手法があります。なので、AIの勉強に退屈することはありません。楽しんでいきましょう。

【「教師なし学習」の紹介サイトはこちらから】

今回のテーマは、「不良品の検出」です。工場で作る部品を想定しているのですが、不良品は、一般には、めったに発生しません。そもそも良品を生産するように製造ラインを作っているからです。でも、まったく不良品をゼロにすることはできません。また、いつ発生するかを特定することも難しいです。そこで、検査が必要になります。そして、この検査を自動で行うことができれば嬉しいです。

この不良品の検査にコンピュータ(AI)を使おうとするのですが、コンピュータに不良品はこんな形状や色ですよと「学習」させることができれば、「教師あり学習」の手法が使えます。でも、そもそも不良品の数が少なかったり、そもそもその形状が予測できなかったりした場合は、「教師あり学習」は使えません。そこで、登場するのが今回扱う「教師なし学習」です。

この「教師なし学習」は、正常品のみで「学習」してモデルを作ります。そして、このモデルに不良品を入力させると、この値が正常品とは統計的に異なること(距離が遠くなること)から不良品を検出します。すなわち、正常品がどういうものなのかをしっかり「学習」しておき、不良品が来たら、今までのとは違うと答えるイメージです。

ところで、皆さんは「5S」というのをご存じでしょうか?5Sとは、工場でよく使われる職場環境の改善や維持のために用いられるスローガンです。5つの項目、「整理」、「整頓」、「清掃」、「清潔」、「躾(しつけ)」のことで、それらの項目をローマ字で記述した際の頭文字が「S」であることが名前の由来です。

では、何のために、「5S」をしっかりやる必要があるのでしょうか。もちろん、整理や整頓がされていないと生産効率が悪くなりますし、もっといえば「心の乱れ」に通じて、従業員のモチベーション低下に繋がります。そうしたことも大切なのですが、そもそも、普段から整理・整頓・清掃などをしっかりやっておかないと、「正常」がどういう状態なのかを定義できないからです。もし、床にビス(ネジのこと)が落ちていた場合、清掃が行き届いていれば、ビスが落ちていれば「異常」であることが分かります。製品への組付けを忘れていたといったことも発見できるかもしれません。清掃が行き届いてないと「正常」と「異常」の区別ができないからです。また、保管場所にある製品箱が水平垂直置きになっていないことが分かれば、何かをぶつけた可能性を疑うこともできます。工具が決められていた位置に整頓されていない場合でも、「異常」な工具の使い方をした可能性を疑うことができます。工場では、「品質管理」の維持が重要ですが、そのために「異常」を発見するために、5Sを徹底して「正常」状態を管理する必要があります。

そういうわけで、今回の不良品の検出で扱う「教師なし学習」は、「5S」の徹底のように正常状態をしっかり「学習」して、「異常」である不良品を見つける手法といえます。

【「5S」の紹介サイトはこちらから】

ProSharing Consulting(プロシェア...
5Sとは? メリットや導入ポイントを解説 | ProSharing Consulting(プロシェアリングコンサルティング) 5Sとは、職場環境の改善や維持のために用いられるスローガンで、おもに製造業やサービス業で利用されています。各職場において徹底するべき5つの項目「整理」「整頓」「清...

今回の探究学習とほぼ同じことを実行した動画をYouTubeでアップしています。こちらも参考にしてください。

【テラオカ電子:「「One Class SVMによるブロックの不良検出 Google Colaboratory編」をつくりました。」はこちらから】

では、前置きはこれくらいにして、探究学習を始めましょう。

目次

【1今回の探究学習の概要】

はじめに、今回取り組んでいただく探究学習の概要を説明します。

今回扱う機械学習のモデルを上記に示します。

まず、良品ブロックの画像を準備して、それの外形を切り出します。こうすることで、ブロック本体だけの判定にすることができます。それをCNN(畳み込みニューラルネットワーク)であるVGG16モデルで画像テータを変換します。

VGG16はCNNなので、画像の特徴を捉えることができます。もともとCNNモデルは、生物の「目」の仕組みを模したモデルです。このことで、物体のもつ特徴を捉えた密な情報に変換できます。この点が気になる方は、VGG16モデルを介さずに直接機械学習を行った場合と比較する探究も面白いと思います。

次に、VGG16モデルからの出力データを統計的機械学習モデルであるOne Class SVMに与えます。そして、One Class SVMを学習させたのち、テスト画像を良品か不良品かに判定させます。

One Class SVMは、まず、正常データをカーネルトリックという座標変換により、原点から遠い位置に配置するようにします。そして、この作られたモデルに異常値が入力されると、今度は、その座標変換により原点に近い位置に配置されます。この違いから、異常データが検出できます。

モデルの学習が終わったら、実際に、学習で使わなかった新たな「正常品」と「不良品」の画像をモデルに与えて、判定を行います。

【「One Class SVM」の解説サイトはこちらから】

元コンサルでデータサイエンティス...
One class SVM による外れ値検知についてまとめた - 元コンサルでデータサイエンティスト はじめに 異常検知技術が実用システムに導入される例が増えています。今回は外れ値検知手法として人気が高いアルゴリズムのひとつであるOne class SVMについてご紹介します...

今回は、100円ショップで購入した、玩具のブロックで試してみます。では、前提知識はこれくらいにして、実際に動かしてみましょう。

【2研究の問い:テーマを決めよう】

今回の探究のテーマは、CNNOne Class SVMのモデルでどの程度異常検知が可能なのか?です。もちろん、ご自身で一通り実行した後、オリジナルな問いやテーマを決めてください。そして、その問いの答えを見つけるために、プログラムを変更して実行させてみましょう。

オリジナルの画像でやるとか、CNNモデルの構造を変更したり、使わなかったり、また、One Class SVMのパラメータを変更してみるなどしてください。面白い結果など出ましたら教えてください。それでは、いよいよ準備に入りましょう。

【3準備】

私のGitHubのリポジトリからデータとプログラムをダウンロードしよう。

「Code」ボタンからプルダウン表示させて、ZIPファイルをダウンロードします。

【私のGitHubのリポジトリのURL

Google Driveにファイルをアップロードしよう。

Googleのアカウントが必要です。MyDriveに自分でフォルダ(名前は自分で決めてください)を作り、そこに①でダウンロードしたファイル(imagesのフォルダとCNN+one_class_SVM_ver1.ipynbのファイルの2つ)をアップロードします。下図のようになればOKです。私の場合は、「CQsemi」のフォルダの下にアップロードしました。

以上で、準備は完了です。次は、いよいよプログラムを走らせます。

【4プログラムの動作】

「CNN+one_class_SVM_ver1.ipynb」をダブルクリックしてGoogle Colaboratoryを立ち上げよう。右クリックで「アプリで開く」からでもOKです。

【「Google Colaboratory」の使い方はこちらを参考にしてください】

コードセルの左の三角ボタン(赤○で示した場所)を順にクリックしていきます。実行したいセルを選択してSHIFT + ENTER でもOKです。下図は、三角ボタンを押した後の状態です。

以下、順に実行ボタンをクリックしていくだけです(ただし後で説明するパスの設定が必要です)。

【5結果と考察】

「ドライブのマウント」をしたあと、「2 画像データの取り込み」を行います。

まず、下記のtrain_image_folder_pathのパス(images/okまでのパス)をご自身のものに書き換えてください。そして、実行ボタンを押すと良品10枚の画像が表示されます。

次に、「良品の画像の輪郭抽出」を行うのですが、実行する前にここでも以下の2か所パスを書き換えてください。「ok_d」のフォルダはドライブに作らなくてもOKです。このプログラムが自動で作ります。このセルの実行には、40秒ぐらいかかります。実行すると「すべての画像の処理が完了しました。」と結果が表示されます。

次のセルを実行させると、上図のように外形を抽出した画像を確認できます。55枚全て抽出できました。この外形抽出のプログラム作成は、試行錯誤が必要でした。ご自身のオリジナルの画像の場合は、パラメータを調べて調整が必要です。今回は説明を割愛します。

次に、「テスト画像の確認」も同様に、パスを変更させた後、実行させてください。今回は、テスト画像として10枚準備しました。ここでの良品は、学習でのものとは異なるものです。

次に、同様に「テスト画像の輪郭抽出と確認」のパスも書き換えて実行させてください。

さらに、次を実行させて、画像を確認してください。今回は、10枚中9枚しか外形を抽出できませんでした。不良品は、最初の4枚になります。

次に、「良品の画像のリサイズと水増し」を行います。リサイズは、140*140ピクセルにしています。また、良品画像を上下左右反転、90度、180度、270度回転させた画像で水増しします。学習データを増やすことで、判定を安定させます。次に、同様に「テスト画像のリサイズ」を行います。

②次に、「3 VGG16モデルの読み込み」を行います。

この時、パラメータは固定(学習しない)としています。そして、読み込んだモデルの出力を1次元にする層を加えます。次に、学習データとテストデータを規格化(255で割って0~1の範囲のデータにする)して、それを先ほどの学習用とテスト用の画像をVGG16モデルに入力し、学習データ、テストデータのそれぞれの出力をつくります。ここは、前回のブログ記事(第31回)と同じです。

③最後に「4 One Class SVM の計算」を行います。

結果、9枚のテスト画像は、全て正しく判定できました。One Class SVMのパラメータを色々変更させてその変化を確認してください。

【6まとめ】

今回は、玩具のブロックの不良検出を行いました。機械学習のモデルとして、まずCNNを使って画像の特徴を捉え、それをOne Class SVMを使って判定させました。その結果、テスト画像で準備したものについては、全て正しく判定できました。

今回、ご自身のオリジナルの画像を行う際には、その物体の外形の輪郭抽出がうまくできるかどうかが問題となります。背景や物体の明るさの条件に合わせて、輪郭抽出のパラメータを変更する必要があります。試行錯誤が必要ですが、粘り強く試してください。また、外形を抽出しない場合も試してください。

今回使った機械学習のモデルは、古典的なOne Class SVMでしたが、他のモデルも試してください。私は、前回の場合(第31回)と今回の結果から、CNNで画像の特徴を抽出すれば、高速処理できる古典的な機械学習モデルでもかなりの精度が期待できると考えています。

面白い分析ができましたら、本サイト(CQゼミ)の「問い合わせ」から教えてください。また、プログラムが動かなかったり、何かトラブルがあったりしたら、教えてください。直ぐには、返信できませんが、対応していきます。

第30回の小説の文章スタイルの分析、第31回の手書き数字の分類、そして今回の不良品の検出と3回連続で、実際に手を動かして試せる探究学習教材を提供しました。楽しんでもらえたでしょうか?こんな探究をやってみたいなどのリクエストがありましたらご連絡ください。

ここまで読んでくれて、ありがとうございます。

テラオカ電子 

【イチオシのYouTube動画】

このコーナでは、記事に関連する(関連しないかもしれません)気になるYouTube動画を紹介しています。今回は、矢井田 瞳『アンダンテ』(2002)を紹介します。私は音楽音痴なのですが、「Andante(アンダンテ)」というのは、音楽の速度記号の1つで「歩くような速さで」という意味だそうです。いよいよ明日から新学期が始まります。課題山積ですが、このブログ記事も含めて「歩くような速さで」着実に進めていきたいと思います。

「矢井田 瞳 – アンダンテ BAND VERSION」

【2024/03/31投稿】

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次