GoogleのAutoMLを使ってKaggleのデータセットを解析、またエッジ向けのモデルを作成してみました。
機械学習の初心者の筆者でも簡単に試すことができ、非常に勉強になった旨を紹介します。
KaggleのデータセットをAutoML Visionでエッジに組み込む
Kaggleのデータセットを使い、エッジのモデルを作成して「電子部品の画像認識」が(一応)出来ました。
Kaggleのデータセットのダウンロード方法から、AutoMLを使ったエッジへの組み込み方法を紹介します。
以前にも下記記事で(ベータ版の)AutoML Vision Edgeの紹介をしましたが、今回は最新版の使い方で説明します。
Kaggleとは
筆者が「Kaggle」を知ったきっかけはLT枠で参加したAIchi勉強会でした。(その際の記事はこちらから)
勉強会で発表者の「u++」さんがKaggleの魅力を非常に面白く説明してくれました。
正直Kaggleの詳細については「u++」さんの下記記事を見てもらった方が一番わかりやすいと思いますのでリンク先貼っておきます。
Kaggleはデータサイエンティスト以外の方も十分に活用できる
Kaggleといえば「機械学習のコンペ」として今一番注目されています。
初見の方は世界中のデータサイエンティストの方々が順位を競われていて、敷居が高いと感じるかもしれません。
しかし初心者の方でも始めれるようにQiita含めて多くの先人達がネット上に記事が挙がっています。
そして筆者はまた違った(変な)視点でKaggleを有効活用させてもらいました。
Kaggleのdatasetは種類が豊富
Kaggleがオープンかつ人気なプラットフォームということもあり、多種多様なデータセットがあります。
そのためエンジニアとしても非常に興味深い「データセット」が多く公開されています
少し探しただけでも下記のような(電気技術者として)面白そうなデータセットが見つかりました。
・HDDのテストデータが集まったデータセット
・モータと温度の関係のデータセット
Kaggleのデータセットのダウンロードは簡単
おそらく多くのデータセットのプラットフォームがあると思いますが、Kaggleが一番簡単なのではと思います。
Googleのアカウントでサインインすれば、「Download」をクリックするだけで入手できます。
Kaggleのデータセットのライセンス形態は様々…
データセットを使う上で気になるのがライセンスですが、結構バラバラでした。
よく聞く「GPL 2」や、完全フリーの「CC0: Public Domain」などライセンス形態は様々です。
※基本はオープンなので通常の個人使用の分では問題ないと思いますが、もし使う場合はライセンス形態の確認をお願いします
ちなみに今回筆者が使った「電子部品の写真が集まったデータセット」は「GPL 2」でした。
もちろん個人的な利用のみの範囲で使わせてもらいます。
AutoMLでKaggleのdatasetを評価・モデル作成する
今回使うデータセットの中身を紹介しておくと「電子部品の写真」です。
1万以上の写真が「IC」「LED」「リレー」「コンデンサ」など多くの種類に分類されています
まずはKaggleのデータセットをAutoMLで解析してモデル作成を行います。
AutoMLにデータセットをインポートする
まずはGCP(Google Cloud Platform)のAutoML Visionのページに行きます(リンク先はこちら)
もしGCPの登録していない方は下記記事を参考に登録をお願いします
「新しいデータセット」を選択してインポートしていきます
画像認識して物を分類させますので今回は「マルチラベル分類」を選択します。
筆者は「パソコンから画像をアップロード」でKaggleからダウンロードしたZIPファイルをそのままインポートしました
AutoMLは「ZIP」ファイルも対応していますので、非常に楽に進めれます。
「Cloud Storage上の宛先」を選択する必要があります。「Browse」を押して新規にパケットの作成を進めていきます
パケットの作成ではデフォルトの選択のまま進めてもらっても構いません。
しかし、後ほどのモデル出力ではロケーションタイプを選択する必要があります
「Region」「us-central1(アイオワ)」に選ばないと出力できません
もしデータセットと同じ場所にモデル出力まで行いたい方は予め上記のローケーションで選択しときましょう。
それ以外はデフォルト設定の対応で大丈夫でした。無事インポート出来ました。
AutoMLがデータセットにラベルまで付けてインポートする
Kaggleのデータセットがしっかりしているため、AutoMLがラベルまで付けてインポートしてくれました。
非常に楽で助かります。
AutoMLでデータセットをトレーニングさせる
データセットをトレーニングさせます。
「トレーニング」のタブをクリックして「トレーニングを開始」⇒「Edge」を選択しました。
その後は「モデルの最適化…Best trade-off」、「使用するMaxノード数…8」はデフォルトで対応しました
あとはAutoMLがトレーニングしてくれるのを待つだけです。
AutoMLの料金は無料枠分で対応できました
今回のAutoMLの料金は無料で対応できました。
GCP登録の際に数万円分の無料枠のクレジットが貰えるので、そこから勝手に引かれた形になります。(約2000円分ぐらい引かれていました)
1万点の画像で約150Mbyteぐらいのデータセットでこれぐらいの料金でした。
料金に関してはあくまで参考扱いでお願いします
AutoMLでエッジのモデルを出力する
トレーニングが終えましたら評価結果を確認できます。
詳細を確認したい方は色々と見てみると良いと思います。
トレーニングした結果を元に、モデル出力を行います。
「テストと評価」のタブから使用するモデルを選択します。今回はEdge TPUを使いますのでCoralを選びました。
先ほど説明しましたが、出力するパケットのリージョンには注意ください。
「Region」「us-central1(アイオワ)」に選ばないとモデル出力できません
(リージョンがデフォルトだとエラーが出ます)
モデル完成後は色々な方法で出力できます。
今回筆者はGCPのストレージ箇所を経由してダウンロードしました。
電子部品の画像認識をテストする
Kaggleのデータセットから出力したモデルを画像認識に使用していきます。
今回はラズベリーパイ(raspberry pi)とエッジデバイスのCoral USB Acceleratorを使います。
AutoMLのモデルをEdge TPUで使う準備
今回の画像認識させる詳細方法に関しては下記の応用編を参考にお願いします
AutoMLで出力したファイルの内、その中でモデルとラベルを使います。
ファイル名の末尾が「_edgetpu_model.tflite」「_dict.txt」の2つです。
Edge TPUで使用するためにラベルを修正します
「_dict.txt」のラベルに関しては今回のEdge TPUの使い方では少し修正が必要と思われます。
ダウンロードしたものはラベルが並んでいるだけです。
各ラベル名に1から順に「数字」と「スペース」を追加しときます。
ラズパイのEdge TPUのフォルダにラベルとモデルを入れる
修正したラベルとモデルをラズパイのEdgeTPUのフォルダにコピーしときます
あとはコマンドでディレクトリ移動して、下記プログラムを実行するのみです
1 2 3 |
cd /usr/share/edgetpu/examples/ python3 classify_capture.py --model models/model-export_icn_edgetpu_tflite-e_parts_20191228_edgetpu_model.tflite --label models/model-export_icn_edgetpu_tflite-e_parts_20191228_dict.txt |
Kaggleのデータセットからの画像認識をテストする
テスト(ラズパイの)環境は下記です。
OS:Raspbian Buster with desktop and recommended software(September 2019)
試験プログラム:classify_capture.py
接続デバイス:Google Coral Edge TPU USB Accelerator
テストに使った電子部品は「(バッファ)IC」と「リレー(relay)」です。
データセットの中身も把握・精査していませんが、適当に筆者の手元にあった電子部品を使いました。
テスト結果としては…
「IC(Integrated…)…そこそこ認識できていました」
「リレー(relay)…ほんの少し認識できていました」
おそらく動画で見てもらった方が分かりやすいと思います。
下記Youtubeにアップしておきました。
今回はKaggleのデータセットを特に調整・修正もせずに画像認識させました。
(AutoMLとしても100%デフォルト設定でモデル作っただけ…)
それでも一応判別してくれましたので、ほんの少し手を加えれば結構使えるものにはなるかと思います。
まとめ
Kaggleの取り組み方としては少しずれているかもしれませんが、結構楽しめる使い方だと思います。
よろしければ皆さまもAutoML Visionを使って画像認識させてみてください
コメント