顔写真から「おっぱいサイズ」を予測するサイトを作った.

  • 13
    いいね
  • 0
    コメント

概要

ぱいすい! ~人工知能が顔写真から、おっぱいのサイズを推定するサービス!~
http://pysui.live-on.net/

※2017/04/07 02:27現在 サイトにつながりにくくなっております.申し訳ありません.

というサイトを作りました.顔画像をアップロードするだけで,バストサイズを予測してくれるサイトを作りました.この文章では,その技術的な内容について解説します.

システム概要図

image

システム設計

利用したソフトウェア

  • 機械学習系
    • Mahotas
    • scikit-learn
    • scipy
  • Webシステム
    • Docker
    • Alpine Linux
    • Flask
  • その他
    • BeautifulSoup
    • pickle

解説

今回,Mahotas( http://mahotas.readthedocs.io )というライブラリを,画像の特徴量の検出に使いました.これは導入が非常に楽です.easy_installやpipで一発で入って動くので,ほとんどハマることはありません.(ただ日本語情報が皆無に近い)
この「導入が非常に楽」というのは,かなりポイントです.
理由としてはWebのシステムを稼働するときに,Alpine Linux + Dockerによる構成を考えていました.そのため.「特徴量抽出するためだけに,OpenCVのC/C++のビルド環境を整える」とか,「サービスに関係のないソフトウェアを入れるのはセキュリティ的に大丈夫?」といったことを,あまり考えたくありませんでした.そのため,できるだけミニマルに出来るeasy_installやpipで入るMahotasという技術選択になりました.
 Web周りについてはFlaskにしました.これは「フレームワークとして小さい」という軽量な面と,「DB使わないし,なんでもいいや」という割と雑な理由であったりします.
 地味に大事な技術として「BeautifulSoup」があります.これはPythonの定番のスクレイピングライブラリで,Webサイトから機械学習の学習データを集めるのに非常に重宝します.あとは「pickle」です.わざわざ取り上げる必要はあるの?と思われるかもしれませんが,Pythonのオブジェクト直列化のための標準ライブラリです.理由は「機械学習のモデルの差し替えが容易」という利点があります.このような機械学習が必要とされるサービスには「学習モデルの差し替え」ということがよくあると思います.そこでこの学習モデルの部分をpickel化して運用することで,簡単なパラメータ改善であれば,ファイルの差し替えだけで対応できる.という利点があります.

機械学習について

非DeepLearningです.
個人的な発想の起源はこの辺です.

Visual Wordsを用いた類似画像検索
http://aidiary.hatenablog.com/entry/20100227/1267277731

前々から手をつけたいと思っていたのですが,記事が公開された当初はOpenCVのPythonバインディングでSURFが動かなかったり,そもそもOpenCVのPythonバインディングをインストールするのにハードルがあったりしたので断念していました.
しかし,Mahotasなど簡単に導入できる特徴量抽出ライブラリがあったため,実行に移しました.

学習フロー

  1. Mahotasによる画像からの特徴量抽出
  2. Scipyによる特徴量のK-meansクラスタリング
  3. クラスタリングの結果から,BM25の重みづけ係数の導出
  4. ある画像に対し,特徴量を抽出し,特徴量からクラスタを求める.
  5. クラスタの頻度分布を求める.
  6. クラスタの頻度をBM25で重みづけし,バストサイズとペアのデータにする.
  7. 6.のデータを全画像データ分集め,SMO Regression
  8. 3分割交差検定で誤差の判定

という流れを追っています.ここで,「K-meansのクラスタ数」「BM25の重みづけパラメータ」「SMO Regressionの学習パラメータ」等,いくつか事前に決めておかなければならないパラメータがあります.これらはグリッドサーチを3日間ぐらい回し続けた最良の値を使っています.また,バストサイズの回帰に対しても,Linear RegressionだったりRidge Regressionなど4~5種類のうちから選び,最良の結果を出す手法をグリッドサーチしてます.

推論フロー

  1. Mahotasによる画像からの特徴量抽出
  2. 画像特徴量のクラスタ判別
  3. クラスタの頻度分布を求める
  4. クラスタの頻度分布をBM25で重みづけ
  5. 重みづけされたデータをもとにSMO Regressionでバストサイズの推定

というフローを取っています.

image

データ集め

機械学習をするためにはデータが必要です.そして,このデータを集めるために重要な要素があります.

  1. データが複数あること
  2. スクレイピングで抜き出しやすい形であること
  3. 顔画像とバストデータが紐づいたデータがあること

この3点が重要になってきます.

ここでは「AV女優」を教師データにしました.

理由は,

  1. データが多そう
  2. スリーサイズのデータが公開されていそう
  3. 裸を見せる職業なので,データの改ざんが難しく,正当性が担保できそう

ということです.
「あと最近のトレンドともマッチするほうが良い.」
という考えもあり,

月間AV女優ランキング ベスト100
http://www.dmm.co.jp/mono/dvd/-/ranking/=/term=monthly/mode=actress/

を参考にAV女優の顔画像とバストサイズを集めました.結果,70人程度集まりました.

精度調査

結果から書きますが,交差検定の結果,

「50%の確率で-2.5cm ~ +2.5cmを予測できました.」

したがって,

「顔写真をアップロードした.」
「推論結果85cmだった.」
「ということは,Aさんのバストサイズは82.5cm~87.5cmの確率が50%・・・?」

ということが言える程度には結果が出ます.ただこの結果には問題があります.

人気AV女優のバストサイズの最頻値が85cm付近である.

という事実が今回の調査で分かりました.
したがって,「適当に85cmと言えば,そこそこバストサイズがあってしまう」という結果になりました.データから逆説的に言えることとしては,「DMMの月間ランキングの上位に挙がってくる女性はバスト85cm以上の巨乳な人が多い」というのが事実なのかもしれません.
あとテストで篠崎愛さん( https://twitter.com/shinozakiai_226 )の画像を予測させてみて分かったことがあります.

サイズ(cm)
公称値 87
予測値 86.58

その結果,誤差は1cm未満でした.篠崎愛さんは,何枚か画像を見ましたが,「巨乳だなぁ~」と個人的に思う女性でした.その方は,バストサイズが85cmを超えてるという事実から,

女性を見て,「巨乳だ.」と思う閾値は,バストサイズが85cm付近

なのかもしれません.

まとめ

私はこのようになってしまいましたが,第2,第3の機械学習おっぱいマエストロたちが精度の高いバスト推定人工知能を作ってくれると思います.そして,その人たちのために,この記事が礎になればと思います.
もしくは,これを見た人々に刺激を与えることで,より機械学習に対して,興奮(意味深)していただけたらと思います.

ぱいすい! ~人工知能が顔写真から、おっぱいのサイズを推定するサービス!~
http://pysui.live-on.net/