(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-10-25
(45)【発行日】2023-11-02
(54)【発明の名称】情報処理装置
(51)【国際特許分類】
G06N 3/02 20060101AFI20231026BHJP
G06F 9/50 20060101ALI20231026BHJP
【FI】
G06N3/02
G06F9/50 150D
(21)【出願番号】P 2019230385
(22)【出願日】2019-12-20
【審査請求日】2022-09-29
(73)【特許権者】
【識別番号】000237592
【氏名又は名称】株式会社デンソーテン
(72)【発明者】
【氏名】横山 夏軌
【審査官】武田 広太郎
(56)【参考文献】
【文献】特開2019-185275(JP,A)
【文献】特開2018-190045(JP,A)
【文献】米国特許出願公開第2019/0041961(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/02
G06F 9/50
(57)【特許請求の範囲】
【請求項1】
複数の中間層を含むニューラルネットワークの演算と、前記ニューラルネットワークと異なる所定のプログラムの演算とを実行する演算部と、
前記ニューラルネットワークの構造と、前記複数の中間層の各々における演算量を示す演算量データと、前記演算部の負荷とに基づいて、前記複数の中間層のうち演算すべき中間層を選択する演算対象選択部と、
前記演算対象選択部により選択された中間層の演算を前記演算部に指示する演算指示部と、を備える情報処理装置。
【請求項2】
請求項1に記載の情報処理装置であって、
前記演算対象選択部は、前記ニューラルネットワークの演算により発生する前記演算部の負荷と、前記所定のプログラムの演算により発生する前記演算部の負荷との合計が、予め設定された前記演算部の負荷の上限を超えないように、前記演算すべき中間層を選択する、情報処理装置。
【請求項3】
請求項1又は2に記載の情報処理装置であって、
前記複数の中間層は、
第1中間層と、
前記第1中間層の演算結果から独立した第2中間層と、を含み、
前記演算対象選択部は、前記第1中間層の演算により発生する前記演算部の負荷と前記第2中間層の演算により発生する前記演算部の負荷と前記所定のプログラムの演算により発生する前記演算部の負荷との合計が前記演算部の負荷の上限を超えない場合、前記第1中間層及び前記第2中間層を前記演算すべき中間層として選択する、情報処理装置。
【請求項4】
請求項1~3のいずれか1項に記載の情報処理装置であって、
前記演算部は、第1中間層を含む第1ニューラルネットワークと、第2中間層を含む第2ニューラルネットワークとを演算し、
前記演算対象選択部は、前記第1中間層の演算により発生する前記演算部の負荷と前記第2中間層の演算により発生する前記演算部の負荷と前記所定のプログラムの演算により発生する前記演算部の負荷との合計が前記演算部の負荷の上限を超えない場合、前記第1中間層及び前記第2中間層を前記演算すべき中間層として特定する、情報処理装置。
【請求項5】
複数の中間層を含むニューラルネットワークの演算と、前記ニューラルネットワークと異なるプログラムの演算とを実行する演算部を備える情報処理装置の制御方法であって、
前記ニューラルネットワークの構造と、前記複数の中間層の各々における演算量を示す演算量データと、前記演算部の負荷とに基づいて、前記複数の中間層のうち演算すべき中間層を選択するステップと、
前記選択された中間層の演算を前記演算部に指示するステップと、を備える情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ニューラルネットワークに関する演算を実行する情報処理装置に関する。
【背景技術】
【0002】
人工知能を自動車等の車両に搭載するための研究が進められている。例えば、特許文献1は、車両の走行状態に基づいて人工知能モデルを構成し、構成した人工知能モデルを用いた処理を実行する車両電子制御装置を開示している。特許文献1において、ニューラルネットワークが、人工知能モデルとして用いられる。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
ニューラルネットワークの演算量は、ニューラルネットワークの規模に応じて増加する。車両電子制御装置等の情報処理装置が、比較的規模の大きいニューラルネットワークを用いた処理を実行する場合、情報処理装置の負荷が高くなる。情報処理装置の負荷が高くなった場合、情報処理装置がニューラルネットワークを用いた処理以外のその他の処理を実行できない虞がある。
【0005】
ニューラルネットワークを用いた処理とその他の処理とを並行して実行するために、演算処理能力の高い情報処理装置を採用することが考えられる。しかし、演算処理能力の高い情報処理装置の採用は、コスト増加の要因となる。
【0006】
上記問題点に鑑み、本発明は、_Hlk27417505演算処理能力を高めることなく、ニューラルネットワークを用いた処理とその他の処理とを並行して実行することが可能な情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【0007】
上記課題を解決するため、第1の発明は、情報処理装置であって、演算部と、演算対象選択部と、演算指示部とを備える。演算部は、複数の中間層を含むニューラルネットワークの演算と、ニューラルネットワークと異なる所定のプログラムの演算とを実行する。演算対象選択部は、ニューラルネットワークの構造と、複数の中間層の各々における演算量を示す演算量データと、演算部の負荷とに基づいて、複数の中間層のうち演算すべき中間層を選択する。演算指示部は、演算対象選択部により選択された中間層の演算を演算部に指示する。
【0008】
第1の発明によれば、演算処理能力を高めることなく、ニューラルネットワークを用いた処理とその他の処理とを並行して実行することが可能なとなる。
【0009】
第2の発明は、第1の発明であって、演算対象選択部は、ニューラルネットワークの演算により発生する演算部の負荷と、所定のプログラム演算により発生する演算部の負荷との合計が、予め設定された演算部の負荷の上限を超えないように、演算すべき中間層を選択する。
【0010】
第2の発明によれば、ニューラルネットワークの演算時に演算部の負荷の上限を超えることが抑制されるため、ニューラルネットワークの演算が予定よりも長くなることを防ぐことができる。
【0011】
第3の発明は、第1又は第2の発明であって、複数の中間層は、第1中間層と、第2中間層とを含む。第2中間層は、第1中間層の演算結果から独立している。演算対象選択部は、第1中間層の演算により発生する演算部の負荷と第2中間層の演算により発生する演算部の負荷と所定のプログラムの演算により発生する演算部の負荷との合計が演算部の負荷の上限を超えない場合、第1中間層及び第2中間層を演算すべき中間層として選択する。
【0012】
第3の発明によれば、2つ以上の中間層の演算とその他の処理とを並行して実行できるため、ニューラルネットワークの演算完了を早めることができる。
【0013】
第4の発明は、第1~第3の発明のいずれかであって、演算部は、第1中間層を含む第1ニューラルネットワークと、第2中間層を含む第2ニューラルネットワークとを演算する。演算対象選択部は、レイヤ特定部は、第1中間層の演算により発生する演算部の負荷と第2中間層の演算により発生する演算部の負荷と所定のプログラムの演算により発生する演算部の負荷との合計が演算部の負荷の上限を超えない場合、第1中間層及び第2中間層を演算すべき中間層として特定する。
【0014】
第4の発明によれば、2つのニューラルネットワークと、その他の処理とを並行して実行することができる。
【0015】
第5の発明は、複数の中間層を含むニューラルネットワークの演算と、ニューラルネットワークと異なる所定のプログラムの演算とを実行する演算部を備える情報処理装置の制御方法であって、a)ステップと、b)ステップとを備える。a)ステップは、ニューラルネットワークの構造と、複数の中間層の各々における演算量を示す演算量データと、演算部の負荷とに基づいて、複数の中間層のうち演算すべき中間層を選択する。b)ステップは、選択された中間層の演算を演算部に指示する。
【0016】
第5の発明は、第1の発明に用いられる。
【発明の効果】
【0017】
本発明は、演算処理能力を高めることなく、ニューラルネットワークを用いた処理とその他の処理とを並行して実行することが可能な情報処理装置を提供することができる。
【図面の簡単な説明】
【0018】
【
図1】本発明の第1の実施の形態に係る情報処理システムの構成を示す機能ブロック図である。
【
図2】
図1に示す情報処理装置のハードウェア構成を示す図である。
【
図3】
図1に示すニューラルネットワークの構成の一例を示す概略図である。
【
図4】
図1に示す演算量データ52の一例を示す図である。
【
図5】
図3に示す畳み込み層の演算量の計算方法を説明する図である。
【
図6】
図1に示す情報処理装置の負荷のうち、ニューラルネットワークの演算により発生する負荷を除いた一般負荷の時間変化の一例を示すグラフである。
【
図7】
図1に示す情報処理装置の動作を示すフローチャートである。
【
図8】本発明の第2の実施の形態に係る情報処理システムの構成を示す機能ブロック図である。
【
図9】
図8に示すニューラルネットワークの構成を示す概略図である。
【
図10】
図8に示す情報処理装置の負荷のうち、ニューラルネットワークの演算により発生する負荷を除いた一般負荷の時間変化の一例を示すグラフである。
【
図11】ニューラルネットワークをブロック線図に変換する一例を示す図である。
【
図12】ニューラルネットワークの構成の一例を示す図である。
【
図13】
図12に示すニューラルネットワークを隣接行列として表した図である。
【
図14】
図12に示すニューラルネットワークを変換したブロック図である。
【
図15】ニューラルネットワークを変換したブロック線図の他の例である。
【
図17】
図16に示された処理依存関係に基づく並列処理の割り当ての手順を示す図である。
【発明を実施するための形態】
【0019】
以下、図面を参照し、本発明の実施の形態を詳しく説明する。図中同一又は相当部分には同一符号を付してその説明は繰り返さない。
【0020】
[第1の実施の形態]
{1.構成}
{1.1.情報処理システム100の構成}
図1は、本発明の一実施の形態に係る情報処理システム100の構成を示す機能ブロック図である。
図1を参照して、情報処理システム100は、情報処理装置1と、記憶装置2とを備える。
【0021】
情報処理装置1は、図示しない車両に搭載される電子制御装置(Electronic Control Unit)である。本実施の形態において、情報処理装置1は、画像認識装置である。情報処理装置1は、車両の前方を撮影した前方画像61を車両に搭載されたカメラから取得し、歩行者をその取得した前方画像61から検出する。前方画像61は、動画像に含まれるフレームである。情報処理装置1は、歩行者の検出結果を示す結果データ62を生成し、図示しないカーナビゲーション装置に出力する。
【0022】
記憶装置2は、不揮発性の記憶装置であり、例えば、フラッシュメモリである。記憶装置2は、ニューラルネットワーク20と、前処理プログラム41と、結果出力プログラム42と、制御プログラム43と、演算量データ52とを記憶する。
【0023】
ニューラルネットワーク20と、前処理プログラム41と、結果出力プログラム42とは、画像認識処理のためのプログラムであり、演算部11により実行される。ニューラルネットワーク20は、本実施の形態では、歩行者を検出するために用いられる。ニューラルネットワーク20の構成については、後述する。演算量データ52は、ニューラルネットワーク20に含まれる複数の中間層の各々の演算量を記録する。
【0024】
前処理プログラム41は、前方画像61をニューラルネットワーク20に入力するために、前方画像61のサイズを調整する等の前処理を実行する。結果出力プログラム42は、ニューラルネットワーク20の検出結果に基づいて、結果データ62を生成する。制御プログラム43は、情報処理装置1全体の制御に用いられ、画像認識処理に関する処理以外の処理を実行する。
【0025】
{1.2.情報処理装置1の構成}
図1を参照して、情報処理装置1は、演算部11と、演算対象選択部12と、演算指示部13とを備える。
【0026】
演算部11は、ニューラルネットワーク20の演算と、前処理プログラム41の演算と、結果出力プログラム42の演算と、制御プログラム43の演算とを実行する。
【0027】
演算対象選択部12は、ニューラルネットワーク20の構造と、演算量データ52とに基づいて、ニューラルネットワーク20に含まれる複数の中間層のうち演算すべき中間層を選択する。
【0028】
演算指示部13は、演算対象選択部12により選択された中間層の演算を演算部11に指示する。
【0029】
図2は、
図1に示す情報処理装置1のハードウェア構成を示す図である。
図2を参照して、情報処理装置1は、CPU(Central Processing Unit)101と、RAM(Random access memory)102と、ROM(Read only memory)103と、入力部104と、出力部105とを備える。
【0030】
CPU101は、RAM102にロードされたプログラムを実行することにより、情報処理装置1を制御する。CPU101は、演算部11として機能する。また、CPU101は、制御プログラム43を実行することにより、演算対象選択部12及び演算指示部13として機能する。
【0031】
RAM102は、情報処理装置1のメインメモリである。ROM103は、情報処理装置1のBIOS(Basic Input/Output System)を記憶する。
【0032】
入力部104は、前方画像61及び記憶装置2に記憶されたプログラム等を取得し、その取得したデータをRAM102に供給する。出力部105は、CPU101による演算結果を情報処理装置1に接続された外部装置に供給する。演算結果は、例えば、歩行者の検出結果を示す結果データ62である。
【0033】
{1.3.ニューラルネットワーク20の構成}
図3は、
図1に示すニューラルネットワーク20の構成を示す概略図である。
図3を参照して、ニューラルネットワーク20は、入力層21と、畳み込み層22、23A、24A及び24Bと、プーリング層23B及び24Cと、全結合層25及び26と、出力層27とを備える。
図3において、ニューラルネットワーク20が備えるノードの表示を省略している。
【0034】
以下の説明において、畳み込み層22、23A、24A及び24Bと、プーリング層23B及び24Cと、全結合層25及び26とを総称して、「中間層20A」と記載する場合がある。
【0035】
入力層21は、前処理された前方画像61の画素データを受け、その受けた前方画像61の画素データを畳み込み層22に供給する。
【0036】
畳み込み層22は、入力層21から受けた画素データを畳み込み演算し、畳み込み演算の結果を畳み込み層23A及び24Aの各々に供給する。
【0037】
畳み込み層23Aは、畳み込み層22から受けた畳み込み演算の結果を、さらに畳み込み演算する。畳み込み層23Aは、畳み込み演算の結果をプーリング層23Bに供給する。プーリング層23Bは、畳み込み層23Aから受けた畳み込み演算の結果を統計的に処理し、その統計処理結果を全結合層25に供給する。
【0038】
畳み込み層24Aは、畳み込み層22から受けた畳み込み演算の結果を、さらに畳み込み演算する。畳み込み層24Aは、畳み込み演算の結果を畳み込み層24Bに供給する。畳み込み層24Bは、畳み込み層24Aから受けた畳み込み演算の結果を、さらに畳み込み演算する。畳み込み層24Bは、畳み込み演算の結果をプーリング層24Cに供給する。プーリング層24Cは、畳み込み層24Bから受けた畳み込み演算の結果を統計的に処理し、その統計処理結果を全結合層25に供給する。
【0039】
全結合層25は、プーリング層23B及び24Cの各々から統計処理結果を受け、その受けた統計処理結果を用いた演算を行う。全結合層25は、演算結果を全結合層26に供給する。全結合層26は、全結合層25から受けた演算結果をさらに演算し、その演算結果を出力層27に供給する。
【0040】
出力層27は、結合層27から受けた演算結果に基づいて、前方画像61から歩行者が検出されたか否かを示す歩行者検出結果28を出力する。歩行者検出結果28は、結果データ62の生成に用いられる。
【0041】
{1.4.ニューラルネットワーク20における依存関係}
ニューラルネットワーク20において、中間層20A及び出力層27の各々は、個別のプログラムである。つまり、演算部11は、中間層20A及び出力層27の各々を個別に演算することができる。中間層20Aに含まれる一の中間層の演算を開始するためには、一の中間層と依存関係にある全ての中間層の演算が終了している必要がある。
【0042】
例えば、畳み込み層24Bは、畳み込み層22及び24Aと依存関係にある。従って、畳み込み層22及び24Aの演算が終了していなければ、畳み込み層24Bの演算を開始することができない。
【0043】
ニューラルネットワーク20における依存関係について詳しく説明する。中間層20Aは、上流に位置する中間層と依存関係にある。上流とは、ニューラルネットワーク20に含まれる一の中間層から入力層21を見た方向を示す。下流とは、一の中間層から出力層27を見た方向を示す。
【0044】
例えば、畳み込み層22及び23Aは、プーリング層23Bから見て上流に位置するため、プーリング層23Bは、畳み込み層22及び23Aに依存する。畳み込み層24A及び24Bとプーリング層24Cとは、プーリング層23Bの上流に位置しないため、プーリング層23Bは、畳み込み層24A及び24B及びプーリング層23Cに依存しない。
【0045】
並列の位置関係にある2つの中間層は、互いに依存しない。具体的には、畳み込み層23A及びプーリング層23Bの各々は、畳み込み層24A、24B及びプーリング層24Cに依存しない。逆に、畳み込み層24A、24B及びプーリング層24Cは、畳み込み層23A及びプーリング層23Bに依存しない。
【0046】
{1.5.演算量データ52}
図4は、
図1に示す演算量データ52の一例を示す図である。
図4を参照して、演算量データ52は、ニューラルネットワーク20に含まれる中間層20A及び出力層27の各々の演算量を記録する。
【0047】
演算量データ52に記録される演算量の算出について説明する。
図5は、ニューラルネットワーク20に含まれる畳み込み層の演算量の計算方法を説明する図である。
【0048】
図5を参照して、画像データ66が畳み込み層に入力される場合、画像データ66は、2次元の行列であり、画素値が行列の要素に相当する。この場合、入力データ66の水平方向のサイズ及び垂直方向のサイズは、Ir及びIcである。
【0049】
畳み込み層で用いられるフィルタ67の水平方向のサイズ及び垂直方向のサイズは、Fr及びFcである。フィルタ67は、少なくとも1つあればよい。フィルタ67の数は、Fnである。
【0050】
畳み込み層における演算において、パディングデータが入力データの外周に付加される。入力データ66にフィルタをかけるためである。パディングデータは、全て0である。パディングデータの上辺、下辺、右辺及び左辺サイズは、Pt、Pb、Pl、Prである。この結果、畳み込み層の演算量Nは、下記の式(1)により算出される。
【0051】
【0052】
式(1)において、Shは、フィルタ67の水平方向のストライドであり、Svは、フィルタ67の垂直方向のストライドである。
【0053】
中間層が全結合層である場合、全結合層の演算量は、式(1)のFr,Fc、Sh及びSvを1に設定し、Pt、Pb、Pl及びPrを0に設定することにより計算される。
【0054】
プーリング層の演算量は、プーリング層で実行される統計処理の内容に応じて結締される。
【0055】
入力層21の演算量は、演算量データ52に記録されない。前処理された前方画像61の画素データは、入力層21において実質的に変化しない。入力層21が、前処理された前方画像61の画素データを畳み込み層22に単に受け渡すためであり、演算を行わないためである。
【0056】
{2.動作}
図6は、
図2に示すCPU101の負荷のうち一般負荷55の時間変動の一例を示す図である。
図6を参照して、一般負荷55とは、ニューラルネットワーク20の演算により発生する負荷を除いた負荷をCPU101の負荷から減算した数値である。一般負荷55は、前処理プログラム41と、結果出力プログラム42と、制御プログラム43との各々を実行することにより発生する負荷を含む。
【0057】
以下、
図6を参照しながら、情報処理装置1が、CPU101の負荷に基づいて、演算対象の中間層を選択する処理を説明する。
図6において、余裕負荷と、予想負荷と、合計予想負荷との大小関係を分かり易く示すために、余裕負荷と、予想負荷と、合計予想負荷とを負荷上限を基準に示している。余裕負荷と、予想負荷と、合計予想負荷については、後述する。
【0058】
(時刻t11)
カメラから入力された前方画像61の前処理が、時刻t11において完了する。情報処理装置1は、ニューラルネットワーク20を用いた歩行者の検出処理を時刻t11から開始する。時刻t11において、演算対象選択部12は、複数の中間層20Aの中から、畳み込み層22を演算対象として選択する。
【0059】
具体的には、演算対象選択部12は、時刻t11において、演算可能な中間層20Aが畳み込み層22であると判断する。前処理された前方画像61が入力層21を介して畳み込み層22に入力されるためである。
【0060】
演算対象選択部12は、演算可能な畳み込み層22の演算量を演算量データ52から取得する。演算対象選択部12は、取得した演算量に基づいて、畳み込み層22の実行に伴って発生するCPU101の負荷を畳み込み層22の予想負荷221として計算する。CPU101の負荷は、CPU101のクロック数やコア数等に基づいて計算され、周知の方法を用いることができる。
【0061】
演算対象選択部12は、時刻t11における一般負荷55と予め設定された上限負荷とに基づいて、時刻t11における余裕負荷551を算出する。
図6に示すように、上限負荷は、本実施の形態において90%である。
【0062】
演算対象選択部12は、計算した予想負荷221を時刻t11における余裕負荷5511と比較する。計算した予想負荷221が時刻t11における余裕負荷551より以下である場合、演算対象選択部12は、畳み込み層22を演算対象として選択する。
【0063】
演算指示部13は、演算対象選択部12により選択された畳み込み層22の演算開始を演算部11に指示する。演算部11は、演算指示部13の指示に応じて、畳み込み層22の演算を開始する。
【0064】
なお、時刻t11において、畳み込み層22の予想負荷221が時刻t11における余裕負荷551よりも大きい場合、演算対象選択部12は、時刻t11から所定の時間を経過するまで待機する。演算対象選択部12は、畳み込み層22の予想負荷221を所定の時間を経過した時点における余裕負荷と比較する。
【0065】
(時刻t12)
図6を参照して、演算部11が、畳み込み層22の演算を時刻t12に完了する。演算対象選択部12は、時刻t12において、演算対象の中間層を中間層20Aの中から新たに選択する。
【0066】
畳み込み層22の演算が完了したため、演算対象選択部12は、畳み込み層22に接続された畳み込み層23A及び24Aを演算可能な中間層として特定する。畳み込み層23A及び24Aが、演算の完了した畳み込み層22の下流に位置し、かつ、畳み込み層22に直接接続されているためである。
【0067】
演算対象選択部12は、演算量データ52に記録された畳み込み層23Aの演算量に基づいて、畳み込み層23Aの予想負荷231Aを計算する。演算対象選択部12は、演算量データ52に記録された畳み込み層24Aの演算量に基づいて、畳み込み層24Aの予想負荷241Aを計算する。演算対象選択部12は、計算した予想負荷231A及び241Aの合計を合計予想負荷562として計算する。
【0068】
なお、
図6は、予想負荷231A及び241Aが同じである例を示しているが、予想負荷231A及び241Bは互いに異なっていてもよい。
【0069】
演算対象選択部12は、時刻t12におけるCPU101の一般負荷55を取得し、取得した一般負荷55に基づいて、時刻t12における余裕負荷552を計算する。
【0070】
演算対象選択部12は、計算した合計予想負荷562を時刻t12における余裕負荷532と比較する。
図6に示す例では、合計予想負荷562が時刻t12における余裕負荷552よりも大きいため、演算対象選択部12は、畳み込み層23A及び24Aの両者を並行して演算できないと判断する。
【0071】
この場合、演算対象選択部12は、予想負荷231A及び241Aの各々を余裕負荷552と比較する。予想負荷231A及び241Aの各々が余裕負荷552以下であるため、演算対象選択部12は、畳み込み層23A及び24Aのいずれか一方を演算対象として選択する。
【0072】
具体的には、演算対象選択部12は、畳み込み層23A及び24Aの各々の下流に位置する中間層の数に基づいて、演算対象を選択する。
図3に示す例では、畳み込み層24Aの下流に位置する中間層が、畳み込み層23Aの下流に位置する中間層よりも多いため、演算対象選択部12は、畳み込み層24Aを演算対象として選択する。下流の中間層の数が多い畳み込み層24Aの演算を優先することにより、ニューラルネットワーク20の演算終了時刻を早めることができるためである。演算指示部13は、演算対象選択部12により選択された畳み込み層24Aの演算を演算部11に指示する。これにより、畳み込み層24Aの演算が時刻t12から開始される。あるいは、演算対象選択部12は、畳み込み層23A及び24Aのうち、演算量の多い方を選択してもよい。
【0073】
つまり、複数の中間層が演算可能であり、かつ、複数の中間層の合計予想負荷が余裕負荷より大きい場合、演算対象選択部12は、これら複数の中間層の優先度に基づいて、演算対象の中間層を選択すればよい。
【0074】
(時刻t13)
演算部11が、畳み込み層24Aの演算を時刻t13に完了する。演算対象選択部12は、時刻t13において、演算対象の中間層を中間層20Aの中から新たに選択する。
【0075】
具体的には、演算対象選択部12は、畳み込み層24Aが終了した時点で演算可能な中間層として、畳み込み層23A及び24Bを特定する。演算対象選択部12は、演算量データ52に記録された畳み込み層23Aの演算量に基づいて、畳み込み層23Aの予想負荷231Aを計算する。演算対象選択部12は、演算量データ52に記録された畳み込み層24Bの演算量に基づいて、畳み込み層24Bの予想負荷241Bを計算する。演算対象選択部12は、計算した予想負荷231Aと予想負荷241Bとの合計を合計予想負荷563として計算する。
【0076】
なお、
図6は、予想負荷231A及び241Bが同じである例を示しているが、予想負荷231A及び241Bは互いに異なっていてもよい。
【0077】
演算対象選択部12は、時刻t13におけるCPU101の一般負荷55を取得し、取得した一般負荷55に基づいて、時刻t13における余裕負荷553を計算する。
【0078】
演算対象選択部12は、計算した合計予想負荷563を時刻t13における余裕負荷533と比較する。
図6に示す例では、合計予想負荷563が時刻t12における余裕負荷533以下である。演算対象選択部12は、畳み込み層23A及び24Bの両者を並行して演算できると判断し、畳み込み層23A及び24Bを演算対象として選択する。
【0079】
演算指示部13は、演算対象選択部12により選択された畳み込み層23A及び24Aの演算を演算部11に指示する。これにより、畳み込み層23A及び24Bの演算が時刻t13から開始される。
【0080】
(時刻t14以降)
時刻t14において、畳み込み層23A及び24Bの両者の演算が完了する。その後、情報処理装置1は、上記と同様の処理を実行することにより、時刻t14においてプーリング層23Bを演算対象として選択し、時刻t15においてプーリング層24Bを選択する。時刻t14及びt15における演算対象の選択の詳細な説明を省略する。
【0081】
時刻t15において、プーリング層23Bの演算が完了している。しかし、演算対象選択部12は、全結合層25を演算可能な中間層として特定することができない。全結合層25と依存関係にあるプーリング層23B及び24Cの両者の演算が完了していないためである。
【0082】
従って、情報処理装置1は、時刻t15において、プーリング層23Bの予想負荷231Bが時刻t15にける予想負荷以下であることを条件として、プーリング層24Cの演算を開始する。
【0083】
情報処理装置1は、全結合層26の演算を終了した場合、出力層27の演算を開始する。情報処理装置1は、出力層27の予想負荷を全結合層26の演算完了時における予想負荷と比較し、その比較結果に基づいて出力層27の演算を開始するか否かを判断してもよい。
【0084】
(フローチャート)
図7は、
図1に示す情報処理装置1の動作を示すフローチャートである。
図7を参照して、情報処理装置1は、前方画像61が入力層21に入力された場合、又は、演算対象選択部12により選択された中間層の演算が完了した場合に、
図7に示す処理を開始する。
【0085】
演算対象選択部12は、
図7に示す処理を開始した時点における一般負荷55を取得する(ステップS11)。演算対象選択部12は、ステップS11で取得した一般負荷55と、予め設定された上限負荷とに基づいて、余裕負荷を算出する(ステップS12)。
【0086】
演算対象選択部12は、ニューラルネットワーク20の構造に基づいて、中間層20Aのうち演算可能な中間層を特定する(ステップS13)。具体的には、一の中間層の演算が完了した場合、演算対象選択部12は、一の中間層の下流に接続された中間層を演算可能と判断する。前方画像61が入力層21に入力された場合、演算対象選択部12は、入力層21に接続された畳み込み層22を演算可能と判断する。
【0087】
演算対象選択部12は、ステップS13で特定した中間層の予想負荷を計算する(ステップS14)。ステップS14の後に、演算対象選択部12は、ステップS13で特定した中間層の数が2以上であるか否かを判断する(ステップS15)。
【0088】
ステップS13で特定した中間層の数が1である場合(ステップS15においてNo)、演算対象選択部12は、ステップS14で計算した予想負荷をステップS12で計算した余裕負荷と比較する(ステップS20)。
【0089】
予想負荷が余裕負荷以下である場合(ステップS20においてYes)、演算対象選択部12は、ステップS13で特定した中間層を演算対象に選択する(ステップS18)。予想負荷が余裕負荷より大きい場合(ステップS20においてNo)、演算対象選択部12は、所定時間が経過するまで待機し(ステップS21)、ステップS11に戻る。
【0090】
ステップS15の説明に戻る。ステップS13で特定した中間層の数が2以上である場合(ステップS15においてYes)、演算対象選択部12は、ステップS14で計算した予想負荷の合計を合計予想負荷として計算する(ステップS16)。演算対象選択部12は、ステップS16で計算した合計予想負荷をステップS12で計算した余裕負荷と比較する(ステップS17)。
【0091】
合計予想負荷が余裕負荷以下である場合(ステップS17においてYes)、演算対象選択部12は、ステップS13で特定された全中間層を演算対象として選択する(ステップS18)。合計予想負荷が余裕負荷よりも大きい場合(ステップS17においてNo)、演算対象選択部12は、ステップS12で特定された中間層の各々の優先度に基づいて、演算対象の中間層を選択する(ステップS19)。
【0092】
以上説明したように、本実施の形態に係る情報処理装置1は、ニューラルネットワーク20の構造と、中間層20Aの各々の演算量と、演算部11の負荷とに基づいて、演算対象の中間層を選択する。これにより、情報処理装置1は、演算処理能力の高いCPUを備えなくても、ニューラルネットワークを用いた処理と、その他の処理とを並行して実行することが可能となる。
【0093】
また、情報処理装置1は、演算可能な複数の中間層を特定した場合、複数の中間層の各々の予想負荷を取得し、取得した予想負荷と一般負荷55との合計が余裕負荷を超えるか否かを判断する。取得した予想負荷と一般負荷55との合計が余裕負荷を超えない場合、情報処理装置1は、特定した複数の中間層を演算対象として選択する。これにより、情報処理装置1は、複数の中間層の演算をその他の処理と並行して実行できるため、ニューラルネットワークの演算完了を早めることができる。
【0094】
[第2の実施の形態]
[1.構成]
[1.1.情報処理装置1Aの構成]
図8は、本発明の第2の実施の形態に係る情報処理システム100Aの構成を示す機能ブロック図である。
図8を参照して、情報処理システム100Aは、情報処理装置1に代えて、情報処理装置1Aを備える。情報処理装置1Aは、歩行者だけでなく交通標識を前方画像61から検出する。
【0095】
情報処理装置1Aは、演算部11及び演算対象選択部12に代えて、演算部11A及び演算対象選択部12Aを備える。演算部11Aは、記憶装置2に記憶されたニューラルネットワーク20及び30の演算を行う。演算対象選択部12Aは、ニューラルネットワーク20及び30の中間層の中から演算対象の中間層を選択する。
【0096】
記憶装置2は、ニューラルネットワーク30及び演算量データ53をさらに記憶する。ニューラルネットワーク30は、交通標識を前方画像61から検出するために用いられる。演算量データ53は、ニューラルネットワーク30に含まれる中間層の各々の演算量を記録する。
【0097】
以下、上記実施の形態と異なる点を中心に本実施の形態を説明する。上記実施の形態と本実施の形態とにおいて共通する構成及び動作については、その説明を省略する。
【0098】
[1.2.ニューラルネットワーク30の構成]
図9は、
図8に示すニューラルネットワーク30の構成を示す概略図である。
図9を参照して、ニューラルネットワーク30は、入力層31と、畳み込み層32及び33と、プーリング層34と、全結合層35及び36と、出力層37とを備える。
図9に示すニューラルネットワーク30において、ノードの表示を省略している。
【0099】
以下の説明において、畳み込み層32及び33と、プーリング層34と、全結合層35及び36とを総称して、「中間層30A」と記載する場合がある。
【0100】
入力層31は、前処理された前方画像61の画素データを受け、その受けた前方画像61の画素データを畳み込み層32に供給する。
【0101】
畳み込み層32は、入力層31から受けた画素データを畳み込み演算し、畳み込み演算の結果を畳み込み層33に供給する。畳み込み層33は、畳み込み層32から受けた畳み込み演算の結果を、さらに畳み込み演算する。畳み込み層33は、畳み込み演算の結果をプーリング層34に供給する。
【0102】
プーリング層34は、畳み込み層33から受けた畳み込み演算の結果を統計的に処理し、その統計処理結果を全結合層35に供給する。
【0103】
全結合層35は、プーリング層34から統計処理結果を受け、その受けた統計処理結果を用いた演算を行う。全結合層35は、演算結果を全結合層36に供給する。全結合層36は、全結合層35から受けた演算結果をさらに演算し、その演算結果を出力層37に供給する。
【0104】
出力層37は、結合層36から受けた演算結果に基づいて、前方画像61から検出された交通標識を示す標識検出結果38を出力する。標識検出結果38は、結果データ62の生成に用いられる。
【0105】
[2.動作]
情報処理装置1Aは、前方画像61の前処理が終了した場合、ニューラルネットワーク20及び30を用いて、歩行者及び交通標識を前処理された前方画像61から検出する。
【0106】
図10は、
図8に示す情報処理装置1Aに搭載されたCPU101の一般負荷57の時間変化の一例を示すグラフである。一般負荷57は、ニューラルネットワーク20及び30の演算に伴う負荷を除いたCPU101の負荷に相当する。
【0107】
(時刻t21)
図10を参照して、前方画像61の前処理が時刻t21において完了する。演算対象選択部12Aは、ニューラルネットワーク20及び30において演算可能な中間層として、畳み込み層22及び32を特定する。ニューラルネットワーク20及び30は、互いに独立しているためである。
【0108】
演算対象選択部12Aは、畳み込み層22の予想負荷221と畳み込み層32の予想負荷321とを計算する。予想負荷321は、演算量データ53に記録された畳み込み層32の演算量に基づいて計算される。演算対象選択部12Aは、計算した予想負荷221及び321の合計を予想合計負荷621として計算する。
【0109】
演算対象選択部12Aは、時刻t22における一般負荷57を取得し、取得した一般負荷57と負荷上限とに基づいて余裕負荷571を計算する。
【0110】
演算対象選択部12Aは、予想合計負荷621が余裕負荷571以下であるため、畳み込み層22及び32の両者を演算対象として選択する。演算指示部13は、演算対象選択部12Aにより選択された畳み込み層22及び32の演算を演算部11に指示する。これにより、畳み込み層22及び32の演算が、時刻t22から開始される。
【0111】
(時刻t22)
時刻t22において、畳み込み層22及び32の演算が完了する。畳み込み層23A及び24Aは、畳み込み層22の下流に位置し、かつ、畳み込み層22に接続する。畳み込み層33は、畳み込み層32の下流に位置し、かつ、畳み込み層32に接続する。従って、演算対象選択部12Aは、演算可能な中間層として、畳み込み層23A、24A及び33を選択する。
【0112】
演算対象選択部12Aは、畳み込み層23Aの予想負荷231Aと、畳み込み層24Aの予想負荷241Aと、畳み込み層33の予想負荷331とを計算する。演算対象選択部12Aは、計算した予想負荷231A、241A及び331Aの合計を合計予想負荷622として計算する。
【0113】
演算対象選択部12Aは、上限負荷と時刻t22における一般負荷57とに基づいて、時刻t22における余裕負荷572を計算する。
【0114】
合計予想負荷622が余裕負荷572よりも大きいため、演算対象選択部12Aは、時刻t22において特定した3つの中間層のうち、下流の中間層の数が最も多い畳み込み層24Aの予想負荷241Aを余裕負荷572と比較する。予想負荷241Aが余裕負荷572よりも小さいため、演算対象選択部12Aは、畳み込み層24Aを演算対象として選択する。演算指示部13は、演算対象選択部12Aにより選択された畳み込み層24Aの演算を演算部11Aに指示する。これにより、畳み込み層24Aの演算が、時刻t22から開始される。
【0115】
あるいは、演算対象選択部12Aは、時刻t22において特定した3つの中間層のうち2つの中間層の予想効果の合計を計算し、計算した合計を余裕負荷572と比較してもよい。計算した合計が余裕負荷572よりも小さい場合、これら2つの中間層を演算対象として選択する。演算対象として選択できる2つの中間層の組み合わせが複数存在する場合には、演算対象選択部12Aは、2つの中間層の演算量の合計が最も大きいか、又は、2つの中間層の下流に位置する層の合計の最も多い組み合わせを選択すればよい。
【0116】
(時刻t22以後)
時刻t22以降においても、演算対象選択部12Aは、中間層の演算が完了するたびに、演算可能な中間層をニューラルネットワーク20及び30の各々から特定し、特定した中間層の予想負荷と余裕負荷とに基づいて、演算対象の中間層を選択する。
【0117】
以上説明したように、情報処理装置1Aは、ニューラルネットワーク20及び30の各々から演算可能な中間層を特定し、特定した中間層の各々の予想負荷を取得する。情報処理装置1Aは、取得した予想負荷と一般負荷57との合計が余裕負荷を超えるか否かを判断する。取得した予想負荷と一般負荷57との合計が余裕負荷を超えない場合、情報処理装置1は、特定した全ての中間層を演算対象として選択する。これにより、情報処理装置1は、複数のニューラルネットワークの演算とその他の処理と並行して実行することができる。
【0118】
[変形例]
(ニューラルネットワークとブロック線図との相互変換)
図11は、ニューラルネットワークをブロック線図に変換する一例を示す図である。ニューラルネットワークは重み付き有向グラフである。一般的なブロック線図において、ブロックの値の重みとして捉えた場合、一般的なブロック線図は、重み付き有向グラフと考えることができる。つまり、
図11に示すように、ニューラルネットワークをブロック線図に変換することができる。
【0119】
図11に示す変換において、情報の喪失が発生しないため、ニューラルネットワークからブロック線図への変換は可逆である。つまり、ブロック線図からニューラルネットワークに変換することが可能である。
【0120】
図12は、ニューラルネットワークの一例を示す図である。
図13は、
図12に示すニューラルネットワークを隣接行列として表した図である。
図12を参照して、xは入力ノードであり、yは中間ノードであり、zは出力ノードである。wは重みであり、bは、バイアスである。cは、値として1を有する定数である。
図12に示すニューラルネットワークを重み付き有向グラフとして捉えた場合、
図12に示すニューラルネットワークを
図13に示す隣接行列として表現することができる。
【0121】
図13に示す隣接行列から重み付き有向グラフの行列式を作成する場合、行列式は、下記の式(2)及び(3)により表される。
【0122】
【0123】
【0124】
式(1)及び(2)における、x、y、z、w及びbをそれぞれX、Y、Z、W及びBのようにベクトルで表現し、c=1を代入する。その結果、式(1)及び(2)を、式(3)及び(4)のように変形することができる。
【0125】
【0126】
【0127】
図14は、
図12に示すニューラルネットワークを変換したブロック線図である。
図14は、式(3)及び(4)をブロック線図で表現した図に相当する。
【0128】
ブロック線図は、階層化によって制御構造を抽象化する機能を有する。通常、制御設計者は、ニューラルネットワーク等のAI(artificial intelligence)モデルの内部構造に関心を持たない。従って、AIモデルを複雑な機能を持つブロックとして扱うことにより、ニューラルネットワークを隠蔽することができる。AI開発者は、隠蔽されたニューラルネットワークだけに注目すれば、制御と関係なく開発を進めることができる。
【0129】
さらに、ニューラルネットワークの構造を入力層、畳み込み層等の階層で抽象化することにより、さらにその下の階層を平易な数値演算の組み合わせに単純化することができる。下の階層は、マイクロコンピュータの実装技術者が並列化やメモリ配置などを工夫して高速化するために利用される。このことから、ニューラルネットワークをブロック線図に変換することは、車載用のマイクロコンピュータの実装のためだけでなく、開発プロセスを役割ごとに分離し、品質及び性能の保証範囲を明確にする効果も期待できる。
【0130】
(並列化の対象の選定)
GPU(Graphics Processing Unit)サーバを用いて設計及び学習したニューラルネットワークが、構造的にそれ以上演算を削減できないと仮定する。この場合、ニューラルネットワークをマイクロコンピュータに実装する時の課題を、如何にしてCPI(Clocks Per Instruction)を改善するかに絞り込むことができる。レイテンシの小さな命令やメモリアクセス等の様々な方法がCPIの改善手法として知られている。しかし、CPIの改善に最も寄与するのは並列化である。そのため、ライブラリ開発に際しては、演算の依存関係をどこまでなくせるかを検討する必要がある。
【0131】
演算のどの部分に依存関係があるかは、コードを生成する前のブロック線図の構造を有向グラフとみなすことにより明確に分かる。ニューラルネットワークをブロック線図に変換することで、グラフィカルに並列化を検討することができる。
【0132】
図15は、ニューラルネットワークを変換したブロック線図の他の例である。
図15に示すブロック線図において、矢印でつながるブロック同士は明確に依存関係があるため、分岐ごとに並列化の対象を選定する。
【0133】
図15において、横方向が時間、縦方向が並列数を示している。このため、
図15に示すブロック線図は、現時点における最大並列数、かつ、最短時間の処理を示している。ターゲットの並列数が十分であれば、
図15に示すブロック線図の構成のまま実装できる。ターゲットの並列数が十分でない場合、割り当てを検討する必要がある。そこで、分割した領域を有向グラフとして出力ノードから順に割り当てる。この結果、
図15に示すブロック線図が、
図16に示すようにグラフ化される。
【0134】
図17は、
図16に示された処理依存関係に基づく並列処理の割り当ての手順を示す図である。デュアルコアCPUを開発ターゲットとした場合、並列数は2である。分かり易くするために、
図16に示すa~kの全ての処理が、同様の処理時間であると仮定する。この場合、並列数×時系列の箱を用意してなるべく時系列が短くなるように処理を並べればよい。そのアルゴリズムは、以下の通りである。
【0135】
手順1:各ノードが直接参照する他ノードの1つ手前となるように時系列方向に整理する。
手順2:各ノードを参照する全てのノード数である「被依存度」を求める。
手順3:非依存度の大きいノードから、空いている箱のうち、最も右に配置する。ただし、手順1で整理した位置よりも左に位置するように当該ノードを配置する。
【0136】
(その他の変形例)
上記実施の形態において、情報処理装置1は、ニューラルネットワーク20を互いに異なるプロセスID(IDentification)で実行してもよい。例えば、時刻t(k)に生成された前方画像61から歩行者を検出する画像認識処理と、時刻t(k+1)に生成された前方画像61から歩行者を検出する画像認識処理とは、互いに独立している。時刻t(k+1)は、時刻t(k)よりも後の時刻である。
【0137】
この場合、演算対象選択部12は、時刻t(k)に対応する画像認識処理と、時刻t(k+1)に対応する画像認識処理とに対して異なるプロセスIDを割り当てる。この場合、演算対象選択部12は、時刻t(k)に対応する画像認識処理で用いられるニューラルネットワーク20と、時刻t(k+1)に対応する画像認識処理で用いられるニューラルネットワーク20との各々から演算可能な中間層を特定すればよい。演算可能な中間層を特定した後における演算対象選択部12の動作は、上記と同様である。
【0138】
上記実施の形態において、演算対象選択部12が、演算可能な中間層の予想負荷を余裕負荷と比較する例を説明したが、これに限られない。演算対象選択部12及び12Aは、ニューラルネットワークの構造と、中間層の演算量と、演算部11及び11Aの負荷とに基づいて、演算対象の中間層を特定できれば、演算対象の中間層を選択する手順は、特に限定されない。
【0139】
上記実施の形態における処理方法の実行順序は、上記実施の形態の記載に制限されるものではなく、発明の要旨を逸脱しない範囲で実行順序を入れ替えてもよい。
【0140】
前述した方法をコンピュータに実行させるコンピュータプログラム及びそのプログラムを記録したコンピュータ読み取り可能な記録媒体は、本発明の範囲に含まれる。ここで、コンピュータ読み取り可能な記録媒体としては、例えば、フレキシブルディスク、ハードディスク、CD-ROM、MO、DVD、DVD-ROM、DVD-RAM、大容量DVD、次世代DVD、半導体メモリを挙げることができる。
【0141】
以上、本発明の実施の形態を説明したが、上述した実施の形態は本発明を実施するための例示に過ぎない。よって、本発明は上述した実施の形態に限定されることなく、その趣旨を逸脱しない範囲内で上述した実施の形態を適宜変形して実施することが可能である。
【符号の説明】
【0142】
100,100A 情報処理システム
1,1A 情報処理装置
11,11A 演算部
12,12A 演算対象選択部
13 演算指示部
21,31 入力層
22,23A,24A,24B,32,33 畳み込み層
23B,24C,34 プーリング層
25,26,35,36 全結合層
27,37 出力層