#003

Overview

変顔採点 みやび

みやび(@miyabi_lab)です。

これまでWeb開発に必要な基本的スキルは身についてはいましたが、やはりエンジニアたるもの、機械学習とは何かを身をもって経験しない訳にはいきません。

「せっかく機械学習を勉強するのだから、何か面白いものを作ってみよう!」

そう思い立って、年明けからPython3の勉強をはじめました。

そして完成したのが、変顔採点サービスFunny Face Scorerです!

友達と競い合うも良し!一人で限界(100点超え)に挑戦するも良し!思う存分変顔してください!

簡単ではありますが、その開発の経緯と機械学習についての所感です。適宜足していきます。

>> MIYABI Labについて詳しくはこちら!

Logo

Screen-Shot

Page

URL https://miyabi-lab.space/service/funny-face-scorer/app
Report https://miyabi-lab.space/service/funny-face-scorer

Information

Create-Start 2018-03-12
Create-Finish 2018-06-12
Release 2018-06-13
Produce 加藤雅大 "みやび"
Web Design 加藤雅大 "みやび"
Logo Design --
Image Design 谷口勇太
HTML/CSS/JS 加藤雅大 "みやび"
PHP Programing 加藤雅大 "みやび"
Python Programing 加藤雅大 "みやび"
Supporter 湯座丞太郎

機械学習と向き合うことは、数学と向き合うこと

僕は生物学系出身の人間なので高度な数学(特にⅢC)を扱うことは少なかったのですが、そこまで苦手意識を持っていた訳ではありませんでした。

そんな僕が初めて手にした機械学習関連の書籍は「ニューラルネットワーク自作入門(マイナビ出版)」でした。

機械学習の根幹にあるニューラルネットワーク構造を初心者にも分かりやすく解説してくれている、非常に優しい言葉で丁寧に書かれた入門書です。

多少難しくてもなんとかなるだろうと軽い気持ちで読み進めて行きましたが、理系の私でも「えーっと、、なんだこれ??」と思いながら途中で何度もページを行ったり来たり。

概念としてのニューラルネットワークは理解できるのですが、内容が数式を用いた活性化関数や正規化などの話に及んでくると、すんなりとは行きませんでした。

そのため、統計学や数学のWebサイトを見て回りながら勉強し、頑張って「人に説明できるレベル」まで知識を高めていきました。

機械学習に触れたことのある方はご存知かと思いますが、ニューラルネットワークは文字通り生物の「神経回路」をモデルに作られています。そして、そのニューラルネットワークの正体は膨大な量の「行列計算」と「最適化計算」です。

生物学的な思考だけでなく、しっかりと数学的な理解を深めていくことで、機械学習の真髄に触れることができます。

機械学習における顔認識の技術

GoogleやMicrosoftを始めとして、世界中で競い合うように顔認識の技術は成長を遂げています。

以前は年齢や性別、類似度検出といった特徴分類器としての機械学習モデルが一般的でしたが、現在では顔の表情から感情を分析し、行動をも予測するにまで発展しています。

実際に製品化されているものですと、例えば笑顔になると自動でシャッターが切られるカメラだったり、snowなどの顔を使ったアプリなどにも応用されています。

また、iPhoneXにも実装されている顔認証技術もその最高峰と言えます。

Python3で機械学習を勉強するということは、こうした最新技術の一端を身をもって経験できる素晴らしい機会なのです。

Python3で顔を認識する

Python3には顔認識用のオープンソースライブラリをいくつか利用することができます。

最も一般的なOpenCVは顔認識および数学的処理ライブラリで、顔写真を読み込ませると、顔がある部分に四角の枠をつけることができます。

もちろん誤認識もありますが、そこらへんをPython3側で上手く調整しながらサービスの一部として利用していくことができます。

また、より高度な顔認識ライブラリとして、dlibというものもあります。

こちらは単に顔を検出するだけでなく、眉毛や目、鼻、口などの顔のパーツを認識し、全68点を顔のそれぞれの位置にプロットし、それらを座標として配列形式で返却してくれます。

これらを利用すれば、より細かい表情や類似度の検出などが可能になってきます。

ただし、更に特化した機能(特定の表情を検出したい)などの場合には、状況や難易度に応じて機械学習・ディープラーニングによる新たなモデルの構築が必要になります。

その場合、技術力に加え、学習に利用する数千〜数万枚以上の顔写真を入手できるかどうかが、賢いモデルを作るための勝負の分かれ目になってきます。

「変顔」とは何か?

さて、今回僕が製作した、変顔採点サービスFunny Face Scorer)についてのお話です。

サービスも何も、誰の何の役にも立っていないので、ほとんどお遊び系Webアプリだと思ってください(笑)

Python3を勉強して何かを作ろうと思った時に、「犬と猫を識別するモデル」を作ったところで何も面白くありません。

MNISTと呼ばれる手書き文字認識の初心者向けチュートリアルがありますが、それは「0〜9の手書き文字を識別するモデル」ですので、正直作り方についてはそこまで大差ありませんし、そこまで難しくありません。

せっかくなら何か面白いものを作りたいなぁと考え、最終的に思いついたのが「変顔に点数をつけるサービス」でした。

(今思えば、誰でも思いつきそうですよね... 笑)

これは友達とやって遊んだり、すごい点数が叩き出せたらSNSとかでシェアしたくなるんじゃないか?というゴールから逆算戦略で早速作り始めたのですが、、

変顔の定義が難しすぎる!!(笑)

変顔の条件をいくつか定義しようとすると、

  • 左右で目の大きさが違う
  • 口が曲がってる
  • ・・・??

