特集 2020年4月8日

似てる兄弟をAI(機械学習)で分類する

似てると30年ずっと言われ続けている兄と僕を機械学習で分類させたらどうなるのかやってみた。

※ AIという言葉は様々な意味を含みますがここでは「機械学習=AIの一つの手法」という意味で扱います

大学中退→ニート→ママチャリ日本一周→webプログラマという経歴で、趣味でブログをやっていたら「おもしろ記事大賞」で賞をいただき、デイリーポータルZで記事を書かせてもらえるようになりました。嫌いな食べ物はプラスチック。(動画インタビュー

前の記事:そろそろWeb記事もYoutubeっぽくするべきじゃないだろうか?

> 個人サイト ジャーニーとモアイとめがね

37835 copy.jpg
左が兄で、右が僕、手前が兄の息子

兄弟で似てると言われ続けて30年経った。中学生の頃に「大人になったら顔も変わってくるだろな」と想像していたのだけれど、歳を重ねるにつれてますます似るようになった。

髪型もほぼ同じだし、兄が見た目を寄せてきているんじゃないかと思えてきた。兄がミラーリング効果を利用して密かに僕に好意をアピールしてきているのかもしれない。いや、逆に僕の深層心理で兄を好きな気持がでていて似せようとしているのかもしれない。まあ、どちらにせよ両思いなのだ。最高の人生。

03_090.jpg
10歳離れた弟もだいたい同じ顔

最近は兄弟そろっておばあちゃんの家に入っていくと「え?あっと…ん〜、え〜!?」とおばあちゃんを混乱させるようにすらなってきた。

おばあちゃんを真ん中にして兄弟で周りをぐるぐると走り回ったら脳の処理が追いつかなくなって気絶するかもしれない。

aa.jpg
今回やることを超簡単に図にするとこんな感じ

そんな似ている兄弟を「機械学習で見分ける」ということを今回はやってみたいと思う。

似てる似てると言われ続けた人生だが、どんな表情や角度だと兄と僕は似ているのかということを感覚でなくデータとして確かめてみたい。

さらにこの兄と僕を判別する機械学習のモデルがあれば「兄の子どもはどちらに似ているのか」「10歳離れた弟はどっちにより似ているのか」というような検証もできるのだ。

ということで、さっそく「兄と僕を見分ける機会学習」モデルをつくってみようと思う。

兄と僕を見分ける機会学習モデルを作る

スクリーンショット_2020_04_03_17_16.jpg
完全な余談だけど少し前に兄弟3人で遊戯王のアプリを始めた。デュエリストとしてお互いを日々高め合っている

機械学習で画像分類をするとはどういうことか。超大雑把に言えば「分類ずみの画像をパソコンに学習させ、その学習成果をもとに未分類の画像も判別してもらう」ということを行う。人間で言えば「芸能人の画像を見て名前を覚える」みたいなことをパソコンにやらせるのだ。

よし、理屈はわかったからやってみよう!!

と思っても自分で機械学習プログラムを組むとなるとそれなりの知識が必要になる。なので今回はブラウザから簡単に機械学習が利用できるGoogleのAuto MLというものを利用する。

さらに念のために機械学習に知見のあるエンジニアに話しを聞いてアドバイスをもらった。

・画像はあればあるだけもちろんいいが、2人の顔を識別する遊び程度なら500枚あればそれなりに精度はでると思う。(ちゃんと精度をだすなら500枚じゃ少ないけどね)

・とにかくいろんな角度といろんな表情で撮っておいた方がいい。知らない人が写真でデータを集めようとすると真正面の画像とかが多くなりがち

・Auto MLだと人物だけでなく写真の背景も判断材料にされちゃうと思う。そこはまあ妥協してもいいんじゃない?

・本来的には対象の幼少期の写真などもあったほうがいいが「現在の自分」を分類するというモデルとして考えれば、今の写真だけでもいい

アドバイスをもらったのだが、最終的には「無責任なこと言ってしまえば、遊びだし適当でいいと思うよ。あとネットはどんな記事でも叩かれる可能性があるから俺の名前は出さないで」と言われた。

今までのインターネットでの炎上を学習してリスクを回避している。これが機械学習か…

37892.jpg
兄の写真を撮る僕を兄の嫁が撮っている写真

とにもかくにもまずはデータ収集しないといけない。

兄の写真を500枚も撮らなきゃいけないのか…けっこう多いな……

と思って写真を撮り始めてみると余裕で1000枚超えていた。やっぱり好きなもの撮ってる瞬間というのは時間を忘れるものだ。

37894.jpg
僕の写真を撮る兄を兄の嫁が撮っている写真
いったん広告です

データ収集が終わったので、ここからAutoML Visionを使って機械学習をさせていく。

ブラウザから画像をアップロードして、画面にしたがって操作するだけで完成する。簡単だ。

orm.jpg
まずは画像をアップロードする
brot4.jpg
そしてその画像にラベルをつける。「ラベル=画像に名前をつける」ようなイメージ。例えば僕の画像に「弟」、兄の画像に「兄」というレベルをそれぞれつける
fdasfdsaorm.jpg
そして最後にラベルをつけた画像をもとに「こういう特徴がある画像は弟、この画像であれば兄だな」ということをトレーニングをしてモデルを作る。これも自動でやってくれるのでボタンを押すだけ(時間がけっこうかかる)

トレーニングが終わったら作業は完了。

画像をアップロードすると、その画像が僕なのか兄なのか自動で判定してくれる。超簡単!!

実際に使ってみる

ひよこのオスメス鑑別のように僕と兄を分類できるようになった。さっそく試していこうと思う。ちなみに、

僕→otouto
兄→ani

というラベルを設定してある。(ラベルはあとで修正できると思ったらできなかった。適当な名前をつけすぎた…)

dfsafas.jpg
画像をアップロードするとこんな感じで判定される

「otouto」と表示されているので画像は僕だときちんと分類されていることになる。横の数字はどのくらい合っているかという指標だ。0.00〜1.00で判定してくれる。

上記の画像は1.00と数値が最高なので間違いなく僕だということになる。

fdasfdsa.jpg
僕→正解
fdsaform.jpg
僕→正解
aaaa.jpg
兄→正解
dfsafd.jpg
僕→正解
fdsafdrm.jpg
兄→正解

おお!ちゃんと分類されている。僕と兄で1000枚ずつ画像を読み込ませのでそれなりの精度がでているようだ。

ただ、この記事を見てる人からするともはやどれが僕でどれが兄なのかゲシュタルト崩壊しているかもしれない。

dfasfsdam-4.jpg
ただし学習の仕方が足りないからから、こういう微妙な判定のやつもある

上記の画像は兄の要素が0.5で僕の要素が0.6という微妙なラインだ。ギリギリ僕の画像であるという判定されているパターンだ。兄も僕も前髪が長いし、画像の僕の眼鏡が黒縁なので迷ったのかもしれない。

どんな条件だと分類を間違うのか?

fdsfdsaflatform-6.jpg
僕の画像→不正解

「それなりの精度で分類される」と書いたとおり、精密な機械学習モデルが作れているわけじゃないので、分類が間違っているときもけっこうあった。

兄と僕は顔も髪型もほぼ同じなので、もっと画像数を多くしないと精度の高い分類はできないのかもしれない。

IMG_7319.jpg
この写真は兄

現状だとどんな画像だと兄と僕を間違ってしまうのか、条件を変えて試していきたい。

まずは服装と眼鏡を兄と同じものにして、距離を少しずつ変えてやってみた。

fdsafform.jpg
ちなみにこのくらいの距離(10mくらい)が離れすぎていると判別すらできない
fdsafdorm-2.jpg
兄→正解
fdsafdsam-3.jpg
兄→正解
brother_megaya_multi_–_Vision_–_test-place_–_Google_Cloud_Platform-5.jpg
僕→不正解
fdsafsam-6.jpg
僕→不正解
fdsafdm-7.jpg
僕→正解

やはり距離が遠いと顔で判断できないのか、僕の写真も兄と判断されてしまう。顔がハッキリとわかる1〜2m前後の距離だと正確に判断されるようだ。

兄と同じ眼鏡をかけて撮影したのだが、距離が近いときは僕だと分類された。眼鏡の形はそれほど大事ではないのかもしれない。

次は真正面でなく横顔で試してみたいと思う。

fdasfdsrm.jpg
兄→正解
fdsafdsm-2.jpg
僕→不正解

横顔は何枚か試してみたのだけれど、5割くらいの確率で外れてしまう。今回は学習させる横顔のデータがまだまだ足りなかったのかもしれない。ここは画像を増やせばもっと精度が高くなりそう。改良の余地がありだ。

次は顔の一部を隠してやってみる。

fdsafsform.jpg
兄→正解
fdsafsdrm-3.jpg
僕→不正解
fdsafads-2.jpg
兄→不正解
dfsafdsaorm-4.jpg
僕→不正解

距離を変えたときもそうだけど、やはり顔全体が写っていないとうまく識別できないようだ。これもデータがもっと多ければ解決できるのかもしれない。

ただ逆を言えば顔が隠れずに写っていれば分類はできるということだ。この時点でうちのおばあちゃんより優秀だ。

いったん広告です

「10歳離れた弟」や「兄の子ども」はどっちに似ているのか

せっかく兄と僕を分類できるようになったのだから、最後に「10歳離れた弟」と「兄の子ども」がどっちに似ているのか試していきたいと思う。

ちなみに兄の2歳になる息子も僕ら兄弟に似ている。友人に写真を見せて「お前んちの家系ってその顔で生まれる呪いにかかってるの?」と言われたことがある。

fdsafd-4.jpg
10歳離れた弟→兄
fdsafm-5.jpg
10歳離れた弟→兄
fdsafdsarm-6.jpg
兄の息子→兄
fdsafdsm-3-2.jpg
兄の息子→兄

何枚か試してみたけれど8割くらいの確率「兄」と分類された。兄の息子に関してはほぼ10割だ。データでも親子の血の繋がりを感じるのかもしれない。

この結果に僕は少しショックを受けた。「兄弟で似ている」ということを誇りに思って生きてきたので、それをデータとして否定されてしまったのだ。

こんな結果になるなら機械学習で判断なんてしなければよかったのかもしれない…と少し後悔した。世の中には曖昧にしておいたほうがいいこともあるのだ。やっぱりおばあちゃんの「兄弟が誰が誰かわからないねぇ」と言う判断能力にみんなで笑い合うくらいが一番ちょうどいいのかもしれない。


30歳になりました

この記事を書いてる途中で30歳になった。年齢があがってもこうやって記事に付き合ってくれる兄や弟には本当に感謝している。大人になっても関係が変わらない兄弟でよかった。# 財産 # 神がくれた宝物 # みんな大好き # 突然のインスタ風ハッシュタグ

IMG_7404 copy.jpg
3月の初めごろに兄の家に行ったら、兄嫁が僕のためにケーキを用意してくれていた。本当に兄は良い人と結婚したなぁ…

記事も書けたし、「やっぱり兄弟って最高ー!」と思って喜んでいたのだけれど、Auto MLの料金を見てみたらなんと2万5千円かかっていた… どうやら機械学習のモデルをデプロイ(使える状態)にしておくと、それだけでお金がかかってしまうらしい。 うぉぉ…早く気づいてよかったのが不幸中の幸いだ。思わぬところでAIの反乱にあってしまった…!

 

▽デイリーポータルZトップへ

デイリーポータルZを

 

▲デイリーポータルZトップへ バックナンバーいちらんへ
↓↓↓ここからまたトップページです↓↓↓

 

今日のみどころ