はじめに
皆さん、こんにちは。
新卒2年目エンジニアの細川です。今年2023のオープンソースカンファレンスに参加してきました。5月末に開催された名古屋と7月中旬に開催された京都に参加しました!!イベントへの参加に伴って、きのこたけのこ論争を終結させるかもしれないAIを作成してみました。
きのこたけのこ論争について
皆さんご存知の通り、この世にはきのこ派とたけのこ派という巨大な派閥が存在します。
派閥間の争いは幾度となく繰り返され、両者の間には深い溝が存在します。
両者歩み寄ろうにもあまりにも溝が深く、和解するのは難しいと思います。
そこで、和解ではなく、争いが起きないようにすることを目指して、両者がお互いを認識できなくなるようなAIの作成を行いました。
認識できなければ、存在していないのと同義であり、そもそも争いが起きないのでは?と考えました。
どんなAI?
具体的にどのようなAIかというと、以下のようにきのこモードとたけのこモードがあり、モードに応じて画面内のきのこの山、たけのこの里をそれぞれもう一方に変換するというものです。
このように変換することできのこ派の人はたけのこの里を認識できなくなり、たけのこ派の人はきのこの山を認識できなくなります。
構成
少し詳しい構成についてお話しします。
本AIはYOLOとcycleGANという2つの学習済みモデルを利用しています。
YOLOは画像内の物体を検出するためのモデルで、cycleGANは画像内の物体を別の物体に置き換えるモデルになります。
YOLOやcycleGANの詳しい使い方は別記事にするつもりですが、今回はYOLOの学習用に50枚(きのこ25枚、たけのこ25枚)、cycleGANの学習用に600枚(きのこ300枚、たけのこ300枚)程度の画像を準備して学習させました。
やっていることとしては以下の通りです。
- YOLOで画像内のきのこの山および、たけのこの里を検出します。YOLOでは映っている物体の種類(ラベル)と映っている範囲(座標)を取得できるます。
- 検出した範囲の画像を切り取ります。(少し箱がはみ出ることがあったので外側にマージンを設けてます)
- 切り取った画像を成型し、CycleGANに入力し、ラベルに応じた変換をしています。
- 変換後の画像を元々切り取った画像のサイズにリサイズし、元の画像に埋め込みます。
以上の手順を行うことで、画像内のきのこの山をたけのこの里に、たけのこの里をきのこの山に変換することができます。実行時にモードを指定できるようにし、モードに応じて、どちらかの処理を行うようにしています。
また、これをフレームごとに繰り返すことで動画やwebカメラのリアルタイムの映像でも変換を行うことができます。今回使用したYOLO v5では画像の場合、映像の場合、リアルタイムの場合のそれぞれの検出のためのコードがすでに実装済みだったので、本アプリもそれらを活用させていただきました。
結果
以下に試しにきのこモードで変換してみた場合の画像を載せます。左側の赤枠の方がもともとたけのこの里だったものです。
よく見ると不自然なところもありますが、ぱっと見ではある程度うまく変換できているかなと思います。
ただ、cycleGANの処理がかなり重いため、GPUなしだとリアルタイムの変換はかなりカクカクしてしまいます。ちなみに画質が落ちている原因としては、cycleGANへの入力サイズよりも検出範囲が大きかったためです。cycleGANからの出力の画像を上記の手順4にて検出した範囲分に引き伸ばしており、画質が落ちてしまっています(と思っています)。もう少し大きいサイズで学習させたかったのですが、GPUが無かったこと、リアルタイム変換の場合、サイズを大きくするとさらにカクカクする等の理由で今回はこのサイズのままにしました。
また、学習に用いた画像を用意するときに明るさなどを変えないまま撮影してしまったため、明るさが変わった場合などは検出や変換の精度が落ちてしまうという問題点もあります。
今後の展望
今回は自由に使えるGPUが無かったこともあり、少し学習が足りなかった部分もありましたが、十分に学習をさせることで、より高精度に検出、変換が行えるようになると思います。
最終的には、メガネ型のデバイスにフィルターとして組み込むことで、互いを認識しないという状態が実現できるのではないかと考えています。
ただ、上で説明した通り、現時点ではGPUなしだとかなりカクカクしてしまうので、メガネ型デバイスに組み込むにはまだまだ課題は多そうです(笑)
また、今回は変換にcycleGANを用いましたが、変換対象が直方体なので、箱の角度を検出してその向きに合わせた画像に置き替えるみたいな変換の方がよさそうな気もします。角度の検出の仕方についてはまだやったことがないので追々調べてみようと思いますが、この方法が実現できたらGPUなしでもそれなりの速度で変換ができる(はず?な)ので、より夢が広がりますね。
終わりに
今回、きのこ派とたけのこ派の無益な争いを少しでも減らせたらという思いでこのAIを作成しました。現時点ではまだまだ課題も多いですが、このAIが世界平和への第一歩となることを祈っています。