ブログ

Blog

絞り込んで表示する

2018.9.25 - 

画像による不良判定をMAGELLAN BLOCKSでやってみた

グルーヴノーツ コンサルタントの吉村です。
今日はMAGELLAN BLOCKSを使って画像による不良判定をやってみます。

今回の題材は完全に趣味が入っています。
というのもコーヒーを自分で淹れて飲むが好きなんですが、最近は買ってきた焙煎後の豆をミルで挽く前にハンドピッキングといって悪い豆を選別しています。 悪い豆というのは割れていたり、中身が抜けていたり、サイズが極端に大きいまたは小さいものなどを言います。 そう言った豆の外観上の違いにより焙煎の具合が変わり、雑味が入りコーヒーの味を落とします。

※焙煎士の友人から「形よりも発酵豆や未成熟豆を取ったほうがいいよ。」と教えてもらいました。 発酵豆や未成熟豆は色と特に臭いが違うそうです。臭いを選り分けられる仕組みを作れるようになったらすごいですね。(2018-10-06追記)

そこでMAGELLAN BLOCKSの画像分類を使って焙煎後のコーヒ豆の不良を判定してみます。 本ブログに書くのに本来なら製造業におけるいかにも不良品検知っぽいものができればいいのですが、あいにくグルーヴノーツは物理的な物の製品を持たない会社なのでそういうことができません。 やれるものなら「半導体基盤の接着不良」とか「アルミフレームのプレス加工不良」などでブログを書いてみたいのですが、できないのでコーヒー豆にしてみた次第です。

それでは実際に画像分類による不良判定に入っていきましょう。


データ準備

まずはいつものデータ準備です。 今回は会社の近くの地下街にあるコーヒー豆などの食材を一般に販売するお店でいつもの豆を買ってきました。 買ってきた豆を自分で選別して、良品と不良品をそれぞれ白いトレーに等間隔に並べてスマホで撮影しました。

良品のコーヒー豆
不良品のコーヒー豆

実際に悪い豆は人間が目視で「確かに変な形」と分かると思います。(大量にトレーに出して選別は慣れが必要です)

この良品・不良品のそれぞれの画像に6×7=42個の豆が写っており、2枚で84個の豆の画像を準備することが可能です。 各画像は 4032 × 3024 の解像度で撮影されていて、そこから 400 × 400 のスクエアにトリミングして82枚の小さな画像にしています。

良品のコーヒー豆トリミングサンプル
不良品のコーヒー豆トリミングサンプル

この84枚の画像から予測用に各7枚で14枚をより分けました。それぞれの枚数およびフォルダ構成はこの様になっています。

coffee_beans/
┣gakushu/
┃┣ok/(OK画像35枚)
┃┗ng/(NG画像35枚)
┗yosoku/(OK/NG画像14枚)

上記のフォルダ構成をそのままにMAGELLAN BLOCKSの世界へ連れて行くために GCS Explorer を使ってアップロードします。 GCS ExplorerはGoogle Cloud StrageへのアップロードやダウンロードをMAGELLAN BLOCKSを通してできるサポートツールになります。


画像ファイルアップロード

まずはメニューの一番下にあるGCS Explorerをクリックするんですが、サポートツールは右側の別タブで開くリンクをクリックすると便利です。



GCS Explorerを開くとサービスアカウントを選択し、続いてバケットを選択します。 バケットというのはWindowsで言う所のCドライブやDドライブといったものです。 データを置くバケットは末尾が -data となっているもの使うようにしています。

バケットを選択するとファイル・フォルダのリストが表示されます。(今は何もないので空です) ここにフォルダをアップロードをクリックしてcoffee_beansのフォルダをアップロードします。



画像をフォルダごとアップロードするとリストにフォルダ名が表示されます。 これで画像を学習させる準備が完了しました。

このcoffee_beansの中にある gakushu フォルダをモデルジェネレーターに入力し、 画像ファイルをもとに学習させ予測モデルを作っていきます。


モデルジェネレーターを作成しトレーニング

モデルジェネレーターを使って学習し予測できる様にするには下記手順で行います。

  1. モデルジェネレーター作成
  2. トレーニング開始
  3. トレーニング結果適用
1.モデルジェネレーター作成

まずはメニューからモデルジェネレーターを開きます。



利用開始(2つ目以後は追加)をクリックするとウィザードが表示されます。 モデルジェネレーター新規作成でまず画像分類タイプを選択します。 続いて名前を入力します。名前は何の目的のモデルを作成したいかと考えてつけると良いです。 今回は「コーヒー豆不良判定」とします。



