はじめに
Facenetを使った類似顔画像検索のための特徴量抽出 の続きです。
今回は、タイトルの通り、AV女優の顔画像による検索サイトを作り、実力を測ります。
余談ですが、前回の記事を書いたあと、OSを飛ばし、データとコードの一部を飛ばしてしまいました。
そのため、コードの紹介はありません…
なぜAV女優か
顔画像を元に、似てるAV女優を探すシステムは、「顔 似てる AV 女優 検索」とかでググると、
顔を認識せずに行うものからディープラーニング使うものまで様々あります。
特に、ディープラーニング使ったものとして有名なものに
chainerによるディープラーニングでAV女優の類似画像検索サービスをつくったノウハウを公開する
があります。
AV女優検索、一体何番煎じだ、という感じなのと、(良し悪しとは別として)あまり健全じゃないですが、
以下のような要件を満たす顔画像のデータセットが他にあるかというと、私が知る限りはありません。
- 適当な枚数がある (人数がいる)
- かつ、データセットが極端に特定の属性に偏っていると実験としては面白い
- データセットの取得が容易(API/クロールできるサイト等が存在する)
- 今回はDMM APIを利用しています
- 肖像権などの権利関係がクリア
- 日本人が中心
- 外国の有名人のデータセットはいくつかありますが、よくわからないですよね
- そこそこ注目されそう
- 有名人じゃないとイマイチ結果を観察するモチベーションが薄い
MS-Celeb-1Mの日本版、みたいなのがあればいいんですが、フェアユース無い、事務所強い、みたいな日本では実現は望み薄でしょう。
他の手法との違い
Facenetを使うことでのメリットは、以下が挙げられます。
- 学習済みモデルが利用できる
- ベクトルに落とし込むので、検索したい人の画像が少なくてすむ
- 顔画像に特化している
- お手軽
実装詳細
こんな感じで実装しました。
- DMM APIを利用して、画像をクロール
- Facenetで画像からベクトルを取り出す
- annoyでk-NN
- heroku + flask でWebサービスを実装
DMM API
AV界の巨人のDMMは、APIも豊富です。
今回は、女優検索APIを利用させていただきました。
これを使うと、女優名や属性、顔画像のurlが取得できます。
SDKも用意されていて、JS, PHP, Goで使えるようですが、
pythonで諸々記述しているので、おとなしくREST使ってクロールしました。
annoy
今回、検索に使う画像は、1人あたり1枚なので、k-近傍法(k-NN)を使います。
もう少し枚数があれば、SVMといった識別モデルも利用できるかと思います。
近傍検索には、annoyが便利です。
使い方もシンプルなので公式ドキュメント読めばすぐ使えるかと思います。
heroku + flask
jupyter notebookで個人的に楽しむ、でも良かったんですが、せっかくなのでWebアプリにします。
AWSとかGCPとかに押されてる気がするherokuですが、flaskと組み合わせると、
シンプルなWebアプリだとすぐに開発でき、かつ、タダ運用可能です。
結果
結果は、
サイトで確認してください!
できたサイト
できたサイトはこちらです。
適当に、人気女優の名前をクリックすると結果が出ます。
顔画像ポチポチクリックしていくといろんな人が出てくると思います。
サイトは研究目的で、予告なく停止します。ご了承ください。
タダのherokuなので、落ちたりしても多めに見てください。
UIとかがしょぼいのはお察しください。
おわりに
逆に距離が遠い人順、みたいに並べるのも面白かったんですが、Webアプリまではちょっと実装できず。
サンプル実装も闇に屠られました。
あとは、画像アップロード機能つけると面白そうですが、
なんか変な画像投げられてもやだし、heroku無料枠でやるのはかなり大変そうだし、パスしました。
今回は、極力実装せずになんかサービス作る、というのがちょっとした目標でした。
内部の実装は色々サボりまくってます。
が、フレームワークは様々あって、頑張らなくてもなんかできる、というのを確認できたのも良かったです。
悩んだところ
- ライセンス/肖像権まわり
- UI/フロント周りの実装
- 増田で書くかQiitaで書くか