続き、というかなんというか。前回までは「ももいろクローバーZのメンバー5人の顔を識別する」というお題でやっていたけど、対象をより広範囲に拡大してみる。歌って踊って頑張っている。知名度は低くても、年間何百という頻度でライブを中心に活動している、所謂「ライブアイドル」。俗に「地下アイドル」と言ったりする。活動方針も様々だけど、大抵の子たちはブログやTwitterを中心としてWebメディアも活用して積極的に情報や近況を発信していたりする。そんな中、近年登場した「自撮り投稿サービス」。概要としては、各アイドルさんが自撮りなどの写真を投稿し、ファンのユーザーが「応援」としてポイントを送ることでその数で順位がつく、というもの。ある期間で上位にランクインすると街頭広告や雑誌インタビューに掲載されるといったイベントも開催されるため、アイドルさんは可愛い自撮りをたくさん投稿するしファンはポイント貯めたり買ったりして頑張って応援する。有名なところで以下の2つのサービスが登場している。取得したところ、軽く1000件を超えた。それだけたくさんアイドルがいるわけで、最終目的としては入力した顔画像をそれら1000人以上のアイドルに分類すること、となる。...のだけど、つまりそれを学習させるためにそれらのアイドルさんたちの「顔画像」と「(それが誰であるかを示す)ラベル」のセットが大量に必要となるわけで。自撮り投稿から顔識別用データセットを作るには多くのアイドルさんが利用しているこの自撮り投稿サービスから、投稿者と画像をセットで引っ張ってくれば「自撮り」なんだから自動でラベル付け済みの顔画像データセットを作れるんじゃないか、と考えたのだけど、まぁそんなに簡単な話でもなく。「主に自撮りが投稿される」のであって必ず投稿した本人だけの顔が写っているとは限らない。同じグループのメンバーと一緒の仲良しショットがあったりすることも珍しくない。いった写真は顔検出は自動で出来ても、複数検出されたもののうちどの顔が投稿者本人なのかは分からない。あと、そもそも上記の自撮り投稿サービスたちはデータ取得用のAPIが公開されていない。CHEERZの方はWeb版があるのでスクレイピングすれば可能そうではあるけど、DMM.yellはアプリ専用なのでそれなりにハックが必要になる。Twitterから収集、管理するWebアプリ...やはりラベル付けは人力でやるしかない、と覚悟を決めて、とにかくまずは収集してみることにした。アプリには取得APIが無いが、投稿時にTwitterと連動する機能がついているようで、大抵のアイドルさんは自分のTwitterアカウントと紐付けてそちらにも画像付きTweetで流している。連動投稿に付与されている「#CHEERZ」「#dmmyell」といったハッシュタグでTwitter検索をかければ大抵の画像は取得できる。それらの投稿から各アイドルさんの個人アカウントも把握できるので、自撮りアプリ連携ではない普段の画像Tweetも収集対象になるように登録しておく。かけて顔部分を抽出して保存していく。ももクロちゃんデータセットを作成したときと同様で、管理用のWebアプリを自作している。無料枠で利用できる範囲をオーバーしてしまったので、以前から持っていたのにほぼ使っていなかったさくらVPSのサーバに移行した。https://idol-face.sugyan.com/ひたすら目視でラベル付けこんな感じで、様々なアイドルさんの顔画像が取得できる。(かわいい)が、これらをそれぞれ「誰であるか」のラベル付けをする必要があり。100人とか200人くらいなら顔を識別できる自信はあるけれど、1000人くらいの顔がごちゃ混ぜになっていると流石に無理がある。知ってる顔はどんどん片付けていって、あとは知らない子でも普通に自撮りっぽい画像で1人で写っていればそれはまぁ本人に違いないだろう、と判断できるのでラベルを付けていく。本当に見たことのない知らない子たちの集合写真とかはまったく判別できないので後回し。いうのを考えて、顔が1つだけ検出されている画像を優先でランダムで選択しつつラベル付けしていったり。いちおう入力しやすいよう補完つけたりインタフェースを工夫したりはしている。気の遠くなるような作業ではあるけれど、まぁ好きなので意外と飽きない。数千件は自力でラベル付けできた。channelの画像を入力とする4層の畳み込みと3層の全結合によるネットワークを使って学習させてみる。1分類につき10枚程度だと心許ないが、30枚くらい学習させたらある程度の特徴を掴んでそれっぽいものは判別してくれるようになるのでは...?という目論見。学習用と評価用とかデータセットを分ける余裕はないので、とりあえずはラベル付けしたものは全部学習用に使う。数枚しか集まっていないものやそもそも顔画像じゃないものも「分類対象外」のラベルとして3割ほど混ぜる。数千枚を50クラスくらいに分類するもの、となる。分類してくれるようになる。推論結果を確認、修正で、ある程度学習が済んだモデルが出来上がったら、未分類の顔画像に対してその分類器にかけて推論してもらう。学習済みの顔に近いものは高いスコアで識別されるはずなので、これを確認することで、未分類の顔画像に対して「誰であるか」を考えるのではなく「○○と推測されているが、合っているか」だけを考えることになるので、人間の負担が軽減し作業が捗る。当然ながらまだまだ学習データ数が少ないので、この推論はすごくよく間違う(上記の画像のは全部あってます)。画質がボヤけ気味のが多い子を学習しているとボヤけてる画像はだいたいその子と認識する、とか。似たようなものはそれっぽく分類することは多いけど、やっぱりヒトが見たら全然ちがうだろって思うような間違いをしていたりはする。それはそれで確認しながら正しくラベル付けしてやることでまた学習に使えるデータが増えるので、ある程度の答え合わせが済んだら増えたデータセットを元に再び学習してやる。することで以前間違えたようなものはもう同じ間違いはしないし、さらに精度の高い推論をするよう進化する。毎回まっさらな状態から始めるのは非効率だと思ったので、学習し直すときは前回の学習済みモデルのパラメータをロードしてそこから始めることにした。初期化状態から始めるよりは早い、はず。sess.run(tf.initialize_all_variables())https://github.com/sugyan/tf-classifier/blob/master/models/v2/train.py#L30-L46結論ということで、学習用のデータを用意するのは大変だけど、ある程度集まったらとりあえず学習させる学習させたモデルを使って推論させてみる推論結果を検証することで学習データを増やし、再び学習させることで精度が上がるというサイクルを続けることで、なんだかんだで自力で13000点ほどの分類済みのアイドル顔データを作ることができている。メンバー5人中4人くらいは一応判別できるようになっている。推論結果にも出るからさらにデータを増やすのに使えるけれど、そもそもその30枚くらいまで集めるのが大変なわけで。有意な傾向は把めなそうだった...。あとは推論結果に対する検証なんかはアイドルに詳しいドルヲタの方々に手伝ってもらう形で集合知を利用して実現できれば良いのだけど、なんとも良いインタフェースが思い浮かばない。分類作業しているうちに、知らなかった子の顔もけっこう覚えるようになる。人間のラーニング能力もすごいな、って。教師データ作成のために数百人のアイドルさんのTwitter画像付き投稿から収集した数万件の顔画像のラベル付け作業をコツコツと続けているのだけど、驚くほど自分自身の顔識別性能が上がっている。Mac今後の展望だんだん「アイドルの顔画像」が集まってきたので、今度はこれらを利用して"生成する"というのにもチャレンジしてみたいと思っている。Qiita他にもなにか良いアイディアがあれば。現時点で作ったデータセットも何かに利用したい、という方がおりましたら提供の相談させていただきますのでお気軽に連絡ください。機械学習によるアイドル顔...2019-02-07将棋駒画像データセットを公開する以前から少しずつ、将棋の駒を画像分類するためのデータセット...2018-05-02将棋駒画像の分類器をラクして作るちょっと将棋関連の画像認識をやってみたいな、と思って。その2以前に試した、アイドル顔識別の性能評価。