となります(笑)

もう少し考えていると「人間が感情によって自然に動かした顔、以外の顔」という考えにたどり着きます。

これを数学的に考えると余事象になります。つまり、

変顔 = すべての表情 - (笑顔 + 泣き顔 + 驚き顔 + ......)

になるのですが、これは無理すぎると直感的にわかります。

なぜかというと、「人間が感情によって自然に動かした顔」を全て機会に覚えさせ、それらに該当しなかった場合を変顔として定義しなくてはならないからです。

しかも、現在の技術では「嬉し泣き」と「悲しみ」を機会が区別することは困難とされています!

ちなみに、この仕組みだと「普通の顔」を変顔として認識されてしまいイジメに発展するリスクを取り除くことはできません。

というか、そもそも変顔写真を何千枚〜何万枚も集めてくることは不可能です。

これは参った。あまりにも見切り発車をしてしまった。どうしよう。。

「変顔」の識別モデルを作ることをゴールにしない!

ここら辺で僕は少し冷静になりました。

「変顔の識別モデルを作ってどうしたいんだっけ?」

最初の目的は「機械学習を勉強するためにPython3を学び、せっかくなら面白いものを作ろう!」でした。

そこで、使ってくれる人が楽しんでもらえるものを作るのが最大のゴールであって、そのロジックは(素晴らしいに越したことはないが)実現可能な範囲で実装できれば十分なのだと、自分の中のハードルを少し下げてあげることにしました。

これまでの試行錯誤で、気づけばPython3で簡単な機械学習モデルは作ることができるようになったので、機械学習の基礎はこれで十分。

だから次は、先人が膨大な顔データを用いて作成してくれた顔認識モデルを利用して、機械学習の技術をWebサービスに落とし込むことを目的にして、プログラミングすることにしました。

「変顔」=「どれだけ普通の顔を崩せたか」と再定義する

厳密にいうとこれは間違いです。笑顔や泣き顔などの自然な顔の動きは変顔ではないからです。

ただ、笑顔でも左右で歪みを作ればそれは変顔になります。泣き顔でもがっつり眉毛を上げれば変顔ですよね。

驚いた顔でも、目を白目にすればそれは変顔です。

このように、普通から何かひとつでも崩れると変顔になるのです。

現時点では、変顔採点サービスFunny Face Scorer)は本当にシンプルなロジックにしています。もし多くの方に楽しんでいただけるようなら、改良を重ね、より「変顔とは何か?」という究極の定義に挑んでいきたいと思います。

また、このWebサービスを使ってくれる人で、笑顔を採点しようという思考になる人はほとんどいないかと思います。これは別軸の考えですが、上の定義を別の側面からサポートしてくれています。

これ以上話すと面白く無くなってしまうので解説はしませんが、仕組みに興味がある方は何枚か撮れば何となく分かるかもしれません。

ぜひそういったエンジニア的な観点でも楽しんでいただけると幸いです。

それではみなさん、素敵な変顔ライフを!

MIYABI Labで一緒に楽しく勉強しませんか?

MIYABI Labでは「仲間と楽しくプログラミングを勉強したい」と思っている人たちを応援します。

  • これからプログラミングを勉強始められる方
  • Progateやドットインストールで学んだことを活かしたい方
  • 自分の手で何かWebサービスを作ってみたい方
  • 今まさにオリジナルのサービスを開発中の方
  • Web開発の技術を手に入れてキャリアチェンジしたい方

僕自身もまだまだ勉強したいこと、勉強したい言語はたくさんあります。

新しいことに挑戦するたびに、いつも僕は初心者になります。だから、初心者の気持ちや独学の辛さもよくわかります。

もしご興味があれば、いつでも新宿三丁目のオフィスに遊びに来てください。

平日はオフィスの一部をプログラミング勉強用スペースとして終日解放し、知識の交流場にしていきたいと考えています。

休日も定期的に「MIYABI Lab もくもく会」を開催していく予定です。

ちょうどいい勉強仲間がここにいます。

ご連絡はお問い合わせフォームかTwitter(@miyabi_lab)にDMください!

>> MIYABI Labについて詳しくはこちら!

住所:東京都新宿区新宿5-3-8 3階

 

弊社の皆さま(笑)

>> 株式会社PLAN

変顔採点 半田務

変顔採点 谷口勇太

変顔採点 アキラ

変顔採点 あきお

変顔採点 みやび

このサービスを作った人

Webエンジニア PHPエンジニア HTML CSS JS jQuery PHP Laravel Python SQL WordPress AWS Linux Apache

【名前】 "みやび"

【関連】 株式会社PLAN / MIYABI Lab / JAPAN MENSA /

【MIYABI Lab】平日オフィスを勉強用に解放中!みんなで楽しくプログラミングを学べる環境を作る!詳しくはコチラ(https://miyabi-lab.space)◆HTML, CSS, JS, PHP, Python, SQL, AWS◆生物学系修士→製薬会社→Webエンジニア(株式会社PLAN)・MENSA会員

学生Webエンジニア PLANインターン生 PHP Laravel Python HTML CSS JS

【名前】 "ゆざ"

【関連】 株式会社PLAN / MIYABI Lab / Tmeet(twitterユーザーマッチングサービス) /

【MIYABI Lab運営】23歳/同期がト◯タやMicr◯softに就職する中、ベンチャーに未経験でWebエンジニアになるのを選んだ脳科学専攻の理系院生◆人見知り日本縦断◆機械学習/Web歴5ヶ月

Twitterやってます

最新の技術ブログはこちら