兄弟で似てると言われ続けて30年経った。中学生の頃に「大人になったら顔も変わってくるだろな」と想像していたのだけれど、歳を重ねるにつれてますます似るようになった。
髪型もほぼ同じだし、兄が見た目を寄せてきているんじゃないかと思えてきた。兄がミラーリング効果を利用して密かに僕に好意をアピールしてきているのかもしれない。いや、逆に僕の深層心理で兄を好きな気持がでていて似せようとしているのかもしれない。まあ、どちらにせよ両思いなのだ。最高の人生。
最近は兄弟そろっておばあちゃんの家に入っていくと「え?あっと…ん〜、え〜!?」とおばあちゃんを混乱させるようにすらなってきた。
おばあちゃんを真ん中にして兄弟で周りをぐるぐると走り回ったら脳の処理が追いつかなくなって気絶するかもしれない。
そんな似ている兄弟を「機械学習で見分ける」ということを今回はやってみたいと思う。
似てる似てると言われ続けた人生だが、どんな表情や角度だと兄と僕は似ているのかということを感覚でなくデータとして確かめてみたい。
さらにこの兄と僕を判別する機械学習のモデルがあれば「兄の子どもはどちらに似ているのか」「10歳離れた弟はどっちにより似ているのか」というような検証もできるのだ。
ということで、さっそく「兄と僕を見分ける機会学習」モデルをつくってみようと思う。
兄と僕を見分ける機会学習モデルを作る
機械学習で画像分類をするとはどういうことか。超大雑把に言えば「分類ずみの画像をパソコンに学習させ、その学習成果をもとに未分類の画像も判別してもらう」ということを行う。人間で言えば「芸能人の画像を見て名前を覚える」みたいなことをパソコンにやらせるのだ。
よし、理屈はわかったからやってみよう!!
と思っても自分で機械学習プログラムを組むとなるとそれなりの知識が必要になる。なので今回はブラウザから簡単に機械学習が利用できるGoogleのAuto MLというものを利用する。
さらに念のために機械学習に知見のあるエンジニアに話しを聞いてアドバイスをもらった。
・画像はあればあるだけもちろんいいが、2人の顔を識別する遊び程度なら500枚あればそれなりに精度はでると思う。(ちゃんと精度をだすなら500枚じゃ少ないけどね)
・とにかくいろんな角度といろんな表情で撮っておいた方がいい。知らない人が写真でデータを集めようとすると真正面の画像とかが多くなりがち
・Auto MLだと人物だけでなく写真の背景も判断材料にされちゃうと思う。そこはまあ妥協してもいいんじゃない?
・本来的には対象の幼少期の写真などもあったほうがいいが「現在の自分」を分類するというモデルとして考えれば、今の写真だけでもいい
アドバイスをもらったのだが、最終的には「無責任なこと言ってしまえば、遊びだし適当でいいと思うよ。あとネットはどんな記事でも叩かれる可能性があるから俺の名前は出さないで」と言われた。
今までのインターネットでの炎上を学習してリスクを回避している。これが機械学習か…
とにもかくにもまずはデータ収集しないといけない。
兄の写真を500枚も撮らなきゃいけないのか…けっこう多いな……
と思って写真を撮り始めてみると余裕で1000枚超えていた。やっぱり好きなもの撮ってる瞬間というのは時間を忘れるものだ。
データ収集が終わったので、ここからAutoML Visionを使って機械学習をさせていく。
ブラウザから画像をアップロードして、画面にしたがって操作するだけで完成する。簡単だ。
トレーニングが終わったら作業は完了。
画像をアップロードすると、その画像が僕なのか兄なのか自動で判定してくれる。超簡単!!
実際に使ってみる
ひよこのオスメス鑑別のように僕と兄を分類できるようになった。さっそく試していこうと思う。ちなみに、
僕→otouto
兄→ani
というラベルを設定してある。(ラベルはあとで修正できると思ったらできなかった。適当な名前をつけすぎた…)
「otouto」と表示されているので画像は僕だときちんと分類されていることになる。横の数字はどのくらい合っているかという指標だ。0.00〜1.00で判定してくれる。
上記の画像は1.00と数値が最高なので間違いなく僕だということになる。
おお!ちゃんと分類されている。僕と兄で1000枚ずつ画像を読み込ませのでそれなりの精度がでているようだ。
ただ、この記事を見てる人からするともはやどれが僕でどれが兄なのかゲシュタルト崩壊しているかもしれない。
上記の画像は兄の要素が0.5で僕の要素が0.6という微妙なラインだ。ギリギリ僕の画像であるという判定されているパターンだ。兄も僕も前髪が長いし、画像の僕の眼鏡が黒縁なので迷ったのかもしれない。
どんな条件だと分類を間違うのか?
「それなりの精度で分類される」と書いたとおり、精密な機械学習モデルが作れているわけじゃないので、分類が間違っているときもけっこうあった。
兄と僕は顔も髪型もほぼ同じなので、もっと画像数を多くしないと精度の高い分類はできないのかもしれない。
現状だとどんな画像だと兄と僕を間違ってしまうのか、条件を変えて試していきたい。
まずは服装と眼鏡を兄と同じものにして、距離を少しずつ変えてやってみた。
やはり距離が遠いと顔で判断できないのか、僕の写真も兄と判断されてしまう。顔がハッキリとわかる1〜2m前後の距離だと正確に判断されるようだ。
兄と同じ眼鏡をかけて撮影したのだが、距離が近いときは僕だと分類された。眼鏡の形はそれほど大事ではないのかもしれない。
次は真正面でなく横顔で試してみたいと思う。
横顔は何枚か試してみたのだけれど、5割くらいの確率で外れてしまう。今回は学習させる横顔のデータがまだまだ足りなかったのかもしれない。ここは画像を増やせばもっと精度が高くなりそう。改良の余地がありだ。
次は顔の一部を隠してやってみる。
距離を変えたときもそうだけど、やはり顔全体が写っていないとうまく識別できないようだ。これもデータがもっと多ければ解決できるのかもしれない。
ただ逆を言えば顔が隠れずに写っていれば分類はできるということだ。この時点でうちのおばあちゃんより優秀だ。
「10歳離れた弟」や「兄の子ども」はどっちに似ているのか
せっかく兄と僕を分類できるようになったのだから、最後に「10歳離れた弟」と「兄の子ども」がどっちに似ているのか試していきたいと思う。
ちなみに兄の2歳になる息子も僕ら兄弟に似ている。友人に写真を見せて「お前んちの家系ってその顔で生まれる呪いにかかってるの?」と言われたことがある。
何枚か試してみたけれど8割くらいの確率「兄」と分類された。兄の息子に関してはほぼ10割だ。データでも親子の血の繋がりを感じるのかもしれない。
この結果に僕は少しショックを受けた。「兄弟で似ている」ということを誇りに思って生きてきたので、それをデータとして否定されてしまったのだ。
こんな結果になるなら機械学習で判断なんてしなければよかったのかもしれない…と少し後悔した。世の中には曖昧にしておいたほうがいいこともあるのだ。やっぱりおばあちゃんの「兄弟が誰が誰かわからないねぇ」と言う判断能力にみんなで笑い合うくらいが一番ちょうどいいのかもしれない。
30歳になりました
この記事を書いてる途中で30歳になった。年齢があがってもこうやって記事に付き合ってくれる兄や弟には本当に感謝している。大人になっても関係が変わらない兄弟でよかった。# 財産 # 神がくれた宝物 # みんな大好き # 突然のインスタ風ハッシュタグ
記事も書けたし、「やっぱり兄弟って最高ー!」と思って喜んでいたのだけれど、Auto MLの料金を見てみたらなんと2万5千円かかっていた… どうやら機械学習のモデルをデプロイ(使える状態)にしておくと、それだけでお金がかかってしまうらしい。 うぉぉ…早く気づいてよかったのが不幸中の幸いだ。思わぬところでAIの反乱にあってしまった…!