(57)【要約】【課題】ＳＩＭＤ命令を処理可能なプロセッサを用いて、効率的に畳み込み演算を行う処理方法を提供する。【解決手段】ＳＩＭＤ用に利用可能な複数のレジスターと、ＳＩＭＤ処理するプロセッサと、を備える情報処理装置において、カーネルサイズから使用するレジスターのサイズを選択し、選択したサイズのレジスターの数、カーネルサイズから、カーネルの分割量を決定し、決定したカーネルの分割量で分割したカーネル毎に、レジスターに格納し、畳み込み演算を並列処理する。【選択図】図１
2019008421.tif 000002
【特許請求の範囲】
【請求項１】
ＳＩＭＤ用に利用可能な複数のレジスターと、
ＳＩＭＤ処理するプロセッサと、を備える情報処理装置を制御する方法であって、
（ａ）カーネルサイズから使用する前記レジスターのサイズを選択するステップと、
（ｂ）選択したサイズのレジスターの数、前記カーネルサイズから、カーネルの分割量を決定するステップと、
（ｃ）決定した前記カーネルの分割量で分割したカーネル毎に、前記レジスターに格納し、畳み込み演算を並列処理するステップと、
を含む、処理方法。
【請求項２】
前記レジスターに１度に格納するカーネルの行数をｎとしたとき、
前記ステップ（ｂ）では、下記式を満たす最大の値に、前記ｎを設定する、請求項１に記載の処理方法。
ｋ−（ｘ＋ｊ）≧（ｂ＋１）ｎ
ここでｊは、ｊ＝（ｗ＋１−ｙ）／ｂ、
ｂ＝ｗ／ｑ、
ｊ、ｂは小数点以下を切り上げた整数であり、
ｗ：カーネルサイズ
ｋ：利用可能な前記レジスターの個数
ｑ：１つの前記レジスターに格納するデータ数
ｘ：畳み込み演算に必要な前記レジスターの個数
ｙ：スキップする画素数である。
【請求項３】
前記カーネルサイズが１１×１１のときに、
前記ステップ（ｂ）では、前記カーネルを２行ずつの分割に決定し、
前記ステップ（ｃ）では、前記カーネルを２行分毎に前記レジスターに格納し、格納した後、２行毎に畳み込み演算を実行する、請求項１に記載の処理方法。
【請求項４】
前記カーネルサイズが１１×１１のときに、
前記ステップ（ａ）では、１２８ビットのレジスターを選択し、
前記ステップ（ｃ）では、入力画素４画素分を１２８ビットのレジスターに格納し、４画素ずつの畳み込み演算を並列処理する、請求項３に記載の処理方法。
【請求項５】
前記カーネルサイズが５×５以下のときに、
前記ステップ（ｂ）では、前記カーネルを分割しないことを決定し、
前記ステップ（ｃ）では、前記カーネルを１度に前記レジスターに格納し、格納した後に畳み込み演算を実行する、請求項１、３および４のいずれか一項に記載の処理方法。
【請求項６】
前記カーネルサイズが５×５以下のときに、
前記ステップ（ａ）では、６４ビットのレジスターを選択し、
前記ステップ（ｃ）では、入力画素２画素分を６４ビットの前記レジスターに格納し、２画素ずつの畳み込み演算を並列処理する、請求項５に記載の処理方法。
【請求項７】
前記複数のレジスターのうち、カーネルを格納するレジスターを固定しておき、入力画素用のレジスターに格納するデータをスライドさせながら、中間バッファに格納した結果データを更新する、請求項１から請求項６のいずれか一項に記載の処理方法。
【請求項８】
ＳＩＭＤ用に利用可能な複数のレジスターと、
ＳＩＭＤ処理するプロセッサと、を備える情報処理装置を制御するプログラムであって、
（ａ）カーネルサイズから使用する前記レジスターのサイズを選択するステップと、
（ｂ）選択したサイズのレジスターの数、前記カーネルサイズから、カーネルの分割量を決定するステップと、
（ｃ）決定した前記カーネルの分割量で分割したカーネル毎に、前記レジスターに格納し、畳み込み演算を並列処理するステップと、
を含む、方法を実行するためのプログラム。
【請求項９】
前記レジスターに１度に格納するカーネルの行数をｎとしたとき、
前記ステップ（ｂ）では、下記式を満たす最大の値に、前記ｎを設定する、請求項８に記載のプログラム。
ｋ−（ｘ＋ｊ）≧（ｂ＋１）ｎ
ここでｊは、ｊ＝（ｗ＋１−ｙ）／ｂ、
ｂ＝ｗ／ｑ、
ｊ、ｂは小数点以下を切り上げた整数であり、
ｗ：カーネルサイズ
ｋ：利用可能な前記レジスターの個数
ｑ：１つの前記レジスターに格納するデータ数
ｘ：畳み込み演算に必要な前記レジスターの個数
ｙ：スキップする画素数である。
【請求項１０】
前記カーネルサイズが１１×１１のときに、
前記ステップ（ｂ）では、前記カーネルを２行ずつの分割に決定し、
前記ステップ（ｃ）では、前記カーネルを２行分毎に前記レジスターに格納し、格納した後、２行毎に畳み込み演算を実行する、請求項８に記載のプログラム。
【請求項１１】
前記カーネルサイズが１１×１１のときに、
前記ステップ（ａ）では、１２８ビットのレジスターを選択し、
前記ステップ（ｃ）では、入力画素４画素分を１２８ビットのレジスターに格納し、４画素ずつの畳み込み演算を並列処理する、請求項１０に記載のプログラム。
【請求項１２】
前記カーネルサイズが５×５以下のときに、
前記ステップ（ｂ）では、前記カーネルを分割しないことを決定し、
前記ステップ（ｃ）では、前記カーネルを１度に前記レジスターに格納し、格納した後に畳み込み演算を実行する、請求項８、１０および１１のいずれか一項に記載のプログラム。
【請求項１３】
前記カーネルサイズが５×５以下のときに、
前記ステップ（ａ）では、６４ビットのレジスターを選択し、
前記ステップ（ｃ）では、入力画素２画素分を６４ビットの前記レジスターに格納し、２画素ずつの畳み込み演算を並列処理する、請求項１２に記載のプログラム。
【請求項１４】
前記複数のレジスターのうち、カーネルを格納するレジスターを固定しておき、入力画素用のレジスターに格納するデータをスライドさせながら、中間バッファに格納した結果データを更新する、請求項８から請求項１３のいずれか一項に記載のプログラム。
【請求項１５】
ＳＩＭＤ用に利用可能な複数のレジスターと、
ＳＩＭＤ処理するプロセッサと、を備える情報処理装置であって、
カーネルサイズから使用する前記レジスターのサイズを選択し、選択したサイズのレジスターの数、前記カーネルサイズから、カーネルの分割量を決定し、決定した前記カーネルの分割量で分割したカーネル毎に、前記レジスターに格納し、畳み込み演算を並列処理する、情報処理装置。
【請求項１６】
前記決定した分割量で分割され、前記レジスターに１度に格納するカーネルの行数をｎとしたとき、
下記式を満たす最大の値に、前記ｎを設定する、請求項１５に記載の情報処理装置。
ｋ−（ｘ＋ｊ）≧（ｂ＋１）ｎ
ここでｊは、ｊ＝（ｗ＋１−ｙ）／ｂ、
ｂ＝ｗ／ｑ、
ｊ、ｂは小数点以下を切り上げた整数であり、
ｗ：カーネルサイズ
ｋ：利用可能な前記レジスターの個数
ｑ：１つの前記レジスターに格納するデータ数
ｘ：畳み込み演算に必要な前記レジスターの個数
ｙ：スキップする画素数である。
【請求項１７】
前記複数のレジスターのうち、カーネルを格納するレジスターを固定しておき、入力画素用のレジスターに格納するデータをスライドさせながら、中間バッファに格納した結果データを更新する、請求項１５または請求項１６に記載の情報処理装置。
【請求項１８】
撮像装置が生成した画像を取得する画像取得部と、
前記画像に映る人の特徴、および前記画像に映る人の周辺物体の形状、位置又は種別を示す周辺特徴を抽出する、請求項１５から請求項１７のいずれか一項に記載の情報処理装置と、
を備える、画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理方法、プログラム、情報処理装置、および画像処理装置に関する。
【背景技術】
【０００２】
従来、取得した画像から物体を認識する画像認識の分野では認識精度の改善が図られている。これは、多層構造の畳み込みニューラルネットワーク（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ：以下、「ＣＮＮ」という）によるところが大きい。
【０００３】
ＣＮＮ処理では、複数の畳込み層が含まれており、この畳み込み層では畳み込み演算を行う。畳み込み演算では、複数の積和演算を繰り返し行うため、多くの処理が必要になり時間がかかるという問題がある。
【０００４】
例えば、特許文献１に開示された技術では、グラフィックプロセッサ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ：以下、「ＧＰＵ」という）を用いて、畳み込み演算を行っている。畳み込み演算時にＧＰＵのメモリに処理対象の画像データを単純に展開した場合には、必要なメモリサイズが増加し、コストが増加するという課題がある。この課題を解決するために、特許文献１に開示された技術では、画像データを複数のデータブロックに分割し、ローカルメモリに分割した複数のデータブロックと、複数のフィルターを同時に読み込んで畳み込み演算を並列的に計算している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１６−４５７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に開示された技術は、ＧＰＵを前提とするものである。一方で、例えば監視カメラ等の装置への搭載した組み込みシステムによる画像認識処理を想定した場合においては、組み込みシステムにＧＰＵを搭載すると、消費電力量が大きく現実的ではない。結果として、消費電力量の小さいＣＰＵを利用せざるをえない。
【０００７】
本発明は、上記事情に鑑みてなされたものであり、消費電力量の小さいプロセッサ、特にＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）命令を処理可能なプロセッサを含む情報処理装置を用いて、効率的に畳み込み演算を行う処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の上記目的は、下記の手段によって達成される。
【０００９】
（１）ＳＩＭＤ用に利用可能な複数のレジスターと、
ＳＩＭＤ処理するプロセッサと、を備える情報処理装置を制御する方法であって、
（ａ）カーネルサイズから使用する前記レジスターのサイズを選択するステップと、
（ｂ）選択したサイズのレジスターの数、前記カーネルサイズから、カーネルの分割量を決定するステップと、
（ｃ）決定した前記カーネルの分割量で分割したカーネル毎に、前記レジスターに格納し、畳み込み演算を並列処理するステップと、
を含む、処理方法。
【００１０】
（２）前記レジスターに１度に格納するカーネルの行数をｎとしたとき、
前記ステップ（ｂ）では、下記式を満たす最大の値に、前記ｎを設定する、上記（１）に記載の処理方法。
ｋ−（ｘ＋ｊ）≧（ｂ＋１）ｎ
ここでｊは、ｊ＝（ｗ＋１−ｙ）／ｂ、
ｂ＝ｗ／ｑ、
ｊ、ｂは小数点以下を切り上げた整数であり、
ｗ：カーネルサイズ
ｋ：利用可能な前記レジスターの個数
ｑ：１つの前記レジスターに格納するデータ数
ｘ：畳み込み演算に必要な前記レジスターの個数
ｙ：スキップする画素数である。
【００１１】
（３）前記カーネルサイズが１１×１１のときに、
前記ステップ（ｂ）では、前記カーネルを２行ずつの分割に決定し、
前記ステップ（ｃ）では、前記カーネルを２行分毎に前記レジスターに格納し、格納した後、２行毎に畳み込み演算を実行する、上記（１）に記載の処理方法。
【００１２】
（４）前記カーネルサイズが１１×１１のときに、
前記ステップ（ａ）では、１２８ビットのレジスターを選択し、
前記ステップ（ｃ）では、入力画素４画素分を１２８ビットのレジスターに格納し、４画素ずつの畳み込み演算を並列処理する、上記（３）に記載の処理方法。
【００１３】
（５）前記カーネルサイズが５×５以下のときに、
前記ステップ（ｂ）では、前記カーネルを分割しないことを決定し、
前記ステップ（ｃ）では、前記カーネルを１度に前記レジスターに格納し、格納した後に畳み込み演算を実行する、上記（１）に記載の処理方法。
【００１４】
（６）前記カーネルサイズが５×５以下のときに、
前記ステップ（ａ）では、６４ビットのレジスターを選択し、
前記ステップ（ｃ）では、入力画素２画素分を６４ビットの前記レジスターに格納し、２画素ずつの畳み込み演算を並列処理する、上記（５）に記載の処理方法。
【００１５】
（７）前記複数のレジスターのうち、カーネルを格納するレジスターを固定しておき、入力画素用のレジスターに格納するデータをスライドさせながら、中間バッファに格納した結果データを更新する、上記（１）から上記（６）のいずれか１つに記載の処理方法。
【００１６】
（８）ＳＩＭＤ用に利用可能な複数のレジスターと、
ＳＩＭＤ処理するプロセッサと、を備える情報処理装置を制御するプログラムであって、
（ａ）カーネルサイズから使用する前記レジスターのサイズを選択するステップと、
（ｂ）選択したサイズのレジスターの数、前記カーネルサイズから、カーネルの分割量を決定するステップと、
（ｃ）決定した前記カーネルの分割量で分割したカーネル毎に、前記レジスターに格納し、畳み込み演算を並列処理するステップと、
を含む、方法を実行するためのプログラム。
【００１７】
（９）前記レジスターに１度に格納するカーネルの行数をｎとしたとき、
前記ステップ（ｂ）では、下記式を満たす最大の値に、前記ｎを設定する、上記（８）に記載のプログラム。
ｋ−（ｘ＋ｊ）≧（ｂ＋１）ｎ
ここでｊは、ｊ＝（ｗ＋１−ｙ）／ｂ、
ｂ＝ｗ／ｑ、
ｊ、ｂは小数点以下を切り上げた整数であり、
ｗ：カーネルサイズ
ｋ：利用可能な前記レジスターの個数
ｑ：１つの前記レジスターに格納するデータ数
ｘ：畳み込み演算に必要な前記レジスターの個数
ｙ：スキップする画素数である。
【００１８】
（１０）前記カーネルサイズが１１×１１のときに、
前記ステップ（ｂ）では、前記カーネルを２行ずつの分割に決定し、
前記ステップ（ｃ）では、前記カーネルを２行分毎に前記レジスターに格納し、格納した後、２行毎に畳み込み演算を実行する、上記（８）に記載のプログラム。
【００１９】
（１１）前記カーネルサイズが１１×１１のときに、
前記ステップ（ａ）では、１２８ビットのレジスターを選択し、
前記ステップ（ｃ）では、入力画素４画素分を１２８ビットのレジスターに格納し、４画素ずつの畳み込み演算を並列処理する、上記（１０）に記載のプログラム。
【００２０】
（１２）前記カーネルサイズが５×５以下のときに、
前記ステップ（ｂ）では、前記カーネルを分割しないことを決定し、
前記ステップ（ｃ）では、前記カーネルを１度に前記レジスターに格納し、格納した後に畳み込み演算を実行する、上記（８）に記載のプログラム。
【００２１】
（１３）前記カーネルサイズが５×５以下のときに、
前記ステップ（ａ）では、６４ビットのレジスターを選択し、
前記ステップ（ｃ）では、入力画素２画素分を６４ビットの前記レジスターに格納し、２画素ずつの畳み込み演算を並列処理する、上記（１２）に記載のプログラム。
【００２２】
（１４）前記複数のレジスターのうち、カーネルを格納するレジスターを固定しておき、入力画素用のレジスターに格納するデータをスライドさせながら、中間バッファに格納した結果データを更新する、上記（８）から上記（１３）のいずれか１つに記載のプログラム。
【００２３】
（１５）ＳＩＭＤ用に利用可能な複数のレジスターと、
ＳＩＭＤ処理するプロセッサと、を備える情報処理装置であって、
カーネルサイズから使用する前記レジスターのサイズを選択し、選択したサイズのレジスターの数、前記カーネルサイズから、カーネルの分割量を決定し、決定した前記カーネルの分割量で分割したカーネル毎に、前記レジスターに格納し、畳み込み演算を並列処理する、情報処理装置。
【００２４】
（１６）前記決定した分割量で分割され、前記レジスターに１度に格納するカーネルの行数をｎとしたとき、
下記式を満たす最大の値に、前記ｎを設定する、上記（１５）に記載の情報処理装置。
ｋ−（ｘ＋ｊ）≧（ｂ＋１）ｎ
ここでｊは、ｊ＝（ｗ＋１−ｙ）／ｂ、
ｂ＝ｗ／ｑ、
ｊ、ｂは小数点以下を切り上げた整数であり、
ｗ：カーネルサイズ
ｋ：利用可能な前記レジスターの個数
ｑ：１つの前記レジスターに格納するデータ数
ｘ：畳み込み演算に必要な前記レジスターの個数
ｙ：スキップする画素数である。
【００２５】
（１７）前記複数のレジスターのうち、カーネルを格納するレジスターを固定しておき、入力画素用のレジスターに格納するデータをスライドさせながら、中間バッファに格納した結果データを更新する、上記（１５）または上記（１６）に記載の情報処理装置。
【００２６】
（１８）撮像装置が生成した画像を取得する画像取得部と、
前記画像に映る人の特徴、および前記画像に映る人の周辺物体の形状、位置又は種別を示す周辺特徴を抽出する、上記（１５）から上記（１７）のいずれか１つに記載の情報処理装置と、
を備える、画像処理装置。
【発明の効果】
【００２７】
本発明に係る処理方法によれば、カーネルサイズから使用するレジスターのサイズを選択し、選択したサイズのレジスターの数、カーネルサイズから、カーネルの分割量を決定し、決定したカーネルの分割量で分割したカーネル毎に、レジスターに格納し、畳み込み演算を並列処理する。このようにすることで、効率的に畳み込み演算を行える。
【図面の簡単な説明】
【００２８】
【図１】本発明の実施形態に係る情報処理装置を示すブロック図である。
【図２】５×５サイズのカーネルを６４ビットレジスターおよび１２８ビットレジスターにそれぞれ格納した状態を示す模式図である。
【図３】１１×１１サイズのカーネルを１２８ビットレジスターに格納した状態を示す模式図である。
【図４】１１×１１サイズのカーネルの分割量が２行の場合の処理を説明する模式図である。
【図５】ＣＮＮ処理においてストライド４の場合の窓の重なり状態を示す図である。
【図６Ａ】情報処理装置が実行するＣＮＮ処理のフローチャートを示す図である。
【図６Ｂ】図６Ａに続く、フローチャートを示す図である。
【図７】レジスターのデータ格納状態を示す模式図である。
【図８】レジスターのデータ格納状態を示す模式図である。
【図９】変形例に係るフローチャートを示す図である。
【図１０】実施形態に係る画像処理装置を示すブロック図である。
【図１１】画像処理装置の機能ブロックを示す図である。
【発明を実施するための形態】
【００２９】
以下、添付した図面を参照して、本発明の実施形態を説明する。なお、図面の説明において同一の要素には同一の符号を付し、重複する説明を省略する。また、図面の寸法比率は、説明の都合上誇張されており、実際の比率とは異なる場合がある。
【００３０】
図１は本発明の実施形態に係る情報処理装置を示すブロック図である。同図に示すように情報処理装置１００は、ＳＩＭＤプロセッサ１０、汎用プロセッサ２０、メモリ３０を備え、これらの要素はデータバス、コマンドバス、アドレスバス等のバスにより互いに接続されている。この情報処理装置１００は、例えば監視カメラ等の装置の組み込みシステム用の情報処理装置である。
【００３１】
ＳＩＭＤプロセッサ１０は、１つの命令で複数のデータを演算するＳＩＭＤ型（単一命令複数データ処理）の命令を実行するプロセッサであり、例えばＡＲＭホールディングスのＳＩＭＤ拡張命令に対応したＮＥＯＮである。ＳＩＭＤ型の処理（以下、単に「ＳＩＭＤ処理」という）はベクトルデータ処理とも呼ばれる。
【００３２】
ＳＩＭＤプロセッサ１０は、ＳＩＭＤレジスターファイル１１、ＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）１２、ＭＵＬ（ｍｕｌｔｉｐｌｉｅｒ  Ｕｎｉｔ）１３、シフター１４、およびＬＳ（Ｌｏａｄ／Ｓｔｏｒｅ  Ｕｎｉｔ）１５を含む。
【００３３】
ＳＩＭＤレジスターファイル１１は、２５６ビット、１２８ビット、または６４ビットの長さの複数のＳＩＭＤ用レジスター（以下、単に「レジスター」という）で構成され得る。本実施形態においては、ＳＩＭＤレジスターファイル１１１を１６個の１２８ビット長のレジスター、または３２個の６４ビット長のレジスターとして用いることができる（以下、それぞれ「１２８ビットレジスター」、「６４ビットレジスター」ともいう）。そして、３２ビット長の単精度浮動小数点数や整数であれば、１２８ビットレジスターに４個分のオペランドが、６４ビットレジスターであれば２個分のオペランドが１度に格納可能である。このようなデータは、ベクトルデータとも呼ばれる。
【００３４】
ＡＬＵ１２は、加算、減算、および論理演算を行う演算器である。ＭＵＬ１３は、乗算、除算を行う演算器である。シフター１４は、ビットを左右にずらすシフト処理を行う演算器である。ＬＳ１５は、メモリ３０からレジスターへのデータのロード、およびレジスターからメモリ３０へのデータのロードの処理を行う。
【００３５】
汎用プロセッサ２０は、ＳＩＭＤ処理以外の一般的なスカラデータ処理を実行するプロセッサである。汎用プロセッサ２０は、ＡＬＵ２２、ＭＵＬ２３、ＬＳ２４を含む。これらは、ＡＬＵ１２、ＭＵＬ１３、およびＬＳ１５と同様の機能を備えるので説明は省略する。
【００３６】
メモリ３０は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等のＲＡＭ、およびＮＡＮＤ型フラッシュメモリ等のＲＯＭを含む。また、さらにＨＤＤなどの補助記憶装置を含んでもよい。メモリ３０には、処理する画像データを一時的に格納したり、後述する情報処理装置１００が実行するＣＮＮ処理の実行方法のプログラム、情報処理装置１００が組み込まれた機器を制御する制御プログラム、各種データ等を格納したりする。
【００３７】
（カーネルの格納）
本実施形態では、ＣＮＮ処理を行う際には、図１で示したようなハードウェアリソースの制約のため、カーネル（ファイルターともいう）のサイズによっては全てを一度にＳＩＭＤレジスターファイル１１１のレジスターに格納しようとした場合、レジスターが不足してしまう。そこで、本実施形態では、ＳＩＭＤレジスターファイル１１１を分割した１２８ビットレジスターまたは６４ビットレジスターに、カーネルの一部を分割して格納する。なお、適用するカーネルのサイズは、処理に応じて異なる。
【００３８】
図２は、高さ５行、幅５列のサイズのカーネル（以下、「５×５サイズ」等という）のカーネルを６４ビットレジスターおよび１２８ビットレジスターにそれぞれ格納した状態を示す模式図である。カーネルの格納は、ＳＩＭＤ処理をするために、１行毎に、１または複数のレジスターに格納する。５×５サイズのカーネルは２５個のデータから構成され、各データのサイズが単精度浮動小数点数の３２ビットの場合、１個の１２８ビットレジスターには、連続した４個のデータを格納できる。
【００３９】
１行分の５個のデータを１２８ビットレジスターに格納した場合、同図に示すように２個の１２８ビットレジスターが必要であり、２個目の１２８ビットレジスターに格納されるデータは１個であり、残り３個分の空きが生じる。一方で、６４ビットレジスターに格納した場合は、１個の６４ビットレジスターには、それぞれ２個のカーネルのデータを格納できるので３個の６４ビットレジスターが必要であり、３個目の６４ビットレジスターには、１個分の空きが生じる。
【００４０】
両者の比較では、５×５サイズのカーネルの場合であれば６４ビットレジスターを選択した方が、格納効率が高く、有効にレジスターを活用できることが分かる。
【００４１】
同様に１１×１１サイズのカーネルの場合には、６４ビットレジスター、および１２８ビットレジスターのいずれを選択した場合であっても、最後のレジスターでは１個分の空きが生じることになる。図３は、１１×１１サイズのカーネルを１２８ビットレジスターに格納した状態を示す模式図であり、３個目のレジスター（ｋ０２）では、１個分の空きがある。この場合、６４ビットレジスターおよび１２８ビットレジスターにおいて、格納効率はどちらも同じである。しかしながら、ＳＩＭＤ処理を考慮した場合、１２８ビットレジスターの方が、６４ビットレジスターに比べて格納しているデータ数が多いため、１サイクル（１つのロードまたはストア命令）でより多くのデータを一度に転送できるため、転送効率が高いと言える。
【００４２】
ここで、本実施形態においては、ＳＩＭＤレジスターファイルはサイズ上の制約から、カーネルの格納に割り当てることが可能なレジスターの個数が限られる。例えば１２８ビットレジスターであれば利用可能なレジスター個数は１６個である。１１×１１サイズのカーネルを一度に１２８ビットレジスターに格納するためには、３３個（＝３×１１）のレジスターが必要であり、１６個のレジスターでは不足することになる。そこで後述する本実施形態に係る方法では、カーネルのサイズ等の条件に応じて、カーネルの分割量を決定し、決定した分割量でカーネルを複数に分割し、分割したカーネル毎に畳み込み演算を行う。これにより組み込みシステムのような限られたリソースであっても効率的に、ＣＮＮ処理を行えるようにする（図４参照）。
【００４３】
（演算結果の共通使用について）
本実施形態においては、ＣＮＮ処理（ＡｌｅｘＮｅｔ）におけるストライドは４である。図５は４画素分のストライドを実行する前と後の入力画素の範囲の重なり部分を示す図である。図５に示すようにｉ×ｉサイズの入力画素に対して、１１×１１サイズのカーネルを用いて、畳み込み演算をする場合、図５（ａ）に示すように、左上から１１×１１サイズの入力画素を、カーネルの対応する位置のデータと積和演算して、１つの出力画素のデータを算出する。太枠は、カーネルと積和演算する入力画素の範囲を示す窓である。
【００４４】
そして、次の出力画素は、ストライドの設定値分、すなわち図５（ｂ）に示すように４画素分スキップさせた入力画素を、カーネルと積和演算することで、算出される。このとき、１つ前の窓と、現時点の窓とは、一部重なるため、レジスターに格納した入力画素を共通で使用できる。なお、この重なる量は、スキップの設定値と、カーネルのサイズにより異なる。ここで、以下の例では、カーネルをストライドさせる画素数は、畳み込み演算のためにずらす画素数（後述の格納データ数ｑ）と一致している。また、このストライドする画素数は、畳み込み演算のためにずらす画素数に対して同じ、または整数倍であることが好ましい。以下に説明する本実施形態に係る方法では、この共通の使用できる領域内の入力画素をレジスターに格納し、複数の出力画素の畳み込み演算に使用することで処理の効率化を図る。
【００４５】
（処理方法）
以下、図６Ａ〜図８を参照し、情報処理装置１００によるＣＮＮ処理の手順を説明する。図６Ａ、図６Ｂは情報処理装置１００が実行するＣＮＮ処理のフローチャートを示す図である。
【００４６】
（Ｓ１１１）
最初に、情報処理装置１００は、カーネルサイズからレジスターサイズの選択を行う。レジスターサイズの選択は、上述したように最初に、（１）格納効率の観点から格納効率がより高い方を選択する。格納効率で差がない場合には、次に（２）転送効率の観点から、レジスターサイズがより大きい方を選択する。例えばカーネルサイズが５×５であれば格納効率の観点から６４ビットレジスターを選択する。カーネルサイズが１１×１１であれば格納効率と転送効率の観点から１２８ビットレジスターを選択する。
【００４７】
（ステップＳ１１２）
次に、ステップＳ１１１で選択したレジスターサイズの使用レジスター数、カーネルサイズを用いて、カーネルの分割量を決定する。
【００４８】
カーネルの分割量、すなわち分割行数ｎは、下記式（１）を満たす最大の数（整数）に設定する。
ｋ−（ｘ＋ｊ）≧（ｂ＋１）ｎ        （１）
ここでｊは、ｊ＝（ｗ＋１−ｙ）／ｂで、
ｂ＝ｗ／ｑ
ｊ、ｂは小数点以下を切り上げた整数であり、
ｗ：カーネルサイズ
ｋ：レジスターの個数
ｑ：１つのレジスターに格納するデータ数
ｘ：畳み込み演算に必要なレジスター数
ｙ：スキップする画素数である。
【００４９】
（式（１）について）
カーネルサイズｗ×ｗに基づいて選択した、ｋ個のｚビットレジスターを使用する。
【００５０】
最小ビット数を単数浮動小数点型の３２ビットとすると、ｚビットレジスターにはｚ／３２＝ｑ個のデータが格納される。
【００５１】
畳み込み演算時に必要な積算、加算のためにｘ個のレジスターが必要である。この積算、加算演算に必要なレジスター数については、後述する。
【００５２】
カーネルサイズｗ×ｗでは、１行でｚビットレジスターを用いた計算をｗ／ｑ＝ｂ回（ｂは小数点切り上げた整数）計算する必要がある。
【００５３】
また、入力画素をｙ画素ずつスキップして畳み込みを行う場合、（ｗ＋１−ｙ）画素分は共通して使用できる。
【００５４】
そのため、ｚビットレジスターにｑ個のデータが格納されることを考慮すると、中間バッファは（ｗ＋１−ｙ）／ｂ＝ｊ個用意する必要がある。（ｊは小数点を切り上げた整数）
よって、残りのレジスター数は、ｋ−（ｘ＋ｊ）＝ｍ個
カーネルをｎ行ずつに分割するとカーネルに必要なレジスター個数はｂｎ、入力画素データに必要なレジスター個数はｎ。
そこで、ｍ≧（ｂ＋１）ｎの条件を満たす、最大整数ｎを求める。
【００５５】
（本実施形態のｎ＝２となる具体例）
例えば、ステップＳ１１１で、カーネルサイズが１１×１１（ｗ＝１１）に応じて１２８ビットレジスターを選択した場合、ＳＩＭＤ処理に割当て可能なレジスター数ｋは、１６個である。１つの１２８ビットレジスターには、格納するデータ数ｑは、３２ビットの単精度浮動小数点数で４個である。
【００５６】
畳み込み演算時に必要な積算、加算のために少なくとも３個（ｘ個）のレジスター個数が必要である（後述）。１２８ビットレジスターには３２ビットのデータが４個（＝１２８／３２）格納される。
【００５７】
また、カーネルサイズは１１ｘ１１では、１行で１２８ビットレジスターを用いた計算を１１／４＝２．７回、小数点切り上げで３回行う必要がある（ｂ＝３）。
【００５８】
また、入力画素を４画素ずつスキップして畳み込みを行う場合、８画素分（ｗ＋１−ｙ＝１１＋１−４）は共通して使用できるため中間バッファを３個確保すればよい（ｊ＝８／ｂ＝２．６、小数点以下切り上げでｊ＝３）。ここで、加算した「１」はレジスターに１度に格納するデータ数（ｂ：４個）に合わせるための調整値である。
【００５９】
残りのレジスターは１６−（４＋３）＝９個
カーネルをｎ行ずつに分割すると
１６−（４＋３）≧（ｂ＋１）ｎ＝４ｎ
９≧４ｎを満たす最大整数ｎを求めるとｎ＝２である。
以上をまとめると、１６個（ｋ）の１２８（ｚ）ビットレジスターのうち、用途が決まっているものは、カーネル格納用に６個（３ｎ）、入力画素用に２個（ｎ）、中間バッファ用に３個（ｊ）、積算、加算用に４個（ｘ）で、合計１５個となる。
【００６０】
（畳み込み演算の積算、加算にｘ個（３個）のレジスターが必要な場合）
（ａ＋ｂ）×（ｃ＋ｄ）＝ｅを算出する際には、ａ、ｂをレジスターＲ０、Ｒ１にそれぞれ格納する。ａ＋ｂの結果ｘをレジスターＲ０に格納する。その後、ｃ、ｄをレジスターＲ１、Ｒ２にそれぞれ格納する。ｃ＋ｄの結果ｙをレジスターＲ１に格納する。ｘ＊ｙの結果ｅをレジスターＲ０に格納する。以上のことからレジスターＲ０〜Ｒ２の３個のレジスターが必要となる。
【００６１】
（他の例：畳み込み演算の積算、加算にｘ個（４個）のレジスターが必要な場合）
（ａ＋ｂ）×（ｃ＋ｄ）＝ｅを算出する際には、ａ、ｂをレジスターＲ０、Ｒ１にそれぞれ格納する。ａ＋ｂの結果ｘをレジスターＲ２格納する。その後、ｃ、ｄをレジスターＲ０、Ｒ１にそれぞれ格納する。ｃ＋ｄの結果ｙをレジスターＲ３に格納する。ｘ＊ｙの結果ｅをレジスターＲ３に格納する。以上のことからレジスターＲ０〜Ｒ３の４個のレジスターが必要となる。以上説明したように、必要な数は、あくまでも一例であり、変数の数や、レジスターの空き状況に応じて、積算、加算に必要なレジスターの数も異なる。
【００６２】
（ステップＳ１１３）
以上のような手順によって決定したｎ行分のカーネルをレジスターに格納する。なお、以下の処理においては、上述した実施形態の条件下でｎ＝２に決定したものとして説明を行う。
【００６３】
図７、図８は、レジスターのデータ格納状態を示す模式図である。図７（ａ）は、ステップＳ１１３で、２行分のカーネルを分割してｂｎ個（＝６）のレジスターに格納した状態を示している。図３に示すようにカーネルを構成する２行分の各データは、連続する４個毎にレジスターに格納される。同図においては各レジスターには、格納したデータに対応した符号ｋ００〜ｋ１２を示している。このうち、３つ目のレジスターｋ０２、ｋ１２には、４個分の格納領域のうち３個分のカーネルのデータが格納されており、データ１個分の空き領域がある（図３参照）。この空き領域にはゼロを入れている。
【００６４】
（ステップＳ１１４）
次に入力画素の右端、下端に数値０を入れるゼロパディングを行う。パディングの幅は、例えば１である。このパディング幅は、必要な出力画素のサイズに応じて、適宜設定される。
【００６５】
（ステップＳ１１５）
上端、左端から、ステップＳ１１２で決定したｎ（＝２）、および１つのレジスターに格納可能なデータ数（４個）に対応した、２×４の入力画素をｎ個（＝２）のレジスターに格納する。図７（ｂ）は、ステップＳ１１５で、２×４の入力画素を２個のレジスターに格納した状態を示している。同図においても各レジスターには、格納したデータに対応した符号ｄ００、ｄ１０を示している。
【００６６】
（ステップＳ１１６）
入力画素用のレジスターに格納したデータ（ｄ００、ｄ１０）と、左４データ分のカーネルを格納したレジスターのデータ（ｋ００、ｋ１０）とを積和演算し、結果Ｓを中間バッファ１用レジスターに格納する。ここでの積和演算（以下でも同様）においては、ＳＩＭＤ処理により、入力用、カーネル用のレジスターにそれぞれ格納されている４画素分（ｄ００、ｋ００）のデータを用いて、４画素ずつの畳み込み演算を並列処理する。図７（ｃ）は、ステップＳ１１６で積和演算し、結果Ｓをレジスターに格納した状態を示している。
【００６７】
（ステップＳ１２１）
次に、４画素分スキップ（格納データ数ｑ分）した後の次の２×４の入力画素を入力画素用のレジスターに格納する。ここでは、例えばｄ０１、ｄ１１（図７（ｂ）参照）のデータが入力画素用の２個のレジスターにそれぞれ格納される。
【００６８】
（ステップＳ１２２）
入力画素用のレジスターに格納したデータと、左４データ分のカーネルを格納したレジスターのデータとを積和演算し、結果Ａを中間バッファ２用レジスターに格納する。図８（ａ）は、ステップＳ１２２で積和演算し、結果Ａをレジスターに格納した状態を示している。
【００６９】
（ステップＳ１２３）
入力画素用のレジスターに格納したデータと、中央４データ分のカーネルを格納したレジスターのデータとを積和演算し、結果Ｂを中間バッファ１用レジスターに加算して格納する。図８（ｂ）は、ステップＳ１２３で積和演算し、結果Ｂをレジスターに格納した状態を示している。
【００７０】
（ステップＳ１３１）
次に、４画素分スキップした後の２×４の入力画素を入力画素用のレジスターに格納する。こここでは、例えばｄ０２、ｄ１２（図７（ｂ）参照）のデータが入力画素用の２個のレジスターにそれぞれ格納される。
【００７１】
（ステップＳ１３２）
入力画素用のレジスターに格納したデータと、左４データ分のカーネルを格納したレジスターのデータとを積和演算し、結果Ｃを中間バッファ３用レジスターに格納する。図８（ｃ）は、ステップＳ１３２で積和演算し、結果Ｃをレジスターに格納した状態を示している。
【００７２】
（ステップＳ１３３）
入力画素用のレジスターに格納したデータと、中央４データ分のカーネルを格納したレジスターのデータとを積和演算し、結果Ｄを中間バッファ２用レジスターに加算して格納する。図８（ｄ）は、ステップＳ１３３で積和演算し、結果Ｄをレジスターに格納した状態を示している。
【００７３】
（ステップＳ１３４）
入力画素用のレジスターに格納したデータと、右４データ分のカーネルを格納したレジスターのデータとを積和演算し、結果Ｅを中間バッファ１用レジスターに加算して格納する。図８（ｅ）は、ステップＳ１３３で積和演算し、結果Ｅをレジスターに格納した状態を示している。なお、このとき入力画素用のレジスターには、４個分のデータが格納されているが４番目のデータ、すなわち窓（図５参照）の外側の１２番目のデータは、カーネルの４番目の空データ（ゼロ値）と乗算し、加算されるので、積和演算の結果には影響を与えない。
【００７４】
（ステップＳ１４１）
ここまでの処理で、出力１画素の２行分の積和演算結果のデータが中間バッファ１用のレジスターに格納されたので、格納データをメモリ３０の所定アドレス位置に転送する。なお、このメモリ３０への転送処理は、レジスター数に余裕があれば、後述のステップＳ１４３を経由して、ステップＳ１３１以降の処理を実行して、出力２画素分のデータが揃った時点で、実行するようにしてもよい。これにより処理の効率化が図れる。
【００７５】
（ステップＳ１４２）
中間バッファ１用レジスターの役目が終わったので、順次バッファのデータを次の手順でスライドし、更新する。最初に、中間バッファ２用レジスターに格納されているデータで、中間バッファ１用レジスターのデータを更新する。次に、中間バッファ３用レジスターに格納されているデータで、中間バッファ２用レジスターのデータを更新する。最後に、中間バッファ３用レジスターをゼロで更新する。
【００７６】
（ステップＳ１４３）
入力画素（ゼロパディング後）の最終列まで、処理が終わっていなければ（ＮＯ）、ステップＳ１３１に戻り、ステップＳ１３１で４画素分スキップした窓内の次の入力画素で、以降の処理を実行する。一方で、最終列まで処理が終わっていれば（ＹＥＳ）、処理をステップＳ１４４に進める。
【００７７】
（ステップＳ１４４）
カーネルの最終行まで終了していなければ、すなわち１１行目までの処理が終了していなければ（ＮＯ）、処理をステップＳ１４５に進める。一方で、最終行までの処理が終了していれば（ＹＥＳ）、１画素分の出力画素の計算は終了する（エンド）。以降は、行方向にストライドし、全出力画素の計算を繰り返す。
【００７８】
（Ｓ１４５）
次の２行分のカーネルを、カーネル用の６個分のレジスターに格納（更新）する。例えば、１、２行目が終了していれば、３、４行目のカーネルのデータをレジスターに格納する。なお、２行分ずつレジスターに格納するので、６回目には最後の１１行目の１行分のデータのみがレジスターに格納されることになる。この場合、使わない１行分の３個分のレジスターには全てゼロを入れて、積和計算するようにしてもよい。
【００７９】
（ステップＳ１４６）
次の２行分の左端から２×４の入力画素を入力画素用のレジスターに格納する。以降は、ステップＳ１１６に進み、以降の処理を実行する。
【００８０】
以上説明した本実施形態に係る方法によれば、カーネルの分割量を決定し、決定した分割量でカーネルを分割して、演算を行うことで、組み込みシステムのような消費電力量に制限があり、限られたハードウェアリソースの条件下であっても、ＣＮＮ処理を効率的に行うことが可能となる。特に、カーネルを格納するレジスターは固定しておき、中間バッファ用のレジスター内のデータをシフトさせながら更新することで、演算結果を共通で使用することが可能となる（図５参照）。これによって、ＣＮＮ処理をさらに効率的に行うことが可能となる。
【００８１】
（他の実施例）
以上に説明した情報処理装置および処理方法の構成は、上記の実施形態の特徴を説明するにあたって主要構成を説明したのであって、上記の構成に限られず、特許請求の範囲内において、種々改変することができる。また、一般的な情報処理装置が備える構成および処理方法で実行される処理を排除するものではない。
【００８２】
（変形例１）
上述の実施形態では、５×５サイズのカーネルを用いる場合であっても分割量を決定し決定した分割量に基づいて、カーネルを分割してレジスターに格納するものであったが、カーネルのサイズに応じて、分割せずに、一度にレジスターに格納するようにしてもよい。図９は、変形例に係るフローチャートを示す図である。
【００８３】
（ステップＳ２１１）
ここでは、ＣＮＮ処理に用いるカーネルサイズを判断する。カーネルサイズが５×５以下の場合には、処理をステップＳ２１２に進める。一方で、５×５を超える場合には、処理を図６ＡのステップＳ１１１に進める。
【００８４】
（ステップＳ２１２）
カーネルの全データをレジスターに格納する。例えば５×５サイズのカーネルであれば、６４ビットレジスターを用いて、１行あたり３個、合計１５個のレジスターにカーネルの全データを格納する。これらレジスターのデータは、処理が終了するまで固定して用いる。
【００８５】
（ステップＳ２１３）
以下は、公知の手順により、入力画素の５×５サイズの窓内のデータを順次レジスターに格納し、カーネルを格納したレジスターのデータと、積和演算することで畳み込み演算を実行し、２画素ずつの畳み込み演算を並列処理する。
【００８６】
（ステップＳ２１４）
１画素分の畳み込み演算が終了し次第、メモリに転送し、終了する。以降は、全出力画素の計算を、繰り返す。
【００８７】
このように、変形例においてはカーネルのサイズが小さい場合には、分割せずに、一度にレジスターに格納した方が、レジスターへのデータのロード、ストアの転送処理回数が少なくなるので、結果としてＣＮＮ処理を効率的に行うことが可能となる。
【００８８】
（画像処理装置への組み込み）
本実施形態の情報処理装置１００は、監視カメラ等の画像処理装置６０に適用してもよい。図１０は撮影した映像内の人の行動を認識する行動認識システムの構成を示すブロック図である。同図に示すように、行動認識システムには、撮像装置５０と、本実施形態に係る画像処理装置６０が含まれる。
【００８９】
撮像装置５０は、一般的なカメラや広角カメラであり、カメラの撮像素子が生成した画像信号をＡＤ変換して、画像データを生成する。撮像装置５０は、フレーム単位の画像データを連続的に生成した動画像を撮像可能である。
【００９０】
画像処理装置６０は、画像取得部７０、および上述した情報処理装置１００を備える。画像取得部７０は、撮像装置５０が生成した動画像の画像データＤ１を取得する。
【００９１】
図１１は、主に情報処理装置の機能ブロックを示す図である。情報処理装置１００は、人領域検出部１１０、人体特徴抽出部１２０、周辺特徴抽出部１３０、周辺特徴フィルター部１４０、行動判別部１５０、及び学習部１６０を備える。
【００９２】
人領域検出部１１０は、画像データＤ１の画像から人が含まれる区画化された人領域を検出する。人領域検出部１１０が人領域を検出する手法は、任意であり、例えば、動画像から、画像における差分画像を検出し、当該差分画像から人領域を検出する。又、人領域検出部１１０は、その他、学習済みのニューラルネットワーク、テンプレートマッチング、ＨＯＧ（Ｈｉｓｔｏｇｒａｍｓ  ｏｆ  Ｏｒｉｅｎｔｅｄ  Ｇｒａｄｉｅｎｔｓ）特徴量とＳＶＭ（Ｓｕｐｐｏｒｔ  Ｖｅｃｔｏｒ  Ｍａｃｈｉｎｅ）の組み合わせ、または背景差分法等の手法を用いてもよい。
【００９３】
人体特徴抽出部１２０は、人領域検出部１１０から画像データＤ１と人領域を示すデータＤ２を取得して、人領域の画像に対して所定の演算処理を施して、画像に映る人の姿勢特徴を抽出する。そして、人体特徴抽出部１２０は、抽出した画像に映る人の姿勢特徴のデータＤ３を周辺特徴フィルター部１４０及び行動判別部１５０に出力する。
【００９４】
人体特徴抽出部１２０は、例えば、学習済みのＣＮＮ処理を用いて、画像から人の姿勢特徴を抽出する。尚、人体特徴抽出部１２０を構成するＣＮＮ処理は、例えば、人体の画像と、当該画像中における人体の関節位置の座標（二次元位置又は三次元推定位置）の対応関係を示す教師データによって学習処理が行われたものが用いられる（一般にＲ−ＣＮＮとも称される）。
【００９５】
人体特徴抽出部１２０は、例えば、前処理部、畳み込み処理部、および第１、第２全結合部を含む。前処理部では、人領域を示すデータＤ２に基づいて、全領域の画像から人領域の画像を切り出して、所定のサイズ及びアスペクト比に変換する等、画像の正規化を行う。
【００９６】
畳み込み処理部は、複数の特徴量抽出層が階層的に接続されて構成されている。畳み込み処理部は、各特徴量抽出層において、前階層から入力される入力データに対して、上述したような畳み込み演算処理、活性化処理、及びプーリング処理を実行する。
【００９７】
第１全結合部は、例えば、複数の特徴量を全結合する多層パーセプトロンで構成されている。第１全結合部は、畳み込み処理部から得られる複数の中間演算結果データを全結合して、人の姿勢特徴を示すデータＤ３を生成する。そして、第１全結合部は、当該人の姿勢特徴を示すデータＤ３を第２全結合部及び周辺特徴フィルター部１４０に対して出力する。
【００９８】
周辺特徴抽出部１３０は、人領域検出部１１０から画像データＤ１と人領域を示すデータＤ２を取得して、人領域の周辺の画像に対して所定の演算処理を施して、画像に映る人の周辺物体の周辺特徴を抽出する。そして、周辺特徴抽出部１３０は、抽出した周辺特徴のデータＤ４を周辺特徴フィルター部１４０に出力する。
【００９９】
周辺特徴抽出部１３０は、例えば、人体特徴抽出部１２０と同様に、ＣＮＮ処理を用いて、画像から周辺特徴を抽出する。なお、周辺特徴抽出部１３０を構成するＣＮＮ処理は、例えば、物体の画像と、当該物体の形状、種別、又は各部位の位置等の対応関係を示す教師データによって学習処理が行われたものが用いられる。又、より好適には、人体を含む人体周辺の画像と、当該画像中における物体の形状及び位置関係の座標の対応関係を示す教師データによって学習処理が行われたものが用いられる。
【０１００】
周辺特徴フィルター部１４０は、人領域検出部１１０から姿勢特徴のデータＤ３と周辺特徴抽出部１３０から周辺特徴のデータＤ４を取得する。そして、周辺特徴フィルター部１４０は、姿勢特徴と関連付けて設定された周辺特徴の重要度のデータＤａに基づいて、周辺特徴をフィルタリングする。そして、周辺特徴フィルター部１４０は、フィルタリングした周辺特徴のデータＤ４ａを行動判別部１５０に出力する。
【０１０１】
行動判別部１５０は、人体特徴抽出部１２０から人の姿勢特徴のデータＤ３を取得すると共に、周辺特徴フィルター部１４０からフィルタリングされた周辺特徴のデータＤ４ａを取得する。そして、行動判別部１５０は、人の姿勢特徴のデータＤ３とフィルタリングされた周辺特徴のデータＤ４ａの時系列データに基づいて、画像に映る人の行動クラスを判別する。また、本実施形態に係る行動判別部１５０は、再帰型ニューラルネットワークの一種である階層型ＬＳＴＭ（Ｌｏｎｇ  Ｓｈｏｒｔ−Ｔｅｒｍ  Ｍｅｍｏｒｙ）を用いて、時系列解析を行ってもよい。階層型ＬＳＴＭは、短い時間間隔（例えば、直前の画像フレーム）における関係に加えて、長い時間間隔（例えば、１分前）における関係を認識することが可能である。
【０１０２】
学習部１６０は、人体特徴抽出部１２０、周辺特徴抽出部１３０、周辺特徴フィルター部１４０、及び行動判別部１５０が上述した処理を実行し得るように、教師データを用いた機械学習を実行する。
【０１０３】
学習部１６０は、例えば、正規化された人領域の画像と人の姿勢特徴（例えば、関節位置）が関連付けられた教師データを用いて、人体特徴抽出部１２０の畳み込み処理部、第１、第２全結合部のネットワークパラメータ（例えば、重み係数、バイアス）を調整する。
【０１０４】
又、学習部１６０は、例えば、正規化された人周辺の物体の画像と物体の特徴（例えば、人体との位置関係）が関連付けられた教師データを用いて、周辺特徴抽出部１３０の畳み込み処理部、及び周辺特徴抽出部１３０の全結合部のネットワークパラメータ（例えば、重み係数、バイアス）を調整する。
【０１０５】
又、学習部１６０は、例えば、人の姿勢特徴と周辺物体の重要度が関連付けられた教師データを用いて、周辺特徴フィルター部１４０の全結合部のネットワークパラメータ（例えば、重み係数、バイアス）を調整する。
【０１０６】
又、学習部１６０は、例えば、人の姿勢特徴及び周辺特徴の時系列データと、正解となる行動クラスが関連付けられた教師データを用いて、行動判別部１５０の中間層６１及び行動判別部１５０の全結合部のネットワークパラメータ（例えば、重み係数、バイアス）を調整する。
【０１０７】
尚、学習部１６０は、例えば、公知の誤差逆伝搬法等を用いて、これらの学習処理を行えばよい。そして、学習部１６０は、学習処理によって調整したネットワークパラメータを外部の記憶部等に格納する。
【０１０８】
以上のように、本実施形態に係る画像処理装置６０によれば、人体の姿勢特徴と関連付けて周辺特徴の重要度を設定しておき、周辺特徴をフィルタリングすることによって、人の行動に関連する周辺物体のみを抽出することが可能である。これによって、本実施形態に係る画像処理装置６０は、周辺物体の種別、位置又は見え方が種々に異なる環境下においても、高精度に人の行動クラスを推定できる。
【０１０９】
特に、本実施形態に係る情報処理装置１００を組み込んだ画像処理装置６０は、姿勢特徴と周辺特徴の時系列データに基づいて、人体の姿勢と関連する周辺物体の位置関係の時間的変化を抽出し、人の行動クラスを推定する構成となっているため、より高精度に人の行動クラスを推定できる。
【０１１０】
上述した情報処理装置を動作させるプログラムは、ＵＳＢメモリ、フレキシブルディスク、ＣＤ−ＲＯＭ等のコンピューター読み取り可能な記録媒体によって提供されてもよいし、インターネット等のネットワークを介してオンラインで提供されてもよい。この場合、コンピューター読み取り可能な記録媒体に記録されたプログラムのコードは、アセンブリ言語、または機械言語で記述されていてもよい。
【符号の説明】
【０１１１】
１００  情報処理装置
１０  ＳＩＭＤプロセッサ
１１  ＳＩＭＤレジスターファイル
１２  ＡＬＵ
１３  ＭＵＬ
１４  シフター
１５  ＬＳ
２０  汎用プロセッサ
２１  スカラーレジスターファイル
２２  ＡＬＵ
２３  ＭＵＬ
２４  ＬＳ
３０  メモリ
６０  画像処理装置
【図１】
2019008421.tif 000003
【図２】
2019008421.tif 000004
【図３】
2019008421.tif 000005
【図４】
2019008421.tif 000006
【図５】
2019008421.tif 000007
【図６Ａ】
2019008421.tif 000008
【図６Ｂ】
2019008421.tif 000009
【図７】
2019008421.tif 000010
【図８】
2019008421.tif 000011
【図９】
2019008421.tif 000012
【図１０】
2019008421.tif 000013
【図１１】
2019008421.tif 000014