LoginSignup
13
8

More than 3 years have passed since last update.

【DataRobot】画像からマスクを着けているかどうかを判定するAIをほぼ自動で作ってみる

Posted at

はじめに

こんにちは、@yshr10icです。

Qiita夏祭りの「DataRobotテーマ」の投稿になります。
前回の記事では、DataRobotのトライアルの申し込みから、実際にサンプルデータを用いて回帰予測をさせるところまでを実施しました。

【DataRobot】DataRobot AI Platformのトライアル申し込みから予測させるまで

DataRobot AI Platform トライアルでは、Visual AI(画像データ入力)によるモデリングも使えるとのことでしたので、今回はVisual AIにチャレンジしてみたいと思います!

Visual AIで何を作るか?

普段は、やりたいことが先にあってそれを実現するためにどんな手段を使うか(機械学習、AIなど)という順番になりますが、今回はVisual AIを使うことが目的のため、何をやるかを決めなければいけません。(私はこの作業が非常に苦手です。)

特に何も思い浮かばなかったので、Qiitaで参考になりそうなものはないかなーと探してみました。「きのこの山」と「たけのこの里」を分類する、ポケモンの画像を使って何かしらの判定をする、などなど考えたのですが特にピンとくるものがありませんでした。

そんなときに、ふと数ヶ月前のお客さんとの話しを思い出しました。

AIを使って、人がマスクを着けているかどうか簡単に判定できないか?

このお話しをしていたときは、画像ではなく動画でビルの入り口などにカメラを置いて、マスクの着用有無を判定したいという内容でした。(さらには検温もしたいとのことでしたが、今回は関係ありませんね。)

このお話しは最終的に流れてしまったのですが、人の写真からマスクを着けているかどうかを判定するAIをほとんど自動で作れたらすごいのでは?となりました。おそらく需要があるのは動画による判定でしょうが、DataRobotならそのうち動画にも対応してくれるでしょう笑

ということで、今回は画像からマスクを着けているかどうかを判定するAIを作ってみたいと思います!!!

画像準備

まずは画像を集めたいと思います。今回は下記のサイトからマスクをしている人とマスクをしていない人の画像を取得します。(なかなか良いサイトがなかったので、ちょっと古い感じのサイトになってしまいました笑)
このサイトとGoogle画像検索を用いて、30枚ずつ計60枚を用意しました。

http://busitry-photo.info/

無料人物写真フリー素材の【ビジトリーフォト】商用利用OK.png

データセットの用意

https://app2.datarobot.com/docs-jp/modeling/visual-ai/vai-model.html#データセットの準備を参考にデータセットを準備していきます。

分類したいクラスごとにディレクトリを用意します。今回はwith-maskwithout-maskとしました。

ダウンロード.png

次にクラス名と画像のパスを格納したCSVを用意します。

all_data_csv_—_mask.png

画像のディレクトリとCSVを合わせてzipファイルに固めます。

AIを作ってみよう

https://app2.datarobot.com/newにアクセスし、真ん中にある「ローカルファイル」を選択します。

DataRobot.png

先ほど作成したzipファイルをアップロードしましょう。無事にアップロードできたようです。

DataRobot.png

予測対象を「Target」とすると、今回は「分類」が自動で選択されました。これで、モデルを作成してみましょう!

DataRobot.png

と思ったら、分類には100レコード必要みたいですね。。。画像を集めなおします。

DataRobot.png

レコード数が100件なので、2〜3分でモデリングが終わりました!今回作成されたのは5つのモデルで、上位モデルは非常にシンプルなモデルになっていますね!

DataRobot.png

今回のモデルのインサイトを確認したいと思います。「解釈」タブの「画像埋め込み」タブを選択すると、以下のようなマップが表示されます。これは、画像のサブセット間の視覚的な類似性を2次元に表示したものになります。これを見てみると、マスクありとマスクなしを以下のように分類できるそうだということが分かりますね。

DataRobot.png

次に「アクティベーションマップ」タブを見てみましょう。アクティベーションマップでは、モデルの予測に対して重要と思われる領域を強調表示してくれます。こうして見てみると、人を認識しており、さらに何となくマスクの周りも強調しているように見えなくもないですね。

DataRobot.png

予測

この上位モデルを使って、新しい画像に対して予測させたいと思います。
マスクと言ったら勝手に安倍首相が思い浮かんだので、安倍首相のマスクあり、マスクなし画像で試してみました。

学習のときと同様に画像とそのパスを指定したCSVファイルを用意します。予測対象のカラムは不要です。

all_data_csv_—_prediction.png

「予測」タブから上で用意したzipファイルをアップロードし、予測を計算します。

DataRobot.png

結果をダウンロードしてみると、予測の確率とラベルが付与されたCSVファイルを取得することができます。PredictedLabelなのですが、こちらが何を表すのかDataRobotの画面から確認できませんでした。おそらくデータを入れた順番にカテゴリに連番を振っていると思うので、0: マスクあり1: マスクなしだと思います。(つまり両方とも予測できている?)

PredictedLabelの確認方法をご存知の方がいらっしゃいましたら教えていただけると嬉しいです:bow_tone1:

mask_zip_Elastic-Net_Classifier__L2___Binomial_Deviance___21__100_5effe7e54be69d002f44472f_19bd8b5f-42f0-49c9-9455-6_prediction_csv_—_prediction.png

まとめ

いかがだったでしょうか?今回はVisual AIを用いて画像からマスクを着けているかどうかを判定するAIを作ってみました。人が行う作業としては、画像とラベル付けしたCSVを用意するだけです。あとはDataRobotがよしなにAIを作ってくれるので、非常に便利だと感じました!

また、作成されたモデルのインサイトも簡単に確認できるのが嬉しいですね。AIが予測した結果の判断の根拠はなんなのか?というのは良く議論に上がることなので、こちらをノーコードで確認できるのはすごいと思います。ただ学習に使用した画像に対するインサイトは確認できたのですが、予測に使用した画像に対するインサイトを確認できないのは少し残念でした。(もしかしたらできるのかもしれませんが、どこでできるのか分かりませんでした。)

ちなみに判断の根拠に関する記事は、以下が参考になるかと思います。

今回の記事は以上となります。最後まで読んでいただき、ありがとうございました!
参考になった!という方はLGTMをしていただけると励みになりますので、よろしくお願いいたします!

13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8