読者です 読者をやめる 読者になる 読者になる

狐に騙され覚書

あぁこれ便利だなってことを忘れてもいいように覚書。主にプログラミング言語主体ですよ。

人工知能に髪を切らせる

はじめに

釣り気味なタイトルですが、私が実際に髪を切ってくれる人工知能を作ったわけでも、そのアルゴリズムを考案したわけでも、もっと言えば人工知能に関して専門なわけでもないです。

じゃあなぜこんな記事を書こうと思ったかというと、

  • 実際に髪を切ってくれる人工知能を作るためにはどうすれば良いか

と、

  • 機械学習を行って何かをするプロセスを身近な例でなぞってみたい

という自己満足の範疇を出ない欲求からです。

前提

この記事で考えるのは、以下の範囲に留めます。

  • 髪を切るというのはどういうことなのか(理容師、美容師に求めているもの)を考察する
  • 前工程で考察した内容を基に、アルゴリズムのベースとなるアイデアを構築する

つまり、実際に人工知能を作ったり、ましてはロボットアームを使って自分の頭髪を切らせてみるみたいなことはしません。

本題(考察)

本題に入ります。 まずは、髪を切るということを定義します。 厳密に言うと、ただ髪を切るだけでなく、理容室や美容室に行くときに期待することを含意しつつ定義します。

ではまず、なぜ人は髪を切るのかという点について案を列挙します。

  • 髪が伸びてきて、邪魔だから
  • 暑い
  • イメチェン
  • 失恋したから
  • ...

ふーむ、どうしたものかとしばらく眺めていたのですが、あることに気づきます。 髪を切るという行為の目的として、自分をよく見せたいというものと、利便性を追求するものがあるということです。

自分をよく見せたいという目的に関しては、ではどうすれば自分がよく見えるのかということを考えます。 よく見えるための因子は色々あって、例えば自分の顔の骨格、耳の形、肌の色、最近の流行、職業、地域などが挙げられます。

一方、利便性を追求するという目的に関しては、快適な生活を送ることと髪の流さの関係を考えます。 因子は、髪の長さごとの視野の狭まり、聴力の大小、発汗量などが挙げられます。

実際には、このフェーズは非常に重要なフェーズで、目的に対してどんな因子(変数)が存在するのかをできるだけ沢山列挙します。

本題(アルゴリズム概要)

では次に、ユーザーは何をしたら人工知能が勝手に髪を切ってくれるようになるのかを考えます。 端的に言うと、ユーザーが自分の好みや状況を最小限伝えることで、勝手に切って欲しいです。

好みの学習

好みを学習させるためには、とにかくユーザーの好みを表現しなければなりません。 ここで、前ステップでやった因子の列挙が生きてきます。

難しいことは抜きにして、どの因子がそのユーザーにとって大切かを数値で表現してあげればいいわけです。 さて、

髪の長さごとの視野の狭まり、聴力の大小、発汗量など

こちらはなんとか数値で表現できそうな気がしますが、

自分の顔の骨格、耳の形、肌の色、最近の流行、職業、地域など

これはどう表現すれば良いのでしょうか。

形状に関して言えば、特許の関係で非常に使いにくい SIFT特徴量や SURF特徴量、それぞれに互換的な性能を持つ幾つかの特徴量があったりと、先人の知恵が手助けしてくれます。

色は RGB なり HSV なり、Lab色空間(*が付くやつもある)なんてものもあったりして、好きな色空間を選べば良いです。 実際のところ、RGB色空間よりも Lab色空間の方が人間の感覚とマッチしていたりするという論文もあったりするので、ここでも先人の知恵を借りることになります。

職業はある意味特殊ですが、簡単に言うと髪型に対して自由の効く職業とそうでない職業があるのでその辺を考慮して、 また、地域によって髪型や髪色の分布が異なると思うので、それをエネルギー場として定義して数値で表せば良さそうです。

というわけで、なんとなく大体のものは数値で表現できそうなことがわかったので、それらをまとめて(ベクトル化して)k-NN(k Nearest Neighbor)アルゴリズムとかに突っ込むと、自分の興味や状況にあった髪型を取ってこれるようになります。 とっては来れるんですが、そもそも参考となる画像がないと何も起きないので、参考画像にも同じように数値化するプロセスを挟んだ上で、kNN に突っ込んで学習させます。

ね?簡単でしょ? (ただし、正規化・正準化や、次元削減をしたり主成分分析をするプロセスは飛ばしています。)

髪を切る

自分の好みがわかったら、後は人工知能から提示された写真の中から、今の気分のものを選んで切ってもらうだけです。 そこに提示されている写真は、"理論的には"自分の好みにあっていてかつ自分に似合う、さらには流行にも乗っている(かもしれない)髪型なので、それはもう好きに選ぶことができます。

それで、髪を切るというステップは意外と難しくなくて、 絶対に人間の頭が動かないように固定した上で、髪を切る空間座標を与えれば良いです。 ロボットアームは、人間の手よりもはるかに正確に座標をなでることができるので、人間の頭が動かなければなんなく髪型を整えられるはずです。

ふむ。なんかいけそう。

まとめ

というわけで本当にざっとですが、人工知能による美容師ロボットの設計のアイデアの草案を書きました。 何を言いたいかというと、機械学習ツールが誰でも使えるようになったからと言って、誰でも機械学習を使いこなせるわけではないということです。 こういうものはいつも twitter に書いているんですけど、144文字では書けなさそうなのでチラ裏な感じで書いてしまいました。

https://twitter.com/_c_hase

でもなんかこういう未来が来たら楽しそうだなー。