<プロジェクト概要>
メガネをかけてiPadで自分自身を撮影し、かけているメガネのレンズの色を変更させるサービスの開発をすることになりました。
このアプリでは大きく2つの開発が盛り込まれています。
①メガネレンズの枠をAIで読み取る
②髪の色、フレームの色、肌の色、レンズの色からおすすめ度を算出する
今回の開発日誌では、①の開発について記載します。
《クライアントの課題》
《解決案》
AIを用いて、お客様が自分自身を撮影した写真をレンズの枠を読み取り、枠内の色を変化させることでクライアントの要望に応えることができました。
《実装方法》
①iPadで自分の写真を撮影
②撮影した写真をサーバーへ送信
③サーバー上でAI解析を実施
④解析結果の点群をiPadへ再度返送する
⑤iPad上で点群で囲まれた形状内に色を付与する
これらの実装方法でiPad上でレンズの色を変化させることを実現しました。
《メガネレンズ枠の取得方法の概念》
メガネレンズ枠を取得するために、Deep Learningと画像処理を使用しました。
具体的には、まずPyTorch(機械学習ライブラリ)(*1)を用いて、画像からレンズを見つけ出し、枠の輪郭をOpenCV(*2)で入手することで実現させました。
※入力画像は生成された画像であり、実在する人物ではありません。
*1:PyTorch(パイトーチ)と読み、Facebookが開発を主導したPython向けの機械学習ライブラリです。
*2:正式名称「Open Source Computer Vision Library」。画像処理、画像解析等の機能を持つオープンソースのライブラリ。
《構築フロー》
1)膨大なメガネ読み取り用データの用意
現代の機械学習ではモデルが頭脳と例えると、データは頭脳を動かす心臓、血に等しいです。つまりデータが高質であり十分にあることで健全な状態で機能します。
しかし、データは生のままでは使えず、モデルが理解できるように変換しなければなりません。
そこで、PyTorchを使用し、画像データのレンズの部分を白に、背景を黒に 変換し、モデルが理解できるように構築しました。
精度の高いモデルは1万〜10万単位の高質なデータからトレーニングされますが、今回はネット上から画像を取得し、約2000枚程度のデータを集めました。
2)モデル選定
今回のモデルでは物体検出「セマンティック セグメンテーション(*3)」という特定の物体の形状を画像からピクセル単位で抽出するアルゴリズムを使用しています。初期段階では画像セグメント用アルゴリズムのU-net(*4)を使用しました。
ネットで公開されているCornell大学の論文を参考にし、ロジックを構築しました。
*3:画像内の全画素にラベルやカテゴリを関連付けるDeepLearningのアルゴリズムのこと。
*4:医療用の画像処理を研究していた頃の2015年にFCN式U-netネットワークが公表されました。U-netの名前の由来は、設計図上で「U」の文字のようになるところからきています。
U-net設計図(https://arxiv.org/abs/1505.04597v1)
《構築に苦労した箇所》
圧倒的なデータ不足の中、ある程度の精度を出さなければならなかった部分です。前述の通り、精度の高いモデルは1万〜10万単位の高質なデータからトレーニングされますが、今回は約2000枚程度のデータでAIを構築しました。
限られたデータをいかに有効活用出きるのかによってモデルの予測の質が大きく変動しましたが、ハイパーパラメーターの値設定によってある程度改善することが出来ました。
ハイパーパラメーターというのはざっくりいうと、AIモデルのチューニングのようなものです。
このハイパーパラメーターのチューニングによって、データが少なさを感じさせない良い精度のモデルを実現させることができました。
下記の写真を見ていただければ、AIの精度がかなり良いことがわかると思います。
<メガネフレーム読み取り前>
<メガネフレーム読み取り後>
以上が今回の記事のまとめでした。
みなさまの参考になれば嬉しいです。
次回は髪の色、フレームの色、肌の色、レンズの色からおすすめ度を算出する内容の開発日誌を掲載しますので、お楽しみに!
株式会社コムデでは一緒に働く仲間を募集しています