YOLOv5を使ってAIでマスク検出をやってみた

はじめに

すでに人生の半分以上を技術者として過ごしているソフトウェアコントロール社員です。

突然ですが、ある依頼を受け、AIを使ってマスク検出アプリを作成しました。
AIという単語は世にあふれているものの、開発者としては未知でした。
しかし、今は便利な時代になったもので、材料もノウハウも世の中にあふれておりました。
今回はそうしたものを使ってアプリを完成させるまでをここに簡単に残しておきます。

AIでマスク検知アプリを作ろう!

そもそも、アプリそのものもすでに世の中にあるわけで、そのお試し。
AIの物体検知を使用して、顔とマスクを認識し、マスク有無を表示していることがわかりました。

また、アプリを探すプロセスの中で、YOLOv5なるものを発見。
調べてみたところ、AIの肝となる学習がとても簡単にできるものであることが判明。
さらに、物体検知用のコードもついており、簡単に試せました。
(学習も検知もコードはPython)

これだ!ということで、YOLOv5でアプリ作成に挑戦することに。
(YOLOv5のライセンスはGNU GPL V3。プログラムの改変や再頒布は可能。)

アプリの仕様を決める

上記を踏まえ、YOLOv5の物体検知処理をベースにアプリを作ることとし、作るものの仕様を決定。
ざっくりいうと、ポイントは以下。
・画面が欲しい(ブラウザで起動するのではなく)
・マスクあり、マスクなしだけわかればよい
・マスクなしの場合「マスクをしてください」的な音声が欲しい

YOLOv5に同梱されているdetect.pyをベースに上記機能を盛り込んでいきました。どの機能もPythonおよびPythonの追加パッケージだけで対応可能でした。

アプリができれば、あとは検知に使用するモデル。
AIの場合、モデルの精度がアプリの質を左右します。

AIを知っている方はご承知でしょうが、モデルはデータセットを学習させて作ります。
この学習部分はYOLOv5ではとても簡単。
同梱されているtrain.pyに精度を指定するYOLOv5本体のモデルとデータセットを渡すだけ。

データセットを探す

というわけで、データセット探し。
適当な写真を探し、アノテーションツールを使ってデータセットを作り・・・
とやってはみたものの、時間取られるし、面倒くさい。

そもそも、著作権などの制約のない画像を大量に確保するのも大変。社員の写真を集めようとも思いましたが、このご時世なかなか。
また、マスクあり、マスクなし、色マスク・・・と様々なパターンを集めるもの大変。

もし集められたとして、アノテーション作業も大変。
画像1枚1枚にタグをつける作業は地味に労力と時間を要しました。私のペースで1枚当たり2~3分。100枚やれば約3時間強。

そこで、データセットも世にあふれているものをお借りすることに。
主にKaggleから著作権を放棄しているデータセットをお借りしました。

モデルを作成する

そしてモデルの作成。
これは非常にリソースを使う作業のため、そこそこの性能があるPCでもほぼ無理。
調べたところ、Google Colabを使えばクラウド上のリソースが使用でき、問題が回避できそうとのことで、さっそく使ってみました。
1000件程度のデータセットならこれで問題ありませんでした。
(2000件以上にも挑戦しましたが、クラウド上の制限か、Google Colabを起動しているPCの限界か、途中で異常終了・・・)

出来上がり!

さて、材料がそろったのであとは組み合わせて動かすだけ。
依頼者に見てもらって多少の修正はしましたが、完成版は以下のような感じ。
(しいて言えば、モデルはもう少しよいものにしたいところ)
写真は一人&白マスクですが、色付きマスクも複数人の個別検知もできます。

マスクありの場合
マスクなしの場合

終わりに

どうにか完成はしたものの、最初は私一人で作業を開始し、かなり迷走しました。
AI経験者にアドバイスをもらったことと、私がYOLOv5に行きついていたこと、などいくつかのプラス要因が重なり、無事完成しました。

迷走はしたものの、AIについていろいろ触れるのは楽しかったです。
機会があればまた。