画像識別という技術は、技術的にも(特に画像処理に触れたことがある人には)比較的直感的に理解しやすく、それでいて技術者以外が見ても楽しめるようなキャッチーなシステムを作りやすい、機械学習を勉強する上でとても良い題材だと思う。最終的に有名どころばかりになってしまったが、僕が好きな画像識別のネタを載せておく。
アイドル識別
TensorFlowを使って、アイドルの顔を識別。検証記事では、120人×200枚(そのうち140枚ずつを学習、60枚ずつを検証に使用)で93%という精度が出ている。
CIFAR-10 + OpenCVでももクロ5人の顔を識別するところから始まり、試行錯誤を経て100を超えるアイドルの識別を高精度でできるようになっていくその過程がとても参考になる。
おそ松さんに登場する六つ子の識別
シンプルなCNN(畳み込みニューラルネットワーク)でおそ松さんに登場する六つ子を識別するもの。Chainerで実装。顔の検出はdlibのHOG検出器が使われている。学習データの用意の仕方から説明されていて、以前コスプレ判定器を作った時にとても参考になった。
学習データはアニメ本編から手動で一コマずつ切り出していったようで、まずその気概がすごい。手作業で5,644枚の学習データ(キャラクターあたり大体700-800枚)が用意された。
そもそも、人間が見ていても、分脈がないと誰だか判別するのが難しいお題なので、機械の方が高い精度を出せたらとても面白かったのだが、非学習データに対する精度はあまり高くなかった様子(失敗例は示されているが、トータルでの具体的な数字は示されていない)。
学習データが限られていることと、一枚画(前後の分脈がわからない)での判定はやはり難しかったようだが、ネタとしてはキャッチーで好き。
ラーメン二郎店舗識別
ラーメンの写真から、そのラーメンがラーメン二郎のどの店舗のものかを判定するシステム。ウェブ上で収集された41店舗, 33,130枚の写真から学習。フレームワークはMXNetで、Inception-V3のImageNet学習済みモデルの転移学習を実施、非学習データに対して精度84.5%(F1スコア)を達成。
ラーメンファンとして、とても共感できるネタ。ちなみに、実は作者の人はラーメン二郎を食べたことがないらしい。余談だが、僕も食べたことがない。実は、僕も最初にDeep Learningの勉強で作った画像識別のネタはラーメンの識別だったのだが、なかなか精度を出せず世に出さなかったのだが、この事例では転移学習を使って高い精度を達成していて素直に感服した。
精度を上げるための進め方、検証の仕方についても教科書的なやり方で、かつ最終的に汎用化してツール化、公開していて本当に素晴らしい事例。