Bass Perc Bass

毎日10記事引用して1記事書くブログ

おとこのこころのしたごころ(前編)

こんにちは。ポップカルチャーミーハー女子よりサブカルクソ女の方が好きなおぐりんです。

 

今日も今日とて、貴重な日曜日を費やしてツイッターを眺めておりましたら、とあるツイートに目が止まりました。

 

 

SNOWというのは最近のポップカルチャーミーハー女子が自分撮りにかわいい(広義)加工を施すときに使っているアプリです。

この説明も実は誤りで、本当は顔認証しながらリアルタイムで加工しつつ、ベストショットを狙って写真を取ることができる大変テクノロジカルなアプリです。

 

このアプリで加工した顔はかわいい(広義)ので、利用者たちは面白おかしくツイッターFacebookなどに、加工済み自分撮り写真を上げていきます。

 

普通の自分撮りをあまりアップロードしない人でも、SNOWで加工したものなら上げる、という人は多いようです。これはSNOWによって、顔の大きな変化を伴う加工を施しているため、個人が特定しにくくなるのが一つ要因です。

 

つまり先程の「SNOWの加工を取り除くアプリ」が実際にあれば、アップロードした人の本意に反して、あられもない素顔を見ることができます。やったぜ!

 

 

ここまでくれば予想出来ている人もいるでしょう。

今回の記事のコンセプトはそんなアプリを作ってみよう!というものです。

 

しかし、この「SNOWの加工を取り除くアプリ」、だいぶ現実性が低いです。というのも、SNOWで主流な犬や猫のようになる加工は元の画像の上に用意されたパーツを上から配置しているだけの加工なのです。これはつまりオリジナルの画像の情報が損なわれる加工をしている事になります。これでは流石に元の画像を復元することはできません。

 

しかし、中には元の情報を損なわないタイプの加工もあります。変形加工です。

具体的には以下のようなものです。

http://www.techjo.jp/wp-content/tmp/vol/2015/05/300x466xlolmovie1.jpg.pagespeed.ic.AAIAW1UbkT.jpg

 

これらは、顔のいろいろな部分が歪められたり引き伸ばされたりしているものの、元あった部分は何らかの形で残っているので復元できる希望があります。

 

今回はこの変形加工を取り除くアプリを作る方針で行きたいと思います。

 

そもそも、SNOW等で使われている、顔を自動で認識してパーツを見分けて加工するという技術はすごく高度なものです。となれば、復元も同時に高度な技術が必要になるでしょう。己を知るにはまず敵から、ということで、顔認証に使われている技術を調べていきましょう。

 

news.mynavi.jpキーワードはパターン認識機械学習です。人間が3つ口のコンセントの差込口を観た時に「顔みたいだ」と思ってしまうのは差込口が顔特有の「パターン」を満たしているからです。このように顔を顔たらしめているパターンがあるのです。ある線で左右対称だったり、「∵」のようにパーツを分解できたり、そういうパターンです。ただの色の情報の集合である画像に数学的な処理を施して、パターンを検出する、というのがパターン認識です。「数学的な処理」というのが大事な部分です。我々は人間の顔とそれ以外を見分けることを子供の頃からできますが、数学的な処理として見分け方を説明することは大人になった今でもできません。

しかし、機械にやってもらう以上、数学の言葉で説明してあげないといけないのです。ああどうしましょう。

そこで役に立つのが機械学習です。Machine Learningと言ったほうがかっこいいでしょうかね。

これをひとことで説明すると、演習問題と模範解答を大量に与えて、そこから解き方を学習する、というものです。

これのすごいところは、機械に与えるのは問題と解答だけというところです。解き方は一切教えません。それなのに勝手に解き方を察してくれるのです。すごい!

このようにして学習した解き方は、すでに機械が扱いやすい形、つまり数学的な形になっています。おかげで、我々は煩わしくて面倒くさい計算を一切しなくてもいいのです。ただ問題と解答を用意するだけでいいのです。

 

最近Googleが作った、人類に初めて勝った囲碁AI AlphaGO も過去のプロの棋譜機械学習して打ち方を学んでいます。

japanese.engadget.com

 

顔認証の場合、「顔写真」という問題と、「どこに顔があるのか」という解答を大量に与える事になります。

この魔法のような「機械学習」。その中身はどのようになっているのでしょうか?

 