続いていつものGCPサービスアカウントの設定画面です。 フルサービスプランの場合には表示されないのでおすすめです。

ストレージ設定ではモデルジェネレーターの中で内部的に使われるファイルを保存する場所を選択します。 バケットは末尾が -ml となっているもの使うようにしています。

画像分類タイプの場合は設定は以上です。非常に簡単ですね。 完了を押して作成します。



2.トレーニング開始

続いてトレーニングを開始します。 トレーニング開始ボタンをクリックするとこのような画面が表示されます。 まずは名前をつけて画像フォルダーと書いてある枠の一番右のフォルダアイコンをクリックします。



GCS File Selectorが表示されるので、 gakushu を選択します。 するとトレーニング開始画面に画像フォルダーのURLが入力されますので、 開始 ボタンをクリックします。 これで準備した画像をもとにモデルジェネレーターが特徴を学習しながらモデルを作成します。

3.トレーニング結果適用

トレーニングが終わると 成功 と表示されます。 成功となっていれば適用対象から本番用を選択し適用をクリックします。 数分待つと適用処理が完了し適用済みになると予測に利用することができます。



これでモデルジェネレーターを作成してトレーニングが完了し学習済みモデルが作成されました。


フローデザイナーで予測フローを作成し予測フロー実行

フローデザイナーを使って予測をするのは下記手順で行います。

  1. フローデザイナー作成
  2. 予測フロー作成
  3. 予測フロー実行
1.フローデザイナー作成

メニューからフローデザイナーを開きます。

利用開始(2つ目以後は追加)をクリックすると、フローデザイナーの名前を入力する画面になります。 今回は「コーヒー豆不良品判定」とします。

2.予測フロー作成

作成したら一覧に表示されるフローデザイナーの名前(今回は「コーヒー豆不良品判定」)をクリックすると、フローの編集画面が別タブで表示されます。



予測フローを作るには左のブロックから組み立ててもいいんですが、予測フローはよく作るのでテンプレートを準備しています。 ヘッダーのフローテンプレート作成をクリックして作成します。

まずはモデルジェネレーターのタイプを選択します(今回は画像分類予測)。 続いてフローの名前をつけます。これは最初のブロックであるフローの開始に表示される名前です。 今回は「コーヒー豆不良品判定」と名前をつけました。



次にモデルジェネレーターのモデルを選択します。 作成済みのコーヒー豆不良品判定のモデル選択したら、予測形式の選択ではバッチ予測を選択します。 (オンライン予測とバッチ予測の違いや使い分けについては別の記事でご案内します。)

続いて予測対象の入力として画像フォルダを指定しますが、GCS ExplorerのGCS URLコピーをクリックします。 クリックするとフローテンプレートの画面のGCS URLにペーストして場所を指定します。



入力の次は出力となるCSVファイルの場所を指定します。 ストレージの選択にて Google Cloud Storage(GCS) を選択し、 GCS URLにCSVファイルの場所を入力します。 私はよく先ほど入力としてコピーしたフォルダを一旦貼り付けて、URLを直接編集して微調整します。

配置するタブは現在のタブでそのまま配置をクリックします。 するとフローデザイナーの編集パネルに該当のフローが配置されます。



3.予測フロー実行

配置されたら右上の保存をクリックし保存します。 保存するとブロック名の少し右上に丸に横向きの三角で実行ボタンが表示されます。 こちらのボタンをクリックするとすぐに実行対象として準備されます。



実行ボタンではなくフローのメニューにある フローの実行 をクリックしても大丈夫です。 実行すると続いてフローのメニューにある ログを表示 をログパネルが表示されログを確認できます。



予測処理が動いたら結果として出力されたCSVを確認します。 GCS Explorerにて再読み込み後にkekka.csvをチェック入れて ダウンロードする をクリックします。 最後に表示されるウィンドウから該当のファイルをクリッック(または右クリックして保存)してダウンロードします。



ダウンロードしたkekka.csvを開くと各ファイルごとにok/ngのラベルとそのスコアが表示されます。 みるとng_7-3.jpgだけokに間違えていますね。

今回は学習枚数が少なかったり、スピード優先でトレーニングさせているので間違いもありますが、 別の記事で画像分類の精度向上についてもご紹介したいと思います。 また複数枚まとめてバッチ予測する方法をご紹介しましたが、次は他の予測方法についての記事を書きます。

このようにMAGELLAN BLOCKSで画像分類に取り組むことは非常に簡単なので、 ぜひ不良品判定に限らず画像分類に取り組んでいただければと思います。