こんにちは、菊池です。
UEQareerアドベントカレンダーラストです。
今回は機械学習を使って顔からその人の属性を判定するwebアプリの作成を通し、苦労や使ったツールサービスなどについて書いていきます。
もしかしたら過去の記事のリンクを貼りまくった年末特番のようになっているかもしれませんが、ご了承ください。
Contents
digitsに助けられた
オライリーのpythonの本を読んで機械学習を勉強しようと決意して、3日で諦めてから、酒、ドラッグ(ビオフェルミン),youtubeに溺れた日々を過ごしていた・・。

そんなとき、通っていた更生施設(会社の新人研修)でdigitsという、電通大で単位を落とすのと同じぐらい簡単に機械学習できてしまうツールを紹介してもらった。

digitsの効果は素晴らしく、機械学習なんてわからなくても道具の使い方を知っていれば、何か作れる!と思い直し再び健康的な生活を取り戻していった。
そして、この頃からなんとなくギャルと清楚系を分類するアプリケーションを作るという目標がでてきた。
画像認識のためのさいつよツール「digits」の紹介 その1
画像収集
学習をするにはまず、大量の画像が必要である。
くそっ!ツールはある!使い方も
糞高い炊飯器の炊飯ボタンしか押したことのないばーちゃんレベルで理解した!
しかし、画像をどうやって集めたものか・・・
コメがなければ飯はたけない・・・ッ!!
DMM API
絶望の中、光が差し込んだのは、行きつけのサイトを回遊している時だった。
このWEB APIを使えば一気に顔画像を集めることができる!
早速、rubyでapiをスパンスパン叩きまくるスクリプトを書きなぐり、大量の女の子の顔画像を得ることに成功した!
google 検索
当初、顔の種類として「清楚」「ロリ」「お姉さん」「ギャル」の4つにしようとしていた。
しかし、前述のapiでは偏った画像ばかりになってしまった。
圧倒的ロリ不足である。
ロリジャンルなんだろうなと思うが、どう見ても自分より年上の画像ばかりなのである。
ロリ風味のババアで本当にロリ顔を学習することができるのか?
メリークリスマス
そうして、検索界の権威であるgoogle先生の門を叩くことにした。
しかし、googleの画像検索apiは有料だった。
クローリングするしかないッ!!
selenium をつかってgoogleから画像を引っ張ってくることにした
Googleの検索結果から画像をまとめてダウンロードするときに少し工夫が必要だった話

ラベリング!!
災害の山場は画像にラベリングしていく工程だった。
一万枚集めた画像を一つ一つ人間の目で分類していかなければならないのだ。
iterm自力編
まずはじめに思いついたのは、itermの画像表示機能を使って、キーボード操作だけでラベリングしていくツールを作成することだった。
それマグで! 「iTerm2でターミナルに画像を表示する。」
作業は圧倒的に早くなったが、想像以上に進まない。六百枚ぐらいで、何がお姉さんで何がロリでなのかわからなくなる。
ロリタルト崩壊がおこり
メリークリスマス
これ以上は危険だと判断し別の方法に切り替えることにした。
おらに元気を分けてくれ編
友達や家族の力を得るべく、web上で分類できる簡易的なシステムを構築し、大量の画像の山を切り崩しにかかった.
「これは清楚でしょ?いやー違うだろ」
「この女の子誰?」
みたいな感じで、楽しくラベリングできるようになった

〜そして学習へ〜
ついに画像のラベリングが終わり(実は予定の半分ぐらい)
学習の工程に進んだ
と入っても画像を放り込んでクリックするだけの簡単な作業である
メモリが足りない
カチカチ、よしあとは焼き上がりを待つだけだ。
数時間後・・・・
あれ、なんかエラーで止まってる。
調べてみると、どうやらメモリが足りないらしい。
とりあえずazureでメモリが50GBぐらいあるインスタンスを立ち上げてみる
再度挑戦し成功した
公開、そして明らかになるギャルと清楚の境界線
数日前からフロントを突貫で作り、こうして公開している。
清楚系診断
清楚が多めに出たり、顔じゃないところをこれロリとかいってしまう。
という問題があるが、これから少しずつ改良していこうと思う。
ちなみに
この画像でやってみたら
サンタ帽ありとなしの2つの顔で認識された。
ギャルと清楚系の違いってサンタコスしてるかどうかってこと・・・?
メリークリスマス