そのヒントは人間の脳にありました。

omori95.hatenablog.com

最近流行りの機械学習では、ニューラルネットワークというものを使います。

ニューラル(neural)というのはニューロン(neuron)の形容詞形です。ニューラルネットワークというのは人間の脳神経をシミュレートしたものなのです。

人間の脳の中では、数多くのニューロン同士が電気信号を送り合って様々な処理を行っています。どれだけ複雑な処理でも、脳の中ではただの電気信号の送り合いです。

それを下図の様な単純なモデルに落とし込んだものがニューラルネットワークです。

 

「ニューラルネットワーク」の画像検索結果

◯がニューロンを表し、矢印が電気信号の伝わる向きを表しています。

人間の脳の中では電圧が情報の役割を果たしますが、ニューラルネットワークではかわりに数値を伝導させていきます。

矢印の向きに数値を伝導させるのです。ニューロンたちは受け取った数値に応じて、また別の数値を計算して他のニューロンに伝えます。

この「計算して」の部分に高度な数学的知識が応用されています。囲碁のAIだろうと、音声認識プログラムだろうと、顔認証プログラムだろうと、ニューラルネットワークを使っているのならば全部、上の図のようなものをシミュレートしています。異なるのはニューロンの中の「計算」の部分だけです。どんな計算をするかをがんばって試行錯誤しながら学習するのですが、その学習方法はガチ数学なのでここでは割愛することにしましょう。この学習の手法は深層学習(DeepLearning)といいます。以下のページに詳しい内容が載っています。

http://nnadl-ja.github.io/nnadl_site_ja/ (ニューラルネットワークと深層学習)

 

このニューラルネットワークを使った深層学習の不思議なところは、これがうまくいく理由が説明できないということです。現にいろいろな場面で学習に成功してAIやら顔認証アプリやらに応用されているのですが、なんでうまく行ってるのか厳密に説明できた人はまだいません。

ただ人間の脳を真似しただけなのに、いやむしろ、真似したからこそ、人工知能ができてしまった。だけど理由はわからない。そういうロマンと謎にあふれる話なのです。

 

ここで深層学習を利用した画像処理システムの例を一つ紹介しましょう。

waifu2x

nelog.jp

waifu2xというサービスです。waifu2xはありとあらゆる二次元画像(アニメ画像など)を学習して、どんな二次元画像でも画質をあまり劣化させずに画像サイズを2倍にすることができるサービスなのです。

これをどうやって学習させたかは想像しやすいですね。大量の二次元画像と、それを半分に縮小した画像を用意すればおしまいです。あとはガチ数学が後ろで活躍してくれます。

 

さて、それではSNOWの加工を取り除くアプリの話に戻りましょう。

今回は加工前の写真と加工後の写真を大量に用意することで、学習に使う演習問題と模範解答を作ることができます。あとは深層学習する仕組みを用意するだけです。

 

今回はTensorFlowというものを使って学習していきたいと思います。

qiita.com

TensorFlowというのは深層学習をプログラムで実装するときに役立つライブラリです。非プログラマーの読者のために説明すると、ライブラリというのは、あらかじめ他の人が書いたプログラムのパーツの集まりです。TensorFlowは機械学習をプログラムするときに何回も書くであろうパーツが沢山入っています。ようするにガチ数学を他人まかせにするものです。

こいつを使えばちょちょいと設定をプログラムするだけで機械学習を実装できます。

 

TensorFlowを使って「手書き数字を認識するプログラム」を実装した記事がありました。

memo.sugyan.com

手書き数字の認識くらいなら数百行程度*1のプログラムを書くだけで実装できちゃいます。便利!

 

今回の記事は前編ということで、おおまかな方針の紹介にとどめて、次回以降の記事から実際にSNOWの加工を取り除くアプリを作ってみようと思います。白状すると、まだこれが成功する確信はありません。うまくいかないかもしれませんが頑張ってみます。

 

取らぬ狸の皮算用ですが、今から夢が広がりますね。この魔法のようなアプリが実現すれば、世の人々に「自撮り画像をアップロードしなけりゃよかったわー」と思わせることができます。

つまり、

 

 

 

公開したことを後悔

 

 

させることができるのです。

ありがとうございました。

*1:数百行はプログラムとしては短い方です