(57)【特許請求の範囲】
【請求項１】
フレームに検出対象の物体が含まれているか否かを判定する画像認識装置であって、
前記フレーム内の第１領域の画像から、前記第１領域よりもサイズの小さい所定サイズの第１演算画像データを生成する前処理部と、
前記第１演算画像データの画素値をニューロ演算することにより、前記第１領域に前記検出対象の物体が含まれているか否かを示すニューロ演算値を算出するニューロ演算部と、
前記ニューロ演算値を用いて、前記フレームに前記検出対象の物体が含まれているか否かを示す結果データを生成する後処理部と、
を備え、
前記ニューロ演算部は、
入力層のシナプスをニューロ演算して中間層のシナプスを算出する中間シナプス算出処理を少なくとも１回実行する中間シナプス算出部と、
前記中間層のシナプスをニューロ演算して出力シナプスを演算し、前記出力シナプスを前記ニューロ演算値として出力する出力シナプス算出部と、
を含み、
前記中間シナプス算出部は、
前記中間層のシナプスから、算出対象としてＮ個の中間シナプスを決定する算出対象決定部と、
前記入力層のシナプスの中からいずれか一つの入力シナプスを選択する選択処理を実行する入力シナプス選択部と、
選択された入力シナプスと第Ｋ（ＫはＮ以下の自然数）の中間シナプスとに対応する重み付け係数を決定し、前記選択された入力シナプスと決定した重み付け係数とを乗算した乗算値を、前記第Ｋの中間シナプスに加算する中間演算処理を実行する中間演算部と、
を含み、
最初の中間シナプス算出処理における入力層のシナプスは、前記第１演算画像データの画素値であり、
前記中間演算部は、第１〜第Ｎの中間シナプスに対する中間演算処理を並列して実行し、
前記選択処理と前記中間演算処理とは、全ての入力シナプスが選択されるまで繰り返される画像認識装置。
【請求項２】
フレームに検出対象の物体が含まれているか否かを判定する画像認識装置であって、
前記フレーム内の第１領域の画像から、前記第１領域よりもサイズの小さい所定サイズの第１演算画像データを生成する前処理部と、
前記第１演算画像データの画素値をニューロ演算することにより、前記第１領域に前記検出対象の物体が含まれているか否かを示すニューロ演算値を算出するニューロ演算部と、
前記ニューロ演算値を用いて、前記フレームに前記検出対象の物体が含まれているか否かを示す結果データを生成する後処理部と、
を備え、
前記ニューロ演算部は、
入力層のシナプスをニューロ演算して中間層のシナプスを算出する中間シナプス算出処理を少なくとも１回実行する中間シナプス算出部と、
前記中間層のシナプスをニューロ演算して出力シナプスを演算し、前記出力シナプスを前記ニューロ演算値として出力する出力シナプス算出部と、
を含み、
前記出力シナプスの算出に用いられるＱ個の部分加算値を設定する部分加算値設定部と、
前記中間層のシナプスからＱ個の中間シナプスを選択し、前記Ｑ個の中間シナプスに含まれる第Ｒ（ＲはＱ以下の自然数）の中間シナプスと、前記第Ｒの中間シナプスに対応する重み付け係数との乗算値を第Ｒの部分加算値に加算する部分加算処理を実行する部分加算値演算部と、
前記中間層のシナプスに含まれる全ての中間シナプスに対する部分加算処理が終了した後に、前記Ｑ個の部分加算値の合計値を算出して前記出力シナプスを算出する合計部と、
を含み、
最初の中間シナプス算出処理における入力層のシナプスは、前記第１演算画像データの画素値であり、
前記Ｑ個の中間シナプスを用いた部分加算処理が並行して実行される画像認識装置。
【請求項３】
請求項１または請求項２に記載の画像認識装置であって、さらに、
前記第１演算画像データを格納する第１ブロックバッファと、
前記前処理部によって前記フレーム内の前記第１領域と異なる第２領域の画像から生成された第２演算画像データを格納する第２ブロックバッファと、
を備え、
前記前処理部は、前記ニューロ演算部が前記第１ブロックバッファに格納された第１演算画像データを用いてニューロ演算を実行している場合、第２演算画像データを生成して前記第２ブロックバッファに格納し、前記ニューロ演算部が前記第２ブロックバッファに格納された第２演算画像データを用いてニューロ演算を実行している場合、第１演算画像データを生成して前記第１ブロックバッファに格納する画像認識装置。
【請求項４】
請求項１または請求項２に記載の画像認識装置であって、
前記前処理部は、
前記第１領域内の画素値を統計処理してブロック統計値を算出するブロックパラメータ算出部と、
前記ブロック統計値と、前記第１領域における画素値の標準的な分布を示すデータとに基づいて、前記第１領域内の画素値を正規化する正規化部と、
を含む画像認識装置。
【請求項５】
請求項４に記載の画像認識装置であって、
前記前処理部は、
前記フレームの画素値を統計処理してフレーム統計値を算出するフレームパラメータ算出部、
を含み、
前記正規化部は、前記フレーム統計値と、前記フレームにおける画素値の標準的な分布を示すデータとに基づいて前記フレームの画素値を正規化し、
前記前処理部は、正規化されたフレームを用いて前記第１領域内の画素値を正規化する画像認識装置。
【請求項６】
請求項１または請求項２に記載の画像認識装置において、さらに、
複数のフレームの入力を受け付ける入力インタフェースと、
第１フレームバッファと、
第２フレームバッファと、
を備え、
前記入力インタフェースは、前記第１フレームバッファに格納された第１フレームから前記第１演算画像データが生成されている場合、前記第１フレームの次に入力されるフレームを前記第２フレームバッファに格納する画像認識装置。
【請求項７】
請求項１に記載の画像認識装置であって、
前記入力シナプス選択部は、前記中間演算部によって前記中間演算処理が実行されている期間に、次の中間演算処理に用いられる重み付け係数を決定する画像認識装置。
【請求項８】
請求項１または請求項７に記載の画像認識装置であって、
前記入力層のシナプスは、複数の入力グループに分けられ、
前記入力シナプス選択部は、前記複数の入力グループの中からいずれか一つを選択し、選択された入力グループの中から前記中間演算処理の対象となる入力シナプスを選択し、前記選択された入力グループに属する全ての入力シナプスを選択した後に次の入力グループを選択する画像認識装置。
【請求項９】
請求項８に記載の画像認識装置であって、さらに、
前記入力層のシナプスを格納する入力シナプスバッファと、
前記中間シナプス算出部が使用する重み付け係数を格納する第１係数テーブルと、
を備え、
前記中間シナプス算出部は、前記選択された入力グループに属する全ての入力シナプスを、１回の読み出し処理で前記入力シナプスバッファから読み出し、前記中間演算部により決定された重み付け係数を、１回の読み出し処理で前記第１係数テーブルから読み出す画像認識装置。
【請求項１０】
請求項８または請求項９に記載の画像認識装置において、
前記画像認識装置は、前記選択された入力グループの中で最後に選択された入力シナプスに対して実行される中間演算処理と、前記次の入力グループを選択する処理とを並行して実行する画像認識装置。
【請求項１１】
請求項１及び請求項７ないし請求項１０のいずれかに記載の画像認識装置であって、
前記中間シナプス算出部は、２回目以降の中間算出処理を実行する場合、入力シナプスとして直前の中間算出処理で算出された中間シナプスを用いる画像認識装置。
【請求項１２】
請求項１及び請求項７ないし請求項１１のいずれかに記載の画像認識装置であって、
前記中間シナプス算出部は、全ての入力シナプスに対する中間演算処理が終了した後の中間シナプスをシグモイド演算し、シグモイド演算においてシグモイド関数を線形的に近似した近似関数を使用する画像認識装置。
【請求項１３】
請求項２に記載の画像認識装置であって、さらに、
前記中間層のシナプスを格納する中間シナプスバッファと、
前記中間層のシナプスに対応する重み付け係数を格納する第２係数テーブルと、
を備え、
前記出力シナプス算出部は、前記Ｑ個の中間シナプスを、１回の読み出し処理で前記中間シナプスバッファから読み出し、前記Ｑ個の中間シナプスに対応する重み付け係数を、１回の読み出し処理で前記第２係数テーブルから読み出す画像認識装置。
【請求項１４】
請求項２または請求項１３に記載の画像認識装置であって、
前記出力シナプス算出部は、前記部分加算処理が実行されている期間に、次の部分加算処理に用いられるＱ個の中間シナプスと重み付け係数とを決定する画像認識装置。
【請求項１５】
請求項２、請求項１３及び請求項１４のいずれかに記載の画像認識装置であって、
前記中間シナプス算出部は、全ての中間シナプスに対する部分加算処理が終了した後に、前記Ｑ個の部分加算値の合計値をシグモイド演算することにより前記出力シナプスを算出し、シグモイド演算においてシグモイド関数を線形的に近似した近似関数を使用する画像認識装置。
【請求項１６】
請求項１ないし請求項１５のいずれかに記載の画像認識装置であって、
前記ニューロ演算部は、コンフィギュラブル・プロセッサにより実装される画像認識装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ニューラルネットワークを用いて画像から物体を検出する画像認識装置に関する。
【背景技術】
【０００２】
自動車などの車両を安全に走行させるため、様々な方法が検討されている。たとえば、車両の進行方向を撮影するカメラを設置し、カメラが撮影した画像から歩行者などを検出する機能をカーナビゲーションシステムに設ける方法がある。カーナビゲーションシステムは、歩行者を検出した場合、運転手に対して歩行者の存在を知らせる。運転手は、歩行者の動きを意識しながら車両を運転することができるため、車両の安全走行が可能となる。
【０００３】
カメラにより撮影された画像から歩行者を検出する方法として、ニューラルネットワークを用いる方法がある。ニューラルネットワークとは、人間の脳神経系をモデルとした情報処理システムであり、歩行者の検出の他に、文字認識などにも用いられる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−２１０３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１には、車両にカメラを搭載し、カメラにより撮像された画像から歩行者を検出する画像認識装置が記載されている。特許文献１に係る画像認識装置は、顕著性算出法を用いて、判別の候補となる候補物体を入力画像から検出する。候補物体に対してニューラルネットワークを適用することにより、候補物体が歩行者であるか否かが判定される。
【０００６】
しかし、ニューラルネットワーク（ニューロ演算）の演算量は、膨大である。カメラにより撮影された画像から歩行者を、ニューロ演算を用いて検出する場合、画像認識処理をリアルタイムに行う必要がある。したがって、ニューロ演算のために、大規模なハードウェアを用いる必要があった。また、ニューロ演算をソフトウェア処理により実行する場合、クロック周波数の高いプロセッサを用いなければならず、消費電力が大きくなるという問題があった。
【０００７】
そこで、本発明は、前記問題点に鑑み、ハードウェアの規模を小さくでき、ニューロ演算を用いた画像認識処理をリアルタイムで実行することができる技術を提供することを課題とする。
【０００８】
また、本発明は、ニューロ演算を用いた画像認識処理を実行する際に、消費電力を低減することができる技術を提供することを課題とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するため、請求項１記載の発明は、フレームに検出対象の物体が含まれているか否かを判定する画像認識装置であって、前記フレーム内の第１領域の画像から、前記第１領域よりもサイズの小さい所定サイズの第１演算画像データを生成する前処理部と、前記第１演算画像データの画素値をニューロ演算することにより、前記第１領域に前記検出対象の物体が含まれているか否かを示すニューロ演算値を算出するニューロ演算部と、前記ニューロ演算値を用いて、前記フレームに前記検出対象の物体が含まれているか否かを示す結果データを生成する後処理部と、を備え、前記ニューロ演算部は、入力層のシナプスをニューロ演算して中間層のシナプスを算出する中間シナプス算出処理を少なくとも１回実行する中間シナプス算出部と、前記中間層のシナプスをニューロ演算して出力シナプスを演算し、前記出力シナプスを前記ニューロ演算値として出力する出力シナプス算出部と、を含み、前記中間シナプス算出部は、前記中間層のシナプスから、算出対象としてＮ個の中間シナプスを決定する算出対象決定部と、前記入力層のシナプスの中からいずれか一つの入力シナプスを選択する選択処理を実行する入力シナプス選択部と、選択された入力シナプスと第Ｋ（ＫはＮ以下の自然数）の中間シナプスとに対応する重み付け係数を決定し、前記選択された入力シナプスと決定した重み付け係数とを乗算した乗算値を、前記第Ｋの中間シナプスに加算する中間演算処理を実行する中間演算部と、を含み、最初の中間シナプス算出処理における入力層のシナプスは、前記第１演算画像データの画素値であり、前記中間演算部は、第１〜第Ｎの中間シナプスに対する中間演算処理を並列して実行し、前記選択処理と前記中間演算処理とは、全ての入力シナプスが選択されるまで繰り返される。
請求項２記載の発明は、フレームに検出対象の物体が含まれているか否かを判定する画像認識装置であって、前記フレーム内の第１領域の画像から、前記第１領域よりもサイズの小さい所定サイズの第１演算画像データを生成する前処理部と、前記第１演算画像データの画素値をニューロ演算することにより、前記第１領域に前記検出対象の物体が含まれているか否かを示すニューロ演算値を算出するニューロ演算部と、前記ニューロ演算値を用いて、前記フレームに前記検出対象の物体が含まれているか否かを示す結果データを生成する後処理部と、を備え、前記ニューロ演算部は、入力層のシナプスをニューロ演算して中間層のシナプスを算出する中間シナプス算出処理を少なくとも１回実行する中間シナプス算出部と、前記中間層のシナプスをニューロ演算して出力シナプスを演算し、前記出力シナプスを前記ニューロ演算値として出力する出力シナプス算出部と、を含み、前記出力シナプスの算出に用いられるＱ個の部分加算値を設定する部分加算値設定部と、前記中間層のシナプスからＱ個の中間シナプスを選択し、前記Ｑ個の中間シナプスに含まれる第Ｒ（ＲはＱ以下の自然数）の中間シナプスと、前記第Ｒの中間シナプスに対応する重み付け係数との乗算値を第Ｒの部分加算値に加算する部分加算処理を実行する部分加算値演算部と、前記中間層のシナプスに含まれる全ての中間シナプスに対する部分加算処理が終了した後に、前記Ｑ個の部分加算値の合計値を算出して前記出力シナプスを算出する合計部と、を含み、最初の中間シナプス算出処理における入力層のシナプスは、前記第１演算画像データの画素値であり、前記Ｑ個の中間シナプスを用いた部分加算処理が並行して実行される。
【００１０】
請求項３記載の発明は、請求項１または請求項２に記載の画像認識装置であって、さらに、前記第１演算画像データを格納する第１ブロックバッファと、前記前処理部によって前記フレーム内の前記第１領域と異なる第２領域の画像から生成された第２演算画像データを格納する第２ブロックバッファと、を備え、前記前処理部は、前記ニューロ演算部が前記第１ブロックバッファに格納された第１演算画像データを用いてニューロ演算を実行している場合、第２演算画像データを生成して前記第２ブロックバッファに格納し、前記ニューロ演算部が前記第２ブロックバッファに格納された第２演算画像データを用いてニューロ演算を実行している場合、第１演算画像データを生成して前記第１ブロックバッファに格納する。
【００１１】
請求項４記載の発明は、請求項１または請求項２に記載の画像認識装置であって、前記前処理部は、前記第１領域内の画素値を統計処理してブロック統計値を算出するブロックパラメータ算出部と、前記ブロック統計値と、前記第１領域における画素値の標準的な分布を示すデータとに基づいて、前記第１領域内の画素値を正規化する正規化部と、を含む。
【００１２】
請求項５記載の発明は、請求項４に記載の画像認識装置であって、前記前処理部は、前記フレームの画素値を統計処理してフレーム統計値を算出するフレームパラメータ算出部、を含み、前記正規化部は、前記フレーム統計値と、前記フレームにおける画素値の標準的な分布を示すデータとに基づいて前記フレームの画素値を正規化し、前記前処理部は、正規化されたフレームを用いて前記第１領域内の画素値を正規化する。
【００１３】
請求項６記載の発明は、請求項１または請求項２に記載の画像認識装置において、さらに、複数のフレームの入力を受け付ける入力インタフェースと、第１フレームバッファと、第２フレームバッファと、を備え、前記入力インタフェースは、前記第１フレームバッファに格納された第１フレームから前記第１演算画像データが生成されている場合、前記第１フレームの次に入力されるフレームを前記第２フレームバッファに格納する。
【００１６】
請求項７記載の発明は、請求項１に記載の画像認識装置であって、前記入力シナプス選択部は、前記中間演算部によって前記中間演算処理が実行されている期間に、次の中間演算処理に用いられる重み付け係数を決定する。
【００１７】
請求項８記載の発明は、請求項１または請求項７に記載の画像認識装置であって、前記入力層のシナプスは、複数の入力グループに分けられ、前記入力シナプス選択部は、前記複数の入力グループの中からいずれか一つを選択し、選択された入力グループの中から前記中間演算処理の対象となる入力シナプスを選択し、前記選択された入力グループに属する全ての入力シナプスを選択した後に次の入力グループを選択する。
【００１８】
請求項９記載の発明は、請求項８に記載の画像認識装置であって、さらに、前記入力層のシナプスを格納する入力シナプスバッファと、前記中間シナプス算出部が使用する重み付け係数を格納する第１係数テーブルと、を備え、前記中間シナプス算出部は、前記選択された入力グループに属する全ての入力シナプスを、１回の読み出し処理で前記入力シナプスバッファから読み出し、前記中間演算部により決定された重み付け係数を、１回の読み出し処理で前記第１係数テーブルから読み出す。
【００１９】
請求項１０記載の発明は、請求項８または請求項９に記載の画像認識装置において、前記画像認識装置は、前記選択された入力グループの中で最後に選択された入力シナプスに対して実行される中間演算処理と、前記次の入力グループを選択する処理とを並行して実行する。
【００２０】
請求項１１記載の発明は、請求項１及び請求項７ないし請求項１０のいずれかに記載の画像認識装置であって、前記中間シナプス算出部は、２回目以降の中間算出処理を実行する場合、入力シナプスとして直前の中間算出処理で算出された中間シナプスを用いる。
【００２１】
請求項１２記載の発明は、請求項１及び請求項７ないし請求項１１のいずれかに記載の画像認識装置であって、前記中間シナプス算出部は、全ての入力シナプスに対する中間演算処理が終了した後の中間シナプスをシグモイド演算し、シグモイド演算においてシグモイド関数を線形的に近似した近似関数を使用する。
【００２３】
請求項１３記載の発明は、請求項２に記載の画像認識装置であって、さらに、前記中間層のシナプスを格納する中間シナプスバッファと、前記中間層のシナプスに対応する重み付け係数を格納する第２係数テーブルと、を備え、前記出力シナプス算出部は、前記Ｑ個の中間シナプスを、１回の読み出し処理で前記中間シナプスバッファから読み出し、前記Ｑ個の中間シナプスに対応する重み付け係数を、１回の読み出し処理で前記第２係数テーブルから読み出す。
【００２４】
請求項１４記載の発明は、請求項２または請求項１３に記載の画像認識装置であって、前記出力シナプス算出部は、前記部分加算処理が実行されている期間に、次の部分加算処理に用いられるＱ個の中間シナプスと重み付け係数とを決定する。
【００２５】
請求項１５記載の発明は、請求項２、請求項１３及び請求項１４のいずれかに記載の画像認識装置であって、前記中間シナプス算出部は、全ての中間シナプスに対する部分加算処理が終了した後に、前記Ｑ個の部分加算値の合計値をシグモイド演算することにより前記出力シナプスを算出し、シグモイド演算においてシグモイド関数を線形的に近似した近似関数を使用する。
【００２６】
請求項１６記載の発明は、請求項１ないし請求項１５のいずれかに記載の画像認識装置であって、前記ニューロ演算部は、コンフィギュラブル・プロセッサにより実装される。
【発明の効果】
【００２７】
本発明の画像認識装置において、前処理部は、検出対象の物体がフレーム内の第１領域に含まれているか否かを判定するために、第１領域の画像から、第１領域よりもサイズの小さい第１演算画像データを生成する。ニューロ演算部は、第１演算画像データの画素値をニューロ演算してニューロ演算値を算出する。ニューロ演算値に基づいて、第１領域に検出対象の物体が含まれているか否かが判定される。第１領域の画像よりサイズの小さい第１演算画像データをニューロ演算に用いることにより、ニューロ演算の演算量を削減することができる。したがって、ニューロ演算をリアルタイムで実行することが可能となるとともに、ハードウェアの規模を小さくすることができる。
【００２８】
また、ニューロ演算部が第１ブロックバッファに格納された第１演算画像データを用いてニューロ演算を行っている場合、前処理部は、第２演算画像データを作成して第２ブロックバッファに格納する。これにより、ニューロ演算の対象となる画像データの作成と、ニューロ演算とを並行して実行できるため、リアルタイムで画像認識処理を行うことが可能となる。
【００２９】
また、ニューロ演算部は、コンギュラブル・プロセッサにより構成される。ニューロ演算の処理内容に応じた命令等をコンフィギュラブル・プロセッサに追加することにより、ニューロ演算処理をソフトウェア処理により実行する場合に比べて、クロック周波数の低いプロセッサを使用することができる。したがって、ニューロ演算を実行するときの消費電力を削減することができる。
【図面の簡単な説明】
【００３０】
【図１】本発明の実施の形態に係る画像認識装置の構成を示す機能ブロック図である。
【図２】図１に示す画像認識装置により実行される画像認識処理のフローチャートである。
【図３Ａ】図１に示すフレームとブロックの関係を示す図である。
【図３Ｂ】図３Ａに示す検出ブロックからブロックデータを作成する処理の概略を示す図である。
【図３Ｃ】図１に示す後処理部により作成される結果データを示す図である。
【図４】図１に示すフレームパラメータ検出部が処理する輝度フレームと、ブロックデータの作成対象である輝度フレームとの対応を示す図である。
【図５】図１に示すフレームパラメータ検出部の動作を示すフローチャートである。
【図６】図１に示す前処理部がブロックデータを作成するときの動作を示すフローチャートである。
【図７Ａ】図１に示す前処理部に設定されるブロックパラメータテーブルを示す図である。
【図７Ｂ】図３Ａに示す検出ブロックと、ブロックパラメータとの対応を示す図である。
【図８】図１に示すブロックバッファの読み出し及び書き込みのタイミングを示すタイムチャートである。
【図９】図２に示すニューロ演算処理の概略を示す図である。
【図１０】図９に示す中間シナプスの計算手順の概略を示す図である。
【図１１】図９に示す中間シナプス算出処理のフローチャートである。
【図１２】図９に示す中間シナプスの算出過程を示す図である。
【図１３】図９に示す中間シナプスの算出過程を示す図である。
【図１４】図９に示す中間シナプスの算出過程を示す図である。
【図１５】図９に示す中間シナプスの算出過程を示す図である。
【図１６】図９に示す中間シナプスの算出過程を示す図である。
【図１７】図９に示す中間シナプス処理のタイムチャートである。
【図１８】図１１のステップＳ３０９で使用するシグモイド関数と線形近似関数との対応を示す図である。
【図１９】図９に示す出力シナプス算出処理のフローチャートである。
【図２０】図９に示す出力シナプスの算出過程を示す図である。
【図２１】図９に示す出力シナプスの算出過程を示す図である。
【図２２】図９に示す出力シナプスの算出過程を示す図である。
【図２３】図９に示す出力シナプスの算出過程を示す図である。
【図２４】図１９に示す出力シナプス算出処理のタイムチャートである。
【発明を実施するための形態】
【００３１】
以下、図面を参照しつつ、本発明の第１の実施の形態について説明する。
【００３２】
｛１．全体構成｝
図１は、本発明の実施の形態に係る画像認識装置１００の機能ブロック図である。画像認識装置１００は、自動車などの車両に搭載され、車載カメラが撮影して生成した動画像データを入力する。画像認識装置１００は、入力された動画像データの各フレームから歩行者を検出する処理を行う。歩行者が検出された場合、画像認識装置１００は、入力された動画像データの中で、歩行者が検出された領域を目立つように表示することにより、歩行者の存在を運転手に通知する。
【００３３】
図１に示すように、画像認識装置１００は、入力インタフェース１と、前処理部２と、ブロックバッファ３Ａ，３Ｂと、ニューロ演算部４と、係数テーブル５と、後処理部６と、撮影データ記憶部７とを備える。
【００３４】
入力インタフェース１は、車載カメラが生成した動画像データのフレーム３０Ｆを入力する。入力インタフェース１は、フレーム３０Ｆから輝度成分を抽出し、輝度フレーム３１Ｆを前処理部２に出力する。
【００３５】
前処理部２は、輝度フレーム３１Ｆを、予め定められた大きさのブロックに区分して、ブロックデータ３３を作成する。ブロックデータ３３は、バッファ３Ａ，３Ｂのいずれかに格納される。
【００３６】
前処理部２は、フレームパラメータ検出部２１と、フレーム記憶部２２と、ブロックパラメータ検出部２３と、ブロック作成部２４とを備える。フレームパラメータ検出部２１は、輝度フレーム３１Ｆの画素値の統計値（最大値、標準偏差など）３１を算出する。フレーム記憶部２２は、フレームパラメータ検出部２１から入力した輝度フレーム３１Ｆを、フレームバッファ２２Ａ，２２Ｂのいずれかに格納する。ブロックパラメータ検出部２３は、輝度フレーム３１Ｆの中から歩行者の検出対象となるブロックを特定し、ブロックの画素値の統計値３２を算出する。ブロック作成部２４は、フレームバッファ２２Ａ，２２Ｂのいずれかから輝度フレーム３１Ｆを入力する。ブロック作成部２４は、入力した輝度フレーム３１Ｆから、ブロックパラメータ検出部２３により特定されたブロックのブロックデータ３３を作成する。
【００３７】
ニューロ演算部４は、ブロックバッファ３Ａ，３Ｂのいずれからブロックデータ３３を入力し、ブロックデータ３３に対するニューロ演算を行う。ニューロ演算の結果、出力シナプス３４が、ニューロ演算部４から出力される。係数テーブル５は、ニューロ演算時に用いられる重み付け係数を格納する。
【００３８】
後処理部６は、フレーム３０Ｆと、出力シナプス３４とを用いて結果データ３５を作成する。撮影データ記憶部７は、車載カメラが生成したフレーム３０Ｆをそのまま記憶する。
【００３９】
｛２．画像認識処理の概略｝
図２は、画像認識装置１００が実行する画像認識処理のフローチャートである。図２を参照しながら、画像認識処理の概略を説明する。
【００４０】
入力インタフェース１は、フレーム３０Ｆを入力し（ステップＳ１）、輝度フレーム３１Ｆを抽出する。入力インタフェース１は、フレーム３０Ｆを撮影画像データ記憶部７に格納する。前処理部２は、輝度フレーム３１Ｆから、ニューロ演算に用いるブロックデータ３３を作成する（ステップＳ２）。ニューロ演算部４は、ブロックデータ３３の各画素をニューロ演算する（ステップＳ３）。後処理部６は、出力シナプス３４の値に基づいて歩行者が検出されたか否かを判定する。歩行者が検出されたと判定された場合、後処理部６は、歩行者が検出されたブロックをフレーム３０Ｆ上に重ねた結果データ３５を生成する（ステップＳ４）。
【００４１】
以下、ブロックデータ３３の作成の概略を説明する。図３Ａは、輝度フレーム３１Ｆと検出ブロックとの関係を示す図である。図３Ａに示すように、画像認識装置１００は、輝度フレーム３１Ｆの中から、歩行者を検出する対象となる領域として、検出ブロックＢＬ＿Ａ，ＢＬ＿Ｂのいずれかを設定する。
【００４２】
図３Ａでは、検出ブロックＢＬ＿Ａ，ＢＬ＿Ｂの両者が輝度フレーム３１Ｆ上に表示されている。実際には、一つの検出ブロックに対し、一つのブロックデータ３３が作成される。検出ブロックＢＬ＿Ａ，ＢＬ＿Ｂは、サイズが異なる。検出ブロックＢＬ＿Ａは、Ｘ軸方向のサイズが３２ピクセルであり、Ｙ軸方向のサイズが６４ピクセルである。検出ブロックＢＬ＿Ｂは、Ｘ軸方向のサイズが６４ピクセルであり、Ｙ軸方向のサイズが１２８ピクセルである。
【００４３】
検出ブロックＢＬ＿Ｂのサイズは、検出ブロックＢＬ＿Ａのサイズよりも大きい。撮影場所から近い位置にいる歩行者を検出するために、検出ブロックＢＬ＿Ｂが大きく設定されている。一方、検出ブロックＢＬ＿Ａは、遠方にいる歩行者を検出するために、小さいサイズが設定される。複数のサイズの検出ブロックを使用することにより、様々な位置にいる歩行者を検出することができる。
【００４４】
図３Ｂは、ブロックデータ３３の作成からニューロ演算が行われるまでの概略を示す図である。前処理部２は、輝度フレーム３１Ｆから検出ブロックＢＬ＿Ａ，ＢＬ＿Ｂを切り出す。切り出された画像データが所定のサイズに変換されることにより、ブロックデータ３３が作成される（ステップＳ２）。ブロックデータ３３のサイズは、Ｘ軸方向が１６ピクセル、Ｙ軸方向が３２ピクセルであり、検出ブロックのサイズに関係なく一定である。ニューロ演算部４は、ブロックデータ３３に対してニューロ演算を行い（ステップＳ３）、出力シナプス３４を生成する。出力シナプス３４は、一つの検出ブロックにつき一つずつ生成される。
【００４５】
ブロックデータ３３のサイズが一定である理由を説明する。検出ブロックのサイズに応じてブロックデータ３３の画素数が変化する場合、ニューロ演算部４は、画素数に応じて、ニューロ演算の処理内容を変更する必要がある。しかし、検出ブロックのサイズに関係なく、ブロックデータ３３のサイズを一定にすることにより、ニューロ演算の処理を簡略化することが可能となる。また、ブロックデータ３３のサイズを検出ブロックＢＬ＿Ａ，ＢＬ＿Ｂよりも小さくすることにより、ニューロ演算処理（ステップＳ３）の演算量が削減される。
【００４６】
再び、図２を参照する。後処理部６は、フレーム３０Ｆと、出力シナプス３４とを用いて結果データを作成する（ステップＳ４）。後処理部６は、出力シナプス３４の大きさに基づいて、対応する検出ブロックから歩行者が検出されたか否かを判定する。図３Ｃは、結果データ３５の一例を示す図である。歩行者が検出された場合、後処理部６は、撮影データ記憶部７からフレーム３０Ｆを取得する。後処理部６は、歩行者が検出された検出ブロックに対応する枠３５Ａ，３５Ｂ，３５Ｃをフレーム３０Ｆ上に描画して、結果データ３５を作成する。結果データ３５が車両に搭載されたディスプレイに表示されることにより、運転手は、歩行者の位置を確認することができる。
【００４７】
｛３．前処理部の動作（ステップＳ２）｝
以下、ステップＳ２（図２参照）を実行する前処理部２の動作について詳しく説明する。最初に、フレームパラメータ検出部２１によって、輝度フレーム３１Ｆの統計値３１の算出処理が行われる。次に、ブロックパラメータ検出部２３とブロック作成部２４とによって、ブロックデータ３３が輝度フレーム３１Ｆから作成される。
【００４８】
｛３．１．フレームパラメータ検出部２１の処理｝
図４は、フレームパラメータ検出部２１が処理する輝度フレーム３１Ｆと、ブロックデータ３３の作成対象となる輝度フレーム３１Ｆとの対応を示すタイムチャートである。図５は、フレームパラメータ検出部２１の動作を示すフローチャートである。詳細については後述するが、輝度フレーム３１Ｆの保存と、ブロックデータ３３の作成とは、並行して実行される（図５参照）。
【００４９】
以下、図４及び図５を参照しながら、フレームパラメータ検出部２１の動作を説明する。入力インタフェース１は、図示しない車載カメラが撮影した動画像データを入力し、輝度フレーム３１Ｆａ，３１Ｆｂ，３１Ｆｃ，・・・を前処理部２に順次出力する。輝度フレーム３１Ｆａが前処理部２に入力された場合、図５に示す処理が開始される。
【００５０】
フレームパラメータ検出部２１は、輝度フレーム３１Ｆａの統計値３１を算出する（ステップＳ２０１）。統計値３１として、輝度フレーム３１Ｆにおける画素の最大値、最小値、合計値、分散及び標準偏差が算出される。フレームパラメータ検出部２１は、輝度フレーム３１Ｆａの格納先をフレームバッファ２２Ａに決定する（ステップＳ２０２）。輝度フレーム３１Ｆａは、フレームバッファ２２Ａに格納される（ステップＳ２０３）。
【００５１】
前処理部２は、輝度フレーム３１Ｆａの次のフレームとして、輝度フレーム３１Ｆｂを入力する。輝度フレーム３１Ｆｂの統計値３１が算出される（ステップＳ２０１）。輝度フレーム３１Ｆｂの格納先が、フレームバッファ２２Ｂに決定される（ステップＳ２０２）。以下、輝度フレーム３１Ｆの入力が終了するまで（ステップＳ２０４においてＮｏ），ステップＳ２０１〜Ｓ２０４の処理が繰り返される。図５に示すように、輝度フレーム３１Ｆの格納先は、フレームバッファ２２Ａ，２２Ｂに交互に切り替えられる。
【００５２】
図４に示すように、輝度フレーム３１Ｆａ，３１Ｆｂ，３１Ｆｃに関してステップＳ２０１〜Ｓ２０３の処理が行われる期間は、期間Ａ，期間Ｂ，期間Ｃである。また、前処理部２は、フレームバッファ２２Ａ，２２Ｂに格納された輝度フレーム３１Ｆを用いてブロックデータ３３を作成する（詳細は後述）。したがって、ブロックデータ３３の作成を開始することができる時刻は、輝度フレーム３１Ｆａの格納が終了した時刻Ｔ１１となる。すなわち、輝度フレーム３１Ｆａからブロックデータ３３を作成する処理は、期間Ｂに実行される。上述したように、輝度フレーム３１Ｆａの次に入力される輝度フレーム３１Ｆｂは、期間Ｂにフレームバッファ２２Ｂに格納される。
【００５３】
時刻Ｔ１２において、輝度フレーム３１Ｆａからブロックデータ３３を作成する処理が終了するとともに、輝度フレーム３１Ｆｂのフレームバッファ２２Ｂに対する格納が完了する。前処理部２は、時刻Ｔ１２から、輝度フレーム３１Ｆｂに対するフロックデータ３３の作成を開始することが可能となる。輝度フレーム３１Ｆを格納するフレーム記憶部２２をダブルバッファ構成とすることにより、フレームパラメータ検出部２１の処理と、ブロックデータ３３を作成する処理とを、並行して実行することができる。したがって、画像認識処理を効率良く実行することができる。
【００５４】
｛３．２．ブロックパラメータ検出部２３及びブロック作成部２４の処理｝
図６は、前処理部２がブロックデータ３３を作成するときの動作を示すフローチャートである。図６に示す処理は、ブロックパラメータ検出部２３及びブロック作成部２４により実行される。
【００５５】
（ブロックの決定）
前処理部２は、読み出し対象のフレームバッファを決定する（ステップＳ２５１）。ブロックデータ３３が輝度フレーム３１Ｆａから作成される場合、読み出し対象は、フレームバッファ２２Ａとなる。前処理部２は、予め設定されたブロックパラメータテーブル２２１（図７Ａ参照）を用いて、輝度フレーム３１Ｆから、歩行者の検出対象となる検出ブロックを一つ決定する（ステップＳ２５２）。ブロックパラメータテーブル２２１は、前処理部２に予め設定されている。
【００５６】
図７Ａは、検出ブロックＢＬ＿Ａのサイズに対応するブロックパラメータテーブル２２１を示す図である。図７Ｂは、検出ブロックと、ブロックパラメータとの対応を示す図である。以下、検出ブロックを決定する処理（ステップＳ２５２）について詳しく説明する。
【００５７】
図７Ｂに示すように、ＦＲ＿ＳＴＡＲＴ＿Ｘ、ＦＲ＿ＳＴＡＲＴ＿Ｙ、ＦＲ＿ＳＩＺＥ＿Ｘ，及びＦＲ＿ＳＩＺＥ＿Ｙは、輝度フレーム３１Ｆにおいて、歩行者を検出する対象となる領域３２Ｆを特定するパラメータである。領域３２Ｆの中から、検出ブロックが決定される。輝度フレーム３１Ｆにおいて、歩行者を検出することがない領域が存在する。輝度フレーム３１Ｆの上側の領域は、空であることが多い。このため、上側の領域から歩行者が検出されることはない。領域３２Ｆから検出ブロックを決定することにより、ニューロ演算の対象となる検出ブロックの数を削減することができる。
【００５８】
ＢＬ＿ＳＩＺＥ＿Ｘ及びＢＬ＿ＳＩＺＥ＿Ｙは、検出ブロックのＸ方向及びＹ方向のサイズを決定するパラメータである。ＢＬ＿ＳＴＡＲＴ＿Ｘ，ＢＬ＿ＳＴＡＲＴ＿Ｙは、領域３２Ｆの中から最初に決定される検出ブロックＢＬ１の座標を示すパラメータであり、検出ブロックＢＬ１の左上頂点の座標に相当する。
【００５９】
ＢＬ＿ＯＦＳ＿Ｘ，ＢＬ＿ＯＦＳ＿Ｙは、検出ブロックのＸ座標、Ｙ座標のオフセット数であり、新たな検出ブロックの左上の頂点を算出するために用いられる。例えば、検出ブロックＢＬ２の左上頂点のＸ座標は、ＢＬ＿ＳＴＡＲＴ＿ＸにＢＬ＿ＯＦＳ＿Ｘを加算した値となる。２段目の検出ブロックＢＬ１１の左上頂点の座標を算出する場合、検出ブロックＢＬ１１の左上頂点のＹ座標は、ＢＬ＿ＳＴＡＲＴ＿ＹにＢＬ＿ＯＦＳ＿Ｙを加算した値となる。
【００６０】
ＢＬ＿ＲＰＴ＿Ｘ，ＢＬ＿ＲＰＴ＿Ｙは、領域３２Ｆから検出ブロックを切り出す回数を決定するパラメータである。例えば、ＢＬ＿ＲＰＴ＿Ｘが１０に設定されている場合、Ｘ軸方向に沿って切り出される検出ブロックの数は、１０となる。ＢＬ＿ＲＰＴ＿Ｙが５に設定されている場合、Ｙ軸方向に沿って切り出される検出ブロックの数は、５となる。
【００６１】
検出ブロックを決定する順序について説明する。前処理部２は、検出ブロックＢＬ１を決定した後に、ＢＬ＿ＲＰＴ＿Ｘで設定された回数分（１０回）、Ｘ軸方向に沿って検出ブロックを決定する。すなわち、１段目の検出ブロックが、検出ブロックＢＬ１，ＢＬ２,・・・，ＢＬ１０の順に決定される。次に、前処理部２は、２段目の検出ブロック（ＢＬ１１〜ＢＬ２０）を順次決定する。ＢＬ＿ＲＰＴ＿Ｙが５に設定されている場合、前処理部２は、５段目の検出ブロックを決定するまで、上記の処理を繰り返す。この結果、５０個の検出ブロックが、歩行者を検出する対象領域として特定される。
【００６２】
ブロックパラメータテーブル２２１は、検出ブロックＢＬ＿Ａ，ＢＬ＿Ｂのそれぞれのサイズに応じて作成される。図７Ａに示すブロックパラメータテーブル２２１は、検出ブロックＢＬ＿Ａに対応する。前処理部２は、検出ブロックＢＬ＿Ａに対応するブロックパラメータテーブル２２１を用いて検出ブロックを決定し、その後、検出ブロックＢＬ＿Ｂに対応するブロックパラメータテーブル２２１を用いて検出ブロックを決定する。
【００６３】
再び、図６を参照する。ブロックパラメータ検出部２３が、決定した検出ブロックの統計値３２を算出する（ステップＳ２５３）。統計値３２の算出には、フレーム記憶部２２に記憶された輝度フレーム３１Ｆの輝度値が用いられる。統計値３２として、検出ブロック内の画素の最大値、最小値、合計値、分散及び標準偏差が算出される。以下、検出ブロックＢＬ１のブロックデータ３３を作成する場合を例に説明する。
【００６４】
（輝度フレームの正規化）
ブロック作成部２４は、輝度フレーム３１Ｆの統計値３１を用いて、輝度フレーム３１Ｆを正規化する（ステップＳ２５４）。輝度フレーム３１Ｆの正規化とは、輝度フレーム３１Ｆの各画素値（輝度値）を、予め設定された標準的な輝度分布に合うように変換する処理である。ニューロ演算処理（ステップＳ３，図２参照）は、演算対象のブロックデータ３３が標準的な輝度分布を有していると仮定して行われる。輝度フレーム３１Ｆの輝度分布に偏りがある場合、ブロックデータ３３の輝度分布にも偏りが生じると考えられる。
【００６５】
例えば、夜間に撮影された輝度フレーム３１Ｆの輝度値は、全体的に低くなるため、歩行者の検出精度に悪影響を及ぼす可能性がある。しかし、輝度フレーム３１Ｆを正規化することにより、歩行者の検出精度が低下することを防ぐことができる。
【００６６】
次に、ブロック作成部２４は、正規化された輝度フレーム３１Ｆから検出ブロックＢＬ１の画像データを切り出し、統計値３２を用いて、検出ブロックＢＬ１の画像データをさらに正規化する（ステップＳ２５５）。輝度フレーム３１Ｆが正規化されたとしても、輝度の空間分布にはばらつきが存在する。正規化されたフレーム３１Ｆにおいて、検出ブロックＢＬ１の領域が暗い領域であった場合、検出ブロックＢＬ１におけるニューロ演算の精度が低下する可能性がある。したがって、検出ブロックＢＬ１の画像データについても、輝度フレーム３１Ｆと同様に正規化が行われる。
【００６７】
（ｓｏｂｅｌフィルタ処理）
以下、正規化された検出ブロックＢＬ１の画像データを、ブロック画像データと呼ぶ。ブロック作成部２４は、ブロック画像データに対してｓｏｂｅｌフィルタ処理を行う（ステップＳ２５６）。ｓｏｂｅｌフィルタ処理は、画像中の物体の輪郭を強調する処理である。
【００６８】
ｓｏｂｅｌフィルタ処理について詳しく説明する。まず、（式１）に示すように、３×３の行列である行列Ｓ０，Ｓ１，Ｓ２，Ｓ３を定義する。
【数１】
0005911165.tif 000002
【００６９】
ブロック画像データを行列Ｐにより表わした場合、行列Ｐは、（式２）のように表わされる。（式２）において、Ｍは、水平方向（Ｘ軸方向）の座標を示す。Ｎは、垂直方向（Ｙ軸方向）の座標を示す。
【数２】
0005911165.tif 000003
【００７０】
ｓｏｂｅｌフィルタ処理後のブロック画像データの画素値をＳＢＬ（ｍ，ｎ）とする。ｍ，ｎは、Ｘ軸方向、Ｙ軸方向の座標である。ＳＢＬ（ｍ，ｎ）は、（式３）によって算出される。
【数３】
0005911165.tif 000004
【００７１】
（式３）において、Ｃｏｒｉｎｇ関数は、下記の（式４）で表わされる。
【数４】
0005911165.tif 000005
【００７２】
また、（式３）において、演算子「＊」は、畳み込み演算を示す。畳み込み演算の式を（式５）に示す。（式５）において用いられる行列Ｓを、（式６）に示す。
【数５】
0005911165.tif 000006
【数６】
0005911165.tif 000007
【００７３】
（式５）において、ｏｕｔ（ｍ，ｎ）は、畳み込み演算後のブロック画像データの画素値を示す。ｐ（ｍ−ｋ，ｎ−ｒ）は、畳み込み演算前のブロック画像データの画素値を示す。行列Ｓは、（式１）に示す行列Ｓ０，Ｓ１，Ｓ２，Ｓ３のいずれかであり、ｓ（ｋ，ｒ）は、行列Ｓの各成分を示す。
【００７４】
（ガウスフィルタ処理）
再び、図６を参照する。ブロック生成部２４は、物体の輪郭が強調されたブロック画像データに対して、ガウスフィルタ処理を行う（ステップＳ２５７）。
【００７５】
（式７）に、ガウスフィルタ処理で使用する点広がり関数Ｗを示す。点広がり関数Ｗは、５×５の行列である。
【数７】
0005911165.tif 000008
【００７６】
ガウスフィルタ処理後のブロック画像データの画素をｇ（ｍ，ｎ）とする。ｓｏｂｅｌフィルタ処理後のブロック画像データの画素の行列をＰ１とする。行列Ｐ１の構成は、（式２）と同様である。ｇ（ｍ，ｎ）は、（式８）に示すように、点広がり関数Ｗと行列Ｐ１を畳み込み演算することにより得られる。ガウスフィルタ処理を実行することにより、ブロック画像データ中のノイズ成分を低下させることができる。
【数８】
0005911165.tif 000009
【００７７】
（平滑化処理）
前処理部２は、ガウスフィルタ処理後のブロック画像データに対して、平滑化処理（ステップＳ２５８）を行う。（式９）に、平滑化処理に用いる行列Ｌを示す。行列Ｌは、３×３の行列である。
【数９】
0005911165.tif 000010
【００７８】
平滑化処理後のブロック画像データの画素をｌｏｗ（ｍ，ｎ）とする。ガウスフィルタ処理後のブロック画像データの画素の行列をＰ２とする。行列Ｐ２の構成は、（式２）と同様である。ｌｏｗ（ｍ，ｎ）は、（式１０）に示すように、行列Ｌと行列Ｐ２を畳み込み演算することにより得られる。
【数１０】
0005911165.tif 000011
【００７９】
次に、ブロック作成部２４は、平滑化処理されたブロック画像データのサイズを、所定のサイズに変換する（ステップＳ２５９）。これにより、ブロックデータ３３が作成される。ブロックデータ３３のサイズは、たとえば、Ｘ軸方向が１６画素であり、Ｙ軸方向が３２画素である（図３Ｂ参照）。ブロック画像データのサイズ変換には、線形補間を使用することができる。
【００８０】
ブロック作成部２４は、ブロックデータ３３をブロックバッファ３Ａ，３Ｂのいずれかに格納する（ステップＳ２６０）。前処理部２は、輝度フレーム３１Ｆから全ての検出ブロックに対応するブロックデータ３３を作成したか否かを確認する（ステップＳ２６１）。ブロックデータ３３の作成が終了していない場合（ステップＳ２６１においてＮｏ）、前処理部２は、ステップＳ２５２に戻り、ステップＳ２５２〜Ｓ２６１の処理を繰り返す。全てのブロックデータ３３を作成した場合（ステップＳ２６１においてＹｅｓ）、前処理部２は、図６に示すフローチャートを終了する。前処理部２は、次の輝度フレーム３１Ｆからブロックデータ３３を作成するために、図６に示すフローチャートを再び開始する。
【００８１】
｛４．ブロックバッファに対する書き込み及び読み出し｝
前処理部２は、ステップＳ２６０において、作成したブロックデータ３３をブロックバッファ３Ａ，３Ｂ（図１参照）のいずれかに格納する。ニューロ演算部４は、ブロックバッファ３Ａ，３Ｂのいずれかからブロックデータ３３を読み出し、読み出したブロックデータ３３に対してニューロ演算を行う（ステップＳ３、図２参照）。
【００８２】
画像認識装置１００は、ブロックバッファを二つ設けることにより、ブロックデータ３３を作成する処理（図６参照）と、ニューロ演算処理（ステップＳ３）とを並行して実行することができる。これにより、フレーム３０Ｆから歩行者を検出する処理を効率良く実行することができる。
【００８３】
図８は、ブロックバッファ３Ａ，３Ｂの読み出し及び書き込みのタイミングを示すタイムチャートである。前処理部２は、時刻Ｔ２０〜Ｔ２１の期間に、検出ブロックＢＬ１（図７Ｂ参照）のブロックデータ３３を作成してブロックバッファ３Ａに書き込む。時刻Ｔ２１までは、ブロックバッファ３Ａ，３Ｂのいずれにもブロックデータ３３が書き込まれていないため、ニューロ演算処理（ステップＳ３）は、実行されない。
【００８４】
時刻Ｔ２１において、検出ブロックＢＬ１のブロックデータ３３の書き込みが完了する。ニューロ演算部４は、時刻Ｔ２１から、検出ブロックＢＬ１のブロックデータ３３に対するニューロ演算処理（ステップＳ３）を開始する。つまり、ニューロ演算部４が、時刻Ｔ２１〜Ｔ２２の期間に、検出ブロックＢＬ１のブロックデータ３３をブロックバッファ３Ａから読み出す。前処理部２は、時刻Ｔ２１〜Ｔ２２の期間に、検出ブロックＢＬ２（図７Ｂ参照）のブロックデータ３３を作成してブロックバッファ３Ｂに書き込む。
【００８５】
時刻Ｔ２２〜Ｔ２３の期間において、ニューロ演算部４は、ブロックバッファ３Ｂから検出ブロックＢＬ２のブロックデータ３３を読み出す。前処理部２は、ブロックバッファ３Ａに、検出ブロックＢＬ３（図７Ｂ参照）のブロックデータ３３を書き込む。以下、書き込み対象のブロックバッファと、読み出し対象のブロックバッファとが交互に切り替わる。つまり、ブロックバッファ３Ａ，３Ｂは、ピンポンバッファを構成する。したがって、ブロックデータ３３を作成する処理と、ニューロ演算処理とを並行して実行することができる。
【００８６】
｛５．ニューロ演算処理（ステップＳ３）｝
以下、ニューロ演算処理（ステップＳ３）について詳しく説明する。
【００８７】
｛５．１．ニューロ演算の概略｝
図９は、ニューロ演算部４により実行されるニューロ演算処理（ステップＳ３）の概略を示す図である。図９に示すように、ニューロ演算部４は、ブロックデータ３３の各画素をニューロ演算することにより、出力シナプス３４を算出する。ニューロ演算部４は、入力層５１と、中間層５２と、出力層５３とを有する三層パーセプトロンを用いて、ニューロ演算を行う。
【００８８】
入力層５１は、入力シナプス４１−１〜４１−Ｈを有する。入力シナプス４１−１〜４１−Ｈは、ブロックデータ３３の各画素に対応する。以下、入力シナプス４１−１〜４１−Ｈを総称する場合、入力シナプス４１と呼ぶ。ブロックデータ３３のサイズは１６×３２ピクセルであるため、入力シナプス４１の数は、５１２個である。ニューロ演算部４は、中間シナプス算出処理（ステップＳ３００）を実行して、入力シナプス４１から中間層５２のシナプス（中間シナプス）を算出する。
【００８９】
中間層５２は、中間シナプス４２−１〜４２−Ｊを有する。本実施の形態では、中間シナプスの数を２５６とする。ただし、中間シナプスの数は、入力シナプス４１の数より大きくない数値であればよい。
【００９０】
出力シナプス３４は、一つの数値データである。ニューロ演算部４は、出力シナプス算出処理（ステップＳ３５０）を実行して、中間シナプス４２−１〜４２−Ｊから出力シナプス３４を算出する。
【００９１】
ここで、シナプスの計算方法を説明する。中間シナプス及び出力シナプス３４の計算法は、共通である。シナプスの計算式を、（式１１）に示す。
【数１１】
0005911165.tif 000012
【００９２】
（式１１）の詳細について、中間シナプス４２−１の計算を例にして説明する。図１０は、中間シナプス４２−１の計算手順を示す概略図である。
【００９３】
入力シナプス４１−１〜４１−Ｈは、（式１１）のＳｉに対応する。入力シナプス４１ごとに設定される重み付け係数Ｗ１１〜Ｗ１Ｈは、（式１１）のＷｉに対応する。重み付け係数Ｗｉは、係数テーブル５に格納される。本実施の形態では、検出対象が歩行者であるため、歩行者に対応する重み付け係数Ｗｉが、係数テーブル５に格納される。なお、係数テーブル５に格納される重み付け係数Ｗｉを変更することにより、歩行者だけでなく、自動車、標識などの様々な物体を検出することが可能となる。
【００９４】
ｂｍは、中間シナプス４２−１の初期値である。（式１１）のΣ演算子の項は、合計値４１Ｔに対応し、入力シナプス４１と重み付け係数との乗算値の総和である。合計値４１Ｔと初期値ｂｍとの和をシグモイド関数に代入することにより、中間シナプス４２−１を得ることができる。シグモイド関数を、（式１２）に示す。
【数１２】
0005911165.tif 000013
【００９５】
このように、ニューロ演算処理では、乗算処理及び加算処理の実行回数が非常に多くなる。ニューロ演算処理（ステップＳ３）を高速化するために、ニューロ演算部４は、中間シナプス算出処理（Ｓ３００）及び出力シナプス算出処理（Ｓ３５０）において、複数の演算処理を並行して実行する。以下、それぞれの処理について詳しく説明する。
【００９６】
｛５．２．中間シナプス算出処理（ステップＳ３００）｝
図１１は、ニューロ演算部４により実行される中間シナプス算出処理（Ｓ３００）のフローチャートである。図１２〜図１６は、中間シナプスの算出過程を示す図である。以下、説明を簡単にするために、入力シナプス４１の数及び中間シナプスの数が、それぞれ１２個である場合を例に説明する。
【００９７】
ニューロ演算部４は、１２個の中間シナプスの中から、算出対象の中間シナプスのグループ（中間グループ）を決定する（ステップＳ３０１）。図１２に示すように、中間シナプス４２−１〜４２−４が、中間グループとして選択される。中間シナプス４２−１〜４２−４の数値を、中間値Ｍ１〜Ｍ４とする。ニューロ演算部４は、中間値Ｍ１〜Ｍ４の初期値を設定する（ステップＳ３０２）。初期値は、（式１１）のｂｍに対応し、中間シナプスごとに設定される数値である。
【００９８】
ニューロ演算部４は、中間シナプス４２−１〜４２−４の算出に用いる入力シナプス４１のグループ（入力グループ）を決定する（ステップＳ３０３）。最初に、入力シナプス４１−１〜４１−４が、入力グループとして選択される。入力シナプス４１−１〜４１−４に対応する画素値Ｓ１〜Ｓ４が、メモリ（図示省略）にロードされる（ステップＳ３０４）。ニューロ演算部４は、入力グループの中から入力シナプス４１−１を選択し、入力シナプス４１−１に対応する重み付け係数Ｗ１１〜Ｗ１４を、メモリ（図示省略）にロードする（ステップＳ３０５）。重み付け係数Ｗ１１〜Ｗ１４は、中間シナプス４２−１〜４２−４を算出するために、入力シナプス４１−１に対して設定された係数である。重み付け係数Ｗ１１〜Ｗ１４は、係数テーブル５からロードされる。
【００９９】
ニューロ演算部４は、画素値Ｓ１に対して重み付け係数Ｗ１１〜Ｗ１４をそれぞれ乗算し、各乗算値を中間値Ｍ１〜Ｍ４に加算する（ステップＳ３０６）。具体的には、画素値Ｓ１と重み付け係数Ｗ１１の乗算値が、中間値Ｍ１に加算される。画素値Ｓ１と重み付け係数Ｗ１２の乗算値が、中間値Ｍ２に加算される。同様に、画素値Ｓ１と重み付け係数Ｗ１３，Ｗ１４との乗算値が、中間値Ｍ３，Ｍ４に加算される。
【０１００】
次に、ニューロ演算部４は、入力グループに属する全ての入力シナプスを、中間値Ｍ１〜Ｍ４の算出に用いたか否かを確認する（ステップＳ３０７）。入力シナプス４１−２〜４１−４が未だ選択されていないため（ステップＳ３０７においてＮｏ）、ニューロ演算部４は、ステップＳ３０５に戻る。
【０１０１】
図１３に示すように、ニューロ演算部４は、入力シナプス４１−２について、ステップＳ３０５，Ｓ３０６の処理を実行する。すなわち、入力シナプス４１−２の画素値Ｓ２と、重み付け係数Ｗ２１との乗算値が、中間値Ｍ１に加算される。同様に、画素値Ｓ２と重み付け係数Ｗ２２〜Ｗ２４との乗算値が、中間値Ｍ２〜Ｍ４に加算される。
【０１０２】
ニューロ演算部４は、入力シナプス４１−３に対しても、ステップＳ３０５，Ｓ３０６の処理を実行する。入力シナプス４１−３の画素値と重み付け係数との乗算値が、中間値Ｍ１〜Ｍ４に加算される。
【０１０３】
ニューロ演算部４は、入力シナプス４１−４に対しても、ステップＳ３０５，Ｓ３０６の処理を実行する。図１４に示すように、入力シナプス４１−４の画素値Ｓ４と重み付け係数Ｗ４１〜Ｗ４４との乗算値が、中間値Ｍ１〜Ｍ４に加算される。
【０１０４】
再び、図１１を参照する。中間値Ｍ１〜Ｍ４の算出に、入力シナプス４１−１〜４１−４を使用したため（ステップＳ３０７においてＹｅｓ）、ニューロ演算部４は、全ての入力シナプス４１を入力グループとして選択したか否かを確認する（ステップＳ３０８）。
【０１０５】
入力シナプス４１−５〜４１−１２が、入力グループとして選択されていないため（ステップＳ３０８においてＮｏ）、ニューロ演算部４は、ステップＳ３０３に戻り、入力シナプス４１−５〜４１−８を入力グループとして新たに選択する。
【０１０６】
ニューロ演算部４は、入力シナプス４１−５〜４１−８のそれぞれに対して、ステップＳ３０５，Ｓ３０６の処理を実行する。図１５は、入力シナプス４１−５と重み付け係数Ｗ５１〜Ｗ５４との乗算値を、中間値Ｍ１〜Ｍ４に加算する処理を示している。以下、全ての入力シナプス４１が入力グループとして選択されるまで（ステップＳ３０８においてＹｅｓ）、ステップＳ３０３〜Ｓ３０８の処理が繰り返される。
【０１０７】
全ての入力シナプス４１が入力グループとして選択された場合（ステップＳ３０８においてＹｅｓ）、ニューロ演算部４は、中間値Ｍ１〜Ｍ４をシグモイド関数に入力する（ステップＳ３０９）。シグモイド関数の計算結果が、中間シナプス４２−１〜４２−４として、図示しないメモリに保存される（ステップＳ３１０）。
【０１０８】
このように、中間シナプス４２のうち、中間シナプス４２−１〜４２−４が最初に算出される。入力シナプスと重み付け係数の乗算値が、複数の中間値に並列して加算されることにより、４つの中間シナプス４２を同時に算出することができる。したがって、中間シナプス算出処理（ステップＳ３００）を高速に実行することができる。
【０１０９】
再び、図１１を参照する。ニューロ演算部４は、全ての中間シナプス４２の算出が終了したか否かを確認する（ステップＳ３１１）。中間シナプス４２−５〜４２−１２が算出されていないため、ニューロ演算部４は、ステップ３０１に戻る。図１６に示すように、ニューロ演算部４は、新たな中間グループとして、中間シナプス４２−５〜４２−８を決定する（ステップＳ３０１）。ニューロ演算部４は、新たな中間グループに対してステップＳ３０１〜Ｓ３１０を実行することにより、中間シナプス４２−５〜４２−８を算出する。以下、全ての中間シナプス４２が算出されるまで（ステップＳ３１１においてＹｅｓ）、ステップＳ３０１〜Ｓ３１１が繰り返される。
【０１１０】
図１７は、中間シナプス算出処理（Ｓ３００）のタイムチャートである。図１７において、Ｎ１は、入力シナプス４１の数（１２個）を示す。Ｎ２は、中間シナプス４２の数（１２個）を示す。Ｑは、入力グループに属する入力シナプス４１の数（４個）と、中間グループに属する中間シナプスの数（４個）を示す。
【０１１１】
破線で示す枠４５は、入力シナプス４１−１〜４１−４が入力グループとして選択されたときの処理に相当する。枠４６は、入力シナプス４１−５〜４１−８が入力グループとして選択されたときの処理に相当する。枠４７は、入力シナプス４１−９〜４１−１２が入力グループとして選択されたときの処理に相当する。枠４８は、一つの中間グループにおいて、中間シナプスが算出される処理に相当する。図１７において、１サイクルとは、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の１サイクルに対応する。
【０１１２】
図１７において、Ｉｎｉｔ（Ｉｎｉｔ処理）は、中間値に初期値を設定する処理（ステップＳ３０２）に対応する。Ｌｉ（Ｌｉ処理）は、入力グループとして選択された入力シナプス４１の画素値をロードする処理（ステップＳ３０４）に対応する。Ｌｃ（Ｌｃ処理）は、重み付け係数をロードする処理（ステップＳ３０５）に対応する。ＭＡＣ（ＭＡＣ処理）は、入力シナプスの画素値と重み付け係数とを乗算し、乗算値を中間値に加算する処理（ステップＳ３０６）に対応する。ＭＡＣ処理では、乗算と加算の二つの処理が行われるため、ＭＡＣ処理のサイクル数は、２である。ＳＩＧ（ＳＩＧ処理）は、シグモイド関数を用いた計算処理（ステップＳ３０９）に対応する。Ｓｓ（Ｓｓ処理）は、算出した中間シナプスを保存する処理（ステップＳ３１０）に対応する。
【０１１３】
ＭＡＣ処理について詳しく説明する。ＭＡＣ処理は、（式１１）のカッコ内の式に対応した演算処理を実行する。（式１１）のカッコ内の式を演算子ｍａｃと定義した場合、演算子ｍａｃは、下記の漸化式（式１３）で表わすことができる。
【数１３】
0005911165.tif 000014
【０１１４】
ＭＡＣ処理は、１サイクル目で、Ｓｉ×Ｗｉの乗算処理を行う。上述したように、Ｓｉは、入力シナプス４１−１〜４１−Ｈ（図１０参照）に対応する。Ｗｉは、入力シナプス４１−１〜４１−Ｈのそれぞれに対して設定される重み付け係数Ｗ１１〜Ｗ１Ｈ（図１０参照）に対応する。ＭＡＣ処理は、次の２サイクル目で、直前のＭＡＣ処理の演算結果（ｍａｃ（ｉ−１））に、乗算値（Ｗｉ×Ｓｉ）を加算する処理を行う。このように、ＭＡＣ処理は、乗算処理と加算処理とを実行するため、２サイクルを必要とする。
【０１１５】
枠４５，４６，４７のそれぞれにおいて、ＭＡＣ処理と、重み付け係数をロードする処理（Ｌｃ処理）とが、並行して実行されている。これにより、中間シナプス４２を算出する処理を効率よく実行できる。
【０１１６】
また、枠４５内のＭＡＣ処理４５Ａと、枠４６内のＬｉ処理４６Ａ，Ｌｃ処理４６Ｂとが、並行して実行されている。すなわち、入力グループが新たに設定される場合、Ｌｉ処理及びＬｃ処理は、直前の入力グループにおけるＭＡＣ処理に並行して実行される。これにより、ニューロ演算部４は、中間シナプス４２を算出する処理を効率良く実行できる。
【０１１７】
次に、中間シナプス算出処理（Ｓ３００）で必要なサイクル数を説明する。枠４５〜４７に示すように、各入力グループにおいて、ＭＡＣ処理に必要なサイクル数は、Ｑ＋１サイクルである。また、中間グループに属する全ての中間シナプス４２を算出するために、枠４５〜４７の処理をＮ１／Ｑ回繰り返す必要がある。枠４８は、中間グループに属する中間シナプスが算出される処理に相当する。このため、全ての中間シナプスを算出するためには、枠４８の処理をＮ２／Ｑ回繰り返す必要がある。この結果、全ての中間シナプスを算出するために必要なサイクル数Ｃ１は、（式１４）で表わされる。
【数１４】
0005911165.tif 000015
【０１１８】
（式１４）において、（Ｑ＋１）の項は、枠４５〜４７において、ＭＡＣ処理が行われる期間に相当する。また、「６」の項において、３サイクル分は、最初の入力グループ（枠４５）におけるＩｎｉｔ処理、Ｌｉ処理及びＬｃ処理に相当する。残りの３サイクル分は、最後の入力グループ（枠４７）の処理の後に実行されるＳＩＧ処理の２サイクルと、Ｓｓ処理の１サイクルに相当する。
【０１１９】
次に、Ｌｉ処理及びＬｃ処理について詳しく説明する。（式１４）において、Ｑは、中間シナプス算出処理（Ｓ３００）における並列数を示し、並行して算出される中間シナプスの数に相当する。図１２〜図１６に示す例の場合、並列数Ｑは４である。
【０１２０】
入力シナプス４１の画素値Ｓｉのビット数をｄビットとした場合、Ｌｉ処理により、ｄ×４ビットのデータが、ブロックバッファ３Ａ，３Ｂのいずれかから読み出される。入力シナプス４１に対応する重み付け係数Ｗｉのビット数をｅビットとした場合、Ｌｃ処理により、ｅ×４ビットのデータが、係数テーブル５から読み出される。たとえば、入力シナプス４１の画素値Ｓｉのビット数ｄが８ビットである場合、Ｌｉ処理は、ブロックバッファ３Ａ，３Ｂのいずれかから３２ビットのデータを読み出す。入力シナプス４１に対応する重み付け係数Ｗｉのビット数ｅが１６ビットである場合、Ｌｃ処理により、６４ビットのデータが係数テーブル５からメモリにロードされる。
【０１２１】
このように、中間シナプス算出処理（Ｓ３００）において、Ｌｉ処理及びＬｃ処理は、１サイクルで、並列数Ｑに対応したビット数のデータを読み出す。これにより、ＭＡＣ処理に必要なデータを効率的に読み出すことが可能となる。
【０１２２】
｛５．３．シグモイド関数の線形近似｝
（式１２）に示すように、シグモイド関数は、指数関数を使用する。ステップＳ３０９（図１１参照）の処理において、シグモイド関数をそのまま使用した場合、計算処理が煩雑となり、中間シナプスの算出に時間を要する。そこで、ステップＳ３０９の処理を簡略化するために、シグモイド関数の線形近似関数を使用する。（式１５）に線形近似関数を示す。
【数１５】
0005911165.tif 000016
【０１２３】
図１８は、シグモイド関数と線形近似関数との対応を示す図である。図１８において、実線の曲線がシグモイド関数である。太い破線が、線形近似関数である。（式１５）に示すように、線形近似関数は、５つの区間（Ｘ１〜Ｘ５）に区分される。図１８において、Ｔ０≒−３．５、Ｔ１≒−１．７５、Ｔ２≒１．７５、Ｔ３≒３．５である。線形近似関数を使用することにより、中間値を入力とするシグモイド関数の計算結果を簡易な処理で得ることができる。したがって、中間シナプスを算出する処理を高速化できる。
【０１２４】
なお、図１８に示すシグモイド関数は、ｘ＝０における値Ｚを中心として点対称である。したがって、線形近似関数として、ｘ≧０の区間のみを設定しておいてもよい。シグモイド関数が点対称であることと、ｘ≧０の区間で定義されたシグモイド関数とを利用して、ｘ＜０のシグモイド関数の計算結果も容易に得ることができる。
【０１２５】
｛５．４．出力シナプス算出処理（ステップＳ３５０）｝
図１９は、ニューロ演算部４により実行される出力シナプス算出処理（ステップＳ３５０）のフローチャートである。図２０〜図２３は、出力シナプス３４の算出過程を示す図である。以下、中間シナプス算出処理（ステップＳ３００）の説明と同様に、中間シナプスの数が１２個である場合を例に説明する。
【０１２６】
ニューロ演算部４は、４個の部分加算値４３−１〜４３−４を設定する（ステップＳ３５１）。部分加算値４３−１〜４３−４は、出力シナプス３４の算出に用いられる一時的な数値であり、設定時の値は０である。図２０に示すように、ニューロ演算部４は、部分加算値４３−１に出力シナプス３４の初期値３４ｉを設定する（ステップＳ３５２）。部分加算値４３−２〜４３−４に初期値３４ｉは設定されない。部分加算値４３−１〜４３−４は後に合計されるため、部分加算値４３−１〜４３−４のいずれか一つに初期値３４ｉを設定すればよい。
【０１２７】
次に、ニューロ演算部４は、部分加算値４３−１〜４３−４の数に応じて、４つの中間シナプス４２−１〜４２−４を選択して、メモリ（図示省略）にロードする（ステップＳ３５３）。中間シナプス４２−１〜４２−４に対応する重み付け係数Ｗｍ１〜Ｗｍ４（図２０参照）が、メモリにロードされる（ステップＳ３５４）。重み付け係数Ｗｍ１は、中間シナプス４２−１の算出に用いられた重み付け係数Ｗ１１，Ｗ１２，・・・（図１２参照）と異なるデータとして係数テーブル５に設定されている。重み付け係数Ｗｍ２〜Ｗｍ４も同様である。
【０１２８】
ステップＳ３５４の後で、中間シナプスと重み付け係数との乗算値が、部分加算値に加算される（ステップＳ３５５）。図２０に示すように、中間シナプス４２−１と重み付け係数Ｗｍ１との乗算値が、部分加算値４３−１に加算される。同様に、中間シナプス４２−２〜４２−４と重み付け係数Ｗｍ２〜Ｗｍ４との乗算値が、部分加算値４３−２〜４３−４に加算される。
【０１２９】
このように、ステップＳ３５３〜Ｓ３５５の処理は、部分加算値の数（４個）に応じた並列的な処理であるため、出力シナプス算出処理（ステップＳ３５０）を高速化することができる。
【０１３０】
ニューロ演算部４は、全ての中間シナプス４２を選択したか否かを確認する（ステップＳ３５６）。出力シナプス４２−５〜４２−１２が未だ選択されていないため（ステップＳ３５６においてＮｏ）、ニューロ演算部４は、ステップＳ３５３に戻り、出力シナプス４２−５〜４２−８を選択してメモリにロードする。
【０１３１】
ニューロ演算部４は、出力シナプス４２−５〜４２−８に関して、ステップＳ３５４，Ｓ３５５の処理を実行する。図２１に示すように、中間シナプス４２−５と重み付け係数Ｗｍ５との乗算値が、部分加算値４３−１に加算される。同様に、中間シナプス４２−６〜４２−８と重み付け係数Ｗｍ６〜Ｗｍ８との乗算値が、部分加算値４３−２〜４３−４に加算される。
【０１３２】
次に、ニューロ演算部４は、出力シナプス４２−９〜４２−１２を選択してロードする（ステップＳ３５６においてＮｏ，ステップＳ３５３）。ニューロ演算部４は、出力シナプス４２−９〜４２−１２に関しても、ステップＳ３５４，Ｓ３５５の処理を実行する。図２２に示すように、中間シナプス４２−９と重み付け係数Ｗｍ９との乗算値が、部分加算値４３−１に加算される。同様に、中間シナプス４２−１０〜４２−１２と重み付け係数Ｗｍ１０〜Ｗｍ１２との乗算値が、部分加算値４３−２〜４３−４に加算される。全ての中間シナプスが選択されたため（ステップＳ３５６においてＹｅｓ）、ニューロ演算部４は、部分加算値４３−１〜４３−４の算出が終了したと判断する。
【０１３３】
ニューロ演算部４は、部分加算値４３−１〜４３−４を合計することにより（ステップＳ３５７）、合計値４４（図２３参照）を算出する。このとき、ステップＳ３５７の処理は、並列的に実行される。例えば、ステップＳ３５７で実行される加算処理の並列数が２である場合、最初に、ニューロ演算部４は、部分加算値４３−１，４３−２の合計値４４Ａを算出する処理と、部分加算値４３−３，４３−４の合計値４４Ｂを算出する処理とを並列して実行する。そして、合計値４４Ａ，４４Ｂが合計されることにより、合計値４４が算出される。これにより、出力シナプス算出処理（ステップＳ３５０）を高速化することができる。
【０１３４】
ニューロ演算部４は、合計値４４を入力としたシグモイド関数を演算することにより（ステップＳ３５８）、出力シナプス３４を算出する。ステップＳ３５８の処理の内容は、ステップＳ３０９（図１１参照）と同様の処理である。これにより、出力シナプス算出処理（ステップＳ３５０）が終了する。
【０１３５】
図２４は、出力シナプス算出処理（Ｓ３５０）のタイムチャートである。図２４において、Ｎ２は、中間シナプスの数（１２個）を示す。Ｆは、部分加算値の数（４個）を示す。
【０１３６】
Ｉｎｉｔ＿０（Ｉｎｉｔ＿０処理）は、部分加算値４３−１に初期値３４ｉを設定する処理であり、ステップＳ３５２に対応する。Ｌｓ（Ｌｓ処理）は、選択された中間シナプスをロードする処理であり、ステップＳ３５３に対応する。Ｌｃ（Ｌｃ処理）は、ロードされた中間シナプスに対応する重み付け係数をロードする処理であり、ステップＳ３５４に対応する。
【０１３７】
ＭＡＣ（ＭＡＣ処理）は、中間シナプス４２と重み付け係数とを乗算する処理と、乗算値を部分中間値に加算する処理であり、ステップＳ３５５に対応する。ＭＡＣ処理は、図１７に示すＭＡＣ処理と同じ処理である。ＭＡＣ処理では、乗算処理と加算処理が行われるため、ＭＡＣ処理に必要なサイクル数は、２である。
【０１３８】
ＳＵＭ（ＳＵＭ処理）は、二つの部分加算値を合計する処理である。ＳＵＭ処理をＦ／Ｓ回繰り返すことにより、合計値４４が算出される（ステップＳ３５７）。Ｓは、ステップＳ３５７で実行される加算処理の並列数である。ＳＵＭ処理を１回実行するために必要なサイクル数は、１である。Ｓｓ（Ｓｓ処理）は、出力シナプス３４をニューロ演算部４のメモリに保存する処理であり、図１７のＳｓ処理と同じ処理である。Ｓｓ処理に必要なサイクル数は、１である。
【０１３９】
図２４に示すように、ＭＡＣ処理と、Ｌｓ処理，Ｌｃ処理とが並列的に実行されていることが分かる。たとえば、中間シナプス４２−１〜４２−４を用いたステップＳ３５５の処理と、中間シナプス４２−５〜４２−８を用いたステップＳ３５３，Ｓ３５４の処理が並列して実行される。これにより、出力シナプス算出処理（ステップＳ３５０）を効率良く実行することができる。
【０１４０】
次に、出力シナプス算出処理（Ｓ３５０）において必要なサイクル数を説明する。ＭＡＣ処理と並列に実行されるＬｓ処理，Ｌｃ処理のサイクル数は、考慮しなくてよい。ＭＡＣ処理の実行回数は、中間シナプスの数（Ｎ２＝１２個）／中間シナプスの選択数（Ｆ＝４個）で表わすことができる。
【０１４１】
その他に、Ｌｓ処理，Ｌｃ処理が単独で１回ずつ実行される。ＳＵＭ処理（１サイクル）がＦ／Ｓ回繰り返される。Ｉｎｉｔ＿０処理（１サイクル）、ＳＩＧ処理（２サイクル）及びＳｓ処理（１サイクル）が単独で実行される。この結果、出力シナプス算出処理（Ｓ３５０）において必要なサイクル数は、（式１６）で表わすことができる。
【数１６】
0005911165.tif 000017
【０１４２】
（式１６）において、（Ｎ２／Ｆ）×２の項は、ＭＡＣ処理のサイクル数を示す。Ｆ／Ｓの項は、ＳＵＭ処理が行われる回数を示す。“６”の項は、単独で実行されるＩｎｉｔ処理、Ｌｓ処理，Ｌｃ処理、ＳＩＧ処理、Ｓｓ処理のサイクル数の合計値である。
【０１４３】
次に、出力シナプス算出処理（Ｓ３５０）で行われるＬｓ処理及びＬｃ処理について詳しく説明する。（式１６）において、Ｆは、出力シナプス算出処理（Ｓ３５０）における並列数を示し、部分加算値の数に対応する。図２０〜図２２に示す例の場合、並列数Ｆは４である。
【０１４４】
中間シナプスがｆビットのデータである場合、Ｌｓ処理により、ｆ×４ビットのデータが図示しないメモリにロードされる。中間シナプスに対応する重み付け係数Ｗｉのビット数をｇビットとした場合、Ｌｃ処理により、ｇ×４ビットのデータが、係数テーブル５から読み出される。例えば、中間シナプスが８ビットのデータである場合、Ｌｓ処理により、３２ビットのデータが図示しないメモリにロードされる。重み付け係数Ｗｉのビット数を１６ビットとした場合、Ｌｃ処理により、６４ビットのデータが係数テーブル５からメモリにロードされる。
【０１４５】
このように、出力シナプス算出処理（Ｓ３５０）において、Ｌｉ処理及びＬｃ処理は、１サイクルで、並列数Ｆに対応したビット数のデータを読み出す。これにより、ＭＡＣ処理に必要なデータを効率的に読み出すことが可能となる。
【０１４６】
このように、画像認識装置１００は、中間シナプス算出処理（ステップＳ３００）において、複数の中間シナプス４２を並列的に算出する。また、画像認識装置１００は、出力シナプス算出処理（ステップＳ３５０）において、中間シナプス４２と重み付け係数との乗算値をそれぞれの部分加算値に加算する処理を並列的に実行する。このように、様々な処理を並列的に実行することにより、出力シナプス３４を高速に算出することができる。
【０１４７】
なお、ニューロ演算部４は、コンフィギュラブル・プロセッサにより構成されることが望ましい。汎用のＣＰＵまたはＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｅｒ）を使用する場合、ニューロ演算部４は、ソフトウェア処理により実行される。しかし、ＣＰＵまたはＤＳＰがロードできるデータのビット数が固定されていたり、並列的に処理できる命令数が固定されていたりする。このため、本実施の形態の画像認識処理をリアルタイムで実行しようとする場合、クロック周波数の高いＣＰＵまたはＤＳＰを使用しなければならないため、消費電力が大きくなるという問題がある。
【０１４８】
ニューロ演算部４をハードウェア回路により構成した場合、回路の構成が複雑となるため、コストが増加するという問題がある。この場合、並列に処理できる命令の数、シナプス数、及びパーセプトロンの段数などを容易に変更することができない。
【０１４９】
コンフィギュラブル・プロセッサは、本実施の形態の画像認識処理に対応した命令を追加することが可能なプロセッサである。たとえば、重み付け係数Ｗｉのロードを１サイクルで実行させるために、コンフィギュラブル・プロセッサの構成を変更できる。また、中間シナプス算出処理（Ｓ３００）及び出力シナプス算出処理（Ｓ３５０）の並列数に応じて、コンフィギュラブル・プロセッサの構成を変更できる。汎用のＣＰＵまたはＤＳＰよりもクロック周波数の低いコンフィギュラブル・プロセッサを使用しても、リアルタイムで本実施の携帯の画像認識処理を実行することが可能となる。また、ニューロ演算部４をハードウェア回路により実装する場合と比べて、ニューロ演算の内容を容易に変更することができる。したがって、歩行者だけでなく、様々な物体の画像認識処理に対応したニューロ演算部４を容易に実現することができる。
【０１５０】
上記実施の形態において、ブロック作成部２４が、検出ブロックを正規化する（ステップＳ２５５、図６参照）前に輝度フレーム３１Ｆを正規化する（ステップＳ２５４）例を説明した。しかし、ブロック作成部２４は、ステップＳ２５４を実行しなくてもよい。これにより、ブロックデータ３３を作成する処理を高速化することができる。また、検出ブロックを正規化するたびに輝度フレーム３１Ｆを正規化するのではなく、正規化した輝度フレーム３１Ｆを図示しないメモリに保存しておいてもよい。この場合、ブロック作成部２４は、最初の検出ブロックを正規化する前に、輝度フレーム３１Ｆを正規化し（ステップＳ２５５）、２番目以降の検出ブロックを正規化するときには輝度フレーム３１Ｆを正規化しなくてもよい。
【０１５１】
上記実施の形態において、ニューロ演算部４は、三層パーセプトロンのニューロ演算を実行する例を説明した（図９参照）。しかし、ニューロ演算部４は、中間シナプスを算出する処理を複数回繰り返してもよい。たとえば、ニューロ演算部４は、中間シナプス４２−１〜４２−Ｊから新たな中間シナプスを算出し、新たな中間シナプスから出力シナプス３４を算出してもよい。
【符号の説明】
【０１５２】
１００  画像認識装置
１  入力インタフェース
２  前処理部
３Ａ，３Ｂ  ブロックバッファ
４  ニューロ演算部
５  後処理部
６  後処理部
７  撮影データ記憶部
２１  フレームパラメータ検出部
２２  フレーム記憶部
２２Ａ，２２Ｂ  フレームバッファ
２３  ブロックパラメータ検出部
２４  ブロック作成部
３０Ｆ  フレーム
３１Ｆ  輝度フレーム
３４  出力シナプス
４１−１〜４１−Ｈ  入力シナプス
４２−１〜４２−Ｊ  中間シナプス
【図１】
0005911165.tif 000018
【図２】
0005911165.tif 000019
【図３Ａ】
0005911165.tif 000020
【図３Ｂ】
0005911165.tif 000021
【図３Ｃ】
0005911165.tif 000022
【図４】
0005911165.tif 000023
【図５】
0005911165.tif 000024
【図６】
0005911165.tif 000025
【図７Ａ】
0005911165.tif 000026
【図７Ｂ】
0005911165.tif 000027
【図８】
0005911165.tif 000028
【図９】
0005911165.tif 000029
【図１０】
0005911165.tif 000030
【図１１】
0005911165.tif 000031
【図１２】
0005911165.tif 000032
【図１３】
0005911165.tif 000033
【図１４】
0005911165.tif 000034
【図１５】
0005911165.tif 000035
【図１６】
0005911165.tif 000036
【図１７】
0005911165.tif 000037
【図１８】
0005911165.tif 000038
【図１９】
0005911165.tif 000039
【図２０】
0005911165.tif 000040
【図２１】
0005911165.tif 000041
【図２２】
0005911165.tif 000042
【図２３】
0005911165.tif 000043
【図２４】
0005911165.tif 000044