今週のお題「犬派? 猫派?」
はてなブックマークユーザーには、猫派が多いか犬派が多いか、グーグル先生に聞いてみた。
正確には、はてなブックマークのユーザーアイコンを猫にしている人と犬にしている人のどちらが多いか、調べてみた。更に正確には…と前提条件ありあり拡大解釈ありありのツッコミどころ満載の調査をしてみた。
動機としては純粋に結果が知りたかったことと、便利になっていく世の中を実感しておきたかったから。
どういうことかというと、Google Cloud Vision APIなるサービスがベータ公開されたのです。
イットに疎い私にとってオーバーテクノロジーである「機械学習」、仕組みは分からなくてもその恩恵に誰でも預かることができる便利なサービスが公開された!よし使ってみよう!という話なのです。
いぬねこ集計の流れ
やったことはこれだけ。
- はてなブックマークホットエントリの記事へブックマークしたユーザーのリストを取得
- そのユーザーのアイコン画像を取得
- アイコン画像を拡大
- 拡大したアイコン画像をCloud Vision APIを用いて判別
- 判断基準を設けて、集計
肝は、アイコン画像を判別するところ。Cloud Vision APIへ画像を渡すと、その画像に写っているものがなんなのか判別してくれるのだ(他にもOCRでや人の表情の判別などもできる)。
Cloud Vision API は、画像を数千のカテゴリ(たとえば、「ヨット」「ライオン」「エッフェル塔」など)にすばやく分類する機能や、画像に映る個々の物体や人物の顔を検知する機能、画像に含まれる活字体の文字を認識して読み取る機能などを提供します。 Vision API - 機械学習による画像分析 — Google Cloud Platform
Google Vision Cloud APIの精度を知る
いざ集計を始める前に、私のアイコン、愛猫チョロ松の画像をちゃんと猫と判別してくれるかどうか確かめた。
判別結果は、この画像に写っているのは多分これでしょ!でももしかしたらこれかも?と、幾つかの候補と確度(スコア)が返ってくる。
一応、一番高いスコアでwhiskers(猫ヒゲのようなほおひげを指すラベル?)、一番低いスコアでkitten(子猫)が返ってきたが、どうもアイコンそのままの画像サイズでは精度がイマイチなようだ。
調べてみると判別に適切な推奨サイズが公開されていた。
Vision API Feature | Recommended Size * | Notes |
---|---|---|
FACE_DETECTION | 1600 x 1200 | Distance between eyes is most important |
LANDMARK_DETECTION | 640 x 480 | |
LOGO_DETECTION | 640 x 480 | |
LABEL_DETECTION | 640 x 480 | |
TEXT_DETECTION | 1024 x 768 | OCR requires more resolution to detect characters |
SAFE_SEARCH_DETECTION | 640 x 480 |
Image Best Practices - Google Cloud Vision API — Google Cloud Platformより、画像の判別は「LABEL_DETECTION」機能を使う。推奨画像サイズは「640 x 480」である。
推奨サイズには満たないがアイコンの元画像でためしてみるとしっかりと判別してくれた。
それならばと、アイコン画像を無理やり拡大して試してみる。浅はかである。
猫の面影すらない。アイコンを適当に2倍に拡大した画像は目も当てられないが取得できるのはアイコン画像である。さてどうしてものか。
waifu2xで画像を拡大する
思案していると、画像のノイズを省いて拡大ができるサービス/ソフトがあることがわかった。これまた機械学習を用いているらしい。
もともと二次元画像の拡大で話題を読んだサービス/ソフトらしいが、写真の拡大もそれなりにいけるらしい。
本バージョンにおける変更点は、“RGB”と“写真”という2つの計算モデルが追加されたこと。“RGB”は輝度だけを変換するのではなく、RGB(赤・緑・青)のすべてを変換するモデルで、アニメ風の画像(二次元画像)を拡大するのに向いている。一方、“写真”は写真の拡大にフォーカスしたモデル。ノイズ除去には対応していないが、一般的なレタッチツールよりも鮮明な拡大画像が得られる。
あまりファイルサイズを大きくしたくなかったので、2倍拡大で固定していくつか設定を組み合わせて小一時間、なんとか猫判定がもらえる画像にたどり着いた(私の目にはそのまま拡大した画像とそれほど違いがあるとは思えないのだが…)。
たまたまうちの猫画像でうまく行っただけの結果ではあるが、まぁ、適当な調査なので一律同じ設定で拡大をした。
約3000ユーザーのアイコン画像を判別する
ということで、冒頭で書いた手順で集めたはてなブックマークユーザーのアイコン画像約3000枚を判別にかけてみた。
アイコン群の一部
ちなみにデフォルトアイコンは省いた。ファイルサイズでソートして間引くだけ。これなら私でもできる。
いい加減に集計
前述のとおり、一画像につき複数の判別結果が返ってくる。何も考えずにすべての返り値にたいするのべの集計結果、上位20件は下表の通り。
当たり前だが、これだけではあまり意味がないし、面白みがない。
集計にあたっては、1つのアイコンに対して判別結果を1つに絞らなければいけない。
これまでの流れよろしくいい加減だが、返り値に(catまたはkitten)が入っていればそのアイコンは猫、(dogまたはpappy)が入っていればそのアイコンは犬、それ以外のアイコンはスコアが最も高いラベルをそのアイコンを示すものとして設定して、集計することにした。
集計結果
上位20の結果がこちら。
ねこ97ユーザー、いぬ67ユーザー。
というわけで、はてなブックマークユーザーは猫派が多い(ここまでの流れの通りぐだぐだな前提条件・拡大解釈もりだくさんですが)という結果になった。
ちなみに猫と判別したアイコンは下図の通り。
ざっとみ、猫だらけなのでそこそこ精度が良いようだが、おっさんがスイカを食べているアイコンやどう見ても犬のアイコンも散見されるので、我ながらいい加減な調査だったと反省。もっと時間があるときにしっかりと調査してみたい。
まとめ
最後に、かねてから私も気になっていたid:wattoさんのアイコンがしいたけなのかパンケーキなのか問題、同じ要領でGoogle先生に聞いてみました。
なぜかnose(鼻?機首?)が一位に。しいたけに少しだけ近いproduce(作物)もありますが、baked goods(焼き菓子)、dessert(デーザート)、cream(クリーム)がある当たりGoogle的にはパンケーキ説が濃厚なのかも。
ということで、ぐたぐた感は満載なものの、多少なりともgoogle cloud vision api の便利さに触れられた気がするので、今回は良しとしたい。