こんにちは.これまで時間をかけて単純な問題である2次元の 手書き数字認識を説明して来ました.これでようやく シーン中の3次元物体の検出問題に取り組むことができます.ここでは, 現在広く使われているPASCAL物体検出チャレンジをとりあげます. このデータセットは,もう5年以上使われています. このデータセットには,各カテゴリに対して 10,000枚以上の画像が収集されました.そして画像中にある そのカテゴリの物体を四角で囲みました.例えばダイニングテーブル,犬,馬, オートバイ,人,植木鉢,羊などです.カテゴリの数は 20あります.各カテゴリに属する物体が四角形で囲まれています. 例えば,これは犬を囲む矩形, そしてこれは馬を囲む矩形と 人々に対応する矩形です. 画像中に人と馬が一緒にいるので. このタスクのゴールは物体を検出することです. つまりこれがコンピュータがすることです.例えば犬を見つけたいのです. やりたいことは,画像のどこに犬がいるのかを矩形で 囲むことです.そして実際にその位置に犬がいるのかどうかを 評価するには,この矩形が正しい矩形と十分に重なっているか を見ます.さて,これが3次元物体認識でよく用いられている データセットです.このためにどんな手法が使えるでしょう. 最初はもちろん,基本的なやり方である多重スケールのスライディングウインドウを 使います.この方法は顔検出のために90年代に使われました. そして現在まで,人物検出などに使われています.では, この基本的な方法を見てみましょう.ここにウィンドウがあります.例えば, 画像の左上から始めます.この緑色の四角の一つ一つが ウィンドウに対応します.そして,このウィンドウの中に, 顔があるか?バスがあるのか?を認識します.そしてウィンドウを少しスライドして, 同じ事をおこないます.画像中の人物の大きさは様々なので, この処理を色々な大きさのウィンドウを使って行い,小さな物体から 大きな物体まで扱えるようにします.一般的に用いられている認識方法は 線形サポートベクターマシン(SVM)を使って勾配方向ヒストグラム(HOG)特徴量を学習することです. これは2005年にDalalとTriggsが提案した方法で, 彼等の論文に詳しく書かれています.これらのブロックをどう計算し正規化するか,などに 興味があれば,彼らの論文をぜひ読んでください. DalalとTriggsのアプローチは歩行者検出に 適用されましたが,そのためにはひとつのブロックで十分でした.これで 対象物体を検出できました.それではもっと複雑な物体はどうでしょう. 姿勢が変化したら?犬や猫はどうする?これらの変形は非剛体です.だから 変形しないテンプレートが一つでは不十分です.そこで,パーツに基づく(part-based)アプローチが 必要になります.現在,パーツに基づくアプローチは2つあります.1つ目は 変形可能(deformable)パーツモデルで,Felzenszwalbらによって提案されたものです.これは 2010年のPAMIの論文です.もう一つのアプローチはポーズレット(Poselet)と呼ばれるもので, Lubomir Bourdevやその他の私のグループの研究者が提案しました. その基本的なアイデアは? まずFelzenszwalbのアプローチを紹介しましょう. 彼らの基本的なアイデアは,ルートフィルタ(root filter)が物体全体を 検出します.そして多数のパーツ用のフィルタ(part filters)が 顔や足などを検出します.これらのパーツ用フィルタは ルートフィルタに対してある特殊な関係になる時だけ使われます.つまり,この検出器は 物体全体の検出器とパーツ用フィルタの組み合わせであり, パーツ用フィルタは物体全体とある特定の関係にあるように制約されます.そして このアプローチは,ルートフィルタと様々なパーツ用フィルタから構成され, 識別はLatentSVMによって行われます.このためには更にアノテーションを付ける必要はありません. ここでパーツとは,顔や足などです.ですが ここで注意したいのは,パーツとは,そのように何らかの意味のあるものでなくても 構わないということです.もう一つのポーズレットのアプローチでは,アイデアとして パーツは意味のあるものでなくてはなりません.そしてそのために 更なるアノテーションを付ける必要があります.例えば,人々の画像があるとします. これには,キーポイントにアノテーションを付けなければなりません.例えばこれは左肩であるとか 右肩とか,左ひじ,右肩などです.その他のカテゴリの 物体に対しては,キーポイントは,例えば飛行機のカテゴリであれば, 胴体先端や翼の先端がキーポイントです. このアプローチには作業が必要になります.なぜなら,誰かが テスト画像を全部見て,キーポイントにマークを付けなければならないので.しかしその結果, もう少し色々なことができるようになります.このスライドに示しているのは, 識別的に学習されたパーツに基づくモデルが物体を検出している様子です. これはDPMモデルという,Felzenszwalb,Girshick,MacAllester,Ramananが提案したものです. ここに示すように,このモデルは自転車を非常によく検出することができます.実際には, 一つのモデルだけを学習するのではなく,混合モデルを学習します.ここの示すモデルは 自転車を横から見たものに対応します.これはルートフィルタです. ルートフィルタはこのように見えます.これは剛体のテンプレートです. これは特定方向のエッジを探して, 横から見た自転車を検出します.その次は様々なパーツ用フィルタです.パーツ用フィルタは これです.これらの一つ一つの矩形が, パーツ用フィルタに対応します.ここにあるフィルタは, タイヤを検出するテンプレートのようなものです.そして, 最終的なスコアを計算します.そのためには,ルートフィルタのスコアと 各パーツ用フィルタのスコアを総合します. 横から見た自転車を検出するこの検出器は, 自転車を前から見た場合にはうまく働きません.そのため,複数のモデルが 必要になります.そのモデルがこれです.ここにタイヤがありますが, これはパーツとしては少し違います.そのため,複数のモデルを使います. 色々な姿勢を扱う必要があります.各モデルは ルートフィルタと様々なパーツ用フィルタを組み合わせています.また,学習データには微妙な部分もあります.なぜなら キーポイントにたいするアノテーションがないかもしれないからです. ここで紹介した学習アプローチでは, 学習したパーツがどこにあるのかを見つけます.詳細については,PAMI2010の論文を読んでください. それでは,どのくらい検出できているのでしょうか.一般的にコンピュータビジョンで用いられている 検出器の評価方法を説明します.ここでは 例えばオートバイ検出器を例に取りましょう.そして,適合率・再現率曲線を 計算します.そのアイデアはこうです.検出アルゴリズムは オートバイがいるかもしれない場所を四角として検出します.そして この検出された矩形を評価します.それが正しいのか間違いなのか? そして 正しい矩形との重なりが例えば50%以上であれば,検出できたと することします.次に,このしきい値をどのくらい厳しくするのかを決めます. もし検出が十分な精度だと思うなら,すべての候補を検出結果として評価しても良いでしょう. もちろん全部のオートバイが検出できていれば,ですが. それはそれでよさそうです.ではここで何をするかというと, しきい値を決めてそれに対して適合率と再現率を計算します. 適合率(precision)と再現率(recall)です.その意味はこうです. 適合率とは,検出したオートバイのうち,何割が本当のオートバイなのかを 表します.再現率とは,検出するべきオートバイのうち,どのくらいが 検出できたのか,です.もちろん適合率は100%になるのが理想ですし 再現率も100%がよい.でも実際にはそんなにうまく行きません. 全部のオートバイが検出できなければ,例えば,この点では, 適合率は0.7です.この意味は,検出した結果は 70%しか正しくない,ということです.この点の再現率は 55%程度なので,このしきい値では,つまり55%しか オートバイを検出できないということです.しきい値をあまくしていくと, 誤検出が増えますが,未検出は減ります. 曲線のこの付近では, およそ70%から80%のオートバイが 検出されています.この図に示す複数の曲線は 異なるアルゴリズムの結果を示しています.これらのアルゴリズムを比較するには 曲線の下の面積(AUC)を用います.理想的には,もちろんこれは100%になります. 実際には50%とか60%という数字になり, これは平均適合率(AP)と呼ばれています.これを用いて異なるアルゴリズムを比較します. この適合率再現率曲線は,別のカテゴリの物体検出結果を示しています.つまり 人物検出です.異なるアルゴリズムに対応する曲線があります. このアルゴリズムはあまり良くありませんが,こちらのアルゴリズムはもっと性能が良いです. どの曲線でも,すべての人物は検出できていません. 30%の人物はどのアルゴリズムでも検出されていません. 一部が隠れていたり,一般的な姿勢をしていなかったりするためです. そういう状況は検出を非常に難しくします. 最終的にPASCAL VOCでは 各クラスの平均適合率を計算します.そして 2つの数値を求めます.Maxはそのカテゴリで最もよいアルゴリズムです. オートバイのmaxは58%,という具合です.これはオートバイ検出で 最もよいアルゴリズムの平均適合率は58%ということです.そしてmedianは, もちろん複数のアルゴリズムの中央値です. あるカテゴリは別のカテゴリより簡単なものがあります.オートバイはおそらく 一番簡単です.平均適合率が58%なので.植木鉢などはもっと難しく 検出の平均適合率は16%しかありません.だから 検出がうまくできているかどうかは,私の考えでは,すべてのカテゴリで 平均適合率が50%以上かどうかです.ここではオートバイ, 自転車,バス,飛行機,馬,車,猫,電車,バス,です.50%ということは, そのカテゴリでは半分正解して半分は間違えていると言えるかもしれません. 50%程度なので,もしかすると「ボート」と答えているかもしれません.ではもっと難しい カテゴリを見てみましょう.ボートのカテゴリでは,平均適合率は 0.23です.この例を見れば,なぜ 難しいかが分かるでしょう.ボートによっては見かけが全然ちがいます. これは非常に難しいのです.これらをすべて学習して検出するには. それではもっと難しい例を見てみましょう.イスです.これらの画像に イスを表す矩形を描くとします.では, 例えば剛体テンプレートでこれらを検出することを考えましょう. イスに特徴的なエッジを見つけるのです.分かるように,そのような方法では まったく見込みがありません.おそらく,人間がイスを見つける場合には, 人間がイスの上に特定の姿勢で座る,という事実を使うでしょう.そして 多くの文脈情報を使うはずですが,そのような情報は現在のアルゴリズムでは考慮されていません. では人物の画像に戻りましょう.人物画像の解析は 非常に重要です.ヒューマンコンピュータインタラクションに応用できますし 映像を解析し,動作を認識することにも使えます.しかし これは難しい.人物の姿勢が様々であり,服装も様々で 隠れているかもしれないし,サイズも様々です.ですから人物は本当に 難しいカテゴリです.物体認識にとって一番重要なカテゴリ かも知れません.それでは,ポーズレットを使ったアプローチの研究を紹介します. もう一つのアプローチとして紹介したものです.そのアイデアは 顔検出や歩行者検出がうまく働くので,それに依存できる,ということです. 顔認識は,すでに性能が非常に良いです.歩行者検出もそうです.特に 直立した人物や歩いている歩行者は検出できます.本質的には どちらもパターンのマッチングに依存しています.共通した視覚的特徴のパターンを 学習します.しかしそれは,この2つのパターンに限ったことではありません. 実際,2本の足に対応するパターンも存在します. もしそれが検出できるなら,人物を検出したと確信できます.そして そのようなパターンは,人体のどこか一つの部位に対応するものでなくても良いのです. ここに示しているのは,顔の半分,胴体の半分,肩の中心です. これはうまくいきます.つまり,これは人物に特徴的なパターンなのです. もちろん,顔検出器を訓練するためには,顔をマークした 画像が必要です.つまり顔だけの画像を 正例として機械学習アルゴリズムに入力します.一方, これらの配置すべてを検出するにはどうしたらよいでしょう.足と顔と 肩の配置を,です.ポーズレットのアイデアは,これらの検出器とまったく同じですが あらかじめこれらを指定することはやりたくありません.まずは ポーズレットの例をお見せします.これがポーズレットです.「レット」は一部分を意味します. ポーズレットは,人間の姿勢(ポーズ)が小さな部分的なポーズから構成されていると考えます. 一番上の行は,顔,上半身,そして 腕のある特定の配置に対応しています.2番めの行は,2本の足に対応します.3番目の行は, 人間の後ろ姿に対応しています.実際には, このようなポーズレットが大量にあります.それが保持する値は あとで行うタスクを簡単にしてくれるものです.例えば 性別認識を学習するとします.つまり男性と女性を識別します.そのためには 顔の画像が使えますし,背中の画像も使えます.脚もです. 服装が女声と男声ではかなり違いますから.アイデアは,これらを 正例として検出器に学習させるのです.実際には2つの検出器を 訓練します.一つは男性の顔,もう一つは女性の顔です. これをそれぞれの検出器で行なって, 人物を識別することができます. いくつかの結果を示しましょう.これがこのアプローチの結果です. 上の段は男性の検出結果,下の段は女性の検出結果です. いくつか間違いもあります.例えば,これは, 実際には女性です.他にも間違いはありますが,それでも驚くほど結果は良好です. こちらの結果は,上の段は長いズボンをはいた人物です. 下の段はズボンが短い人物です.これができれば, 人物を記述することができるのが分かるでしょう.画像中に, 人物がいて,背が高くて,ブロンドの男性で, 緑色のズボンをはいている,と言えるようになります.この結果では,上段は 帽子をかぶった人物,下の段は帽子がない人物です.このアプローチは 動作の検出にも使えます.ここに示す結果は,静止画像中の動作を 検出しています.画像は1枚しかありません.この画像は 座っている人物,電話で話している人物, 馬に乗っている人物,走っている人物,などです.ポーズレットは この問題にも適用できます.例えば,ポーズレットに 電話をかけている人物,走っている人物,歩いている人物,馬に乗っている人物,を学習させます. このような動作の検出は,もっと一般的な問題です. 明らかに,静止画像の情報だけでは足りません. 映像があれば,オプティカルフローのベクトルが計算できます.この情報はこの問題を 扱う別の情報になります.認識したい動作の種類としては, 動きや姿勢の変化,物体の操作,会話のジェスチャ, 手話,などがあります.そのためには,物体を英語の名詞と考えることもできます. 動作は英語の動詞に相当します.すると 物体認識に使われていた手法の幾つかがこの問題に使えることが分かります. 例えばbag-of-spatio-temporal wordや, SIFT特徴を動画に一般化したものもあります.それらは非常に有用で 動作認識タスクにおいて最良の結果も得られています.さてここで今回の話をまとめましょう. この研究分野は,物体認識,動作認識などにおいて非常に進歩してきたと 私は思います.しかし,やらなければならないこともまだまだあります. マルチメディア情報システムの研究分野で使われている用語に セマンティックギャップというものがあります.これが示すのは,画像や映像は 画素や輝度値,RGB値で表現されている,ということです. しかし私たちが本当に知りたいのは,意味的な内容なのです.シーン中の物体は何なのか? シーンとは何か?どんなイベントが起こっていているのか.このようなことを知りたいのです. しかしまだそこまでには至っていません.人間の性能に近づいてもいません. しかし,今後数年の間に,大きな進展は続くだろうと思っています. これで終わりです. (日本語翻訳:玉木徹)