(57)【要約】【課題】複数の処理部によるより効率的な処理を可能とする画像分割技術を提供する。【解決手段】複数の処理部を用いて処理を行う画像処理装置は、入力画像を複数の部分領域に領域分割する分割手段と、複数の処理部の個数と複数の部分領域の個数である第１の分割数と複数の部分領域の個数を第１の分割数から第２の分割数に調整した場合の影響とに基づいて、第２の分割数を決定する決定手段と、入力画像が第２の分割数で領域分割されるように、第１の分割数の部分領域の一部を調整する調整手段と、複数の処理部により第２の分割数の部分領域に対する所定の処理を実行するよう制御する制御手段と、を有する。【選択図】図２
2018128930.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理部を用いて処理を行う画像処理装置であって、
入力画像を複数の部分領域に領域分割する分割手段と、
前記複数の処理部の個数と前記複数の部分領域の個数である第１の分割数と前記複数の部分領域の個数を前記第１の分割数から第２の分割数に調整した場合の影響とに基づいて、該第２の分割数を決定する決定手段と、
前記入力画像が前記第２の分割数で領域分割されるように、前記第１の分割数の部分領域の一部を調整する調整手段と、
前記複数の処理部により前記第２の分割数の部分領域に対する所定の処理を実行するよう制御する制御手段と、
を有することを特徴とする画像処理装置。
【請求項２】
前記決定手段は、前記複数の処理部の個数の整数倍となるように前記第２の分割数を決定する
ことを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記制御手段は、前記第２の分割数の部分領域を前記複数の処理部に等分に分配する
ことを特徴とする請求項２に記載の画像処理装置。
【請求項４】
各部分領域の特徴量を導出する導出手段を更に有し、
前記調整手段は、前記第１の分割数の部分領域のうち、隣接しかつ類似する特徴量を有する部分領域を統合する
ことを特徴とする請求項１乃至３の何れか１項に記載の画像処理装置。
【請求項５】
前記所定の処理は、部分領域の特徴量に基づく画像認識処理である
ことを特徴とする請求項４に記載の画像処理装置。
【請求項６】
前記画像認識処理は、互いに異なる条件による複数の処理と、当該複数の処理の結果を案分して統合する処理と、を含む
ことを特徴とする請求項５に記載の画像処理装置。
【請求項７】
前記影響は、前記複数の処理部による前記所定の処理における精度の悪化の程度である
ことを特徴とする請求項１乃至６の何れか１項に記載の画像処理装置。
【請求項８】
前記影響は、前記調整手段による調整に要する時間と前記複数の処理部による前記所定の処理に要する時間との和の増加分である
ことを特徴とする請求項１乃至６の何れか１項に記載の画像処理装置。
【請求項９】
前記複数の処理部により前記第１の分割数の部分領域に対する前記所定の処理を実行した場合の処理負荷である第１の処理負荷を予測する第１の予測手段と、
前記調整手段による処理負荷と前記複数の処理部により前記第２の分割数の部分領域に対する前記所定の処理を実行した場合の処理負荷との和である第２の処理負荷を予測する第２の予測手段と、
を更に有し、
前記第１の処理負荷が前記第２の処理負荷よりも小さい場合、前記調整手段は前記調整を行わず、前記制御手段は前記複数の処理部により前記第１の分割数の部分領域に対する前記所定の処理を実行するよう制御する
ことを特徴とする請求項１乃至６の何れか１項に記載の画像処理装置。
【請求項１０】
前記処理負荷は、処理時間、消費電力、データ転送時間の何れかを含む
ことを特徴とする請求項９に記載の画像処理装置。
【請求項１１】
複数の処理部を用いて処理を行う画像処理装置の制御方法であって、
入力画像を複数の部分領域に領域分割する分割工程と、
前記複数の処理部の個数と前記複数の部分領域の個数である第１の分割数と前記複数の部分領域の個数を前記第１の分割数から第２の分割数に調整した場合の影響とに基づいて、該第２の分割数を決定する決定工程と、
前記入力画像が前記第２の分割数で領域分割されるように、前記第１の分割数の部分領域の一部を調整する調整工程と、
前記複数の処理部により前記第２の分割数の部分領域に対する所定の処理を実行するよう制御する制御工程と、
を含むことを特徴とする画像処理装置の制御方法。
【請求項１２】
コンピュータを、請求項１乃至１０の何れか１項に記載の画像処理装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像を複数の部分領域に分割する技術に関するものである。
【背景技術】
【０００２】
近年、写真に写っている人や物、あるいはその写真のシーンの認識を行う技術開発が進んでいる。その中で、画像を部分領域に分割してそれぞれの領域の特徴量を抽出し、その特徴量を用いて認識を行う手法が存在する。このような手法においては、部分領域に分割した後は、部分領域毎に処理を行うことが多く、その場合は１つの部分領域を処理単位として並列に処理が行える。これらの処理を行う処理系に多数の処理コアが搭載されているときに、各処理コアに部分領域毎の処理を割り当てれば、それだけ効率よく処理を行える。
【０００３】
より効率的に並列処理を行うために、ある処理を複数に分割して処理単位を調整するための技術が提案されている。特許文献１では、ある形式で表現された３次元形状を形状処理システムに読み込む際に、当該システムを実行するＣＰＵの数を検出し、形状オブジェクトをＣＰＵの数に合わせて分割する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第３８４７０２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一般に、分割数が変化すると部分領域の特徴量が変化して結果的に画像認識結果に影響を及ぼす可能性がある。そのため、特許文献１に開示されている技術のようにＣＰＵの数のみで分割数を決定する手法は、画像認識処理においては望ましくない場合がある。
【０００６】
本発明はこのような問題を鑑みてなされたものであり、より効率的な処理を可能とする画像分割を行う技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述の問題点を解決するため、本発明に係る画像処理装置は以下の構成を備える。すなわち、複数の処理部を用いて処理を行う画像処理装置は、入力画像を複数の部分領域に領域分割する分割手段と、前記複数の処理部の個数と前記複数の部分領域の個数である第１の分割数と前記複数の部分領域の個数を前記第１の分割数から第２の分割数に調整した場合の影響とに基づいて、該第２の分割数を決定する決定手段と、前記入力画像が前記第２の分割数で領域分割されるように、前記第１の分割数の部分領域の一部を調整する調整手段と、前記複数の処理部により前記第２の分割数の部分領域に対する所定の処理を実行するよう制御する制御手段と、を有する。
【発明の効果】
【０００８】
本発明によれば、より効率的な処理を可能とする画像分割を行う技術を提供することができる。
【図面の簡単な説明】
【０００９】
【図１】第１実施形態に係る情報処理装置のブロック図である。
【図２】第１実施形態における認識処理を示すフローチャートである。
【図３】入力画像が処理されていく様子を例示的に示す図である。
【図４】統合予定の部分領域ペアの一覧を示す図である。
【図５】第２実施形態における認識処理を示すフローチャートである。
【図６】部分領域の分割及び統合を説明する図である。
【図７】第３実施形態における認識処理を示すフローチャートである。
【図８】辞書番号とクラス数とを対応付けたテーブルを示す図である。
【発明を実施するための形態】
【００１０】
以下に、図面を参照して、この発明の好適な実施の形態を詳しく説明する。なお、以下の実施の形態はあくまで例示であり、本発明の範囲を限定する趣旨のものではない。
【００１１】
（第１実施形態）
本発明に係る画像処理装置の第１実施形態として、複数の処理部（処理コア（ＰＥ））を有するＧＰＵを用いた画像認識処理を行うスマートフォンを例に挙げて以下に説明する。なお、ＧＰＵは、Graphics Processing Unitの略である。
【００１２】
具体的には、ユーザーがスマートフォンを使用して、カメラで撮影した画像に対しリアルタイムで認識処理を行う画像処理方法の処理について説明する。より具体的には、写真を部分領域に分割してそれぞれの領域の特徴量を抽出し、その特徴量を用いて画像認識を行う形態について説明する。特に、分割数を、認識処理を実行する処理系の数と、処理全体に及ぼす影響としての認識処理の認識精度と、に基づいて調整する形態について説明する。
【００１３】
＜前提条件＞
まず、第１実施形態における前提条件について説明する。
【００１４】
認識結果は当該領域のカテゴリの割合を表すものとする。具体的には、生物、自然、物、その他の４カテゴリに分けられるものとし、認識結果としては、例えば「生物：自然：物：その他＝０．８：０．１：０．１：０」といった各カテゴリの尤度で表されるものとする。なお、ユーザーに認識結果を提示するときは、各カテゴリで最も尤度の高いカテゴリを選んで表示するものとする。
【００１５】
認識処理の認識精度には、一般的に用いられるＰＡ（Pixel Accuracy）を用いることとする。なお、ＰＡは、得られた認識結果を正解データと画素単位で比較したときの、認識結果と正解データが一致した割合を示す。
【００１６】
認識処理は、ユーザーのスマートフォンに搭載されているＧＰＵ（Graphics Processing Unit）で行うものとする。ここでは、ＧＰＵに搭載されている処理コア（ＰＥ）の数は”１６”とする。認識処理の入力は画像及び後述する辞書であり、出力は画像中の各領域のカテゴリ尤度マップとなる。
【００１７】
認識処理を実行する処理系の実行可能処理数として、ＧＰＵ上のコア数を用いる。また本実施形態では、処理全体に及ぼす影響として認識処理の認識精度を用いる。すなわち、処理効率の観点から、分割数がＧＰＵのコア数の整数倍に近くなるように、かつ認識精度の観点から、認識精度の悪化の程度が抑制されるように選ぶ。具体的な方法についてはフローチャートの説明の所で述べる。
【００１８】
入力画像の部分領域への分割には、一般的に用いられるｋ−ｍｅａｎｓアルゴリズムを用いるとする。ｋ−ｍｅａｎｓアルゴリズムによるクラスタリングは公知のため、説明を省略する。本実施形態では、ｋ−ｍｅａｎｓを用いて、まず入力画像中の画素からＲＧＢの色情報を特徴量として抽出し、各画素を特徴空間上で５０個のクラスタにクラスタリングする。その後、２次元の画像上にそれぞれのクラスタをマッピングする。すると、例えば特徴空間上では同じクラスタに属している２つの画素が、２次元の画像上では分離されるという場合がある。そのため、２次元の画像上にマッピングしたクラスタに対してラべリング処理を行い、空間的に分離されているクラスタを分割することで、最終的なクラスタすなわち部分領域を得る。このことから、最終的に得られる部分領域の数は、５０以上となることが予想される。
【００１９】
部分領域のカテゴリを認識する時に用いる学習・認識処理には、一般的に用いられるＳＶＭ（Support Vector Machine）を用いるとする。本学習・識別手法は公知のため、説明を省略する。また、認識時に用いられるパラメータ（以下、辞書とする）は、学習時の入力画像の分割数に依存すると考えられるため、一般に学習時の分割数に近いほど、認識精度が良いことが期待される。本実施形態では、学習時の分割数は”５０”とする。
【００２０】
部分領域を認識するためにＳＶＭに入力される特徴量として、部分領域内の画素の、色の分布のヒストグラムを用いるとする。具体的には、領域内の画素のＲＧＢそれぞれの輝度（０〜２５５）を、均等に４段階に分けて（０〜６３、６４〜１２７、１２８〜１９１、１９２〜２５５）ヒストグラムを作成する。すなわち、ＲＧＢそれぞれ４次元、計１２次元の特徴量となる。ヒストグラムは値が０〜１となるように正規化を行うものとする。
【００２１】
＜装置構成＞
図１は、第１実施形態に係る情報処理装置のブロック図である。メモリ１０１は、各処理で必要となるデータを記憶する。例えば、認識処理を実現するプログラムおよび辞書が格納されている。カメラ１０２は、２次元的な画像を撮影するカメラであり、撮影画像をメモリ１０１に出力する。
【００２２】
入力デバイス１０３は、ユーザーからの様々な入力を受け付ける。例えば、ユーザーからカメラ１０２で写真を撮影するコマンドの入力を受け取る。ディスプレイ１０４は、入力された画像や認識処理結果を表示する。
【００２３】
ＣＰＵ１０５は、メモリ１０１に格納されているプログラムを実行し、様々な処理を実現する機能部である。また、各デバイスをコントロールする機能を提供する。例えば、撮影画像を分割する部分領域分割処理を行ったり、メモリ１０１に保存されている画像をディスプレイ１０４に転送したりする。
【００２４】
ＧＰＵ１０６は、ＣＰＵ１０５から指示された処理を並列に実行する。例えば、部分領域の特徴生成処理や、部分領域の認識処理を行う。また、ＧＰＵ１０６は複数のＰＥ（処理コア）１０７を備えており、各処理コアに処理が分配され、処理が実行される。各処理のコード（カーネル）は実行前にメモリ１０１からＧＰＵ１０６にロードされて実行される。
【００２５】
なお、本実施形態における画像処理装置の構成は、上述の構成に限定されない。例えば、ＣＰＵ１０５が各機能部をコントロールする機能を有するとしたが、各デバイスをコントロールするための専用の処理プロセッサを用いる構成でもよい。また、ＧＰＵの代わりにＤＳＰ等他の並列処理アクセラレータが搭載されていても良い。
【００２６】
＜装置の動作＞
図２は、第１実施形態における認識処理を示すフローチャートである。以下の処理は、ＣＰＵ１０５が所定の制御プログラムを実行することにより実現される。
【００２７】
ステップＳ２０１では、ＣＰＵ１０５は、ＧＰＵに搭載された処理コアの数を取得し、メモリ１０１に記録する。処理コアの数は、例えばＯｐｅｎＣＬのＡＰＩの場合はｃｌＧｅｔＤｅｖｉｃｅＩｎｆｏを使用して求めることができる。ここでは、処理コア数＝１６という値がメモリ１０１に保存される。
【００２８】
ステップＳ２０２では、ＣＰＵ１０５は、前提条件で提示したｋ−ｍｅａｎｓアルゴリズムを用いて入力画像を部分領域に分割する。ここでは、入力画像は、入力デバイス１０３によって入力された写真撮影コマンドに従って撮影された画像である。
【００２９】
すなわち、ｋ−ｍｅａｎｓのクラス数であるｋの値に、前提条件で提示した”５０”という値を設定してクラスタリングを行う。その後、前提条件で示したように、２次元の画像上にマッピングした後、ラべリング処理を行う。すなわち、各部分領域に対して番号が振られる。
【００３０】
図３は、入力画像が処理されていく様子を例示的に示す図である。図３（ａ）は分割前の入力画像の例、図３（ｂ）は分割後の入力画像の例をそれぞれ示している。部分領域の番号は入力画像の各画素が保持しているものとする。また、最終的に得られた部分領域の数が５４個であるとする。すなわち、図３（ｂ）に示す各部分領域には１〜５４の何れかの番号が振られている。
【００３１】
ステップＳ２０３では、ＣＰＵ１０５は、前提条件で提示した１２次元の特徴量を、部分領域毎に導出する。すなわち、部分領域内の各画素のＲＧＢ値を部分領域毎の１２次元の各ビンに追加し、最後に正規化処理を行う。
【００３２】
ステップＳ２０４では、ＣＰＵ１０５は、メモリ１０１に保存された処理コア数（ｐとする）とＳ２０２で分割された分割数（ｙとする）とを用いて、新しい分割数（ｘとする）を決定する。ここでは、以下の条件に従って新しい分割数を決定する。
【００３３】
ｘ＝ｍａｘ（ｎ×ｐ）（ｎ：自然数）  かつ  ｘ≦ｙ
ここで、ｍａｘ（Ｘ）は、Ｘの取り得る値の中での最大値を意味する。
【００３４】
このように決定することで、辞書作成時に使用された分割数（ここでは”５０”）に近く、かつ、分割数を調整しない場合に比べて複数の処理コアを効率良く使用して処理することが可能となる。すなわち、同程度の精度を保ちつつ処理速度を向上可能な分割数にすることができる。ここでは、ｐ＝１６、ｙ＝５４であるから、ｘ＝４８となる。
【００３５】
ステップＳ２０５では、ＣＰＵ１０５は、現在の分割数からＳ２０４で決定された新しい分割数にするために必要な調整処理である部分領域の統合処理において、どの部分領域を統合するかを決定する。すなわち、現在の分割数”５４”から新しい分割数”４８”にするためには、６個の部分領域（一部の部分領域）を削減する必要があり、その６個を選ぶ処理を行う。ここでは、隣接しかつ特徴量が類似する部分領域のペアを近い順から６個選ぶとする。
【００３６】
具体的には、まず部分領域の隣接部分領域をリストアップする。リストアップの方法としては例えば、当該部分領域を上下左右に１画素ずらし、画素毎に部分領域の番号の変化の有無を調べ、当該部分領域の番号以外の番号が出現した場合はその番号と隣接しているとすることができる。その後、Ｓ２０３で抽出された１２次元の特徴空間上で、画像上で隣接している２つの部分領域のユークリッド距離を計算し、ユークリッド距離が短いものから６個選び、その部分領域の番号のペアをメモリ１０１に記録する。図４は、このようにして決定された統合予定の６個の部分領域ペアの一覧を示す図である。
【００３７】
ステップＳ２０６では、ＣＰＵ１０５は、Ｓ２０５で決定された部分領域ペアを統合する。ここでは、２つの部分領域中の各画素に登録されている部分領域の番号を、若い方の番号で更新する。例えば、図４より、部分領域番号”４”と”８”がペアであった場合は、部分領域”８”に含まれる各画素の部分領域の番号を”４”に書き換える。図３（ｃ）は統合後の例を示している。この段階で、入力画像は新しい分割数”４８”で分割された状態になる。
【００３８】
ステップＳ２０７では、ＣＰＵ１０５は、４８個の部分領域の認識処理を１６個の処理コアに実行させる。すなわち、各処理コアは、前提条件で提示したＳＶＭと、メモリ１０１にあるＳＶＭの辞書のパラメータを用いて、特徴から推測されるカテゴリを出力する。ここでは各処理コアに分割により得られた複数の部分領域を等分に分配する。よって、各処理コアは３（＝４８／１６）個の部分領域の認識処理を行う。
【００３９】
出力結果であるカテゴリ尤度マップは、一番値が高いカテゴリをその部分領域のカテゴリとして、例えばディスプレイ１０４を通して出力される。図３（ｄ）は出力された認識結果を示している。
【００４０】
ステップＳ２０８では、ＣＰＵ１０５は、全ての入力画像に対する評価が完了したかどうかを判定する。すなわち、まだ認識されていない入力画像が残っていると判定されれば、Ｓ２０２に移行する。全ての入力画像で認識が完了したと判定されれば、処理を終了する。
【００４１】
なお、認識処理を実行する処理系の実行可能処理数として、ＧＰＵ上のコア数を用いるとしたが、例えばスレッド数やその時点での実行可能最大処理数等を用いても良い。また処理系としてＧＰＵ以外にも、一般的なマルチコアＣＰＵやＳＩＭＤ等並列処理可能な処理系を選択することももちろん可能である。
【００４２】
また、上述の説明では、分割数がＧＰＵの処理コア数の整数倍になるようにしたが、例えば一定のしきい値を設けて、ある範囲に収まっていれば多少のずれが生じてもよい、としてもよい。例えば、しきい値を処理コア数（ｐ）の８０％とし、分割数調整前の分割数をｙとしたときに、ｙｍｏｄｐ＜０．８ｐとなる場合に分割数を調整し、それ以外の場合には調整しないといったことも有効である。ここで、ＹｍｏｄＸは、ＹをＸで除算した時の剰余である。このようにすることで、認識精度と処理速度のバランスを取って分割数を選択することが可能になる。
【００４３】
加えて、上述の説明では、認識精度は辞書作成時の分割数に近い分割数ほど良くなるとしていたが、辞書を使用しないようなアルゴリズムであっても、適切な分割数を予め指定しておき、その分割数に近い分割数を選ぶようにすることも可能である。
【００４４】
さらに、要求処理時間を考慮して分割数を決めることも可能である。例えば、仮に既定の分割数で認識処理を行った場合に、分割数が多すぎて要求処理時間を満たさないと判明した場合は、要求処理時間を満たす範囲で処理可能な最大の分割数とすることができる。例えば、画素単位の認識処理を行おうとしたとき要求処理時間を満たさなかった場合は、要求処理時間を満たす分割数となるまで画素を統合して減らすといった処理も考えられる。
【００４５】
また、上述の説明では、画像を部分領域に分割する方法としてｋ−ｍｅａｎｓアルゴリズムを用いたが、他のクラスタリング手法も使用可能である。例えば、Ｍｅａｎ−ｓｈｉｆｔアルゴリズムを使用することも可能である。また、あらかじめ画像の分割数を指定できる分割アルゴリズムを使用することにより、入力画像分割の段階で処理系に最適な分割数に画像を分割することが可能となり、分割数設定ステップから隣接部分領域統合ステップまでをスキップすることもできる。
【００４６】
加えて、上述の説明では、部分領域の特徴抽出処理を、統合される部分領域候補の決定処理の前に行ったが、決定処理の後で行っても良い。この場合、部分領域候補の決定には、特徴抽出処理で抽出する特徴とは異なる特徴を用いれば良い。例えば、色の分のヒストグラムを用いる場合でも、より計算量を少なくするためビンの数を半分に減らした６次元の特徴を使用するといったことが考えられる。これは特に、部分領域の特徴抽出処理が重く処理に時間がかかる時に有効である。
【００４７】
さらに、上述の説明では、「分割数」について考慮してきたが、例えば画像をほぼ同じ大きさで分割する分割アルゴリズムを用いる場合は、「部分領域の面積」を分割数と対応付けて考えることもできる。例えば、１００×１００の画像に対して部分領域の面積を１０×１０としたときは、分割数が１００に相当する。
【００４８】
以上説明したとおり第１実施形態によれば、分割数を、認識処理を実行する処理系の実行可能処理数と、処理全体に及ぼす影響として認識処理の認識精度と、に基づいて決定する。この構成により、認識精度が低下する可能性を低減しつつ、複数の処理コアを効率的に使用可能とする分割数に画像を分割することができる。
【００４９】
なお、上述の説明では画像認識処理を例として説明したが、部分領域の特徴を利用する他の処理にも適用が可能である。例えば、画像の高画質化処理や主要被写体の検出処理など、様々な処理への適用が考えられる。
【００５０】
（第２実施形態）
第２実施形態では、認識処理を実行する処理系の実行可能処理数と、分割数を調整した場合に生じる処理時間の変化と、に基づいて分割数を調整する形態について説明する。なお、以降の説明では、第１実施形態で説明した処理と同様の処理については説明を省略し、第１実施形態で説明した処理と異なる処理についてのみ説明する。
【００５１】
＜前提条件＞
まず、第２実施形態における前提条件について説明する。以下に記述していない他の前提条件は、第１実施形態と同様である。
【００５２】
認識処理を実行する処理系の実行可能処理数として、第１実施形態と同様、ＧＰＵ上のコア数を用いる。また本実施形態では、処理全体に及ぼす影響として、分割数を調整した場合に生じる処理時間の増加分と調整しなかった場合に生じる処理時間の増加分を用いる。すなわち、処理効率の観点から分割数がＧＰＵのコア数の整数倍になるように、かつ、処理時間の観点から全体の処理時間が短くなるように選ぶ。
【００５３】
部分領域を生成するために入力する画像として、オリジナルの入力画像の他に、入力画像にガウシアンフィルタを適用したもの、および入力画像にシャープネスフィルタを適用したものも使用する。すなわち、３枚の画像それぞれで部分領域を生成する。なお、部分領域に分割する際の条件は、どの画像に対しても同じであるとする。また、各部分領域の特徴抽出処理や認識処理も、どの画像由来の部分領域に対しても同じ条件で行うものとする。
【００５４】
分割数調整にかかる平均処理時間が予め計測されており、１組の部分領域を統合するために必要な平均処理時間が０．１（ミリ秒／１ＧＨｚ・組）とする。なお、本実施形態では分割数調整はＣＰＵで行い、ＣＰＵのクロック数は１ＧＨｚとする。
【００５５】
認識処理にかかる平均処理時間が予め計測されており、１つの部分領域を認識するために必要な平均処理時間が１（ミリ秒／１ＧＨｚ・個）とする。このとき、ＧＰＵコアが１６個であるため、部分領域が１６個以内であれば、並列処理で一度に処理を行えることになる。すなわち、部分領域が１６個以内であれば全て同一の処理時間で処理を行うことが可能である。なお、認識処理を行うＧＰＵのクロック数は１ＧＨｚとする。
【００５６】
＜装置の動作＞
図５は、第２実施形態における認識処理を示すフローチャートである。なお、ステップＳ５０１及びＳ５１３は、第１実施形態におけるＳ２０１及びＳ２０８と同様であるため説明は省略する。
【００５７】
ステップＳ５０２では、ＣＰＵ１０５は、入力画像に対してガウシアンフィルタおよびシャープネスフィルタを適用し、適用結果得られる画像２枚をそれぞれ出力する。
【００５８】
ステップＳ５０３では、ＣＰＵ１０５は、オリジナルの入力画像およびステップＳ５０２で出力された２枚の画像に対し、第１実施形態におけるＳ２０２と同様にして部分領域に分割する。ここでは、最終的に得られた部分領域の数は、オリジナルの入力画像では”５４”、ガウシアンフィルタ適用画像では”５１”、シャープネスフィルタ適用画像では”５８”であるとする。ステップＳ５０４では、ＣＰＵ１０５は、Ｓ５０３で得られたそれぞれの領域から、第１実施形態におけるＳ２０３と同様にして特徴を抽出する。
【００５９】
ステップＳ５０５では、ＣＰＵ１０５は、Ｓ５０３で分割されたすべての部分領域の数を合算する。すなわち、現在得られている部分領域の数がそれぞれ５４，５１，５８であるから、これを合算すると１６３となり、この値がメモリ１０１に記録される。
【００６０】
ステップＳ５０６では、ＣＰＵ１０５は、第１実施形態におけるＳ２０４と同様にして、分割数の候補を決定する。処理コア数ｐ＝１６、分割数ｙ＝１６３であるから、新しい分割数ｘ＝１６０となる。第１実施形態ではこの値をそのまま使用して分割数を調整したが、第２実施形態では処理負荷（特に処理時間）の比較を行い、本ステップで得られた分割数を用いた場合の処理時間が短くなる場合に限り、分割数を調整する。
【００６１】
ステップＳ５０７では、ＣＰＵ１０５は、分割数を調整した場合に生じる処理時間の増加分（以下、調整時処理時間）と調整しなかった場合に生じる処理時間の増加分（以下、未調整時処理時間）をそれぞれ計算（予測）する。
【００６２】
まず、調整時処理時間について、今回は１６３個から１６０個へ、３個の部分領域の削減、すなわち３組の部分領域を統合する必要がある。前提条件に基づいて調整時処理時間ｔ１を求めると、
ｔ１＝０．１（ミリ秒／１ＧＨｚ・組）×１（ＧＨｚ）×３（組）＝０．３（ｍｓ）
となる。一方、未調整時処理時間について、今回は３個分の処理を、ＧＰＵ上で余計に処理する必要がある。前提条件に基づいて未調整時処理時間ｔ２を求めると、
ｔ２＝１（ミリ秒／１ＧＨｚ・個）×１（ＧＨｚ）×ｃｅｉｌ（３（個）／１６）＝１（ｍｓ）
となる。なお、ｃｅｉｌ（Ｘ）は、Ｘの要素を正の方向の最も近い整数に丸める処理（切り上げ処理）を表す。
【００６３】
ステップＳ５０８では、ＣＰＵ１０５は、調整時処理時間と未調整時処理時間との大小の比較を行う。調整時処理時間＜未調整時処理時間と判定されれば、それは分割数を調整した方が全体の処理時間が少なくなることを意味しており、ステップＳ５０９に移行する。一方、調整時処理時間＞未調整時処理時間と判定されれば、それは分割数を調整しない方が全体の処理時間が少なくなることを意味しており、ステップＳ５１２に移行する。ここでは、ｔ１＜ｔ２でありステップＳ５０９に移行する。
【００６４】
ステップＳ５０９では、ＣＰＵ１０５は、現在の分割数からＳ５０６で決定された新しい分割数にするために必要な部分領域の統合処理において、どの部分領域を統合するかを決定する。すなわち、現在の分割数”１６３”から新しい分割数”１６０”にするために削減・統合する３個の部分領域を選ぶ処理を行う。ここでは、部分領域の大きさを小さい順から３個選び、その部分領域の番号をメモリ１０１に記録する。
【００６５】
ステップＳ５１０では、ＣＰＵ１０５は、Ｓ５０９で選択された部分領域を、周囲を取り囲む部分領域の数で分割し、それぞれの部分領域に吸収・統合させる。周囲を取り囲む部分領域の特定には、第１実施形態におけるＳ２０５で説明した隣接部分領域リストアップの手法を流用することができる。隣接している個数がわかれば、それをクラスタ数として例えばｋ−ｍｅａｎｓアルゴリズムを用いて当該部分領域を分割する。
【００６６】
図６は、部分領域の分割及び統合を説明する図である。図６（ａ）は分割前、図６（ｂ）は分割後の例を示している。ここでもし、分割後にどの隣接部分領域とも隣接していない部分領域が飛び地のように生成された場合は、第１実施形態と同様にして、特徴量が最も近い部分領域へ統合させる。
【００６７】
ステップＳ５１１では、ＣＰＵ１０５は、Ｓ５１０で分割された各領域を、隣接する最も特徴が近い部分領域へ統合させる。すなわち、第１実施形態におけるＳ２０６と同様にして、部分領域の番号を更新する。図６（ｃ）は更新された部分領域の例を示している。
【００６８】
ステップＳ５１２では、ＣＰＵ１０５は、１６０個の部分領域の認識処理を１６個の処理コアに実行させる。すなわち、各処理コアは、前提条件で提示したＳＶＭと、メモリ１０１にあるＳＶＭの辞書のパラメータを用いて、特徴から推測されるカテゴリを出力する。よって、各処理コアは１０（＝１６０／１６）個の部分領域の認識処理を行う。１６０個の部分領域の認識結果を画素毎に集計し、２つないし３つの認識結果（カテゴリ尤度）を有する画素に関しては、そのカテゴリ尤度を平均したものをその画素のカテゴリ尤度とする。
【００６９】
なお上述の説明においては処理全体に及ぼす処理負荷として処理時間を考慮する形態について説明したが、それ以外の指標を用いても構わない。例えば、分割数調整に要する消費電力と、認識処理の消費電力と、を事前に計算しておき、全体として最も消費電力が低くなるように分割数を決定しても良い。また、データ転送時間を指標として用いてもよい。
【００７０】
以上説明したとおり第２実施形態によれば、分割数を、認識処理を実行する処理系の実行可能処理数と、処理全体に及ぼす影響として分割数を調整した場合に生じる処理時間の変化と、に基づいて決定する。この構成により、処理時間が増加する可能性を低減しつつ、複数の処理コアを効率的に使用可能とする分割数に画像を分割することができる。
【００７１】
（第３実施形態）
第３実施形態では、認識処理を実行する処理系の実行可能処理数と、分割数を調整した場合に生じる処理時間の変化と、に基づいて分割数を調整する他の形態について説明する。なお、以降の説明では、第１及び第２実施形態で説明した処理と同様の処理については説明を省略し、第１及び第２実施形態で説明した処理と異なる処理についてのみ説明する。
【００７２】
＜前提条件＞
まず、第３実施形態における前提条件について説明する。以下に記述していない他の前提条件は、第１及び第２実施形態と同様である。
【００７３】
予め分割数ごとに辞書を作成しておくとする。ここでは特に、ｋ−ｍｅａｎｓのクラス数を２５，５０，７５，・・・と２５きざみで分割した部分領域で学習した辞書を予め保持しているとする。
【００７４】
図８は、辞書番号とクラス数とを対応付けたテーブルを示す図である。ここでは、辞書番号として、クラス数”２５”は辞書番号”１”、クラス数”５０”は辞書番号”２”・・・としている。
【００７５】
認識処理を実行する処理系の実行可能処理数として、第１実施形態と同様、ＧＰＵ上のコア数を用いる。また本実施形態では、処理全体に及ぼす影響として分割数を調整した場合に生じる処理時間の増加分と調整しなかった場合に生じる処理時間の増加分を用いる。すなわち、処理効率の観点から、分割数がＧＰＵのコア数の整数倍になるように、かつ処理時間の観点から、全体の処理時間が短くなるように選ぶ。
【００７６】
認識処理の内容を、分割数を調整した場合と調整していない場合で変化させる。具体的には、分割数を調整しない場合は、同じクラス数で学習した辞書を用いて認識処理を行う。そして、分割数を調整した場合は、上述の辞書による認識結果に加え、それよりもクラス数が１レベル小さい辞書による認識結果を用い、両結果を統合する処理を行う。すなわち、分割領域を統合する処理が入ることで、統合前と比較してクラス数が減少している可能性があるため、クラス数が少ない辞書も用いて結果を出力させることで、認識精度の向上を目指す。例えば、クラス数”５０”で分割し、最終的に分割数が”４８”となった場合は、クラス数”５０”で分割した辞書（辞書番号”１”の辞書）による認識処理に加え、クラス数”２５”で分割した辞書（辞書番号”２”の辞書）による認識処理も行う。両結果は案分して統合を行う。すなわち、上記の場合、
クラス数”２５”の認識結果：クラス数”５０”の認識結果
＝（５０−４８）：（４８−２５）＝２：２３
の重みを付けて結果を統合する。分割数を調整した場合は２種類の辞書で認識処理を行う必要があるため、１種類の辞書で認識処理を行う場合（第２実施形態と同様、１（ミリ秒／１ＧＨｚ・個）とする）と比較して処理時間が延びる。ここでは、２つの辞書を用いて１つの部分領域を認識するのに必要な処理時間は１．１（ミリ秒／１ＧＨｚ・個）とする。さらに、ＧＰＵコアが１６個であるため、部分領域が１６個以内であれば、並列処理で一度に処理を行える。すなわち、全て同一の処理時間で処理を行える。なお、認識処理を行うＧＰＵのクロック数は第２実施形態と同様１ＧＨｚとする。
【００７７】
分割数の調整を行う処理を、第２実施形態と異なりＧＰＵで行うものとする。処理時間は、０．１（ミリ秒／１ＧＨｚ・組）とする。このとき、ＧＰＵコアが１６個であるため、部分領域の組が１６組以内であれば、並列処理で一度に処理を行えることになる。すなわち、全て同一の処理時間で処理を行うことが可能である。
【００７８】
＜装置の動作＞
図７は、第３実施形態における認識処理を示すフローチャートである。ステップＳ７０１〜Ｓ７０４、Ｓ７０６〜Ｓ７０７、Ｓ７１１は、第１実施形態におけるＳ２０１〜２０４、Ｓ２０５〜Ｓ２０６、Ｓ２０８と同様であるため説明は省略する。なお、ここでは、Ｓ７０２で最終的に得られる部分領域の数は”５４”、Ｓ７０４で得られる分割数は”４８”であるとする。
【００７９】
ステップＳ７０５では、ＣＰＵ１０５は、分割数を調整した場合の処理時間（以下、調整時処理時間）と調整しなかった場合の処理時間（以下、未調整時処理時間）をそれぞれ計算し、比較を行う。
【００８０】
比較の結果、調整時処理時間＜未調整時処理時間と判定されれば、それは分割数を調整した方が全体の処理時間が少なくなることを意味しており、ステップＳ７０６に移行する。一方、調整時処理時間＞未調整時処理時間と判定されれば、それは分割数を調整しない方が全体の処理時間が少なくなることを意味しており、ステップＳ７０８に移行する。
【００８１】
具体的に説明すると、分割数を調整した場合に生じる処理時間の増加分については、まず分割数を調整する処理については、今回は５４個から４８個へ、６個の部分領域の削減、すなわち６組の部分領域を統合する必要がある。前提条件に基づいて分割数調整に要する処理時間の増加分ｔ１１を求めると、以下のようになる。
【００８２】
ｔ１１＝０．１（ミリ秒／１ＧＨｚ・組）×１（ＧＨｚ）×ｃｅｉｌ（６（組）／１６）＝０．１（ｍｓ）
さらに本実施形態では、分割数を調整した場合は２つの辞書を用いて認識処理を行う。前提条件に基づいて認識処理時間の増加分ｔ１２を求めると、以下のようになる。
【００８３】
ｔ１２＝（２種類の辞書での認識処理時間−１種類の辞書での認識処理時間）＝（１．１−１）（ミリ秒／１ＧＨｚ・個）×１（ＧＨｚ）×ｃｅｉｌ（４８（個）／１６）＝０．３（ミリ秒）
よって、合計の調整時処理時間は、以下のようになる。
【００８４】
ｔ１＝ｔ１１＋ｔ１２＝０．１（ｍｓ）＋０．３（ｍｓ）＝０．４（ｍｓ）
一方、分割数を調整しなかった場合に生じる処理時間の増加分について、今回は６個分の処理を、ＧＰＵ上で余計に処理する必要がある。前提条件に基づいて処理時間の増加分ｔ２を求めると、以下のようになる。
【００８５】
ｔ２＝１（ミリ秒／１ＧＨｚ・個）×１（ＧＨｚ）×ｃｅｉｌ（６（個）／１６）＝１（ｍｓ）
ｔ１＜ｔ２となり、これは分割数を調整した方が全体の処理時間が少なくなることを表している。よって、この場合はステップＳ７０６に移行する。また、分割数の調整を行うというフラグを立て、メモリ１０１に記録する。
【００８６】
ステップＳ７０８では、ＣＰＵ１０５は、分割数調整処理が行われたかどうかを判定する。すなわち、メモリ１０１に分割数の調整を行うというフラグが立てられているかをチェックし、フラグが立っていないと判定されれば、ステップＳ７０９に移行する。フラグが立っていると判定されれば、ステップＳ７１０に移行する。
【００８７】
ステップＳ７０９は、１種類の辞書（クラス数”５０”で分割した辞書。すなわち辞書番号”１”の辞書）で認識を行う処理であり、第２実施形態におけるＳ５１２と同様である。
【００８８】
ステップＳ７１０では、２種類の辞書で認識処理を行う。最終的に分割数が”４８”となったため、クラス数”５０”で分割した辞書（辞書番号”２”の辞書）とクラス数２５で分割した辞書（辞書番号”１”の辞書）を用いてそれぞれの認識結果を案分して統合を行う。
【００８９】
すなわち、上記の場合、「クラス数”２５”の認識結果：クラス数”５０”の認識結果＝２：２３」の重みを付けて結果を統合する。例えば、ある部分領域において、クラス数”２５”の結果が「生物：自然：物：その他＝０．７：０．２：０．１：０」であり、クラス数”５０”の結果が「生物：自然：物：その他＝０．４：０．４：０．２：０」となったとする。その場合は、それぞれの結果を案分して統合すると「生物：自然：物：その他＝０．４２４：０．３８４：０．１９２：０」となる。
【００９０】
以上説明したとおり第３実施形態によれば、分割数を、認識処理を実行する処理系の実行可能処理数と、処理全体に及ぼす影響として分割数を調整した場合に生じる処理時間の変化と、に基づいて決定する。この構成により、より精度の高い画像認識を効率的に行うことが可能となる。
【００９１】
（第４実施形態）
第４実施形態では、第２実施形態の変形例であり、分割数を、さらに処理全体に及ぼす影響として認識処理の精度劣化に更に基づいて決定する形態について説明する。なお、以降の説明では、第２実施形態で説明した処理と同様の処理については説明を省略し、第２実施形態と異なる処理についてのみ説明する。
【００９２】
本実施形態では、まず分割数調整によって劣化する精度を精度劣化コストｅとして定義する。精度劣化コストｅの次元は処理時間と同じ（ｍｓ）とし、精度劣化コストｅは分割数調整によって統合される部分領域の組の数ｍに比例すると仮定する。
【００９３】
ｅ＝ａ（ｍｓ／個）×ｍ（個）＝ａｍ（ｍｓ）
本実施形態では、分割数を調整した結果得られる精度が許容範囲外となるときの精度劣化コストｅが、分割数を調整しなかった場合の処理時間と同じになるように、比例定数ａを予め選択しておく。例えば、平均してｍ＝１０のときに要求される精度を満たせなくなり、その時の分割数を調整しなかった場合の平均処理時間が３（ｍｓ）であることが統計的にわかっている場合は、以下のようになる。
【００９４】
ａｍ＝ａ×１０＝３    よって、ａ＝０．３（ｍｓ／個）
そして、トータルコストｆを定義し、トータルコストｆに基づいて最終的な分割数の調整を行う。トータルコストｆの次元は処理時間と同じ（ｍｓ）とする。
【００９５】
ｆ＝ｔ（処理時間の増加分）（ｍｓ）＋ｅ（ｍｓ）
このトータルコストｆが大きいほど、処理全体に与える影響が大きいことを表すとする。
【００９６】
上記式を第２実施形態に当てはめると、分割数を調整する場合は３組の部分領域を統合するとしたので、精度劣化コストｅは、以下のようになる。
【００９７】
ｅ＝０．３×３＝０．９（ｍｓ）
一方、第２実施形態より、処理時間の増加分は０．３（ｍｓ）であるから、トータルコストｆは、以下のようになる。
【００９８】
ｆ１＝０．９＋０．３＝１．２（ｍｓ）
次に、分割数を調整しない場合は、精度劣化コストｅは０（ｍｓ）となる。一方、第２実施形態より、処理時間の増加分は１（ｍｓ）であるから、トータルコストｆは、以下のようになる。
【００９９】
ｆ２＝１＋０＝１（ｍｓ）
よって、ｆ１＞ｆ２となるため、この場合は分割数を調整せずに（すなわち分割数を”１６３”として）処理を進める。
【０１００】
なお、上述の精度劣化コストやトータルコストの式を定義したが、これは一例であり、他の定義があってもよい。例えば、トータルコストに、データ転送コストや消費電力などの項を更に追加して考慮することも可能である。
【０１０１】
以上説明したとおり第４実施形態によれば、分割数を、認識処理を実行する処理系の実行可能処理数と、処理全体に及ぼす影響として分割数を調整した場合に生じる処理時間の変化と、に基づいて決定する。この構成により、処理時間と精度劣化のバランスを考慮した効率のよい認識処理が可能となる分割数を決定することが可能となる。
【０１０２】
（その他の実施例）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【０１０３】
１０１  メモリ；  １０２  カメラ；  １０３  入力デバイス；  １０４  ディスプレイ；  １０５  ＣＰＵ；  １０６  ＧＰＵ；  １０７  処理コア
【図１】
2018128930.tif 000003
【図２】
2018128930.tif 000004
【図３】
2018128930.tif 000005
【図４】
2018128930.tif 000006
【図５】
2018128930.tif 000007
【図６】
2018128930.tif 000008
【図７】
2018128930.tif 000009
【図８】
2018128930.tif 000010