画像認識装置
【課題】本発明は、ハードウェアの規模を小さくでき、ニューロ演算を用いた画像認識処理をリアルタイムで実行することができる技術を提供することを課題とする。
【解決手段】画像認識装置100は、車載カメラが撮影した動画像データのフレーム30Fに歩行者が撮影されているか否かを判定する。前処理部2は、フレームの中から検出ブロックを決定し、フレームから検出ブロックに対応するブロック画像データを切り出す。ブロック画像データから、検出ブロックのサイズよりも小さい所定サイズのブロックデータ33が作成される。ニューロ演算部4は、ブロックデータ33をニューロ演算して出力シナプス34を算出する。後処理部6は、出力シナプス34に基づいて、検出ブロック内に歩行者がいるか否かを判定する。後処理部6は、歩行者が検出された場合、歩行者が検出された検出ブロックをフレーム30Fの上に重ねた結果データ35を作成する。
【解決手段】画像認識装置100は、車載カメラが撮影した動画像データのフレーム30Fに歩行者が撮影されているか否かを判定する。前処理部2は、フレームの中から検出ブロックを決定し、フレームから検出ブロックに対応するブロック画像データを切り出す。ブロック画像データから、検出ブロックのサイズよりも小さい所定サイズのブロックデータ33が作成される。ニューロ演算部4は、ブロックデータ33をニューロ演算して出力シナプス34を算出する。後処理部6は、出力シナプス34に基づいて、検出ブロック内に歩行者がいるか否かを判定する。後処理部6は、歩行者が検出された場合、歩行者が検出された検出ブロックをフレーム30Fの上に重ねた結果データ35を作成する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ニューラルネットワークを用いて画像から物体を検出する画像認識装置に関する。
【背景技術】
【0002】
自動車などの車両を安全に走行させるため、様々な方法が検討されている。たとえば、車両の進行方向を撮影するカメラを設置し、カメラが撮影した画像から歩行者などを検出する機能をカーナビゲーションシステムに設ける方法がある。カーナビゲーションシステムは、歩行者を検出した場合、運転手に対して歩行者の存在を知らせる。運転手は、歩行者の動きを意識しながら車両を運転することができるため、車両の安全走行が可能となる。
【0003】
カメラにより撮影された画像から歩行者を検出する方法として、ニューラルネットワークを用いる方法がある。ニューラルネットワークとは、人間の脳神経系をモデルとした情報処理システムであり、歩行者の検出の他に、文字認識などにも用いられる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2008−21034号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1には、車両にカメラを搭載し、カメラにより撮像された画像から歩行者を検出する画像認識装置が記載されている。特許文献1に係る画像認識装置は、顕著性算出法を用いて、判別の候補となる候補物体を入力画像から検出する。候補物体に対してニューラルネットワークを適用することにより、候補物体が歩行者であるか否かが判定される。
【0006】
しかし、ニューラルネットワーク(ニューロ演算)の演算量は、膨大である。カメラにより撮影された画像から歩行者を、ニューロ演算を用いて検出する場合、画像認識処理をリアルタイムに行う必要がある。したがって、ニューロ演算のために、大規模なハードウェアを用いる必要があった。また、ニューロ演算をソフトウェア処理により実行する場合、クロック周波数の高いプロセッサを用いなければならず、消費電力が大きくなるという問題があった。
【0007】
そこで、本発明は、前記問題点に鑑み、ハードウェアの規模を小さくでき、ニューロ演算を用いた画像認識処理をリアルタイムで実行することができる技術を提供することを課題とする。
【0008】
また、本発明は、ニューロ演算を用いた画像認識処理を実行する際に、消費電力を低減することができる技術を提供することを課題とする。
【課題を解決するための手段】
【0009】
上記課題を解決するために、請求項1記載の発明は、フレームに検出対象の物体が含まれているか否かを判定する画像認識装置であって、前記フレーム内の第1領域の画像から、前記第1領域よりもサイズの小さい所定サイズの第1演算画像データを生成する前処理部と、前記第1演算画像データの画素値をニューロ演算することにより、前記第1領域に前記検出対象の物体が含まれているか否かを示すニューロ演算値を算出するニューロ演算部と、前記ニューロ演算値を用いて、前記フレームに前記検出対象の物体が含まれているか否かを示す結果データを生成する後処理部と、を備える。
【0010】
請求項2記載の発明は、請求項1に記載の画像認識装置であって、さらに、前記第1演算画像データを格納する第1ブロックバッファと、前記前処理部によって前記フレーム内の前記第1領域と異なる第2領域の画像から生成された第2演算画像データを格納する第2ブロックバッファと、を備え、前記前処理部は、前記ニューロ演算部が前記第1ブロックバッファに格納された第1演算画像データを用いてニューロ演算を実行している場合、第2演算画像データを生成して前記第2ブロックバッファに格納し、前記ニューロ演算部が前記第2ブロックバッファに格納された第2演算画像データを用いてニューロ演算を実行している場合、第1演算画像データを生成して前記第1ブロックバッファに格納する。
【0011】
請求項3記載の発明は、請求項1に記載の画像認識装置であって、前記前処理部は、前記第1領域内の画素値を統計処理してブロック統計値を算出するブロックパラメータ算出部と、前記ブロック統計値と、前記第1領域における画素値の標準的な分布を示すデータとに基づいて、前記第1領域内の画素値を正規化する正規化部と、を含む。
【0012】
請求項4記載の発明は、請求項3に記載の画像認識装置であって、前記前処理部は、前記フレームの画素値を統計処理してフレーム統計値を算出するフレームパラメータ算出部、を含み、前記正規化部は、前記フレーム統計値と、前記フレームにおける画素値の標準的な分布を示すデータとに基づいて前記フレームの画素値を正規化し、前記前処理部は、正規化されたフレームを用いて前記第1領域内の画素値を正規化する。
【0013】
請求項5記載の発明は、請求項1に記載の画像認識装置において、さらに、複数のフレームの入力を受け付ける入力インタフェースと、第1フレームバッファと、第2フレームバッファと、を備え、前記入力インタフェースは、前記第1フレームバッファに格納された第1フレームから前記第1演算画像データが生成されている場合、前記第1フレームの次に入力されるフレームを前記第2フレームバッファに格納する。
【0014】
請求項6記載の発明は、請求項1に記載の画像認識装置であって、前記ニューロ演算部は、入力層のシナプスをニューロ演算して中間層のシナプスを算出する中間シナプス算出処理を少なくとも1回実行する中間シナプス算出部と、前記中間層のシナプスをニューロ演算して出力シナプスを演算し、前記出力シナプスを前記ニューロ演算値として出力する出力シナプス算出部と、を含み、最初の中間シナプス算出処理における入力層のシナプスは、前記第1演算画像データの画素値である。
【0015】
請求項7記載の発明は、請求項6に記載の画像認識装置であって、前記中間シナプス算出部は、前記中間層のシナプスから、算出対象としてN個の中間シナプスを決定する算出対象決定部と、前記入力層のシナプスの中からいずれか一つの入力シナプスを選択する選択処理を実行する入力シナプス選択部と、選択された入力シナプスと第K(KはN以下の自然数)の中間シナプスとに対応する重み付け係数を決定し、前記選択された入力シナプスと決定した重み付け係数とを乗算した乗算値を、前記第Kの中間シナプスに加算する中間演算処理を実行する中間演算部と、を含み、前記中間演算部は、第1〜第Nの中間シナプスに対する中間演算処理を並列して実行し、前記選択処理と前記中間演算処理とは、全ての入力シナプスが選択されるまで繰り返される。
【0016】
請求項8記載の発明は、請求項7に記載の画像認識装置であって、前記入力シナプス選択部は、前記中間演算部によって前記中間演算処理が実行されている期間に、次の中間演算処理に用いられる重み付け係数を決定する。
【0017】
請求項9記載の発明は、請求項7または請求項8に記載の画像認識装置であって、前記入力層のシナプスは、複数の入力グループに分けられ、前記入力シナプス選択部は、前記複数の入力グループの中からいずれか一つを選択し、選択された入力グループの中から前記中間演算処理の対象となる入力シナプスを選択し、前記選択された入力グループに属する全ての入力シナプスを選択した後に次の入力グループを選択する。
【0018】
請求項10記載の発明は、請求項9に記載の画像認識装置であって、さらに、前記入力層のシナプスを格納する入力シナプスバッファと、前記中間シナプス算出部が使用する重み付け係数を格納する第1係数テーブルと、を備え、前記中間シナプス算出部は、前記選択された入力グループに属する全ての入力シナプスを、1回の読み出し処理で前記入力シナプスバッファから読み出し、前記中間演算部により決定された重み付け係数を、1回の読み出し処理で前記第1係数テーブルから読み出す。
【0019】
請求項11記載の発明は、請求項9または請求項10に記載の画像認識装置であって、前記画像認識装置は、前記選択された入力グループの中で最後に選択された入力シナプスに対して実行される中間演算処理と、前記次の入力グループを選択する処理とを並行して実行する。
【0020】
請求項12記載の発明は、請求項6ないし請求項11のいずれかに記載の画像認識装置であって、前記中間シナプス算出部は、2回目以降の中間算出処理を実行する場合、入力シナプスとして直前の中間算出処理で算出された中間シナプスを用いる。
【0021】
請求項13記載の発明は、請求項6ないし請求項12のいずれかに記載の画像認識装置であって、前記中間シナプス算出部は、全ての入力シナプスに対する中間演算処理が終了した後の中間シナプスをシグモイド演算し、シグモイド演算においてシグモイド関数を線形的に近似した近似関数を使用する。
【0022】
請求項14記載の発明は、請求項6ないし請求項13のいずれかに記載の画像認識装置であって、前記出力シナプス算出部は、前記出力シナプスの算出に用いられるQ個の部分加算値を設定する部分加算値設定部と、前記中間層のシナプスからQ個の中間シナプスを選択し、前記Q個の中間シナプスに含まれる第R(RはQ以下の自然数)の中間シナプスと、前記第Rの中間シナプスに対応する重み付け係数との乗算値を第Rの部分加算値に加算する部分加算処理を実行する部分加算値演算部と、前記中間層のシナプスに含まれる全ての中間シナプスに対する部分加算処理が終了した後に、前記Q個の部分加算値の合計値を算出して前記出力シナプスを算出する合計部と、を含み、前記Q個の中間シナプスを用いた部分加算処理が並行して実行される。
【0023】
請求項15記載の発明は、請求項14に記載の画像認識装置であって、さらに、前記中間層のシナプスを格納する中間シナプスバッファと、前記中間層のシナプスに対応する重み付け係数を格納する第2係数テーブルと、を備え、前記出力シナプス算出部は、前記Q個の中間シナプスを、1回の読み出し処理で前記中間シナプスバッファから読み出し、前記Q個の中間シナプスに対応する重み付け係数を、1回の読み出し処理で前記第2係数テーブルから読み出す。
【0024】
請求項16記載の発明は、請求項14または請求項15に記載の画像認識装置であって、前記出力シナプス算出部は、前記部分加算処理が実行されている期間に、次の部分加算処理に用いられるQ個の中間シナプスと重み付け係数とを決定する。
【0025】
請求項17記載の発明は、請求項14ないし請求項16のいずれかに記載の画像認識装置であって、前記中間シナプス算出部は、全ての中間シナプスに対する部分加算処理が終了した後に、前記Q個の部分加算値の合計値をシグモイド演算することにより前記出力シナプスを算出し、シグモイド演算においてシグモイド関数を線形的に近似した近似関数を使用する。
【0026】
請求項18記載の発明は、請求項1ないし請求項17のいずれかに記載の画像認識装置であって、前記ニューロ演算部は、コンフィギュラブル・プロセッサにより実装される。
【発明の効果】
【0027】
本発明の画像認識装置において、前処理部は、検出対象の物体がフレーム内の第1領域に含まれているか否かを判定するために、第1領域の画像から、第1領域よりもサイズの小さい第1演算画像データを生成する。ニューロ演算部は、第1演算画像データの画素値をニューロ演算してニューロ演算値を算出する。ニューロ演算値に基づいて、第1領域に検出対象の物体が含まれているか否かが判定される。第1領域の画像よりサイズの小さい第1演算画像データをニューロ演算に用いることにより、ニューロ演算の演算量を削減することができる。したがって、ニューロ演算をリアルタイムで実行することが可能となるとともに、ハードウェアの規模を小さくすることができる。
【0028】
また、ニューロ演算部が第1ブロックバッファに格納された第1演算画像データを用いてニューロ演算を行っている場合、前処理部は、第2演算画像データを作成して第2ブロックバッファに格納する。これにより、ニューロ演算の対象となる画像データの作成と、ニューロ演算とを並行して実行できるため、リアルタイムで画像認識処理を行うことが可能となる。
【0029】
また、ニューロ演算部は、コンギュラブル・プロセッサにより構成される。ニューロ演算の処理内容に応じた命令等をコンフィギュラブル・プロセッサに追加することにより、ニューロ演算処理をソフトウェア処理により実行する場合に比べて、クロック周波数の低いプロセッサを使用することができる。したがって、ニューロ演算を実行するときの消費電力を削減することができる。
【図面の簡単な説明】
【0030】
【図1】本発明の実施の形態に係る画像認識装置の構成を示す機能ブロック図である。
【図2】図1に示す画像認識装置により実行される画像認識処理のフローチャートである。
【図3A】図1に示すフレームとブロックの関係を示す図である。
【図3B】図3Aに示す検出ブロックからブロックデータを作成する処理の概略を示す図である。
【図3C】図1に示す後処理部により作成される結果データを示す図である。
【図4】図1に示すフレームパラメータ検出部が処理する輝度フレームと、ブロックデータの作成対象である輝度フレームとの対応を示す図である。
【図5】図1に示すフレームパラメータ検出部の動作を示すフローチャートである。
【図6】図1に示す前処理部がブロックデータを作成するときの動作を示すフローチャートである。
【図7A】図1に示す前処理部に設定されるブロックパラメータテーブルを示す図である。
【図7B】図3Aに示す検出ブロックと、ブロックパラメータとの対応を示す図である。
【図8】図1に示すブロックバッファの読み出し及び書き込みのタイミングを示すタイムチャートである。
【図9】図2に示すニューロ演算処理の概略を示す図である。
【図10】図9に示す中間シナプスの計算手順の概略を示す図である。
【図11】図9に示す中間シナプス算出処理のフローチャートである。
【図12】図9に示す中間シナプスの算出過程を示す図である。
【図13】図9に示す中間シナプスの算出過程を示す図である。
【図14】図9に示す中間シナプスの算出過程を示す図である。
【図15】図9に示す中間シナプスの算出過程を示す図である。
【図16】図9に示す中間シナプスの算出過程を示す図である。
【図17】図9に示す中間シナプス処理のタイムチャートである。
【図18】図11のステップS309で使用するシグモイド関数と線形近似関数との対応を示す図である。
【図19】図9に示す出力シナプス算出処理のフローチャートである。
【図20】図9に示す出力シナプスの算出過程を示す図である。
【図21】図9に示す出力シナプスの算出過程を示す図である。
【図22】図9に示す出力シナプスの算出過程を示す図である。
【図23】図9に示す出力シナプスの算出過程を示す図である。
【図24】図19に示す出力シナプス算出処理のタイムチャートである。
【発明を実施するための形態】
【0031】
以下、図面を参照しつつ、本発明の第1の実施の形態について説明する。
【0032】
{1.全体構成}
図1は、本発明の実施の形態に係る画像認識装置100の機能ブロック図である。画像認識装置100は、自動車などの車両に搭載され、車載カメラが撮影して生成した動画像データを入力する。画像認識装置100は、入力された動画像データの各フレームから歩行者を検出する処理を行う。歩行者が検出された場合、画像認識装置100は、入力された動画像データの中で、歩行者が検出された領域を目立つように表示することにより、歩行者の存在を運転手に通知する。
【0033】
図1に示すように、画像認識装置100は、入力インタフェース1と、前処理部2と、ブロックバッファ3A,3Bと、ニューロ演算部4と、係数テーブル5と、後処理部6と、撮影データ記憶部7とを備える。
【0034】
入力インタフェース1は、車載カメラが生成した動画像データのフレーム30Fを入力する。入力インタフェース1は、フレーム30Fから輝度成分を抽出し、輝度フレーム31Fを前処理部2に出力する。
【0035】
前処理部2は、輝度フレーム31Fを、予め定められた大きさのブロックに区分して、ブロックデータ33を作成する。ブロックデータ33は、バッファ3A,3Bのいずれかに格納される。
【0036】
前処理部2は、フレームパラメータ検出部21と、フレーム記憶部22と、ブロックパラメータ検出部23と、ブロック作成部24とを備える。フレームパラメータ検出部21は、輝度フレーム31Fの画素値の統計値(最大値、標準偏差など)31を算出する。フレーム記憶部22は、フレームパラメータ検出部21から入力した輝度フレーム31Fを、フレームバッファ22A,22Bのいずれかに格納する。ブロックパラメータ検出部23は、輝度フレーム31Fの中から歩行者の検出対象となるブロックを特定し、ブロックの画素値の統計値32を算出する。ブロック作成部24は、フレームバッファ22A,22Bのいずれかから輝度フレーム31Fを入力する。ブロック作成部24は、入力した輝度フレーム31Fから、ブロックパラメータ検出部23により特定されたブロックのブロックデータ33を作成する。
【0037】
ニューロ演算部4は、ブロックバッファ3A,3Bのいずれからブロックデータ33を入力し、ブロックデータ33に対するニューロ演算を行う。ニューロ演算の結果、出力シナプス34が、ニューロ演算部4から出力される。係数テーブル5は、ニューロ演算時に用いられる重み付け係数を格納する。
【0038】
後処理部6は、フレーム30Fと、出力シナプス34とを用いて結果データ35を作成する。撮影データ記憶部7は、車載カメラが生成したフレーム30Fをそのまま記憶する。
【0039】
{2.画像認識処理の概略}
図2は、画像認識装置100が実行する画像認識処理のフローチャートである。図2を参照しながら、画像認識処理の概略を説明する。
【0040】
入力インタフェース1は、フレーム30Fを入力し(ステップS1)、輝度フレーム31Fを抽出する。入力インタフェース1は、フレーム30Fを撮影画像データ記憶部7に格納する。前処理部2は、輝度フレーム31Fから、ニューロ演算に用いるブロックデータ33を作成する(ステップS2)。ニューロ演算部4は、ブロックデータ33の各画素をニューロ演算する(ステップS3)。後処理部6は、出力シナプス34の値に基づいて歩行者が検出されたか否かを判定する。歩行者が検出されたと判定された場合、後処理部6は、歩行者が検出されたブロックをフレーム30F上に重ねた結果データ35を生成する(ステップS4)。
【0041】
以下、ブロックデータ33の作成の概略を説明する。図3Aは、輝度フレーム31Fと検出ブロックとの関係を示す図である。図3Aに示すように、画像認識装置100は、輝度フレーム31Fの中から、歩行者を検出する対象となる領域として、検出ブロックBL_A,BL_Bのいずれかを設定する。
【0042】
図3Aでは、検出ブロックBL_A,BL_Bの両者が輝度フレーム31F上に表示されている。実際には、一つの検出ブロックに対し、一つのブロックデータ33が作成される。検出ブロックBL_A,BL_Bは、サイズが異なる。検出ブロックBL_Aは、X軸方向のサイズが32ピクセルであり、Y軸方向のサイズが64ピクセルである。検出ブロックBL_Bは、X軸方向のサイズが64ピクセルであり、Y軸方向のサイズが128ピクセルである。
【0043】
検出ブロックBL_Bのサイズは、検出ブロックBL_Aのサイズよりも大きい。撮影場所から近い位置にいる歩行者を検出するために、検出ブロックBL_Bが大きく設定されている。一方、検出ブロックBL_Aは、遠方にいる歩行者を検出するために、小さいサイズが設定される。複数のサイズの検出ブロックを使用することにより、様々な位置にいる歩行者を検出することができる。
【0044】
図3Bは、ブロックデータ33の作成からニューロ演算が行われるまでの概略を示す図である。前処理部2は、輝度フレーム31Fから検出ブロックBL_A,BL_Bを切り出す。切り出された画像データが所定のサイズに変換されることにより、ブロックデータ33が作成される(ステップS2)。ブロックデータ33のサイズは、X軸方向が16ピクセル、Y軸方向が32ピクセルであり、検出ブロックのサイズに関係なく一定である。ニューロ演算部4は、ブロックデータ33に対してニューロ演算を行い(ステップS3)、出力シナプス34を生成する。出力シナプス34は、一つの検出ブロックにつき一つずつ生成される。
【0045】
ブロックデータ33のサイズが一定である理由を説明する。検出ブロックのサイズに応じてブロックデータ33の画素数が変化する場合、ニューロ演算部4は、画素数に応じて、ニューロ演算の処理内容を変更する必要がある。しかし、検出ブロックのサイズに関係なく、ブロックデータ33のサイズを一定にすることにより、ニューロ演算の処理を簡略化することが可能となる。また、ブロックデータ33のサイズを検出ブロックBL_A,BL_Bよりも小さくすることにより、ニューロ演算処理(ステップS3)の演算量が削減される。
【0046】
再び、図2を参照する。後処理部6は、フレーム30Fと、出力シナプス34とを用いて結果データを作成する(ステップS4)。後処理部6は、出力シナプス34の大きさに基づいて、対応する検出ブロックから歩行者が検出されたか否かを判定する。図3Cは、結果データ35の一例を示す図である。歩行者が検出された場合、後処理部6は、撮影データ記憶部7からフレーム30Fを取得する。後処理部6は、歩行者が検出された検出ブロックに対応する枠35A,35B,35Cをフレーム30F上に描画して、結果データ35を作成する。結果データ35が車両に搭載されたディスプレイに表示されることにより、運転手は、歩行者の位置を確認することができる。
【0047】
{3.前処理部の動作(ステップS2)}
以下、ステップS2(図2参照)を実行する前処理部2の動作について詳しく説明する。最初に、フレームパラメータ検出部21によって、輝度フレーム31Fの統計値31の算出処理が行われる。次に、ブロックパラメータ検出部23とブロック作成部24とによって、ブロックデータ33が輝度フレーム31Fから作成される。
【0048】
{3.1.フレームパラメータ検出部21の処理}
図4は、フレームパラメータ検出部21が処理する輝度フレーム31Fと、ブロックデータ33の作成対象となる輝度フレーム31Fとの対応を示すタイムチャートである。図5は、フレームパラメータ検出部21の動作を示すフローチャートである。詳細については後述するが、輝度フレーム31Fの保存と、ブロックデータ33の作成とは、並行して実行される(図5参照)。
【0049】
以下、図4及び図5を参照しながら、フレームパラメータ検出部21の動作を説明する。入力インタフェース1は、図示しない車載カメラが撮影した動画像データを入力し、輝度フレーム31Fa,31Fb,31Fc,・・・を前処理部2に順次出力する。輝度フレーム31Faが前処理部2に入力された場合、図5に示す処理が開始される。
【0050】
フレームパラメータ検出部21は、輝度フレーム31Faの統計値31を算出する(ステップS201)。統計値31として、輝度フレーム31Fにおける画素の最大値、最小値、合計値、分散及び標準偏差が算出される。フレームパラメータ検出部21は、輝度フレーム31Faの格納先をフレームバッファ22Aに決定する(ステップS202)。輝度フレーム31Faは、フレームバッファ22Aに格納される(ステップS203)。
【0051】
前処理部2は、輝度フレーム31Faの次のフレームとして、輝度フレーム31Fbを入力する。輝度フレーム31Fbの統計値31が算出される(ステップS201)。輝度フレーム31Fbの格納先が、フレームバッファ22Bに決定される(ステップS202)。以下、輝度フレーム31Fの入力が終了するまで(ステップS204においてNo),ステップS201〜S204の処理が繰り返される。図5に示すように、輝度フレーム31Fの格納先は、フレームバッファ22A,22Bに交互に切り替えられる。
【0052】
図4に示すように、輝度フレーム31Fa,31Fb,31Fcに関してステップS201〜S203の処理が行われる期間は、期間A,期間B,期間Cである。また、前処理部2は、フレームバッファ22A,22Bに格納された輝度フレーム31Fを用いてブロックデータ33を作成する(詳細は後述)。したがって、ブロックデータ33の作成を開始することができる時刻は、輝度フレーム31Faの格納が終了した時刻T11となる。すなわち、輝度フレーム31Faからブロックデータ33を作成する処理は、期間Bに実行される。上述したように、輝度フレーム31Faの次に入力される輝度フレーム31Fbは、期間Bにフレームバッファ22Bに格納される。
【0053】
時刻T12において、輝度フレーム31Faからブロックデータ33を作成する処理が終了するとともに、輝度フレーム31Fbのフレームバッファ22Bに対する格納が完了する。前処理部2は、時刻T12から、輝度フレーム31Fbに対するフロックデータ33の作成を開始することが可能となる。輝度フレーム31Fを格納するフレーム記憶部22をダブルバッファ構成とすることにより、フレームパラメータ検出部21の処理と、ブロックデータ33を作成する処理とを、並行して実行することができる。したがって、画像認識処理を効率良く実行することができる。
【0054】
{3.2.ブロックパラメータ検出部23及びブロック作成部24の処理}
図6は、前処理部2がブロックデータ33を作成するときの動作を示すフローチャートである。図6に示す処理は、ブロックパラメータ検出部23及びブロック作成部24により実行される。
【0055】
(ブロックの決定)
前処理部2は、読み出し対象のフレームバッファを決定する(ステップS251)。ブロックデータ33が輝度フレーム31Faから作成される場合、読み出し対象は、フレームバッファ22Aとなる。前処理部2は、予め設定されたブロックパラメータテーブル221(図7A参照)を用いて、輝度フレーム31Fから、歩行者の検出対象となる検出ブロックを一つ決定する(ステップS252)。ブロックパラメータテーブル221は、前処理部2に予め設定されている。
【0056】
図7Aは、検出ブロックBL_Aのサイズに対応するブロックパラメータテーブル221を示す図である。図7Bは、検出ブロックと、ブロックパラメータとの対応を示す図である。以下、検出ブロックを決定する処理(ステップS252)について詳しく説明する。
【0057】
図7Bに示すように、FR_START_X、FR_START_Y、FR_SIZE_X,及びFR_SIZE_Yは、輝度フレーム31Fにおいて、歩行者を検出する対象となる領域32Fを特定するパラメータである。領域32Fの中から、検出ブロックが決定される。輝度フレーム31Fにおいて、歩行者を検出することがない領域が存在する。輝度フレーム31Fの上側の領域は、空であることが多い。このため、上側の領域から歩行者が検出されることはない。領域32Fから検出ブロックを決定することにより、ニューロ演算の対象となる検出ブロックの数を削減することができる。
【0058】
BL_SIZE_X及びBL_SIZE_Yは、検出ブロックのX方向及びY方向のサイズを決定するパラメータである。BL_START_X,BL_START_Yは、領域32Fの中から最初に決定される検出ブロックBL1の座標を示すパラメータであり、検出ブロックBL1の左上頂点の座標に相当する。
【0059】
BL_OFS_X,BL_OFS_Yは、検出ブロックのX座標、Y座標のオフセット数であり、新たな検出ブロックの左上の頂点を算出するために用いられる。例えば、検出ブロックBL2の左上頂点のX座標は、BL_START_XにBL_OFS_Xを加算した値となる。2段目の検出ブロックBL11の左上頂点の座標を算出する場合、検出ブロックBL11の左上頂点のY座標は、BL_START_YにBL_OFS_Yを加算した値となる。
【0060】
BL_RPT_X,BL_RPT_Yは、領域32Fから検出ブロックを切り出す回数を決定するパラメータである。例えば、BL_RPT_Xが10に設定されている場合、X軸方向に沿って切り出される検出ブロックの数は、10となる。BL_RPT_Yが5に設定されている場合、Y軸方向に沿って切り出される検出ブロックの数は、5となる。
【0061】
検出ブロックを決定する順序について説明する。前処理部2は、検出ブロックBL1を決定した後に、BL_RPT_Xで設定された回数分(10回)、X軸方向に沿って検出ブロックを決定する。すなわち、1段目の検出ブロックが、検出ブロックBL1,BL2,・・・,BL10の順に決定される。次に、前処理部2は、2段目の検出ブロック(BL11〜BL20)を順次決定する。BL_RPT_Yが5に設定されている場合、前処理部2は、5段目の検出ブロックを決定するまで、上記の処理を繰り返す。この結果、50個の検出ブロックが、歩行者を検出する対象領域として特定される。
【0062】
ブロックパラメータテーブル221は、検出ブロックBL_A,BL_Bのそれぞれのサイズに応じて作成される。図7Aに示すブロックパラメータテーブル221は、検出ブロックBL_Aに対応する。前処理部2は、検出ブロックBL_Aに対応するブロックパラメータテーブル221を用いて検出ブロックを決定し、その後、検出ブロックBL_Bに対応するブロックパラメータテーブル221を用いて検出ブロックを決定する。
【0063】
再び、図6を参照する。ブロックパラメータ検出部23が、決定した検出ブロックの統計値32を算出する(ステップS253)。統計値32の算出には、フレーム記憶部22に記憶された輝度フレーム31Fの輝度値が用いられる。統計値32として、検出ブロック内の画素の最大値、最小値、合計値、分散及び標準偏差が算出される。以下、検出ブロックBL1のブロックデータ33を作成する場合を例に説明する。
【0064】
(輝度フレームの正規化)
ブロック作成部24は、輝度フレーム31Fの統計値31を用いて、輝度フレーム31Fを正規化する(ステップS254)。輝度フレーム31Fの正規化とは、輝度フレーム31Fの各画素値(輝度値)を、予め設定された標準的な輝度分布に合うように変換する処理である。ニューロ演算処理(ステップS3,図2参照)は、演算対象のブロックデータ33が標準的な輝度分布を有していると仮定して行われる。輝度フレーム31Fの輝度分布に偏りがある場合、ブロックデータ33の輝度分布にも偏りが生じると考えられる。
【0065】
例えば、夜間に撮影された輝度フレーム31Fの輝度値は、全体的に低くなるため、歩行者の検出精度に悪影響を及ぼす可能性がある。しかし、輝度フレーム31Fを正規化することにより、歩行者の検出精度が低下することを防ぐことができる。
【0066】
次に、ブロック作成部24は、正規化された輝度フレーム31Fから検出ブロックBL1の画像データを切り出し、統計値32を用いて、検出ブロックBL1の画像データをさらに正規化する(ステップS255)。輝度フレーム31Fが正規化されたとしても、輝度の空間分布にはばらつきが存在する。正規化されたフレーム31Fにおいて、検出ブロックBL1の領域が暗い領域であった場合、検出ブロックBL1におけるニューロ演算の精度が低下する可能性がある。したがって、検出ブロックBL1の画像データについても、輝度フレーム31Fと同様に正規化が行われる。
【0067】
(sobelフィルタ処理)
以下、正規化された検出ブロックBL1の画像データを、ブロック画像データと呼ぶ。ブロック作成部24は、ブロック画像データに対してsobelフィルタ処理を行う(ステップS256)。sobelフィルタ処理は、画像中の物体の輪郭を強調する処理である。
【0068】
sobelフィルタ処理について詳しく説明する。まず、(式1)に示すように、3×3の行列である行列S0,S1,S2,S3を定義する。
【数1】
【0069】
ブロック画像データを行列Pにより表わした場合、行列Pは、(式2)のように表わされる。(式2)において、Mは、水平方向(X軸方向)の座標を示す。Nは、垂直方向(Y軸方向)の座標を示す。
【数2】
【0070】
sobelフィルタ処理後のブロック画像データの画素値をSBL(m,n)とする。m,nは、X軸方向、Y軸方向の座標である。SBL(m,n)は、(式3)によって算出される。
【数3】
【0071】
(式3)において、Coring関数は、下記の(式4)で表わされる。
【数4】
【0072】
また、(式3)において、演算子「*」は、畳み込み演算を示す。畳み込み演算の式を(式5)に示す。(式5)において用いられる行列Sを、(式6)に示す。
【数5】
【数6】
【0073】
(式5)において、out(m,n)は、畳み込み演算後のブロック画像データの画素値を示す。p(m−k,n−r)は、畳み込み演算前のブロック画像データの画素値を示す。行列Sは、(式1)に示す行列S0,S1,S2,S3のいずれかであり、s(k,r)は、行列Sの各成分を示す。
【0074】
(ガウスフィルタ処理)
再び、図6を参照する。ブロック生成部24は、物体の輪郭が強調されたブロック画像データに対して、ガウスフィルタ処理を行う(ステップS257)。
【0075】
(式7)に、ガウスフィルタ処理で使用する点広がり関数Wを示す。点広がり関数Wは、5×5の行列である。
【数7】
【0076】
ガウスフィルタ処理後のブロック画像データの画素をg(m,n)とする。sobelフィルタ処理後のブロック画像データの画素の行列をP1とする。行列P1の構成は、(式2)と同様である。g(m,n)は、(式8)に示すように、点広がり関数Wと行列P1を畳み込み演算することにより得られる。ガウスフィルタ処理を実行することにより、ブロック画像データ中のノイズ成分を低下させることができる。
【数8】
【0077】
(平滑化処理)
前処理部2は、ガウスフィルタ処理後のブロック画像データに対して、平滑化処理(ステップS258)を行う。(式9)に、平滑化処理に用いる行列Lを示す。行列Lは、3×3の行列である。
【数9】
【0078】
平滑化処理後のブロック画像データの画素をlow(m,n)とする。ガウスフィルタ処理後のブロック画像データの画素の行列をP2とする。行列P2の構成は、(式2)と同様である。low(m,n)は、(式10)に示すように、行列Lと行列P2を畳み込み演算することにより得られる。
【数10】
【0079】
次に、ブロック作成部24は、平滑化処理されたブロック画像データのサイズを、所定のサイズに変換する(ステップS259)。これにより、ブロックデータ33が作成される。ブロックデータ33のサイズは、たとえば、X軸方向が16画素であり、Y軸方向が32画素である(図3B参照)。ブロック画像データのサイズ変換には、線形補間を使用することができる。
【0080】
ブロック作成部24は、ブロックデータ33をブロックバッファ3A,3Bのいずれかに格納する(ステップS260)。前処理部2は、輝度フレーム31Fから全ての検出ブロックに対応するブロックデータ33を作成したか否かを確認する(ステップS261)。ブロックデータ33の作成が終了していない場合(ステップS261においてNo)、前処理部2は、ステップS252に戻り、ステップS252〜S261の処理を繰り返す。全てのブロックデータ33を作成した場合(ステップS261においてYes)、前処理部2は、図6に示すフローチャートを終了する。前処理部2は、次の輝度フレーム31Fからブロックデータ33を作成するために、図6に示すフローチャートを再び開始する。
【0081】
{4.ブロックバッファに対する書き込み及び読み出し}
前処理部2は、ステップS260において、作成したブロックデータ33をブロックバッファ3A,3B(図1参照)のいずれかに格納する。ニューロ演算部4は、ブロックバッファ3A,3Bのいずれかからブロックデータ33を読み出し、読み出したブロックデータ33に対してニューロ演算を行う(ステップS3、図2参照)。
【0082】
画像認識装置100は、ブロックバッファを二つ設けることにより、ブロックデータ33を作成する処理(図6参照)と、ニューロ演算処理(ステップS3)とを並行して実行することができる。これにより、フレーム30Fから歩行者を検出する処理を効率良く実行することができる。
【0083】
図8は、ブロックバッファ3A,3Bの読み出し及び書き込みのタイミングを示すタイムチャートである。前処理部2は、時刻T20〜T21の期間に、検出ブロックBL1(図7B参照)のブロックデータ33を作成してブロックバッファ3Aに書き込む。時刻T21までは、ブロックバッファ3A,3Bのいずれにもブロックデータ33が書き込まれていないため、ニューロ演算処理(ステップS3)は、実行されない。
【0084】
時刻T21において、検出ブロックBL1のブロックデータ33の書き込みが完了する。ニューロ演算部4は、時刻T21から、検出ブロックBL1のブロックデータ33に対するニューロ演算処理(ステップS3)を開始する。つまり、ニューロ演算部4が、時刻T21〜T22の期間に、検出ブロックBL1のブロックデータ33をブロックバッファ3Aから読み出す。前処理部2は、時刻T21〜T22の期間に、検出ブロックBL2(図7B参照)のブロックデータ33を作成してブロックバッファ3Bに書き込む。
【0085】
時刻T22〜T23の期間において、ニューロ演算部4は、ブロックバッファ3Bから検出ブロックBL2のブロックデータ33を読み出す。前処理部2は、ブロックバッファ3Aに、検出ブロックBL3(図7B参照)のブロックデータ33を書き込む。以下、書き込み対象のブロックバッファと、読み出し対象のブロックバッファとが交互に切り替わる。つまり、ブロックバッファ3A,3Bは、ピンポンバッファを構成する。したがって、ブロックデータ33を作成する処理と、ニューロ演算処理とを並行して実行することができる。
【0086】
{5.ニューロ演算処理(ステップS3)}
以下、ニューロ演算処理(ステップS3)について詳しく説明する。
【0087】
{5.1.ニューロ演算の概略}
図9は、ニューロ演算部4により実行されるニューロ演算処理(ステップS3)の概略を示す図である。図9に示すように、ニューロ演算部4は、ブロックデータ33の各画素をニューロ演算することにより、出力シナプス34を算出する。ニューロ演算部4は、入力層51と、中間層52と、出力層53とを有する三層パーセプトロンを用いて、ニューロ演算を行う。
【0088】
入力層51は、入力シナプス41−1〜41−Hを有する。入力シナプス41−1〜41−Hは、ブロックデータ33の各画素に対応する。以下、入力シナプス41−1〜41−Hを総称する場合、入力シナプス41と呼ぶ。ブロックデータ33のサイズは16×32ピクセルであるため、入力シナプス41の数は、512個である。ニューロ演算部4は、中間シナプス算出処理(ステップS300)を実行して、入力シナプス41から中間層52のシナプス(中間シナプス)を算出する。
【0089】
中間層52は、中間シナプス42−1〜42−Jを有する。本実施の形態では、中間シナプスの数を256とする。ただし、中間シナプスの数は、入力シナプス41の数より大きくない数値であればよい。
【0090】
出力シナプス34は、一つの数値データである。ニューロ演算部4は、出力シナプス算出処理(ステップS350)を実行して、中間シナプス42−1〜42−Jから出力シナプス34を算出する。
【0091】
ここで、シナプスの計算方法を説明する。中間シナプス及び出力シナプス34の計算法は、共通である。シナプスの計算式を、(式11)に示す。
【数11】
【0092】
(式11)の詳細について、中間シナプス42−1の計算を例にして説明する。図10は、中間シナプス42−1の計算手順を示す概略図である。
【0093】
入力シナプス41−1〜41−Hは、(式11)のSiに対応する。入力シナプス41ごとに設定される重み付け係数W11〜W1Hは、(式11)のWiに対応する。重み付け係数Wiは、係数テーブル5に格納される。本実施の形態では、検出対象が歩行者であるため、歩行者に対応する重み付け係数Wiが、係数テーブル5に格納される。なお、係数テーブル5に格納される重み付け係数Wiを変更することにより、歩行者だけでなく、自動車、標識などの様々な物体を検出することが可能となる。
【0094】
bmは、中間シナプス42−1の初期値である。(式11)のΣ演算子の項は、合計値41Tに対応し、入力シナプス41と重み付け係数との乗算値の総和である。合計値41Tと初期値bmとの和をシグモイド関数に代入することにより、中間シナプス42−1を得ることができる。シグモイド関数を、(式12)に示す。
【数12】
【0095】
このように、ニューロ演算処理では、乗算処理及び加算処理の実行回数が非常に多くなる。ニューロ演算処理(ステップS3)を高速化するために、ニューロ演算部4は、中間シナプス算出処理(S300)及び出力シナプス算出処理(S350)において、複数の演算処理を並行して実行する。以下、それぞれの処理について詳しく説明する。
【0096】
{5.2.中間シナプス算出処理(ステップS300)}
図11は、ニューロ演算部4により実行される中間シナプス算出処理(S300)のフローチャートである。図12〜図16は、中間シナプスの算出過程を示す図である。以下、説明を簡単にするために、入力シナプス41の数及び中間シナプスの数が、それぞれ12個である場合を例に説明する。
【0097】
ニューロ演算部4は、12個の中間シナプスの中から、算出対象の中間シナプスのグループ(中間グループ)を決定する(ステップS301)。図12に示すように、中間シナプス42−1〜42−4が、中間グループとして選択される。中間シナプス42−1〜42−4の数値を、中間値M1〜M4とする。ニューロ演算部4は、中間値M1〜M4の初期値を設定する(ステップS302)。初期値は、(式11)のbmに対応し、中間シナプスごとに設定される数値である。
【0098】
ニューロ演算部4は、中間シナプス42−1〜42−4の算出に用いる入力シナプス41のグループ(入力グループ)を決定する(ステップS303)。最初に、入力シナプス41−1〜41−4が、入力グループとして選択される。入力シナプス41−1〜41−4に対応する画素値S1〜S4が、メモリ(図示省略)にロードされる(ステップS304)。ニューロ演算部4は、入力グループの中から入力シナプス41−1を選択し、入力シナプス41−1に対応する重み付け係数W11〜W14を、メモリ(図示省略)にロードする(ステップS305)。重み付け係数W11〜W14は、中間シナプス42−1〜42−4を算出するために、入力シナプス41−1に対して設定された係数である。重み付け係数W11〜W14は、係数テーブル5からロードされる。
【0099】
ニューロ演算部4は、画素値S1に対して重み付け係数W11〜W14をそれぞれ乗算し、各乗算値を中間値M1〜M4に加算する(ステップS306)。具体的には、画素値S1と重み付け係数W11の乗算値が、中間値M1に加算される。画素値S1と重み付け係数W12の乗算値が、中間値M2に加算される。同様に、画素値S1と重み付け係数W13,W14との乗算値が、中間値M3,M4に加算される。
【0100】
次に、ニューロ演算部4は、入力グループに属する全ての入力シナプスを、中間値M1〜M4の算出に用いたか否かを確認する(ステップS307)。入力シナプス41−2〜41−4が未だ選択されていないため(ステップS307においてNo)、ニューロ演算部4は、ステップS305に戻る。
【0101】
図13に示すように、ニューロ演算部4は、入力シナプス41−2について、ステップS305,S306の処理を実行する。すなわち、入力シナプス41−2の画素値S2と、重み付け係数W21との乗算値が、中間値M1に加算される。同様に、画素値S2と重み付け係数W22〜W24との乗算値が、中間値M2〜M4に加算される。
【0102】
ニューロ演算部4は、入力シナプス41−3に対しても、ステップS305,S306の処理を実行する。入力シナプス41−3の画素値と重み付け係数との乗算値が、中間値M1〜M4に加算される。
【0103】
ニューロ演算部4は、入力シナプス41−4に対しても、ステップS305,S306の処理を実行する。図14に示すように、入力シナプス41−4の画素値S4と重み付け係数W41〜W44との乗算値が、中間値M1〜M4に加算される。
【0104】
再び、図11を参照する。中間値M1〜M4の算出に、入力シナプス41−1〜41−4を使用したため(ステップS307においてYes)、ニューロ演算部4は、全ての入力シナプス41を入力グループとして選択したか否かを確認する(ステップS308)。
【0105】
入力シナプス41−5〜41−12が、入力グループとして選択されていないため(ステップS308においてNo)、ニューロ演算部4は、ステップS303に戻り、入力シナプス41−5〜41−8を入力グループとして新たに選択する。
【0106】
ニューロ演算部4は、入力シナプス41−5〜41−8のそれぞれに対して、ステップS305,S306の処理を実行する。図15は、入力シナプス41−5と重み付け係数W51〜W54との乗算値を、中間値M1〜M4に加算する処理を示している。以下、全ての入力シナプス41が入力グループとして選択されるまで(ステップS308においてYes)、ステップS303〜S308の処理が繰り返される。
【0107】
全ての入力シナプス41が入力グループとして選択された場合(ステップS308においてYes)、ニューロ演算部4は、中間値M1〜M4をシグモイド関数に入力する(ステップS309)。シグモイド関数の計算結果が、中間シナプス42−1〜42−4として、図示しないメモリに保存される(ステップS310)。
【0108】
このように、中間シナプス42のうち、中間シナプス42−1〜42−4が最初に算出される。入力シナプスと重み付け係数の乗算値が、複数の中間値に並列して加算されることにより、4つの中間シナプス42を同時に算出することができる。したがって、中間シナプス算出処理(ステップS300)を高速に実行することができる。
【0109】
再び、図11を参照する。ニューロ演算部4は、全ての中間シナプス42の算出が終了したか否かを確認する(ステップS311)。中間シナプス42−5〜42−12が算出されていないため、ニューロ演算部4は、ステップ301に戻る。図16に示すように、ニューロ演算部4は、新たな中間グループとして、中間シナプス42−5〜42−8を決定する(ステップS301)。ニューロ演算部4は、新たな中間グループに対してステップS301〜S310を実行することにより、中間シナプス42−5〜42−8を算出する。以下、全ての中間シナプス42が算出されるまで(ステップS311においてYes)、ステップS301〜S311が繰り返される。
【0110】
図17は、中間シナプス算出処理(S300)のタイムチャートである。図17において、N1は、入力シナプス41の数(12個)を示す。N2は、中間シナプス42の数(12個)を示す。Qは、入力グループに属する入力シナプス41の数(4個)と、中間グループに属する中間シナプスの数(4個)を示す。
【0111】
破線で示す枠45は、入力シナプス41−1〜41−4が入力グループとして選択されたときの処理に相当する。枠46は、入力シナプス41−5〜41−8が入力グループとして選択されたときの処理に相当する。枠47は、入力シナプス41−9〜41−12が入力グループとして選択されたときの処理に相当する。枠48は、一つの中間グループにおいて、中間シナプスが算出される処理に相当する。図17において、1サイクルとは、CPU(Central Processing Unit)の1サイクルに対応する。
【0112】
図17において、Init(Init処理)は、中間値に初期値を設定する処理(ステップS302)に対応する。Li(Li処理)は、入力グループとして選択された入力シナプス41の画素値をロードする処理(ステップS304)に対応する。Lc(Lc処理)は、重み付け係数をロードする処理(ステップS305)に対応する。MAC(MAC処理)は、入力シナプスの画素値と重み付け係数とを乗算し、乗算値を中間値に加算する処理(ステップS306)に対応する。MAC処理では、乗算と加算の二つの処理が行われるため、MAC処理のサイクル数は、2である。SIG(SIG処理)は、シグモイド関数を用いた計算処理(ステップS309)に対応する。Ss(Ss処理)は、算出した中間シナプスを保存する処理(ステップS310)に対応する。
【0113】
MAC処理について詳しく説明する。MAC処理は、(式11)のカッコ内の式に対応した演算処理を実行する。(式11)のカッコ内の式を演算子macと定義した場合、演算子macは、下記の漸化式(式13)で表わすことができる。
【数13】
【0114】
MAC処理は、1サイクル目で、Si×Wiの乗算処理を行う。上述したように、Siは、入力シナプス41−1〜41−H(図10参照)に対応する。Wiは、入力シナプス41−1〜41−Hのそれぞれに対して設定される重み付け係数W11〜W1H(図10参照)に対応する。MAC処理は、次の2サイクル目で、直前のMAC処理の演算結果(mac(i−1))に、乗算値(Wi×Si)を加算する処理を行う。このように、MAC処理は、乗算処理と加算処理とを実行するため、2サイクルを必要とする。
【0115】
枠45,46,47のそれぞれにおいて、MAC処理と、重み付け係数をロードする処理(Lc処理)とが、並行して実行されている。これにより、中間シナプス42を算出する処理を効率よく実行できる。
【0116】
また、枠45内のMAC処理45Aと、枠46内のLi処理46A,Lc処理46Bとが、並行して実行されている。すなわち、入力グループが新たに設定される場合、Li処理及びLc処理は、直前の入力グループにおけるMAC処理に並行して実行される。これにより、ニューロ演算部4は、中間シナプス42を算出する処理を効率良く実行できる。
【0117】
次に、中間シナプス算出処理(S300)で必要なサイクル数を説明する。枠45〜47に示すように、各入力グループにおいて、MAC処理に必要なサイクル数は、Q+1サイクルである。また、中間グループに属する全ての中間シナプス42を算出するために、枠45〜47の処理をN1/Q回繰り返す必要がある。枠48は、中間グループに属する中間シナプスが算出される処理に相当する。このため、全ての中間シナプスを算出するためには、枠48の処理をN2/Q回繰り返す必要がある。この結果、全ての中間シナプスを算出するために必要なサイクル数C1は、(式14)で表わされる。
【数14】
【0118】
(式14)において、(Q+1)の項は、枠45〜47において、MAC処理が行われる期間に相当する。また、「6」の項において、3サイクル分は、最初の入力グループ(枠45)におけるInit処理、Li処理及びLc処理に相当する。残りの3サイクル分は、最後の入力グループ(枠47)の処理の後に実行されるSIG処理の2サイクルと、Ss処理の1サイクルに相当する。
【0119】
次に、Li処理及びLc処理について詳しく説明する。(式14)において、Qは、中間シナプス算出処理(S300)における並列数を示し、並行して算出される中間シナプスの数に相当する。図12〜図16に示す例の場合、並列数Qは4である。
【0120】
入力シナプス41の画素値Siのビット数をdビットとした場合、Li処理により、d×4ビットのデータが、ブロックバッファ3A,3Bのいずれかから読み出される。入力シナプス41に対応する重み付け係数Wiのビット数をeビットとした場合、Lc処理により、e×4ビットのデータが、係数テーブル5から読み出される。たとえば、入力シナプス41の画素値Siのビット数dが8ビットである場合、Li処理は、ブロックバッファ3A,3Bのいずれかから32ビットのデータを読み出す。入力シナプス41に対応する重み付け係数Wiのビット数eが16ビットである場合、Lc処理により、64ビットのデータが係数テーブル5からメモリにロードされる。
【0121】
このように、中間シナプス算出処理(S300)において、Li処理及びLc処理は、1サイクルで、並列数Qに対応したビット数のデータを読み出す。これにより、MAC処理に必要なデータを効率的に読み出すことが可能となる。
【0122】
{5.3.シグモイド関数の線形近似}
(式12)に示すように、シグモイド関数は、指数関数を使用する。ステップS309(図11参照)の処理において、シグモイド関数をそのまま使用した場合、計算処理が煩雑となり、中間シナプスの算出に時間を要する。そこで、ステップS309の処理を簡略化するために、シグモイド関数の線形近似関数を使用する。(式15)に線形近似関数を示す。
【数15】
【0123】
図18は、シグモイド関数と線形近似関数との対応を示す図である。図18において、実線の曲線がシグモイド関数である。太い破線が、線形近似関数である。(式15)に示すように、線形近似関数は、5つの区間(X1〜X5)に区分される。図18において、T0≒−3.5、T1≒−1.75、T2≒1.75、T3≒3.5である。線形近似関数を使用することにより、中間値を入力とするシグモイド関数の計算結果を簡易な処理で得ることができる。したがって、中間シナプスを算出する処理を高速化できる。
【0124】
なお、図18に示すシグモイド関数は、x=0における値Zを中心として点対称である。したがって、線形近似関数として、x≧0の区間のみを設定しておいてもよい。シグモイド関数が点対称であることと、x≧0の区間で定義されたシグモイド関数とを利用して、x<0のシグモイド関数の計算結果も容易に得ることができる。
【0125】
{5.4.出力シナプス算出処理(ステップS350)}
図19は、ニューロ演算部4により実行される出力シナプス算出処理(ステップS350)のフローチャートである。図20〜図23は、出力シナプス34の算出過程を示す図である。以下、中間シナプス算出処理(ステップS300)の説明と同様に、中間シナプスの数が12個である場合を例に説明する。
【0126】
ニューロ演算部4は、4個の部分加算値43−1〜43−4を設定する(ステップS351)。部分加算値43−1〜43−4は、出力シナプス34の算出に用いられる一時的な数値であり、設定時の値は0である。図20に示すように、ニューロ演算部4は、部分加算値43−1に出力シナプス34の初期値34iを設定する(ステップS352)。部分加算値43−2〜43−4に初期値34iは設定されない。部分加算値43−1〜43−4は後に合計されるため、部分加算値43−1〜43−4のいずれか一つに初期値34iを設定すればよい。
【0127】
次に、ニューロ演算部4は、部分加算値43−1〜43−4の数に応じて、4つの中間シナプス42−1〜42−4を選択して、メモリ(図示省略)にロードする(ステップS353)。中間シナプス42−1〜42−4に対応する重み付け係数Wm1〜Wm4(図20参照)が、メモリにロードされる(ステップS354)。重み付け係数Wm1は、中間シナプス42−1の算出に用いられた重み付け係数W11,W12,・・・(図12参照)と異なるデータとして係数テーブル5に設定されている。重み付け係数Wm2〜Wm4も同様である。
【0128】
ステップS354の後で、中間シナプスと重み付け係数との乗算値が、部分加算値に加算される(ステップS355)。図20に示すように、中間シナプス42−1と重み付け係数Wm1との乗算値が、部分加算値43−1に加算される。同様に、中間シナプス42−2〜42−4と重み付け係数Wm2〜Wm4との乗算値が、部分加算値43−2〜43−4に加算される。
【0129】
このように、ステップS353〜S355の処理は、部分加算値の数(4個)に応じた並列的な処理であるため、出力シナプス算出処理(ステップS350)を高速化することができる。
【0130】
ニューロ演算部4は、全ての中間シナプス42を選択したか否かを確認する(ステップS356)。出力シナプス42−5〜42−12が未だ選択されていないため(ステップS356においてNo)、ニューロ演算部4は、ステップS353に戻り、出力シナプス42−5〜42−8を選択してメモリにロードする。
【0131】
ニューロ演算部4は、出力シナプス42−5〜42−8に関して、ステップS354,S355の処理を実行する。図21に示すように、中間シナプス42−5と重み付け係数Wm5との乗算値が、部分加算値43−1に加算される。同様に、中間シナプス42−6〜42−8と重み付け係数Wm6〜Wm8との乗算値が、部分加算値43−2〜43−4に加算される。
【0132】
次に、ニューロ演算部4は、出力シナプス42−9〜42−12を選択してロードする(ステップS356においてNo,ステップS353)。ニューロ演算部4は、出力シナプス42−9〜42−12に関しても、ステップS354,S355の処理を実行する。図22に示すように、中間シナプス42−9と重み付け係数Wm9との乗算値が、部分加算値43−1に加算される。同様に、中間シナプス42−10〜42−12と重み付け係数Wm10〜Wm12との乗算値が、部分加算値43−2〜43−4に加算される。全ての中間シナプスが選択されたため(ステップS356においてYes)、ニューロ演算部4は、部分加算値43−1〜43−4の算出が終了したと判断する。
【0133】
ニューロ演算部4は、部分加算値43−1〜43−4を合計することにより(ステップS357)、合計値44(図23参照)を算出する。このとき、ステップS357の処理は、並列的に実行される。例えば、ステップS357で実行される加算処理の並列数が2である場合、最初に、ニューロ演算部4は、部分加算値43−1,43−2の合計値44Aを算出する処理と、部分加算値43−3,43−4の合計値44Bを算出する処理とを並列して実行する。そして、合計値44A,44Bが合計されることにより、合計値44が算出される。これにより、出力シナプス算出処理(ステップS350)を高速化することができる。
【0134】
ニューロ演算部4は、合計値44を入力としたシグモイド関数を演算することにより(ステップS358)、出力シナプス34を算出する。ステップS358の処理の内容は、ステップS309(図11参照)と同様の処理である。これにより、出力シナプス算出処理(ステップS350)が終了する。
【0135】
図24は、出力シナプス算出処理(S350)のタイムチャートである。図24において、N2は、中間シナプスの数(12個)を示す。Fは、部分加算値の数(4個)を示す。
【0136】
Init_0(Init_0処理)は、部分加算値43−1に初期値34iを設定する処理であり、ステップS352に対応する。Ls(Ls処理)は、選択された中間シナプスをロードする処理であり、ステップS353に対応する。Lc(Lc処理)は、ロードされた中間シナプスに対応する重み付け係数をロードする処理であり、ステップS354に対応する。
【0137】
MAC(MAC処理)は、中間シナプス42と重み付け係数とを乗算する処理と、乗算値を部分中間値に加算する処理であり、ステップS355に対応する。MAC処理は、図17に示すMAC処理と同じ処理である。MAC処理では、乗算処理と加算処理が行われるため、MAC処理に必要なサイクル数は、2である。
【0138】
SUM(SUM処理)は、二つの部分加算値を合計する処理である。SUM処理をF/S回繰り返すことにより、合計値44が算出される(ステップS357)。Sは、ステップS357で実行される加算処理の並列数である。SUM処理を1回実行するために必要なサイクル数は、1である。Ss(Ss処理)は、出力シナプス34をニューロ演算部4のメモリに保存する処理であり、図17のSs処理と同じ処理である。Ss処理に必要なサイクル数は、1である。
【0139】
図24に示すように、MAC処理と、Ls処理,Lc処理とが並列的に実行されていることが分かる。たとえば、中間シナプス42−1〜42−4を用いたステップS355の処理と、中間シナプス42−5〜42−8を用いたステップS353,S354の処理が並列して実行される。これにより、出力シナプス算出処理(ステップS350)を効率良く実行することができる。
【0140】
次に、出力シナプス算出処理(S350)において必要なサイクル数を説明する。MAC処理と並列に実行されるLs処理,Lc処理のサイクル数は、考慮しなくてよい。MAC処理の実行回数は、中間シナプスの数(N2=12個)/中間シナプスの選択数(F=4個)で表わすことができる。
【0141】
その他に、Ls処理,Lc処理が単独で1回ずつ実行される。SUM処理(1サイクル)がF/S回繰り返される。Init_0処理(1サイクル)、SIG処理(2サイクル)及びSs処理(1サイクル)が単独で実行される。この結果、出力シナプス算出処理(S350)において必要なサイクル数は、(式16)で表わすことができる。
【数16】
【0142】
(式16)において、(N2/F)×2の項は、MAC処理のサイクル数を示す。F/Sの項は、SUM処理が行われる回数を示す。“6”の項は、単独で実行されるInit処理、Ls処理,Lc処理、SIG処理、Ss処理のサイクル数の合計値である。
【0143】
次に、出力シナプス算出処理(S350)で行われるLs処理及びLc処理について詳しく説明する。(式16)において、Fは、出力シナプス算出処理(S350)における並列数を示し、部分加算値の数に対応する。図20〜図22に示す例の場合、並列数Fは4である。
【0144】
中間シナプスがfビットのデータである場合、Ls処理により、f×4ビットのデータが図示しないメモリにロードされる。中間シナプスに対応する重み付け係数Wiのビット数をgビットとした場合、Lc処理により、g×4ビットのデータが、係数テーブル5から読み出される。例えば、中間シナプスが8ビットのデータである場合、Ls処理により、32ビットのデータが図示しないメモリにロードされる。重み付け係数Wiのビット数を16ビットとした場合、Lc処理により、64ビットのデータが係数テーブル5からメモリにロードされる。
【0145】
このように、出力シナプス算出処理(S350)において、Li処理及びLc処理は、1サイクルで、並列数Fに対応したビット数のデータを読み出す。これにより、MAC処理に必要なデータを効率的に読み出すことが可能となる。
【0146】
このように、画像認識装置100は、中間シナプス算出処理(ステップS300)において、複数の中間シナプス42を並列的に算出する。また、画像認識装置100は、出力シナプス算出処理(ステップS350)において、中間シナプス42と重み付け係数との乗算値をそれぞれの部分加算値に加算する処理を並列的に実行する。このように、様々な処理を並列的に実行することにより、出力シナプス34を高速に算出することができる。
【0147】
なお、ニューロ演算部4は、コンフィギュラブル・プロセッサにより構成されることが望ましい。汎用のCPUまたはDSP(Digital Signal Processer)を使用する場合、ニューロ演算部4は、ソフトウェア処理により実行される。しかし、CPUまたはDSPがロードできるデータのビット数が固定されていたり、並列的に処理できる命令数が固定されていたりする。このため、本実施の形態の画像認識処理をリアルタイムで実行しようとする場合、クロック周波数の高いCPUまたはDSPを使用しなければならないため、消費電力が大きくなるという問題がある。
【0148】
ニューロ演算部4をハードウェア回路により構成した場合、回路の構成が複雑となるため、コストが増加するという問題がある。この場合、並列に処理できる命令の数、シナプス数、及びパーセプトロンの段数などを容易に変更することができない。
【0149】
コンフィギュラブル・プロセッサは、本実施の形態の画像認識処理に対応した命令を追加することが可能なプロセッサである。たとえば、重み付け係数Wiのロードを1サイクルで実行させるために、コンフィギュラブル・プロセッサの構成を変更できる。また、中間シナプス算出処理(S300)及び出力シナプス算出処理(S350)の並列数に応じて、コンフィギュラブル・プロセッサの構成を変更できる。汎用のCPUまたはDSPよりもクロック周波数の低いコンフィギュラブル・プロセッサを使用しても、リアルタイムで本実施の携帯の画像認識処理を実行することが可能となる。また、ニューロ演算部4をハードウェア回路により実装する場合と比べて、ニューロ演算の内容を容易に変更することができる。したがって、歩行者だけでなく、様々な物体の画像認識処理に対応したニューロ演算部4を容易に実現することができる。
【0150】
上記実施の形態において、ブロック作成部24が、検出ブロックを正規化する(ステップS255、図6参照)前に輝度フレーム31Fを正規化する(ステップS254)例を説明した。しかし、ブロック作成部24は、ステップS254を実行しなくてもよい。これにより、ブロックデータ33を作成する処理を高速化することができる。また、検出ブロックを正規化するたびに輝度フレーム31Fを正規化するのではなく、正規化した輝度フレーム31Fを図示しないメモリに保存しておいてもよい。この場合、ブロック作成部24は、最初の検出ブロックを正規化する前に、輝度フレーム31Fを正規化し(ステップS255)、2番目以降の検出ブロックを正規化するときには輝度フレーム31Fを正規化しなくてもよい。
【0151】
上記実施の形態において、ニューロ演算部4は、三層パーセプトロンのニューロ演算を実行する例を説明した(図9参照)。しかし、ニューロ演算部4は、中間シナプスを算出する処理を複数回繰り返してもよい。たとえば、ニューロ演算部4は、中間シナプス42−1〜42−Jから新たな中間シナプスを算出し、新たな中間シナプスから出力シナプス34を算出してもよい。
【符号の説明】
【0152】
100 画像認識装置
1 入力インタフェース
2 前処理部
3A,3B ブロックバッファ
4 ニューロ演算部
5 後処理部
6 後処理部
7 撮影データ記憶部
21 フレームパラメータ検出部
22 フレーム記憶部
22A,22B フレームバッファ
23 ブロックパラメータ検出部
24 ブロック作成部
30F フレーム
31F 輝度フレーム
34 出力シナプス
41−1〜41−H 入力シナプス
42−1〜42−J 中間シナプス
【技術分野】
【0001】
本発明は、ニューラルネットワークを用いて画像から物体を検出する画像認識装置に関する。
【背景技術】
【0002】
自動車などの車両を安全に走行させるため、様々な方法が検討されている。たとえば、車両の進行方向を撮影するカメラを設置し、カメラが撮影した画像から歩行者などを検出する機能をカーナビゲーションシステムに設ける方法がある。カーナビゲーションシステムは、歩行者を検出した場合、運転手に対して歩行者の存在を知らせる。運転手は、歩行者の動きを意識しながら車両を運転することができるため、車両の安全走行が可能となる。
【0003】
カメラにより撮影された画像から歩行者を検出する方法として、ニューラルネットワークを用いる方法がある。ニューラルネットワークとは、人間の脳神経系をモデルとした情報処理システムであり、歩行者の検出の他に、文字認識などにも用いられる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2008−21034号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1には、車両にカメラを搭載し、カメラにより撮像された画像から歩行者を検出する画像認識装置が記載されている。特許文献1に係る画像認識装置は、顕著性算出法を用いて、判別の候補となる候補物体を入力画像から検出する。候補物体に対してニューラルネットワークを適用することにより、候補物体が歩行者であるか否かが判定される。
【0006】
しかし、ニューラルネットワーク(ニューロ演算)の演算量は、膨大である。カメラにより撮影された画像から歩行者を、ニューロ演算を用いて検出する場合、画像認識処理をリアルタイムに行う必要がある。したがって、ニューロ演算のために、大規模なハードウェアを用いる必要があった。また、ニューロ演算をソフトウェア処理により実行する場合、クロック周波数の高いプロセッサを用いなければならず、消費電力が大きくなるという問題があった。
【0007】
そこで、本発明は、前記問題点に鑑み、ハードウェアの規模を小さくでき、ニューロ演算を用いた画像認識処理をリアルタイムで実行することができる技術を提供することを課題とする。
【0008】
また、本発明は、ニューロ演算を用いた画像認識処理を実行する際に、消費電力を低減することができる技術を提供することを課題とする。
【課題を解決するための手段】
【0009】
上記課題を解決するために、請求項1記載の発明は、フレームに検出対象の物体が含まれているか否かを判定する画像認識装置であって、前記フレーム内の第1領域の画像から、前記第1領域よりもサイズの小さい所定サイズの第1演算画像データを生成する前処理部と、前記第1演算画像データの画素値をニューロ演算することにより、前記第1領域に前記検出対象の物体が含まれているか否かを示すニューロ演算値を算出するニューロ演算部と、前記ニューロ演算値を用いて、前記フレームに前記検出対象の物体が含まれているか否かを示す結果データを生成する後処理部と、を備える。
【0010】
請求項2記載の発明は、請求項1に記載の画像認識装置であって、さらに、前記第1演算画像データを格納する第1ブロックバッファと、前記前処理部によって前記フレーム内の前記第1領域と異なる第2領域の画像から生成された第2演算画像データを格納する第2ブロックバッファと、を備え、前記前処理部は、前記ニューロ演算部が前記第1ブロックバッファに格納された第1演算画像データを用いてニューロ演算を実行している場合、第2演算画像データを生成して前記第2ブロックバッファに格納し、前記ニューロ演算部が前記第2ブロックバッファに格納された第2演算画像データを用いてニューロ演算を実行している場合、第1演算画像データを生成して前記第1ブロックバッファに格納する。
【0011】
請求項3記載の発明は、請求項1に記載の画像認識装置であって、前記前処理部は、前記第1領域内の画素値を統計処理してブロック統計値を算出するブロックパラメータ算出部と、前記ブロック統計値と、前記第1領域における画素値の標準的な分布を示すデータとに基づいて、前記第1領域内の画素値を正規化する正規化部と、を含む。
【0012】
請求項4記載の発明は、請求項3に記載の画像認識装置であって、前記前処理部は、前記フレームの画素値を統計処理してフレーム統計値を算出するフレームパラメータ算出部、を含み、前記正規化部は、前記フレーム統計値と、前記フレームにおける画素値の標準的な分布を示すデータとに基づいて前記フレームの画素値を正規化し、前記前処理部は、正規化されたフレームを用いて前記第1領域内の画素値を正規化する。
【0013】
請求項5記載の発明は、請求項1に記載の画像認識装置において、さらに、複数のフレームの入力を受け付ける入力インタフェースと、第1フレームバッファと、第2フレームバッファと、を備え、前記入力インタフェースは、前記第1フレームバッファに格納された第1フレームから前記第1演算画像データが生成されている場合、前記第1フレームの次に入力されるフレームを前記第2フレームバッファに格納する。
【0014】
請求項6記載の発明は、請求項1に記載の画像認識装置であって、前記ニューロ演算部は、入力層のシナプスをニューロ演算して中間層のシナプスを算出する中間シナプス算出処理を少なくとも1回実行する中間シナプス算出部と、前記中間層のシナプスをニューロ演算して出力シナプスを演算し、前記出力シナプスを前記ニューロ演算値として出力する出力シナプス算出部と、を含み、最初の中間シナプス算出処理における入力層のシナプスは、前記第1演算画像データの画素値である。
【0015】
請求項7記載の発明は、請求項6に記載の画像認識装置であって、前記中間シナプス算出部は、前記中間層のシナプスから、算出対象としてN個の中間シナプスを決定する算出対象決定部と、前記入力層のシナプスの中からいずれか一つの入力シナプスを選択する選択処理を実行する入力シナプス選択部と、選択された入力シナプスと第K(KはN以下の自然数)の中間シナプスとに対応する重み付け係数を決定し、前記選択された入力シナプスと決定した重み付け係数とを乗算した乗算値を、前記第Kの中間シナプスに加算する中間演算処理を実行する中間演算部と、を含み、前記中間演算部は、第1〜第Nの中間シナプスに対する中間演算処理を並列して実行し、前記選択処理と前記中間演算処理とは、全ての入力シナプスが選択されるまで繰り返される。
【0016】
請求項8記載の発明は、請求項7に記載の画像認識装置であって、前記入力シナプス選択部は、前記中間演算部によって前記中間演算処理が実行されている期間に、次の中間演算処理に用いられる重み付け係数を決定する。
【0017】
請求項9記載の発明は、請求項7または請求項8に記載の画像認識装置であって、前記入力層のシナプスは、複数の入力グループに分けられ、前記入力シナプス選択部は、前記複数の入力グループの中からいずれか一つを選択し、選択された入力グループの中から前記中間演算処理の対象となる入力シナプスを選択し、前記選択された入力グループに属する全ての入力シナプスを選択した後に次の入力グループを選択する。
【0018】
請求項10記載の発明は、請求項9に記載の画像認識装置であって、さらに、前記入力層のシナプスを格納する入力シナプスバッファと、前記中間シナプス算出部が使用する重み付け係数を格納する第1係数テーブルと、を備え、前記中間シナプス算出部は、前記選択された入力グループに属する全ての入力シナプスを、1回の読み出し処理で前記入力シナプスバッファから読み出し、前記中間演算部により決定された重み付け係数を、1回の読み出し処理で前記第1係数テーブルから読み出す。
【0019】
請求項11記載の発明は、請求項9または請求項10に記載の画像認識装置であって、前記画像認識装置は、前記選択された入力グループの中で最後に選択された入力シナプスに対して実行される中間演算処理と、前記次の入力グループを選択する処理とを並行して実行する。
【0020】
請求項12記載の発明は、請求項6ないし請求項11のいずれかに記載の画像認識装置であって、前記中間シナプス算出部は、2回目以降の中間算出処理を実行する場合、入力シナプスとして直前の中間算出処理で算出された中間シナプスを用いる。
【0021】
請求項13記載の発明は、請求項6ないし請求項12のいずれかに記載の画像認識装置であって、前記中間シナプス算出部は、全ての入力シナプスに対する中間演算処理が終了した後の中間シナプスをシグモイド演算し、シグモイド演算においてシグモイド関数を線形的に近似した近似関数を使用する。
【0022】
請求項14記載の発明は、請求項6ないし請求項13のいずれかに記載の画像認識装置であって、前記出力シナプス算出部は、前記出力シナプスの算出に用いられるQ個の部分加算値を設定する部分加算値設定部と、前記中間層のシナプスからQ個の中間シナプスを選択し、前記Q個の中間シナプスに含まれる第R(RはQ以下の自然数)の中間シナプスと、前記第Rの中間シナプスに対応する重み付け係数との乗算値を第Rの部分加算値に加算する部分加算処理を実行する部分加算値演算部と、前記中間層のシナプスに含まれる全ての中間シナプスに対する部分加算処理が終了した後に、前記Q個の部分加算値の合計値を算出して前記出力シナプスを算出する合計部と、を含み、前記Q個の中間シナプスを用いた部分加算処理が並行して実行される。
【0023】
請求項15記載の発明は、請求項14に記載の画像認識装置であって、さらに、前記中間層のシナプスを格納する中間シナプスバッファと、前記中間層のシナプスに対応する重み付け係数を格納する第2係数テーブルと、を備え、前記出力シナプス算出部は、前記Q個の中間シナプスを、1回の読み出し処理で前記中間シナプスバッファから読み出し、前記Q個の中間シナプスに対応する重み付け係数を、1回の読み出し処理で前記第2係数テーブルから読み出す。
【0024】
請求項16記載の発明は、請求項14または請求項15に記載の画像認識装置であって、前記出力シナプス算出部は、前記部分加算処理が実行されている期間に、次の部分加算処理に用いられるQ個の中間シナプスと重み付け係数とを決定する。
【0025】
請求項17記載の発明は、請求項14ないし請求項16のいずれかに記載の画像認識装置であって、前記中間シナプス算出部は、全ての中間シナプスに対する部分加算処理が終了した後に、前記Q個の部分加算値の合計値をシグモイド演算することにより前記出力シナプスを算出し、シグモイド演算においてシグモイド関数を線形的に近似した近似関数を使用する。
【0026】
請求項18記載の発明は、請求項1ないし請求項17のいずれかに記載の画像認識装置であって、前記ニューロ演算部は、コンフィギュラブル・プロセッサにより実装される。
【発明の効果】
【0027】
本発明の画像認識装置において、前処理部は、検出対象の物体がフレーム内の第1領域に含まれているか否かを判定するために、第1領域の画像から、第1領域よりもサイズの小さい第1演算画像データを生成する。ニューロ演算部は、第1演算画像データの画素値をニューロ演算してニューロ演算値を算出する。ニューロ演算値に基づいて、第1領域に検出対象の物体が含まれているか否かが判定される。第1領域の画像よりサイズの小さい第1演算画像データをニューロ演算に用いることにより、ニューロ演算の演算量を削減することができる。したがって、ニューロ演算をリアルタイムで実行することが可能となるとともに、ハードウェアの規模を小さくすることができる。
【0028】
また、ニューロ演算部が第1ブロックバッファに格納された第1演算画像データを用いてニューロ演算を行っている場合、前処理部は、第2演算画像データを作成して第2ブロックバッファに格納する。これにより、ニューロ演算の対象となる画像データの作成と、ニューロ演算とを並行して実行できるため、リアルタイムで画像認識処理を行うことが可能となる。
【0029】
また、ニューロ演算部は、コンギュラブル・プロセッサにより構成される。ニューロ演算の処理内容に応じた命令等をコンフィギュラブル・プロセッサに追加することにより、ニューロ演算処理をソフトウェア処理により実行する場合に比べて、クロック周波数の低いプロセッサを使用することができる。したがって、ニューロ演算を実行するときの消費電力を削減することができる。
【図面の簡単な説明】
【0030】
【図1】本発明の実施の形態に係る画像認識装置の構成を示す機能ブロック図である。
【図2】図1に示す画像認識装置により実行される画像認識処理のフローチャートである。
【図3A】図1に示すフレームとブロックの関係を示す図である。
【図3B】図3Aに示す検出ブロックからブロックデータを作成する処理の概略を示す図である。
【図3C】図1に示す後処理部により作成される結果データを示す図である。
【図4】図1に示すフレームパラメータ検出部が処理する輝度フレームと、ブロックデータの作成対象である輝度フレームとの対応を示す図である。
【図5】図1に示すフレームパラメータ検出部の動作を示すフローチャートである。
【図6】図1に示す前処理部がブロックデータを作成するときの動作を示すフローチャートである。
【図7A】図1に示す前処理部に設定されるブロックパラメータテーブルを示す図である。
【図7B】図3Aに示す検出ブロックと、ブロックパラメータとの対応を示す図である。
【図8】図1に示すブロックバッファの読み出し及び書き込みのタイミングを示すタイムチャートである。
【図9】図2に示すニューロ演算処理の概略を示す図である。
【図10】図9に示す中間シナプスの計算手順の概略を示す図である。
【図11】図9に示す中間シナプス算出処理のフローチャートである。
【図12】図9に示す中間シナプスの算出過程を示す図である。
【図13】図9に示す中間シナプスの算出過程を示す図である。
【図14】図9に示す中間シナプスの算出過程を示す図である。
【図15】図9に示す中間シナプスの算出過程を示す図である。
【図16】図9に示す中間シナプスの算出過程を示す図である。
【図17】図9に示す中間シナプス処理のタイムチャートである。
【図18】図11のステップS309で使用するシグモイド関数と線形近似関数との対応を示す図である。
【図19】図9に示す出力シナプス算出処理のフローチャートである。
【図20】図9に示す出力シナプスの算出過程を示す図である。
【図21】図9に示す出力シナプスの算出過程を示す図である。
【図22】図9に示す出力シナプスの算出過程を示す図である。
【図23】図9に示す出力シナプスの算出過程を示す図である。
【図24】図19に示す出力シナプス算出処理のタイムチャートである。
【発明を実施するための形態】
【0031】
以下、図面を参照しつつ、本発明の第1の実施の形態について説明する。
【0032】
{1.全体構成}
図1は、本発明の実施の形態に係る画像認識装置100の機能ブロック図である。画像認識装置100は、自動車などの車両に搭載され、車載カメラが撮影して生成した動画像データを入力する。画像認識装置100は、入力された動画像データの各フレームから歩行者を検出する処理を行う。歩行者が検出された場合、画像認識装置100は、入力された動画像データの中で、歩行者が検出された領域を目立つように表示することにより、歩行者の存在を運転手に通知する。
【0033】
図1に示すように、画像認識装置100は、入力インタフェース1と、前処理部2と、ブロックバッファ3A,3Bと、ニューロ演算部4と、係数テーブル5と、後処理部6と、撮影データ記憶部7とを備える。
【0034】
入力インタフェース1は、車載カメラが生成した動画像データのフレーム30Fを入力する。入力インタフェース1は、フレーム30Fから輝度成分を抽出し、輝度フレーム31Fを前処理部2に出力する。
【0035】
前処理部2は、輝度フレーム31Fを、予め定められた大きさのブロックに区分して、ブロックデータ33を作成する。ブロックデータ33は、バッファ3A,3Bのいずれかに格納される。
【0036】
前処理部2は、フレームパラメータ検出部21と、フレーム記憶部22と、ブロックパラメータ検出部23と、ブロック作成部24とを備える。フレームパラメータ検出部21は、輝度フレーム31Fの画素値の統計値(最大値、標準偏差など)31を算出する。フレーム記憶部22は、フレームパラメータ検出部21から入力した輝度フレーム31Fを、フレームバッファ22A,22Bのいずれかに格納する。ブロックパラメータ検出部23は、輝度フレーム31Fの中から歩行者の検出対象となるブロックを特定し、ブロックの画素値の統計値32を算出する。ブロック作成部24は、フレームバッファ22A,22Bのいずれかから輝度フレーム31Fを入力する。ブロック作成部24は、入力した輝度フレーム31Fから、ブロックパラメータ検出部23により特定されたブロックのブロックデータ33を作成する。
【0037】
ニューロ演算部4は、ブロックバッファ3A,3Bのいずれからブロックデータ33を入力し、ブロックデータ33に対するニューロ演算を行う。ニューロ演算の結果、出力シナプス34が、ニューロ演算部4から出力される。係数テーブル5は、ニューロ演算時に用いられる重み付け係数を格納する。
【0038】
後処理部6は、フレーム30Fと、出力シナプス34とを用いて結果データ35を作成する。撮影データ記憶部7は、車載カメラが生成したフレーム30Fをそのまま記憶する。
【0039】
{2.画像認識処理の概略}
図2は、画像認識装置100が実行する画像認識処理のフローチャートである。図2を参照しながら、画像認識処理の概略を説明する。
【0040】
入力インタフェース1は、フレーム30Fを入力し(ステップS1)、輝度フレーム31Fを抽出する。入力インタフェース1は、フレーム30Fを撮影画像データ記憶部7に格納する。前処理部2は、輝度フレーム31Fから、ニューロ演算に用いるブロックデータ33を作成する(ステップS2)。ニューロ演算部4は、ブロックデータ33の各画素をニューロ演算する(ステップS3)。後処理部6は、出力シナプス34の値に基づいて歩行者が検出されたか否かを判定する。歩行者が検出されたと判定された場合、後処理部6は、歩行者が検出されたブロックをフレーム30F上に重ねた結果データ35を生成する(ステップS4)。
【0041】
以下、ブロックデータ33の作成の概略を説明する。図3Aは、輝度フレーム31Fと検出ブロックとの関係を示す図である。図3Aに示すように、画像認識装置100は、輝度フレーム31Fの中から、歩行者を検出する対象となる領域として、検出ブロックBL_A,BL_Bのいずれかを設定する。
【0042】
図3Aでは、検出ブロックBL_A,BL_Bの両者が輝度フレーム31F上に表示されている。実際には、一つの検出ブロックに対し、一つのブロックデータ33が作成される。検出ブロックBL_A,BL_Bは、サイズが異なる。検出ブロックBL_Aは、X軸方向のサイズが32ピクセルであり、Y軸方向のサイズが64ピクセルである。検出ブロックBL_Bは、X軸方向のサイズが64ピクセルであり、Y軸方向のサイズが128ピクセルである。
【0043】
検出ブロックBL_Bのサイズは、検出ブロックBL_Aのサイズよりも大きい。撮影場所から近い位置にいる歩行者を検出するために、検出ブロックBL_Bが大きく設定されている。一方、検出ブロックBL_Aは、遠方にいる歩行者を検出するために、小さいサイズが設定される。複数のサイズの検出ブロックを使用することにより、様々な位置にいる歩行者を検出することができる。
【0044】
図3Bは、ブロックデータ33の作成からニューロ演算が行われるまでの概略を示す図である。前処理部2は、輝度フレーム31Fから検出ブロックBL_A,BL_Bを切り出す。切り出された画像データが所定のサイズに変換されることにより、ブロックデータ33が作成される(ステップS2)。ブロックデータ33のサイズは、X軸方向が16ピクセル、Y軸方向が32ピクセルであり、検出ブロックのサイズに関係なく一定である。ニューロ演算部4は、ブロックデータ33に対してニューロ演算を行い(ステップS3)、出力シナプス34を生成する。出力シナプス34は、一つの検出ブロックにつき一つずつ生成される。
【0045】
ブロックデータ33のサイズが一定である理由を説明する。検出ブロックのサイズに応じてブロックデータ33の画素数が変化する場合、ニューロ演算部4は、画素数に応じて、ニューロ演算の処理内容を変更する必要がある。しかし、検出ブロックのサイズに関係なく、ブロックデータ33のサイズを一定にすることにより、ニューロ演算の処理を簡略化することが可能となる。また、ブロックデータ33のサイズを検出ブロックBL_A,BL_Bよりも小さくすることにより、ニューロ演算処理(ステップS3)の演算量が削減される。
【0046】
再び、図2を参照する。後処理部6は、フレーム30Fと、出力シナプス34とを用いて結果データを作成する(ステップS4)。後処理部6は、出力シナプス34の大きさに基づいて、対応する検出ブロックから歩行者が検出されたか否かを判定する。図3Cは、結果データ35の一例を示す図である。歩行者が検出された場合、後処理部6は、撮影データ記憶部7からフレーム30Fを取得する。後処理部6は、歩行者が検出された検出ブロックに対応する枠35A,35B,35Cをフレーム30F上に描画して、結果データ35を作成する。結果データ35が車両に搭載されたディスプレイに表示されることにより、運転手は、歩行者の位置を確認することができる。
【0047】
{3.前処理部の動作(ステップS2)}
以下、ステップS2(図2参照)を実行する前処理部2の動作について詳しく説明する。最初に、フレームパラメータ検出部21によって、輝度フレーム31Fの統計値31の算出処理が行われる。次に、ブロックパラメータ検出部23とブロック作成部24とによって、ブロックデータ33が輝度フレーム31Fから作成される。
【0048】
{3.1.フレームパラメータ検出部21の処理}
図4は、フレームパラメータ検出部21が処理する輝度フレーム31Fと、ブロックデータ33の作成対象となる輝度フレーム31Fとの対応を示すタイムチャートである。図5は、フレームパラメータ検出部21の動作を示すフローチャートである。詳細については後述するが、輝度フレーム31Fの保存と、ブロックデータ33の作成とは、並行して実行される(図5参照)。
【0049】
以下、図4及び図5を参照しながら、フレームパラメータ検出部21の動作を説明する。入力インタフェース1は、図示しない車載カメラが撮影した動画像データを入力し、輝度フレーム31Fa,31Fb,31Fc,・・・を前処理部2に順次出力する。輝度フレーム31Faが前処理部2に入力された場合、図5に示す処理が開始される。
【0050】
フレームパラメータ検出部21は、輝度フレーム31Faの統計値31を算出する(ステップS201)。統計値31として、輝度フレーム31Fにおける画素の最大値、最小値、合計値、分散及び標準偏差が算出される。フレームパラメータ検出部21は、輝度フレーム31Faの格納先をフレームバッファ22Aに決定する(ステップS202)。輝度フレーム31Faは、フレームバッファ22Aに格納される(ステップS203)。
【0051】
前処理部2は、輝度フレーム31Faの次のフレームとして、輝度フレーム31Fbを入力する。輝度フレーム31Fbの統計値31が算出される(ステップS201)。輝度フレーム31Fbの格納先が、フレームバッファ22Bに決定される(ステップS202)。以下、輝度フレーム31Fの入力が終了するまで(ステップS204においてNo),ステップS201〜S204の処理が繰り返される。図5に示すように、輝度フレーム31Fの格納先は、フレームバッファ22A,22Bに交互に切り替えられる。
【0052】
図4に示すように、輝度フレーム31Fa,31Fb,31Fcに関してステップS201〜S203の処理が行われる期間は、期間A,期間B,期間Cである。また、前処理部2は、フレームバッファ22A,22Bに格納された輝度フレーム31Fを用いてブロックデータ33を作成する(詳細は後述)。したがって、ブロックデータ33の作成を開始することができる時刻は、輝度フレーム31Faの格納が終了した時刻T11となる。すなわち、輝度フレーム31Faからブロックデータ33を作成する処理は、期間Bに実行される。上述したように、輝度フレーム31Faの次に入力される輝度フレーム31Fbは、期間Bにフレームバッファ22Bに格納される。
【0053】
時刻T12において、輝度フレーム31Faからブロックデータ33を作成する処理が終了するとともに、輝度フレーム31Fbのフレームバッファ22Bに対する格納が完了する。前処理部2は、時刻T12から、輝度フレーム31Fbに対するフロックデータ33の作成を開始することが可能となる。輝度フレーム31Fを格納するフレーム記憶部22をダブルバッファ構成とすることにより、フレームパラメータ検出部21の処理と、ブロックデータ33を作成する処理とを、並行して実行することができる。したがって、画像認識処理を効率良く実行することができる。
【0054】
{3.2.ブロックパラメータ検出部23及びブロック作成部24の処理}
図6は、前処理部2がブロックデータ33を作成するときの動作を示すフローチャートである。図6に示す処理は、ブロックパラメータ検出部23及びブロック作成部24により実行される。
【0055】
(ブロックの決定)
前処理部2は、読み出し対象のフレームバッファを決定する(ステップS251)。ブロックデータ33が輝度フレーム31Faから作成される場合、読み出し対象は、フレームバッファ22Aとなる。前処理部2は、予め設定されたブロックパラメータテーブル221(図7A参照)を用いて、輝度フレーム31Fから、歩行者の検出対象となる検出ブロックを一つ決定する(ステップS252)。ブロックパラメータテーブル221は、前処理部2に予め設定されている。
【0056】
図7Aは、検出ブロックBL_Aのサイズに対応するブロックパラメータテーブル221を示す図である。図7Bは、検出ブロックと、ブロックパラメータとの対応を示す図である。以下、検出ブロックを決定する処理(ステップS252)について詳しく説明する。
【0057】
図7Bに示すように、FR_START_X、FR_START_Y、FR_SIZE_X,及びFR_SIZE_Yは、輝度フレーム31Fにおいて、歩行者を検出する対象となる領域32Fを特定するパラメータである。領域32Fの中から、検出ブロックが決定される。輝度フレーム31Fにおいて、歩行者を検出することがない領域が存在する。輝度フレーム31Fの上側の領域は、空であることが多い。このため、上側の領域から歩行者が検出されることはない。領域32Fから検出ブロックを決定することにより、ニューロ演算の対象となる検出ブロックの数を削減することができる。
【0058】
BL_SIZE_X及びBL_SIZE_Yは、検出ブロックのX方向及びY方向のサイズを決定するパラメータである。BL_START_X,BL_START_Yは、領域32Fの中から最初に決定される検出ブロックBL1の座標を示すパラメータであり、検出ブロックBL1の左上頂点の座標に相当する。
【0059】
BL_OFS_X,BL_OFS_Yは、検出ブロックのX座標、Y座標のオフセット数であり、新たな検出ブロックの左上の頂点を算出するために用いられる。例えば、検出ブロックBL2の左上頂点のX座標は、BL_START_XにBL_OFS_Xを加算した値となる。2段目の検出ブロックBL11の左上頂点の座標を算出する場合、検出ブロックBL11の左上頂点のY座標は、BL_START_YにBL_OFS_Yを加算した値となる。
【0060】
BL_RPT_X,BL_RPT_Yは、領域32Fから検出ブロックを切り出す回数を決定するパラメータである。例えば、BL_RPT_Xが10に設定されている場合、X軸方向に沿って切り出される検出ブロックの数は、10となる。BL_RPT_Yが5に設定されている場合、Y軸方向に沿って切り出される検出ブロックの数は、5となる。
【0061】
検出ブロックを決定する順序について説明する。前処理部2は、検出ブロックBL1を決定した後に、BL_RPT_Xで設定された回数分(10回)、X軸方向に沿って検出ブロックを決定する。すなわち、1段目の検出ブロックが、検出ブロックBL1,BL2,・・・,BL10の順に決定される。次に、前処理部2は、2段目の検出ブロック(BL11〜BL20)を順次決定する。BL_RPT_Yが5に設定されている場合、前処理部2は、5段目の検出ブロックを決定するまで、上記の処理を繰り返す。この結果、50個の検出ブロックが、歩行者を検出する対象領域として特定される。
【0062】
ブロックパラメータテーブル221は、検出ブロックBL_A,BL_Bのそれぞれのサイズに応じて作成される。図7Aに示すブロックパラメータテーブル221は、検出ブロックBL_Aに対応する。前処理部2は、検出ブロックBL_Aに対応するブロックパラメータテーブル221を用いて検出ブロックを決定し、その後、検出ブロックBL_Bに対応するブロックパラメータテーブル221を用いて検出ブロックを決定する。
【0063】
再び、図6を参照する。ブロックパラメータ検出部23が、決定した検出ブロックの統計値32を算出する(ステップS253)。統計値32の算出には、フレーム記憶部22に記憶された輝度フレーム31Fの輝度値が用いられる。統計値32として、検出ブロック内の画素の最大値、最小値、合計値、分散及び標準偏差が算出される。以下、検出ブロックBL1のブロックデータ33を作成する場合を例に説明する。
【0064】
(輝度フレームの正規化)
ブロック作成部24は、輝度フレーム31Fの統計値31を用いて、輝度フレーム31Fを正規化する(ステップS254)。輝度フレーム31Fの正規化とは、輝度フレーム31Fの各画素値(輝度値)を、予め設定された標準的な輝度分布に合うように変換する処理である。ニューロ演算処理(ステップS3,図2参照)は、演算対象のブロックデータ33が標準的な輝度分布を有していると仮定して行われる。輝度フレーム31Fの輝度分布に偏りがある場合、ブロックデータ33の輝度分布にも偏りが生じると考えられる。
【0065】
例えば、夜間に撮影された輝度フレーム31Fの輝度値は、全体的に低くなるため、歩行者の検出精度に悪影響を及ぼす可能性がある。しかし、輝度フレーム31Fを正規化することにより、歩行者の検出精度が低下することを防ぐことができる。
【0066】
次に、ブロック作成部24は、正規化された輝度フレーム31Fから検出ブロックBL1の画像データを切り出し、統計値32を用いて、検出ブロックBL1の画像データをさらに正規化する(ステップS255)。輝度フレーム31Fが正規化されたとしても、輝度の空間分布にはばらつきが存在する。正規化されたフレーム31Fにおいて、検出ブロックBL1の領域が暗い領域であった場合、検出ブロックBL1におけるニューロ演算の精度が低下する可能性がある。したがって、検出ブロックBL1の画像データについても、輝度フレーム31Fと同様に正規化が行われる。
【0067】
(sobelフィルタ処理)
以下、正規化された検出ブロックBL1の画像データを、ブロック画像データと呼ぶ。ブロック作成部24は、ブロック画像データに対してsobelフィルタ処理を行う(ステップS256)。sobelフィルタ処理は、画像中の物体の輪郭を強調する処理である。
【0068】
sobelフィルタ処理について詳しく説明する。まず、(式1)に示すように、3×3の行列である行列S0,S1,S2,S3を定義する。
【数1】
【0069】
ブロック画像データを行列Pにより表わした場合、行列Pは、(式2)のように表わされる。(式2)において、Mは、水平方向(X軸方向)の座標を示す。Nは、垂直方向(Y軸方向)の座標を示す。
【数2】
【0070】
sobelフィルタ処理後のブロック画像データの画素値をSBL(m,n)とする。m,nは、X軸方向、Y軸方向の座標である。SBL(m,n)は、(式3)によって算出される。
【数3】
【0071】
(式3)において、Coring関数は、下記の(式4)で表わされる。
【数4】
【0072】
また、(式3)において、演算子「*」は、畳み込み演算を示す。畳み込み演算の式を(式5)に示す。(式5)において用いられる行列Sを、(式6)に示す。
【数5】
【数6】
【0073】
(式5)において、out(m,n)は、畳み込み演算後のブロック画像データの画素値を示す。p(m−k,n−r)は、畳み込み演算前のブロック画像データの画素値を示す。行列Sは、(式1)に示す行列S0,S1,S2,S3のいずれかであり、s(k,r)は、行列Sの各成分を示す。
【0074】
(ガウスフィルタ処理)
再び、図6を参照する。ブロック生成部24は、物体の輪郭が強調されたブロック画像データに対して、ガウスフィルタ処理を行う(ステップS257)。
【0075】
(式7)に、ガウスフィルタ処理で使用する点広がり関数Wを示す。点広がり関数Wは、5×5の行列である。
【数7】
【0076】
ガウスフィルタ処理後のブロック画像データの画素をg(m,n)とする。sobelフィルタ処理後のブロック画像データの画素の行列をP1とする。行列P1の構成は、(式2)と同様である。g(m,n)は、(式8)に示すように、点広がり関数Wと行列P1を畳み込み演算することにより得られる。ガウスフィルタ処理を実行することにより、ブロック画像データ中のノイズ成分を低下させることができる。
【数8】
【0077】
(平滑化処理)
前処理部2は、ガウスフィルタ処理後のブロック画像データに対して、平滑化処理(ステップS258)を行う。(式9)に、平滑化処理に用いる行列Lを示す。行列Lは、3×3の行列である。
【数9】
【0078】
平滑化処理後のブロック画像データの画素をlow(m,n)とする。ガウスフィルタ処理後のブロック画像データの画素の行列をP2とする。行列P2の構成は、(式2)と同様である。low(m,n)は、(式10)に示すように、行列Lと行列P2を畳み込み演算することにより得られる。
【数10】
【0079】
次に、ブロック作成部24は、平滑化処理されたブロック画像データのサイズを、所定のサイズに変換する(ステップS259)。これにより、ブロックデータ33が作成される。ブロックデータ33のサイズは、たとえば、X軸方向が16画素であり、Y軸方向が32画素である(図3B参照)。ブロック画像データのサイズ変換には、線形補間を使用することができる。
【0080】
ブロック作成部24は、ブロックデータ33をブロックバッファ3A,3Bのいずれかに格納する(ステップS260)。前処理部2は、輝度フレーム31Fから全ての検出ブロックに対応するブロックデータ33を作成したか否かを確認する(ステップS261)。ブロックデータ33の作成が終了していない場合(ステップS261においてNo)、前処理部2は、ステップS252に戻り、ステップS252〜S261の処理を繰り返す。全てのブロックデータ33を作成した場合(ステップS261においてYes)、前処理部2は、図6に示すフローチャートを終了する。前処理部2は、次の輝度フレーム31Fからブロックデータ33を作成するために、図6に示すフローチャートを再び開始する。
【0081】
{4.ブロックバッファに対する書き込み及び読み出し}
前処理部2は、ステップS260において、作成したブロックデータ33をブロックバッファ3A,3B(図1参照)のいずれかに格納する。ニューロ演算部4は、ブロックバッファ3A,3Bのいずれかからブロックデータ33を読み出し、読み出したブロックデータ33に対してニューロ演算を行う(ステップS3、図2参照)。
【0082】
画像認識装置100は、ブロックバッファを二つ設けることにより、ブロックデータ33を作成する処理(図6参照)と、ニューロ演算処理(ステップS3)とを並行して実行することができる。これにより、フレーム30Fから歩行者を検出する処理を効率良く実行することができる。
【0083】
図8は、ブロックバッファ3A,3Bの読み出し及び書き込みのタイミングを示すタイムチャートである。前処理部2は、時刻T20〜T21の期間に、検出ブロックBL1(図7B参照)のブロックデータ33を作成してブロックバッファ3Aに書き込む。時刻T21までは、ブロックバッファ3A,3Bのいずれにもブロックデータ33が書き込まれていないため、ニューロ演算処理(ステップS3)は、実行されない。
【0084】
時刻T21において、検出ブロックBL1のブロックデータ33の書き込みが完了する。ニューロ演算部4は、時刻T21から、検出ブロックBL1のブロックデータ33に対するニューロ演算処理(ステップS3)を開始する。つまり、ニューロ演算部4が、時刻T21〜T22の期間に、検出ブロックBL1のブロックデータ33をブロックバッファ3Aから読み出す。前処理部2は、時刻T21〜T22の期間に、検出ブロックBL2(図7B参照)のブロックデータ33を作成してブロックバッファ3Bに書き込む。
【0085】
時刻T22〜T23の期間において、ニューロ演算部4は、ブロックバッファ3Bから検出ブロックBL2のブロックデータ33を読み出す。前処理部2は、ブロックバッファ3Aに、検出ブロックBL3(図7B参照)のブロックデータ33を書き込む。以下、書き込み対象のブロックバッファと、読み出し対象のブロックバッファとが交互に切り替わる。つまり、ブロックバッファ3A,3Bは、ピンポンバッファを構成する。したがって、ブロックデータ33を作成する処理と、ニューロ演算処理とを並行して実行することができる。
【0086】
{5.ニューロ演算処理(ステップS3)}
以下、ニューロ演算処理(ステップS3)について詳しく説明する。
【0087】
{5.1.ニューロ演算の概略}
図9は、ニューロ演算部4により実行されるニューロ演算処理(ステップS3)の概略を示す図である。図9に示すように、ニューロ演算部4は、ブロックデータ33の各画素をニューロ演算することにより、出力シナプス34を算出する。ニューロ演算部4は、入力層51と、中間層52と、出力層53とを有する三層パーセプトロンを用いて、ニューロ演算を行う。
【0088】
入力層51は、入力シナプス41−1〜41−Hを有する。入力シナプス41−1〜41−Hは、ブロックデータ33の各画素に対応する。以下、入力シナプス41−1〜41−Hを総称する場合、入力シナプス41と呼ぶ。ブロックデータ33のサイズは16×32ピクセルであるため、入力シナプス41の数は、512個である。ニューロ演算部4は、中間シナプス算出処理(ステップS300)を実行して、入力シナプス41から中間層52のシナプス(中間シナプス)を算出する。
【0089】
中間層52は、中間シナプス42−1〜42−Jを有する。本実施の形態では、中間シナプスの数を256とする。ただし、中間シナプスの数は、入力シナプス41の数より大きくない数値であればよい。
【0090】
出力シナプス34は、一つの数値データである。ニューロ演算部4は、出力シナプス算出処理(ステップS350)を実行して、中間シナプス42−1〜42−Jから出力シナプス34を算出する。
【0091】
ここで、シナプスの計算方法を説明する。中間シナプス及び出力シナプス34の計算法は、共通である。シナプスの計算式を、(式11)に示す。
【数11】
【0092】
(式11)の詳細について、中間シナプス42−1の計算を例にして説明する。図10は、中間シナプス42−1の計算手順を示す概略図である。
【0093】
入力シナプス41−1〜41−Hは、(式11)のSiに対応する。入力シナプス41ごとに設定される重み付け係数W11〜W1Hは、(式11)のWiに対応する。重み付け係数Wiは、係数テーブル5に格納される。本実施の形態では、検出対象が歩行者であるため、歩行者に対応する重み付け係数Wiが、係数テーブル5に格納される。なお、係数テーブル5に格納される重み付け係数Wiを変更することにより、歩行者だけでなく、自動車、標識などの様々な物体を検出することが可能となる。
【0094】
bmは、中間シナプス42−1の初期値である。(式11)のΣ演算子の項は、合計値41Tに対応し、入力シナプス41と重み付け係数との乗算値の総和である。合計値41Tと初期値bmとの和をシグモイド関数に代入することにより、中間シナプス42−1を得ることができる。シグモイド関数を、(式12)に示す。
【数12】
【0095】
このように、ニューロ演算処理では、乗算処理及び加算処理の実行回数が非常に多くなる。ニューロ演算処理(ステップS3)を高速化するために、ニューロ演算部4は、中間シナプス算出処理(S300)及び出力シナプス算出処理(S350)において、複数の演算処理を並行して実行する。以下、それぞれの処理について詳しく説明する。
【0096】
{5.2.中間シナプス算出処理(ステップS300)}
図11は、ニューロ演算部4により実行される中間シナプス算出処理(S300)のフローチャートである。図12〜図16は、中間シナプスの算出過程を示す図である。以下、説明を簡単にするために、入力シナプス41の数及び中間シナプスの数が、それぞれ12個である場合を例に説明する。
【0097】
ニューロ演算部4は、12個の中間シナプスの中から、算出対象の中間シナプスのグループ(中間グループ)を決定する(ステップS301)。図12に示すように、中間シナプス42−1〜42−4が、中間グループとして選択される。中間シナプス42−1〜42−4の数値を、中間値M1〜M4とする。ニューロ演算部4は、中間値M1〜M4の初期値を設定する(ステップS302)。初期値は、(式11)のbmに対応し、中間シナプスごとに設定される数値である。
【0098】
ニューロ演算部4は、中間シナプス42−1〜42−4の算出に用いる入力シナプス41のグループ(入力グループ)を決定する(ステップS303)。最初に、入力シナプス41−1〜41−4が、入力グループとして選択される。入力シナプス41−1〜41−4に対応する画素値S1〜S4が、メモリ(図示省略)にロードされる(ステップS304)。ニューロ演算部4は、入力グループの中から入力シナプス41−1を選択し、入力シナプス41−1に対応する重み付け係数W11〜W14を、メモリ(図示省略)にロードする(ステップS305)。重み付け係数W11〜W14は、中間シナプス42−1〜42−4を算出するために、入力シナプス41−1に対して設定された係数である。重み付け係数W11〜W14は、係数テーブル5からロードされる。
【0099】
ニューロ演算部4は、画素値S1に対して重み付け係数W11〜W14をそれぞれ乗算し、各乗算値を中間値M1〜M4に加算する(ステップS306)。具体的には、画素値S1と重み付け係数W11の乗算値が、中間値M1に加算される。画素値S1と重み付け係数W12の乗算値が、中間値M2に加算される。同様に、画素値S1と重み付け係数W13,W14との乗算値が、中間値M3,M4に加算される。
【0100】
次に、ニューロ演算部4は、入力グループに属する全ての入力シナプスを、中間値M1〜M4の算出に用いたか否かを確認する(ステップS307)。入力シナプス41−2〜41−4が未だ選択されていないため(ステップS307においてNo)、ニューロ演算部4は、ステップS305に戻る。
【0101】
図13に示すように、ニューロ演算部4は、入力シナプス41−2について、ステップS305,S306の処理を実行する。すなわち、入力シナプス41−2の画素値S2と、重み付け係数W21との乗算値が、中間値M1に加算される。同様に、画素値S2と重み付け係数W22〜W24との乗算値が、中間値M2〜M4に加算される。
【0102】
ニューロ演算部4は、入力シナプス41−3に対しても、ステップS305,S306の処理を実行する。入力シナプス41−3の画素値と重み付け係数との乗算値が、中間値M1〜M4に加算される。
【0103】
ニューロ演算部4は、入力シナプス41−4に対しても、ステップS305,S306の処理を実行する。図14に示すように、入力シナプス41−4の画素値S4と重み付け係数W41〜W44との乗算値が、中間値M1〜M4に加算される。
【0104】
再び、図11を参照する。中間値M1〜M4の算出に、入力シナプス41−1〜41−4を使用したため(ステップS307においてYes)、ニューロ演算部4は、全ての入力シナプス41を入力グループとして選択したか否かを確認する(ステップS308)。
【0105】
入力シナプス41−5〜41−12が、入力グループとして選択されていないため(ステップS308においてNo)、ニューロ演算部4は、ステップS303に戻り、入力シナプス41−5〜41−8を入力グループとして新たに選択する。
【0106】
ニューロ演算部4は、入力シナプス41−5〜41−8のそれぞれに対して、ステップS305,S306の処理を実行する。図15は、入力シナプス41−5と重み付け係数W51〜W54との乗算値を、中間値M1〜M4に加算する処理を示している。以下、全ての入力シナプス41が入力グループとして選択されるまで(ステップS308においてYes)、ステップS303〜S308の処理が繰り返される。
【0107】
全ての入力シナプス41が入力グループとして選択された場合(ステップS308においてYes)、ニューロ演算部4は、中間値M1〜M4をシグモイド関数に入力する(ステップS309)。シグモイド関数の計算結果が、中間シナプス42−1〜42−4として、図示しないメモリに保存される(ステップS310)。
【0108】
このように、中間シナプス42のうち、中間シナプス42−1〜42−4が最初に算出される。入力シナプスと重み付け係数の乗算値が、複数の中間値に並列して加算されることにより、4つの中間シナプス42を同時に算出することができる。したがって、中間シナプス算出処理(ステップS300)を高速に実行することができる。
【0109】
再び、図11を参照する。ニューロ演算部4は、全ての中間シナプス42の算出が終了したか否かを確認する(ステップS311)。中間シナプス42−5〜42−12が算出されていないため、ニューロ演算部4は、ステップ301に戻る。図16に示すように、ニューロ演算部4は、新たな中間グループとして、中間シナプス42−5〜42−8を決定する(ステップS301)。ニューロ演算部4は、新たな中間グループに対してステップS301〜S310を実行することにより、中間シナプス42−5〜42−8を算出する。以下、全ての中間シナプス42が算出されるまで(ステップS311においてYes)、ステップS301〜S311が繰り返される。
【0110】
図17は、中間シナプス算出処理(S300)のタイムチャートである。図17において、N1は、入力シナプス41の数(12個)を示す。N2は、中間シナプス42の数(12個)を示す。Qは、入力グループに属する入力シナプス41の数(4個)と、中間グループに属する中間シナプスの数(4個)を示す。
【0111】
破線で示す枠45は、入力シナプス41−1〜41−4が入力グループとして選択されたときの処理に相当する。枠46は、入力シナプス41−5〜41−8が入力グループとして選択されたときの処理に相当する。枠47は、入力シナプス41−9〜41−12が入力グループとして選択されたときの処理に相当する。枠48は、一つの中間グループにおいて、中間シナプスが算出される処理に相当する。図17において、1サイクルとは、CPU(Central Processing Unit)の1サイクルに対応する。
【0112】
図17において、Init(Init処理)は、中間値に初期値を設定する処理(ステップS302)に対応する。Li(Li処理)は、入力グループとして選択された入力シナプス41の画素値をロードする処理(ステップS304)に対応する。Lc(Lc処理)は、重み付け係数をロードする処理(ステップS305)に対応する。MAC(MAC処理)は、入力シナプスの画素値と重み付け係数とを乗算し、乗算値を中間値に加算する処理(ステップS306)に対応する。MAC処理では、乗算と加算の二つの処理が行われるため、MAC処理のサイクル数は、2である。SIG(SIG処理)は、シグモイド関数を用いた計算処理(ステップS309)に対応する。Ss(Ss処理)は、算出した中間シナプスを保存する処理(ステップS310)に対応する。
【0113】
MAC処理について詳しく説明する。MAC処理は、(式11)のカッコ内の式に対応した演算処理を実行する。(式11)のカッコ内の式を演算子macと定義した場合、演算子macは、下記の漸化式(式13)で表わすことができる。
【数13】
【0114】
MAC処理は、1サイクル目で、Si×Wiの乗算処理を行う。上述したように、Siは、入力シナプス41−1〜41−H(図10参照)に対応する。Wiは、入力シナプス41−1〜41−Hのそれぞれに対して設定される重み付け係数W11〜W1H(図10参照)に対応する。MAC処理は、次の2サイクル目で、直前のMAC処理の演算結果(mac(i−1))に、乗算値(Wi×Si)を加算する処理を行う。このように、MAC処理は、乗算処理と加算処理とを実行するため、2サイクルを必要とする。
【0115】
枠45,46,47のそれぞれにおいて、MAC処理と、重み付け係数をロードする処理(Lc処理)とが、並行して実行されている。これにより、中間シナプス42を算出する処理を効率よく実行できる。
【0116】
また、枠45内のMAC処理45Aと、枠46内のLi処理46A,Lc処理46Bとが、並行して実行されている。すなわち、入力グループが新たに設定される場合、Li処理及びLc処理は、直前の入力グループにおけるMAC処理に並行して実行される。これにより、ニューロ演算部4は、中間シナプス42を算出する処理を効率良く実行できる。
【0117】
次に、中間シナプス算出処理(S300)で必要なサイクル数を説明する。枠45〜47に示すように、各入力グループにおいて、MAC処理に必要なサイクル数は、Q+1サイクルである。また、中間グループに属する全ての中間シナプス42を算出するために、枠45〜47の処理をN1/Q回繰り返す必要がある。枠48は、中間グループに属する中間シナプスが算出される処理に相当する。このため、全ての中間シナプスを算出するためには、枠48の処理をN2/Q回繰り返す必要がある。この結果、全ての中間シナプスを算出するために必要なサイクル数C1は、(式14)で表わされる。
【数14】
【0118】
(式14)において、(Q+1)の項は、枠45〜47において、MAC処理が行われる期間に相当する。また、「6」の項において、3サイクル分は、最初の入力グループ(枠45)におけるInit処理、Li処理及びLc処理に相当する。残りの3サイクル分は、最後の入力グループ(枠47)の処理の後に実行されるSIG処理の2サイクルと、Ss処理の1サイクルに相当する。
【0119】
次に、Li処理及びLc処理について詳しく説明する。(式14)において、Qは、中間シナプス算出処理(S300)における並列数を示し、並行して算出される中間シナプスの数に相当する。図12〜図16に示す例の場合、並列数Qは4である。
【0120】
入力シナプス41の画素値Siのビット数をdビットとした場合、Li処理により、d×4ビットのデータが、ブロックバッファ3A,3Bのいずれかから読み出される。入力シナプス41に対応する重み付け係数Wiのビット数をeビットとした場合、Lc処理により、e×4ビットのデータが、係数テーブル5から読み出される。たとえば、入力シナプス41の画素値Siのビット数dが8ビットである場合、Li処理は、ブロックバッファ3A,3Bのいずれかから32ビットのデータを読み出す。入力シナプス41に対応する重み付け係数Wiのビット数eが16ビットである場合、Lc処理により、64ビットのデータが係数テーブル5からメモリにロードされる。
【0121】
このように、中間シナプス算出処理(S300)において、Li処理及びLc処理は、1サイクルで、並列数Qに対応したビット数のデータを読み出す。これにより、MAC処理に必要なデータを効率的に読み出すことが可能となる。
【0122】
{5.3.シグモイド関数の線形近似}
(式12)に示すように、シグモイド関数は、指数関数を使用する。ステップS309(図11参照)の処理において、シグモイド関数をそのまま使用した場合、計算処理が煩雑となり、中間シナプスの算出に時間を要する。そこで、ステップS309の処理を簡略化するために、シグモイド関数の線形近似関数を使用する。(式15)に線形近似関数を示す。
【数15】
【0123】
図18は、シグモイド関数と線形近似関数との対応を示す図である。図18において、実線の曲線がシグモイド関数である。太い破線が、線形近似関数である。(式15)に示すように、線形近似関数は、5つの区間(X1〜X5)に区分される。図18において、T0≒−3.5、T1≒−1.75、T2≒1.75、T3≒3.5である。線形近似関数を使用することにより、中間値を入力とするシグモイド関数の計算結果を簡易な処理で得ることができる。したがって、中間シナプスを算出する処理を高速化できる。
【0124】
なお、図18に示すシグモイド関数は、x=0における値Zを中心として点対称である。したがって、線形近似関数として、x≧0の区間のみを設定しておいてもよい。シグモイド関数が点対称であることと、x≧0の区間で定義されたシグモイド関数とを利用して、x<0のシグモイド関数の計算結果も容易に得ることができる。
【0125】
{5.4.出力シナプス算出処理(ステップS350)}
図19は、ニューロ演算部4により実行される出力シナプス算出処理(ステップS350)のフローチャートである。図20〜図23は、出力シナプス34の算出過程を示す図である。以下、中間シナプス算出処理(ステップS300)の説明と同様に、中間シナプスの数が12個である場合を例に説明する。
【0126】
ニューロ演算部4は、4個の部分加算値43−1〜43−4を設定する(ステップS351)。部分加算値43−1〜43−4は、出力シナプス34の算出に用いられる一時的な数値であり、設定時の値は0である。図20に示すように、ニューロ演算部4は、部分加算値43−1に出力シナプス34の初期値34iを設定する(ステップS352)。部分加算値43−2〜43−4に初期値34iは設定されない。部分加算値43−1〜43−4は後に合計されるため、部分加算値43−1〜43−4のいずれか一つに初期値34iを設定すればよい。
【0127】
次に、ニューロ演算部4は、部分加算値43−1〜43−4の数に応じて、4つの中間シナプス42−1〜42−4を選択して、メモリ(図示省略)にロードする(ステップS353)。中間シナプス42−1〜42−4に対応する重み付け係数Wm1〜Wm4(図20参照)が、メモリにロードされる(ステップS354)。重み付け係数Wm1は、中間シナプス42−1の算出に用いられた重み付け係数W11,W12,・・・(図12参照)と異なるデータとして係数テーブル5に設定されている。重み付け係数Wm2〜Wm4も同様である。
【0128】
ステップS354の後で、中間シナプスと重み付け係数との乗算値が、部分加算値に加算される(ステップS355)。図20に示すように、中間シナプス42−1と重み付け係数Wm1との乗算値が、部分加算値43−1に加算される。同様に、中間シナプス42−2〜42−4と重み付け係数Wm2〜Wm4との乗算値が、部分加算値43−2〜43−4に加算される。
【0129】
このように、ステップS353〜S355の処理は、部分加算値の数(4個)に応じた並列的な処理であるため、出力シナプス算出処理(ステップS350)を高速化することができる。
【0130】
ニューロ演算部4は、全ての中間シナプス42を選択したか否かを確認する(ステップS356)。出力シナプス42−5〜42−12が未だ選択されていないため(ステップS356においてNo)、ニューロ演算部4は、ステップS353に戻り、出力シナプス42−5〜42−8を選択してメモリにロードする。
【0131】
ニューロ演算部4は、出力シナプス42−5〜42−8に関して、ステップS354,S355の処理を実行する。図21に示すように、中間シナプス42−5と重み付け係数Wm5との乗算値が、部分加算値43−1に加算される。同様に、中間シナプス42−6〜42−8と重み付け係数Wm6〜Wm8との乗算値が、部分加算値43−2〜43−4に加算される。
【0132】
次に、ニューロ演算部4は、出力シナプス42−9〜42−12を選択してロードする(ステップS356においてNo,ステップS353)。ニューロ演算部4は、出力シナプス42−9〜42−12に関しても、ステップS354,S355の処理を実行する。図22に示すように、中間シナプス42−9と重み付け係数Wm9との乗算値が、部分加算値43−1に加算される。同様に、中間シナプス42−10〜42−12と重み付け係数Wm10〜Wm12との乗算値が、部分加算値43−2〜43−4に加算される。全ての中間シナプスが選択されたため(ステップS356においてYes)、ニューロ演算部4は、部分加算値43−1〜43−4の算出が終了したと判断する。
【0133】
ニューロ演算部4は、部分加算値43−1〜43−4を合計することにより(ステップS357)、合計値44(図23参照)を算出する。このとき、ステップS357の処理は、並列的に実行される。例えば、ステップS357で実行される加算処理の並列数が2である場合、最初に、ニューロ演算部4は、部分加算値43−1,43−2の合計値44Aを算出する処理と、部分加算値43−3,43−4の合計値44Bを算出する処理とを並列して実行する。そして、合計値44A,44Bが合計されることにより、合計値44が算出される。これにより、出力シナプス算出処理(ステップS350)を高速化することができる。
【0134】
ニューロ演算部4は、合計値44を入力としたシグモイド関数を演算することにより(ステップS358)、出力シナプス34を算出する。ステップS358の処理の内容は、ステップS309(図11参照)と同様の処理である。これにより、出力シナプス算出処理(ステップS350)が終了する。
【0135】
図24は、出力シナプス算出処理(S350)のタイムチャートである。図24において、N2は、中間シナプスの数(12個)を示す。Fは、部分加算値の数(4個)を示す。
【0136】
Init_0(Init_0処理)は、部分加算値43−1に初期値34iを設定する処理であり、ステップS352に対応する。Ls(Ls処理)は、選択された中間シナプスをロードする処理であり、ステップS353に対応する。Lc(Lc処理)は、ロードされた中間シナプスに対応する重み付け係数をロードする処理であり、ステップS354に対応する。
【0137】
MAC(MAC処理)は、中間シナプス42と重み付け係数とを乗算する処理と、乗算値を部分中間値に加算する処理であり、ステップS355に対応する。MAC処理は、図17に示すMAC処理と同じ処理である。MAC処理では、乗算処理と加算処理が行われるため、MAC処理に必要なサイクル数は、2である。
【0138】
SUM(SUM処理)は、二つの部分加算値を合計する処理である。SUM処理をF/S回繰り返すことにより、合計値44が算出される(ステップS357)。Sは、ステップS357で実行される加算処理の並列数である。SUM処理を1回実行するために必要なサイクル数は、1である。Ss(Ss処理)は、出力シナプス34をニューロ演算部4のメモリに保存する処理であり、図17のSs処理と同じ処理である。Ss処理に必要なサイクル数は、1である。
【0139】
図24に示すように、MAC処理と、Ls処理,Lc処理とが並列的に実行されていることが分かる。たとえば、中間シナプス42−1〜42−4を用いたステップS355の処理と、中間シナプス42−5〜42−8を用いたステップS353,S354の処理が並列して実行される。これにより、出力シナプス算出処理(ステップS350)を効率良く実行することができる。
【0140】
次に、出力シナプス算出処理(S350)において必要なサイクル数を説明する。MAC処理と並列に実行されるLs処理,Lc処理のサイクル数は、考慮しなくてよい。MAC処理の実行回数は、中間シナプスの数(N2=12個)/中間シナプスの選択数(F=4個)で表わすことができる。
【0141】
その他に、Ls処理,Lc処理が単独で1回ずつ実行される。SUM処理(1サイクル)がF/S回繰り返される。Init_0処理(1サイクル)、SIG処理(2サイクル)及びSs処理(1サイクル)が単独で実行される。この結果、出力シナプス算出処理(S350)において必要なサイクル数は、(式16)で表わすことができる。
【数16】
【0142】
(式16)において、(N2/F)×2の項は、MAC処理のサイクル数を示す。F/Sの項は、SUM処理が行われる回数を示す。“6”の項は、単独で実行されるInit処理、Ls処理,Lc処理、SIG処理、Ss処理のサイクル数の合計値である。
【0143】
次に、出力シナプス算出処理(S350)で行われるLs処理及びLc処理について詳しく説明する。(式16)において、Fは、出力シナプス算出処理(S350)における並列数を示し、部分加算値の数に対応する。図20〜図22に示す例の場合、並列数Fは4である。
【0144】
中間シナプスがfビットのデータである場合、Ls処理により、f×4ビットのデータが図示しないメモリにロードされる。中間シナプスに対応する重み付け係数Wiのビット数をgビットとした場合、Lc処理により、g×4ビットのデータが、係数テーブル5から読み出される。例えば、中間シナプスが8ビットのデータである場合、Ls処理により、32ビットのデータが図示しないメモリにロードされる。重み付け係数Wiのビット数を16ビットとした場合、Lc処理により、64ビットのデータが係数テーブル5からメモリにロードされる。
【0145】
このように、出力シナプス算出処理(S350)において、Li処理及びLc処理は、1サイクルで、並列数Fに対応したビット数のデータを読み出す。これにより、MAC処理に必要なデータを効率的に読み出すことが可能となる。
【0146】
このように、画像認識装置100は、中間シナプス算出処理(ステップS300)において、複数の中間シナプス42を並列的に算出する。また、画像認識装置100は、出力シナプス算出処理(ステップS350)において、中間シナプス42と重み付け係数との乗算値をそれぞれの部分加算値に加算する処理を並列的に実行する。このように、様々な処理を並列的に実行することにより、出力シナプス34を高速に算出することができる。
【0147】
なお、ニューロ演算部4は、コンフィギュラブル・プロセッサにより構成されることが望ましい。汎用のCPUまたはDSP(Digital Signal Processer)を使用する場合、ニューロ演算部4は、ソフトウェア処理により実行される。しかし、CPUまたはDSPがロードできるデータのビット数が固定されていたり、並列的に処理できる命令数が固定されていたりする。このため、本実施の形態の画像認識処理をリアルタイムで実行しようとする場合、クロック周波数の高いCPUまたはDSPを使用しなければならないため、消費電力が大きくなるという問題がある。
【0148】
ニューロ演算部4をハードウェア回路により構成した場合、回路の構成が複雑となるため、コストが増加するという問題がある。この場合、並列に処理できる命令の数、シナプス数、及びパーセプトロンの段数などを容易に変更することができない。
【0149】
コンフィギュラブル・プロセッサは、本実施の形態の画像認識処理に対応した命令を追加することが可能なプロセッサである。たとえば、重み付け係数Wiのロードを1サイクルで実行させるために、コンフィギュラブル・プロセッサの構成を変更できる。また、中間シナプス算出処理(S300)及び出力シナプス算出処理(S350)の並列数に応じて、コンフィギュラブル・プロセッサの構成を変更できる。汎用のCPUまたはDSPよりもクロック周波数の低いコンフィギュラブル・プロセッサを使用しても、リアルタイムで本実施の携帯の画像認識処理を実行することが可能となる。また、ニューロ演算部4をハードウェア回路により実装する場合と比べて、ニューロ演算の内容を容易に変更することができる。したがって、歩行者だけでなく、様々な物体の画像認識処理に対応したニューロ演算部4を容易に実現することができる。
【0150】
上記実施の形態において、ブロック作成部24が、検出ブロックを正規化する(ステップS255、図6参照)前に輝度フレーム31Fを正規化する(ステップS254)例を説明した。しかし、ブロック作成部24は、ステップS254を実行しなくてもよい。これにより、ブロックデータ33を作成する処理を高速化することができる。また、検出ブロックを正規化するたびに輝度フレーム31Fを正規化するのではなく、正規化した輝度フレーム31Fを図示しないメモリに保存しておいてもよい。この場合、ブロック作成部24は、最初の検出ブロックを正規化する前に、輝度フレーム31Fを正規化し(ステップS255)、2番目以降の検出ブロックを正規化するときには輝度フレーム31Fを正規化しなくてもよい。
【0151】
上記実施の形態において、ニューロ演算部4は、三層パーセプトロンのニューロ演算を実行する例を説明した(図9参照)。しかし、ニューロ演算部4は、中間シナプスを算出する処理を複数回繰り返してもよい。たとえば、ニューロ演算部4は、中間シナプス42−1〜42−Jから新たな中間シナプスを算出し、新たな中間シナプスから出力シナプス34を算出してもよい。
【符号の説明】
【0152】
100 画像認識装置
1 入力インタフェース
2 前処理部
3A,3B ブロックバッファ
4 ニューロ演算部
5 後処理部
6 後処理部
7 撮影データ記憶部
21 フレームパラメータ検出部
22 フレーム記憶部
22A,22B フレームバッファ
23 ブロックパラメータ検出部
24 ブロック作成部
30F フレーム
31F 輝度フレーム
34 出力シナプス
41−1〜41−H 入力シナプス
42−1〜42−J 中間シナプス
【特許請求の範囲】
【請求項1】
フレームに検出対象の物体が含まれているか否かを判定する画像認識装置であって、
前記フレーム内の第1領域の画像から、前記第1領域よりもサイズの小さい所定サイズの第1演算画像データを生成する前処理部と、
前記第1演算画像データの画素値をニューロ演算することにより、前記第1領域に前記検出対象の物体が含まれているか否かを示すニューロ演算値を算出するニューロ演算部と、
前記ニューロ演算値を用いて、前記フレームに前記検出対象の物体が含まれているか否かを示す結果データを生成する後処理部と、
を備える画像認識装置。
【請求項2】
請求項1に記載の画像認識装置であって、さらに、
前記第1演算画像データを格納する第1ブロックバッファと、
前記前処理部によって前記フレーム内の前記第1領域と異なる第2領域の画像から生成された第2演算画像データを格納する第2ブロックバッファと、
を備え、
前記前処理部は、前記ニューロ演算部が前記第1ブロックバッファに格納された第1演算画像データを用いてニューロ演算を実行している場合、第2演算画像データを生成して前記第2ブロックバッファに格納し、前記ニューロ演算部が前記第2ブロックバッファに格納された第2演算画像データを用いてニューロ演算を実行している場合、第1演算画像データを生成して前記第1ブロックバッファに格納する画像認識装置。
【請求項3】
請求項1に記載の画像認識装置であって、
前記前処理部は、
前記第1領域内の画素値を統計処理してブロック統計値を算出するブロックパラメータ算出部と、
前記ブロック統計値と、前記第1領域における画素値の標準的な分布を示すデータとに基づいて、前記第1領域内の画素値を正規化する正規化部と、
を含む画像認識装置。
【請求項4】
請求項3に記載の画像認識装置であって、
前記前処理部は、
前記フレームの画素値を統計処理してフレーム統計値を算出するフレームパラメータ算出部、
を含み、
前記正規化部は、前記フレーム統計値と、前記フレームにおける画素値の標準的な分布を示すデータとに基づいて前記フレームの画素値を正規化し、
前記前処理部は、正規化されたフレームを用いて前記第1領域内の画素値を正規化する画像認識装置。
【請求項5】
請求項1に記載の画像認識装置において、さらに、
複数のフレームの入力を受け付ける入力インタフェースと、
第1フレームバッファと、
第2フレームバッファと、
を備え、
前記入力インタフェースは、前記第1フレームバッファに格納された第1フレームから前記第1演算画像データが生成されている場合、前記第1フレームの次に入力されるフレームを前記第2フレームバッファに格納する画像認識装置。
【請求項6】
請求項1に記載の画像認識装置であって、
前記ニューロ演算部は、
入力層のシナプスをニューロ演算して中間層のシナプスを算出する中間シナプス算出処理を少なくとも1回実行する中間シナプス算出部と、
前記中間層のシナプスをニューロ演算して出力シナプスを演算し、前記出力シナプスを前記ニューロ演算値として出力する出力シナプス算出部と、
を含み、
最初の中間シナプス算出処理における入力層のシナプスは、前記第1演算画像データの画素値である画像認識装置。
【請求項7】
請求項6に記載の画像認識装置であって、
前記中間シナプス算出部は、
前記中間層のシナプスから、算出対象としてN個の中間シナプスを決定する算出対象決定部と、
前記入力層のシナプスの中からいずれか一つの入力シナプスを選択する選択処理を実行する入力シナプス選択部と、
選択された入力シナプスと第K(KはN以下の自然数)の中間シナプスとに対応する重み付け係数を決定し、前記選択された入力シナプスと決定した重み付け係数とを乗算した乗算値を、前記第Kの中間シナプスに加算する中間演算処理を実行する中間演算部と、
を含み、
前記中間演算部は、第1〜第Nの中間シナプスに対する中間演算処理を並列して実行し、
前記選択処理と前記中間演算処理とは、全ての入力シナプスが選択されるまで繰り返される画像認識装置。
【請求項8】
請求項7に記載の画像認識装置であって、
前記入力シナプス選択部は、前記中間演算部によって前記中間演算処理が実行されている期間に、次の中間演算処理に用いられる重み付け係数を決定する画像認識装置。
【請求項9】
請求項7または請求項8に記載の画像認識装置であって、
前記入力層のシナプスは、複数の入力グループに分けられ、
前記入力シナプス選択部は、前記複数の入力グループの中からいずれか一つを選択し、選択された入力グループの中から前記中間演算処理の対象となる入力シナプスを選択し、前記選択された入力グループに属する全ての入力シナプスを選択した後に次の入力グループを選択する画像認識装置。
【請求項10】
請求項9に記載の画像認識装置であって、さらに、
前記入力層のシナプスを格納する入力シナプスバッファと、
前記中間シナプス算出部が使用する重み付け係数を格納する第1係数テーブルと、
を備え、
前記中間シナプス算出部は、前記選択された入力グループに属する全ての入力シナプスを、1回の読み出し処理で前記入力シナプスバッファから読み出し、前記中間演算部により決定された重み付け係数を、1回の読み出し処理で前記第1係数テーブルから読み出す画像認識装置。
【請求項11】
請求項9または請求項10に記載の画像認識装置において、
前記画像認識装置は、前記選択された入力グループの中で最後に選択された入力シナプスに対して実行される中間演算処理と、前記次の入力グループを選択する処理とを並行して実行する画像認識装置。
【請求項12】
請求項6ないし請求項11のいずれかに記載の画像認識装置であって、
前記中間シナプス算出部は、2回目以降の中間算出処理を実行する場合、入力シナプスとして直前の中間算出処理で算出された中間シナプスを用いる画像認識装置。
【請求項13】
請求項6ないし請求項12のいずれかに記載の画像認識装置であって、
前記中間シナプス算出部は、全ての入力シナプスに対する中間演算処理が終了した後の中間シナプスをシグモイド演算し、シグモイド演算においてシグモイド関数を線形的に近似した近似関数を使用する画像認識装置。
【請求項14】
請求項6ないし請求項13のいずれかに記載の画像認識装置であって、
前記出力シナプス算出部は、
前記出力シナプスの算出に用いられるQ個の部分加算値を設定する部分加算値設定部と、
前記中間層のシナプスからQ個の中間シナプスを選択し、前記Q個の中間シナプスに含まれる第R(RはQ以下の自然数)の中間シナプスと、前記第Rの中間シナプスに対応する重み付け係数との乗算値を第Rの部分加算値に加算する部分加算処理を実行する部分加算値演算部と、
前記中間層のシナプスに含まれる全ての中間シナプスに対する部分加算処理が終了した後に、前記Q個の部分加算値の合計値を算出して前記出力シナプスを算出する合計部と、
を含み、
前記Q個の中間シナプスを用いた部分加算処理が並行して実行される画像認識装置。
【請求項15】
請求項14に記載の画像認識装置であって、さらに、
前記中間層のシナプスを格納する中間シナプスバッファと、
前記中間層のシナプスに対応する重み付け係数を格納する第2係数テーブルと、
を備え、
前記出力シナプス算出部は、前記Q個の中間シナプスを、1回の読み出し処理で前記中間シナプスバッファから読み出し、前記Q個の中間シナプスに対応する重み付け係数を、1回の読み出し処理で前記第2係数テーブルから読み出す画像認識装置。
【請求項16】
請求項14または請求項15に記載の画像認識装置であって、
前記出力シナプス算出部は、前記部分加算処理が実行されている期間に、次の部分加算処理に用いられるQ個の中間シナプスと重み付け係数とを決定する画像認識装置。
【請求項17】
請求項14ないし請求項16のいずれかに記載の画像認識装置であって、
前記中間シナプス算出部は、全ての中間シナプスに対する部分加算処理が終了した後に、前記Q個の部分加算値の合計値をシグモイド演算することにより前記出力シナプスを算出し、シグモイド演算においてシグモイド関数を線形的に近似した近似関数を使用する画像認識装置。
【請求項18】
請求項1ないし請求項17のいずれかに記載の画像認識装置であって、
前記ニューロ演算部は、コンフィギュラブル・プロセッサにより実装される画像認識装置。
【請求項1】
フレームに検出対象の物体が含まれているか否かを判定する画像認識装置であって、
前記フレーム内の第1領域の画像から、前記第1領域よりもサイズの小さい所定サイズの第1演算画像データを生成する前処理部と、
前記第1演算画像データの画素値をニューロ演算することにより、前記第1領域に前記検出対象の物体が含まれているか否かを示すニューロ演算値を算出するニューロ演算部と、
前記ニューロ演算値を用いて、前記フレームに前記検出対象の物体が含まれているか否かを示す結果データを生成する後処理部と、
を備える画像認識装置。
【請求項2】
請求項1に記載の画像認識装置であって、さらに、
前記第1演算画像データを格納する第1ブロックバッファと、
前記前処理部によって前記フレーム内の前記第1領域と異なる第2領域の画像から生成された第2演算画像データを格納する第2ブロックバッファと、
を備え、
前記前処理部は、前記ニューロ演算部が前記第1ブロックバッファに格納された第1演算画像データを用いてニューロ演算を実行している場合、第2演算画像データを生成して前記第2ブロックバッファに格納し、前記ニューロ演算部が前記第2ブロックバッファに格納された第2演算画像データを用いてニューロ演算を実行している場合、第1演算画像データを生成して前記第1ブロックバッファに格納する画像認識装置。
【請求項3】
請求項1に記載の画像認識装置であって、
前記前処理部は、
前記第1領域内の画素値を統計処理してブロック統計値を算出するブロックパラメータ算出部と、
前記ブロック統計値と、前記第1領域における画素値の標準的な分布を示すデータとに基づいて、前記第1領域内の画素値を正規化する正規化部と、
を含む画像認識装置。
【請求項4】
請求項3に記載の画像認識装置であって、
前記前処理部は、
前記フレームの画素値を統計処理してフレーム統計値を算出するフレームパラメータ算出部、
を含み、
前記正規化部は、前記フレーム統計値と、前記フレームにおける画素値の標準的な分布を示すデータとに基づいて前記フレームの画素値を正規化し、
前記前処理部は、正規化されたフレームを用いて前記第1領域内の画素値を正規化する画像認識装置。
【請求項5】
請求項1に記載の画像認識装置において、さらに、
複数のフレームの入力を受け付ける入力インタフェースと、
第1フレームバッファと、
第2フレームバッファと、
を備え、
前記入力インタフェースは、前記第1フレームバッファに格納された第1フレームから前記第1演算画像データが生成されている場合、前記第1フレームの次に入力されるフレームを前記第2フレームバッファに格納する画像認識装置。
【請求項6】
請求項1に記載の画像認識装置であって、
前記ニューロ演算部は、
入力層のシナプスをニューロ演算して中間層のシナプスを算出する中間シナプス算出処理を少なくとも1回実行する中間シナプス算出部と、
前記中間層のシナプスをニューロ演算して出力シナプスを演算し、前記出力シナプスを前記ニューロ演算値として出力する出力シナプス算出部と、
を含み、
最初の中間シナプス算出処理における入力層のシナプスは、前記第1演算画像データの画素値である画像認識装置。
【請求項7】
請求項6に記載の画像認識装置であって、
前記中間シナプス算出部は、
前記中間層のシナプスから、算出対象としてN個の中間シナプスを決定する算出対象決定部と、
前記入力層のシナプスの中からいずれか一つの入力シナプスを選択する選択処理を実行する入力シナプス選択部と、
選択された入力シナプスと第K(KはN以下の自然数)の中間シナプスとに対応する重み付け係数を決定し、前記選択された入力シナプスと決定した重み付け係数とを乗算した乗算値を、前記第Kの中間シナプスに加算する中間演算処理を実行する中間演算部と、
を含み、
前記中間演算部は、第1〜第Nの中間シナプスに対する中間演算処理を並列して実行し、
前記選択処理と前記中間演算処理とは、全ての入力シナプスが選択されるまで繰り返される画像認識装置。
【請求項8】
請求項7に記載の画像認識装置であって、
前記入力シナプス選択部は、前記中間演算部によって前記中間演算処理が実行されている期間に、次の中間演算処理に用いられる重み付け係数を決定する画像認識装置。
【請求項9】
請求項7または請求項8に記載の画像認識装置であって、
前記入力層のシナプスは、複数の入力グループに分けられ、
前記入力シナプス選択部は、前記複数の入力グループの中からいずれか一つを選択し、選択された入力グループの中から前記中間演算処理の対象となる入力シナプスを選択し、前記選択された入力グループに属する全ての入力シナプスを選択した後に次の入力グループを選択する画像認識装置。
【請求項10】
請求項9に記載の画像認識装置であって、さらに、
前記入力層のシナプスを格納する入力シナプスバッファと、
前記中間シナプス算出部が使用する重み付け係数を格納する第1係数テーブルと、
を備え、
前記中間シナプス算出部は、前記選択された入力グループに属する全ての入力シナプスを、1回の読み出し処理で前記入力シナプスバッファから読み出し、前記中間演算部により決定された重み付け係数を、1回の読み出し処理で前記第1係数テーブルから読み出す画像認識装置。
【請求項11】
請求項9または請求項10に記載の画像認識装置において、
前記画像認識装置は、前記選択された入力グループの中で最後に選択された入力シナプスに対して実行される中間演算処理と、前記次の入力グループを選択する処理とを並行して実行する画像認識装置。
【請求項12】
請求項6ないし請求項11のいずれかに記載の画像認識装置であって、
前記中間シナプス算出部は、2回目以降の中間算出処理を実行する場合、入力シナプスとして直前の中間算出処理で算出された中間シナプスを用いる画像認識装置。
【請求項13】
請求項6ないし請求項12のいずれかに記載の画像認識装置であって、
前記中間シナプス算出部は、全ての入力シナプスに対する中間演算処理が終了した後の中間シナプスをシグモイド演算し、シグモイド演算においてシグモイド関数を線形的に近似した近似関数を使用する画像認識装置。
【請求項14】
請求項6ないし請求項13のいずれかに記載の画像認識装置であって、
前記出力シナプス算出部は、
前記出力シナプスの算出に用いられるQ個の部分加算値を設定する部分加算値設定部と、
前記中間層のシナプスからQ個の中間シナプスを選択し、前記Q個の中間シナプスに含まれる第R(RはQ以下の自然数)の中間シナプスと、前記第Rの中間シナプスに対応する重み付け係数との乗算値を第Rの部分加算値に加算する部分加算処理を実行する部分加算値演算部と、
前記中間層のシナプスに含まれる全ての中間シナプスに対する部分加算処理が終了した後に、前記Q個の部分加算値の合計値を算出して前記出力シナプスを算出する合計部と、
を含み、
前記Q個の中間シナプスを用いた部分加算処理が並行して実行される画像認識装置。
【請求項15】
請求項14に記載の画像認識装置であって、さらに、
前記中間層のシナプスを格納する中間シナプスバッファと、
前記中間層のシナプスに対応する重み付け係数を格納する第2係数テーブルと、
を備え、
前記出力シナプス算出部は、前記Q個の中間シナプスを、1回の読み出し処理で前記中間シナプスバッファから読み出し、前記Q個の中間シナプスに対応する重み付け係数を、1回の読み出し処理で前記第2係数テーブルから読み出す画像認識装置。
【請求項16】
請求項14または請求項15に記載の画像認識装置であって、
前記出力シナプス算出部は、前記部分加算処理が実行されている期間に、次の部分加算処理に用いられるQ個の中間シナプスと重み付け係数とを決定する画像認識装置。
【請求項17】
請求項14ないし請求項16のいずれかに記載の画像認識装置であって、
前記中間シナプス算出部は、全ての中間シナプスに対する部分加算処理が終了した後に、前記Q個の部分加算値の合計値をシグモイド演算することにより前記出力シナプスを算出し、シグモイド演算においてシグモイド関数を線形的に近似した近似関数を使用する画像認識装置。
【請求項18】
請求項1ないし請求項17のいずれかに記載の画像認識装置であって、
前記ニューロ演算部は、コンフィギュラブル・プロセッサにより実装される画像認識装置。
【図1】
【図2】
【図3A】
【図3B】
【図3C】
【図4】
【図5】
【図6】
【図7A】
【図7B】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図2】
【図3A】
【図3B】
【図3C】
【図4】
【図5】
【図6】
【図7A】
【図7B】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【公開番号】特開2013−37488(P2013−37488A)
【公開日】平成25年2月21日(2013.2.21)
【国際特許分類】
【出願番号】特願2011−172181(P2011−172181)
【出願日】平成23年8月5日(2011.8.5)
【出願人】(591128453)株式会社メガチップス (322)
【Fターム(参考)】
【公開日】平成25年2月21日(2013.2.21)
【国際特許分類】
【出願日】平成23年8月5日(2011.8.5)
【出願人】(591128453)株式会社メガチップス (322)
【Fターム(参考)】
[ Back to top ]