Courseraの授業を中心に遅ればせながらDeepLearningの勉強をしてきたので、なにかアウトプットしようと思い立ち、写真を撮るとどの芸能人に似ているか判定するWebサービスを作りました。
Who Am I|似ている芸能人診断Webアプリ|有名人探しサイト
使った技術
Siamese Network
DeepLearningで画像処理を行う場合はCNNをSoftmax関数でフィニッシュして分類問題として取り扱うのが普通ですが、Siamese Networkは異なる2つの画像をCNNに通してそれらがどのくらい似ているか(距離が近いか)をSigmoid関数で数値化するというものです。
画像が似ている/異なっているということがどういうことかを覚えさせ、それを予測に用いるモデルです。Courseraの中ではデータセットが少ない場合の選択肢となりうる、顔認識(オフィス入館のための本人認証など)で使われる、といったことが解説されていました。
Flask
めちゃシンプルなサイトなので、いつもはDjangoを使うところFlaskを使ってみました。
評判の通り軽量で、サイトがソッコーで立ち上がりました。こりゃ簡単なサイトを作る時はいいですね。
face_recognition
DeepLearningに渡す前に顔を認識して切り取る処理にface_recognitionというライブラリを使いました。
当初はOpenCVを使っていたのですが、MacへのインストールまはまだしもLinux上でApache経由で使う時に謎のフリーズが発生し解決できなかったのでスイッチしました。
顔認識だけだったらOpenCVよりも断然使いやすいと思います。Web上ではOpenCVはインストールが大変という声が多いですし。
精度
似ている芸能人を上から10人まで表示していて、その中の3人くらいはまあ確かに言われてみれば、みたいな精度です。
芸能人本人の写真で試すと結構な確率で本人が一番似ていると判定するので、やはりこのモデルは同一人物特定に力を発揮するようです。そう考えると例えば工場のラインで商品の異常を見つける異常検知とか、異常のあるもののデータは基本的に少ないので、少ないデータセットでもうまく動かすことのできるこのモデルが利用できるかもしれません。
その他
- PCならChrome、Firefox、iPhoneならSafari(設定からカメラのアクセスを許可する必要があります)、AndroidならChrome、Firefoxでの動作確認ができています。
- 撮影/アップロードされた画像は判定したらすぐに削除する作りです。自分だったら顔写真が保存されるのが嫌なのと、サーバー容量を圧迫したくなかったので。
- iPhoneアプリで類似のものがありましたが、頻繁に使うものでもないのでWebの方が利便性高いと考え開発しました。
- 結果ページで見せてる画像は著作権的にアウトっぽいので、万が一アクセスが伸びたら使うのやめたほうが良さそう。。
- 何度やってもバナナマンの日村に似てると判定される。。悲しい。
よかったら遊んでみてください。