発表・デモをさせていただいた内容まとめです。上手く出来ていない別のタスクがあって。Localization)。「画像内に写っている人物が誰であるか」を識別するためには、まずはその画像に写っている「顔」を検出する必要がある。その検出された顔それぞれについて分類器にかけて「この顔は○○さん」「この顔は××さん」と分類していくことになるわけで。分類器に与える入力画像を切り抜いて抽出するのにもまず顔領域を検出する必要があるし、その分類器を学習させるためのデータセットも、様々な画像から顔領域を検出して切り抜いてそれぞれに対してラベル付けすることで作っている。顔識別タスクには「顔領域の検出」が不可欠となっている。今までは、データセット作成のための顔画像収集にはOpenCVを使った回転補正機能つきの検出器を自作して使っていた。OpenCVのHaar特徴によるカスケード型分類器を使った領域検出は、正面向き顔・目などを検出するため学習済みデータが標準で同梱されており、最も手軽に使える検出器と言える。この検出器は斜めに傾いた顔に対しては一気に精度が下がるという弱点があり、斜めに写っていることが多いアイドルの自撮りでは上手く検出できない場合が多い。それらの結果をマージする、という方法を使って斜めのものもそれなりの精度で顔検出できるものを作った。詳しくは過去のこの記事。傾き角度も求めることができる。これで大体やりたいことは実現できそうだったので、自分の取り組んでいるアイドル顔識別においてはこの検出器を使ってデータセット用の顔画像抽出を行ってきた。この検出器でもまだ問題は残っていて。使うようにしているのが現状。実際の顔領域より大きく検出されることが多いようだった。今回はそれに挑戦してみることにした。使った物体検出の手法もたくさん研究されていて近年めざましい発展を遂げているようで、代表的な手法としてこんなものが提案されてきた、と下記記事で紹介されている。思って、いちおう論文も少し目を通してみた。何となくの原理は分かったような気がするし自分でも勉強がてらTensorFlowで書いてみよう...として、難しすぎて途中で挫折した。API時は過ぎ、今年の6月中旬。使って学習済みの5種類の一般物体検出モデルが公開されている。37下の方がより精度が高く、その分モデルは大きくなるし処理も重くなるようだ。と2種類それぞれで実現しているようだ。丁寧に説明されている。ファイルを自分で用意できれば、簡単にそれを使った検出器を学習させ使うことができる、ということのようだ。これを使わない手は無い、ということで試してみた。いうデータセットがヒットした。これで顔領域の検出だけなら学習させられそうだけど、これだけでは顔の傾きは取得できない。OpenCVを使ったものと同様、両目の位置さえ取れればそこから角度は算出できそうだけど、両目の位置の情報は残念ながら付属のアノテーションには含まれていない。検出することも可能なはず。して検出された目の領域を表す座標をそれぞれ回転前の座標に変換すれば、元画像に対する目の領域も取得できる。ある程度の誤検出はあるので、適当にフィルタリングして補正し、除外。...これでだいたいは上手く検出できたようだった。この方法で上手く検出でき、与えられているアノテーションと同数の顔が正しく両目と共に検出されたものだけを用いてデータセットを作成。結果として、使用できたのは2,845点のうち936点だった。