【AWS】知識ゼロから理解するRDS超入門
AWSのデータベースサービス「Amazon RDS」を初心者にもわかるように解説します。未経験には難しいMultiAZ構成やレプリケーションは、マスター/スレ...
みやび(@miyabi_lab)です。
これまでWeb開発に必要な基本的スキルは身についてはいましたが、やはりエンジニアたるもの、機械学習とは何かを身をもって経験しない訳にはいきません。
「せっかく機械学習を勉強するのだから、何か面白いものを作ってみよう!」
そう思い立って、年明けからPython3の勉強をはじめました。
そして完成したのが、変顔採点サービスのFunny Face Scorerです!
友達と競い合うも良し!一人で限界(100点超え)に挑戦するも良し!思う存分変顔してください!
簡単ではありますが、その開発の経緯と機械学習についての所感です。適宜足していきます。
URL | https://miyabi-lab.space/service/funny-face-scorer/app |
Report | https://miyabi-lab.space/service/funny-face-scorer |
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には顔認識用のオープンソースライブラリをいくつか利用することができます。
最も一般的なOpenCVは顔認識および数学的処理ライブラリで、顔写真を読み込ませると、顔がある部分に四角の枠をつけることができます。
もちろん誤認識もありますが、そこらへんをPython3側で上手く調整しながらサービスの一部として利用していくことができます。
また、より高度な顔認識ライブラリとして、dlibというものもあります。
こちらは単に顔を検出するだけでなく、眉毛や目、鼻、口などの顔のパーツを認識し、全68点を顔のそれぞれの位置にプロットし、それらを座標として配列形式で返却してくれます。
これらを利用すれば、より細かい表情や類似度の検出などが可能になってきます。
ただし、更に特化した機能(特定の表情を検出したい)などの場合には、状況や難易度に応じて機械学習・ディープラーニングによる新たなモデルの構築が必要になります。
その場合、技術力に加え、学習に利用する数千〜数万枚以上の顔写真を入手できるかどうかが、賢いモデルを作るための勝負の分かれ目になってきます。
さて、今回僕が製作した、変顔採点サービス(Funny Face Scorer)についてのお話です。
サービスも何も、誰の何の役にも立っていないので、ほとんどお遊び系Webアプリだと思ってください(笑)
Python3を勉強して何かを作ろうと思った時に、「犬と猫を識別するモデル」を作ったところで何も面白くありません。
MNISTと呼ばれる手書き文字認識の初心者向けチュートリアルがありますが、それは「0〜9の手書き文字を識別するモデル」ですので、正直作り方についてはそこまで大差ありませんし、そこまで難しくありません。
せっかくなら何か面白いものを作りたいなぁと考え、最終的に思いついたのが「変顔に点数をつけるサービス」でした。
(今思えば、誰でも思いつきそうですよね... 笑)
これは友達とやって遊んだり、すごい点数が叩き出せたらSNSとかでシェアしたくなるんじゃないか?というゴールから逆算戦略で早速作り始めたのですが、、
変顔の定義が難しすぎる!!(笑)
変顔の条件をいくつか定義しようとすると、
となります(笑)
もう少し考えていると「人間が感情によって自然に動かした顔、以外の顔」という考えにたどり着きます。
これを数学的に考えると余事象になります。つまり、
変顔 = すべての表情 - (笑顔 + 泣き顔 + 驚き顔 + ......)
になるのですが、これは無理すぎると直感的にわかります。
なぜかというと、「人間が感情によって自然に動かした顔」を全て機会に覚えさせ、それらに該当しなかった場合を変顔として定義しなくてはならないからです。
しかも、現在の技術では「嬉し泣き」と「悲しみ」を機会が区別することは困難とされています!
ちなみに、この仕組みだと「普通の顔」を変顔として認識されてしまいイジメに発展するリスクを取り除くことはできません。
というか、そもそも変顔写真を何千枚〜何万枚も集めてくることは不可能です。
これは参った。あまりにも見切り発車をしてしまった。どうしよう。。
ここら辺で僕は少し冷静になりました。
「変顔の識別モデルを作ってどうしたいんだっけ?」
最初の目的は「機械学習を勉強するためにPython3を学び、せっかくなら面白いものを作ろう!」でした。
そこで、使ってくれる人が楽しんでもらえるものを作るのが最大のゴールであって、そのロジックは(素晴らしいに越したことはないが)実現可能な範囲で実装できれば十分なのだと、自分の中のハードルを少し下げてあげることにしました。
これまでの試行錯誤で、気づけばPython3で簡単な機械学習モデルは作ることができるようになったので、機械学習の基礎はこれで十分。
だから次は、先人が膨大な顔データを用いて作成してくれた顔認識モデルを利用して、機械学習の技術をWebサービスに落とし込むことを目的にして、プログラミングすることにしました。
厳密にいうとこれは間違いです。笑顔や泣き顔などの自然な顔の動きは変顔ではないからです。
ただ、笑顔でも左右で歪みを作ればそれは変顔になります。泣き顔でもがっつり眉毛を上げれば変顔ですよね。
驚いた顔でも、目を白目にすればそれは変顔です。
このように、普通から何かひとつでも崩れると変顔になるのです。
現時点では、変顔採点サービス(Funny Face Scorer)は本当にシンプルなロジックにしています。もし多くの方に楽しんでいただけるようなら、改良を重ね、より「変顔とは何か?」という究極の定義に挑んでいきたいと思います。
また、このWebサービスを使ってくれる人で、笑顔を採点しようという思考になる人はほとんどいないかと思います。これは別軸の考えですが、上の定義を別の側面からサポートしてくれています。
これ以上話すと面白く無くなってしまうので解説はしませんが、仕組みに興味がある方は何枚か撮れば何となく分かるかもしれません。
ぜひそういったエンジニア的な観点でも楽しんでいただけると幸いです。
それではみなさん、素敵な変顔ライフを!
MIYABI Labでは「仲間と楽しくプログラミングを勉強したい」と思っている人たちを応援します。
僕自身もまだまだ勉強したいこと、勉強したい言語はたくさんあります。
新しいことに挑戦するたびに、いつも僕は初心者になります。だから、初心者の気持ちや独学の辛さもよくわかります。
もしご興味があれば、いつでも新宿三丁目のオフィスに遊びに来てください。
平日はオフィスの一部をプログラミング勉強用スペースとして終日解放し、知識の交流場にしていきたいと考えています。
休日も定期的に「MIYABI Lab もくもく会」を開催していく予定です。
ちょうどいい勉強仲間がここにいます。
ご連絡はお問い合わせフォームかTwitter(@miyabi_lab)にDMください!
>> 株式会社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ヶ月
【AWS】知識ゼロから理解するRDS超入門
AWSのデータベースサービス「Amazon RDS」を初心者にもわかるように解説します。未経験には難しいMultiAZ構成やレプリケーションは、マスター/スレ...
【AWS】Auto Scalingする前に知っておくべき7つのこと
Amazon EC2 Auto Scaling(オートスケール)を使用すると、CPU使用率等に応じてEC2の台数を自動的に増減できます。ここでは、初心者の持つ疑問を通し...
WordPressの基本構造を理解してオリジナルテーマを作ろう(後半)
WordPressのテーマを自作するために必要なテンプレートファイル(functions.phpやstyle.css)の役割やファイル構造を理解して、どのようにオリジナ...
WordPressの基本構造を理解してオリジナルテーマを作ろう(前半)
WordPressのテーマを自作するために必要なテンプレートファイル(functions.phpやfront-page.php)の役割やファイル構造を理解して、どのようにオ...
【Heroku入門】無料枠サーバーを24時間スリープさせない方法
フリープランのHerokuサーバーでは、30分以上アクセスがないと自動的にスリープしてしまいます。ここでは、Herokuサーバーを寝かせない方法につい...
【入門編】Laravelのディレクトリ構造とMVCの処理の流れを理解する
Laravel初心者が学習する際にわかりにくいLaravelのディレクトリ構造を具体的な例を交えて解説します。MVCの基本であるビュー、モデル、コントロー...
【初心者向け】PythonによるHeroku環境で簡単LINEBot開発
誰でも簡単にLINEBotをpythonを使ってHeroku環境で開発できる方法を解説します。ここでは、LINE Messaging APIを用いることでおうむ返しをするBot...
AWSでWebサーバー構築!踏み台サーバーでセキュアなネットワークを構築する(第5回)
連載の第5回です。メインEC2に対して直接SSH接続できる状態というのは、セキュリティの観点からあまり望ましくありません。MySQLやEBSが紐づいたメ...
AnacondaでのTensorFlow環境構築と基礎的な使い方
Anaconda(アナコンダ)のインストールからJupyter notebook(ジュピターノートブック)とTensorFlow(テンサーフロー)の基本的な使い方を初心者...
脱初心者!MNIST beginnerに隠れ層を加えたニューラルネット解説
TensorFlowのチュートリアルであるMNIST beginnerの応用して、隠れ層と活性化関数を加えたニューラルネットワークで手書き文字識別を解説します。...
AWSでWebサーバー構築!Apache2.4, PHP7, MySQLの導入と初期設定(第4回)
連載の第4回です。今回は作成したEC2インスタンスにWebサーバーとしての機能を持たせるため、Apache2.4のインストールおよびhttpd.conf等の各種設...
AWSでWebサーバー構築!EC2を作成してSSH接続する(第3回)
連載の第3回です。前回作成したVPC・サブネットにおいて、セキュリティーグループに保護されたEC2インスタンスの作成・設定およびSSH接続の確立ま...
初心者必読!MNIST実行環境の準備から手書き文字識別までを徹底解説!
Pythonによる機械学習をプログラミング初心者にもわかりやすいように、TensorFlowチュートリアルのMNIST beginnerを使って、手書き文字(MNIST)識別...
AWSでWebサーバー構築!専門用語の解説とVPC環境を構築する手順(第2回)
連載の第2回です。AWSにてVPCネットワークを構築してWebサーバーを設置・運用するためには、AWS内で利用される重要単語について正しく理解しておく...
知識ゼロで機械学習・AIを理解するために必要なニューラルネットワークの基礎知識
機械学習・AIを理解するために必要なニューラルネットワークの基礎について、これから機械学習を勉強したい人、プログラミング未経験の人にもわか...
Canvaで簡単におしゃれなアイキャッチ画像を作ろう!使い方を徹底解説!
PhotoshopやIllustratorを使えなくてもCanvaなら誰でも簡単におしゃれなアイキャッチ画像が作れます。豊富なデザインテンプレートを組み合わせるだ...
プレビュー機能付きの記事編集画面の作り方(Laravel5)
記事編集フォームにはプレビュー機能の実装が必須です。記事を保存する処理とプレビューを表示する処理を共存させるにあたり、ボタンをクリックし...
AWSでWebサーバー構築!VPC設計に必要なIPアドレスとサブネットの基礎知識(第1回)
連載の第1回です。AWSのVPCネットワークを設計して実際に構築するためには、IPアドレスの基礎を理解することが非常に大切です。EC2 Webサーバーを...
MIYABI Labホームページを製作しました
様々な理由でプログラミングの勉強を困難だと感じてしまっている方のお役に立てれば嬉しいです。これからも小さなWebサービスを作り続けていき、技...
ゆざ、株式会社PLANを卒業します。
2年間インターンとしてお世話になった株式会社PLANを卒業します。AWS,Laravel,Pythonなどの技術的なことだけではなく、エンジニアとして、社会人と...