(57)【要約】【課題】  畳込みニューラルネットワークによる画像認識装置における特徴量抽出を行うフィルタデータのデータ量を削減する。【解決手段】  データを受け付ける入力手段と、データに対して処理を行う畳込みニューラルネットワークを構成する演算ユニットと、演算ユニットで用いるデータを記憶する記憶領域と、処理の結果を出力する出力手段と、を備える情報処理装置である。畳込みニューラルネットワークは、第１の内積演算を含む第１の処理を行う第１の中間層と、第２の内積演算を含む第２の処理を行う第２の中間層と、を備え、第１の内積演算のための第１のフィルタデータと、第２の内積演算のための第２のフィルタデータのビット幅が異なるように構成される。【選択図】  図１Ｃ
2018142049.tif 000002
【特許請求の範囲】
【請求項１】
データを受け付ける入力手段と、
前記データに対して処理を行う畳込みニューラルネットワークを構成する演算ユニットと、
前記演算ユニットで用いるデータを記憶する記憶領域と、
前記処理の結果を出力する出力手段と、を備え、
前記畳込みニューラルネットワークは、
第１の内積演算を含む第１の処理を行う第１の中間層と、
第２の内積演算を含む第２の処理を行う第２の中間層と、を備え、
前記第１の内積演算のための第１のフィルタデータと、前記第２の内積演算のための第２のフィルタデータのビット幅が異なる、
情報処理装置。
【請求項２】
前記記憶領域は、フィルタデータ記憶領域を備え、
前記フィルタデータ記憶領域は、
第１のビット幅を有する第１のフィルタデータを記憶する第１の領域と、
第２のビット幅を有する第２のフィルタデータを記憶する第２の領域と、を備え、
前記第１の領域のバンク構成およびアドレスの振り方は、前記第２の領域のバンク構成およびアドレスの振り方と同じであり、
前記第１のビット幅と前記第２のビット幅は異なる、
請求項１記載の情報処理装置。
【請求項３】
前記第１の中間層は、畳込み層もしくは全結合層であり、
前記第２の中間層は、畳込み層もしくは全結合層である、
請求項１記載の情報処理装置。
【請求項４】
前記記憶領域は、前記第１のフィルタデータのビット幅と、前記第２のフィルタデータのビット幅を記憶している、
請求項１記載の情報処理装置。
【請求項５】
前記第１の中間層は、前記第２の中間層より処理に必要なパラメータの数が多く、
前記第１の内積演算のための第１のフィルタデータのビット幅は、前記第２の内積演算のための第２のフィルタデータのビット幅よりも大きい、
請求項１記載の情報処理装置。
【請求項６】
前記第１の中間層は、前記第２の中間層より前段にあり、
前記第１の内積演算のための第１のフィルタデータのビット幅は、前記第２の内積演算のための第２のフィルタデータのビット幅よりも大きい、
請求項１記載の情報処理装置。
【請求項７】
前記第１の中間層は画像データに対して色の情報を用いて物体の検出を行う層であり、前記第２の中間層は画像データに対して物体のエッジ検出を行う層であり、
前記第１の内積演算のための第１のフィルタデータのビット幅は、前記第２の内積演算のための第２のフィルタデータのビット幅よりも大きい、
請求項１記載の情報処理装置。
【請求項８】
前記情報処理装置はFPGAで構成され、
前記記憶領域は、前記FPGAに搭載された半導体メモリであり、
前記演算ユニットは、前記FPGAに搭載されたプログラム可能なロジックセルである、
請求項１記載の情報処理装置。
【請求項９】
画像を受け付ける入力手段と、
前記画像を処理する演算ユニットと、
前記演算ユニットで用いるデータを記憶する記憶領域と、
前記処理の結果を出力する出力手段と、を備え、
前記画像に写っている物体の種類を分類し識別する画像認識装置であって、
前記演算ユニットは、
前記画像の処理のために、前記画像の特徴量抽出を行うフィルタの畳込み演算を行う複数の階層を有し、
前の階層で得られた畳込み演算の結果に対して、後の階層で更に畳込み演算を行い、
前記畳込み演算に用いられるフィルタデータのデータタイプは、少なくとも２つの異なるデータタイプが含まれるように、階層毎に定めることを特徴とする、
画像認識装置。
【請求項１０】
前記記憶領域は、前記階層毎に、前記フィルタデータを格納するフィルタデータ記憶領域を備え、
前記フィルタデータは前記フィルタデータ記憶領域の1つのアドレスに複数個記憶され、
前記１つのアドレスに記憶されるフィルタデータの個数は、階層毎に同じではない、
請求項９記載の画像認識装置。
【請求項１１】
前記フィルタデータは共通した畳込み演算器で使用され、
前記畳込み演算器は、前記フィルタデータを格納するための、固定された大きさの複数のレジスタを備え、
ある階層で行う畳込み演算に用いられる複数個のフィルタデータを、前記複数のレジスタに１対１に対応付けて格納し、
他の階層で行う畳込み演算に用いられる複数個のフィルタデータを、前記複数のレジスタに１対１に対応付けて格納することにより、
前記共通した畳込み演算器を、異なる畳込み演算を行う階層として機能させる、
請求項１０記載の画像認識装置。
【請求項１２】
データを受け付け、前記データに対して処理を行い、前記処理の結果を出力する畳込みニューラルネットワークであって、第１の内積演算を行う第１の中間層と、第２の内積演算を行う第２の中間層と、を備える畳込みニューラルネットワークのパラメータ設定方法において、
前記第１の内積演算のための第１のフィルタデータのビット幅と、前記第２の内積演算のための第２のフィルタデータのビット幅を独立に設定するパラメータ設定処理を含む、
畳込みニューラルネットワークのパラメータ設定方法。
【請求項１３】
前記パラメータ設定処理は、
Ｍビットのビット幅を有するフィルタデータを用いて、前記第１の内積演算および前記第２の内積演算のためのフィルタデータの学習を行い、前記第１の内積演算のためのＭビットのビット幅を有する第１の学習済フィルタデータと、前記第２の内積演算のためのＭビットのビット幅を有する第２の学習済フィルタデータと、を得る第１のステップと、
前記第１の学習済フィルタデータのビット幅を減少させたフィルタデータを用いてテストを行い、前記テストにおける前記処理の結果が所望の条件を満たすフィルタデータのビット幅に基づいて、前記第１のフィルタデータのビット幅を設定する第２のステップと、
前記第２の学習済フィルタデータのビット幅を減少させたフィルタデータを用いてテストを行い、前記テストにおける前記処理の結果が所望の条件を満たすフィルタデータのビット幅に基づいて、前記第２のフィルタデータのビット幅を設定する第３のステップと、を含む、
請求項１２記載の畳込みニューラルネットワークのパラメータ設定方法。
【請求項１４】
前記第２のステップにおいて、前記第１の学習済フィルタデータの小数部の下位ビットから削減してビット幅を減少させたフィルタデータを用いてテストを行い、
前記第３のステップにおいて、前記第２の学習済フィルタデータの小数部の下位ビットから削減してビット幅を減少させたフィルタデータを用いてテストを行う、
請求項１３記載の畳込みニューラルネットワークのパラメータ設定方法。
【請求項１５】
前記フィルタデータの小数部の下位ビットの削減の際の丸め方式に最近点丸めを用いたことを特徴とする、
請求項１４記載の畳込みニューラルネットワークのパラメータ設定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は高信頼に情報を処理する回路に関する。
【背景技術】
【０００２】
近年、一般画像認識に畳込みニューラルネットワークを用いることで高い認識率を達成可能であることがわかり、注目を集めている（例えば特許文献１参照）。一般画像認識とは、一枚の画像に映る物体の種類を分類し識別する問題である。畳込みニューラルネットワークとは、入力情報の特徴量抽出を行うパーセプトロンを多層に組み合わせることで、特徴量抽出を多重に行い高い認識率を達成可能な機械学習技術である。
【０００３】
畳込みニューラルネットワークが機械学習アルゴリズムの中でも特に有効であることが最近になり判明した背景に、計算機の性能向上が挙げられる。畳込みニューラルネットワークにおいて高い認識率を達成するためには、中間層のパーセプトロンのフィルタデータを何千枚/何万枚もの画像データを用いて訓練し、最適化する必要がある。フィルタデータのデータ数を増やすほど画像の詳細な分類と高い認識率を達成可能となる。したがって、多量の画像を用いて多量のフィルタデータを訓練するために高い計算性能が必要であり、近年のサーバにおけるマルチコア技術やGPGPU（General−purpose computing on graphics processing units）技術など計算機の発展によって畳込みニューラルネットワークによる一般画像認識が可能となった。
【０００４】
畳込みニューラルネットワークの有効性が広く認知されたことで畳込みニューラルネットワークの研究は爆発的に広まり、様々な応用が検討されている。一例を挙げると、自動車の自動運転技術の開発において、周囲の物体を認識するために畳込みニューラルネットワークを用いることが検討されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−６９１３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、自動車などの組込み用途においては、サーバ環境と比較すると半導体チップの計算性能は非常に低く制限される。このため、こうした組込み用途で畳込みニューラルネットワークを実装するにあたり、認識率を達成するために必要な多量のフィルタデータをすべて搭載するためには記憶領域の容量が不足する問題点があった。そこで本発明の目的は畳込みニューラルネットワークの認識精度を落とすことなく全てのフィルタデータを組込み用途に搭載可能な画像認識装置を開発することである。
【課題を解決するための手段】
【０００７】
本発明の一側面は、データを受け付ける入力手段と、データに対して処理を行う畳込みニューラルネットワークを構成する演算ユニットと、演算ユニットで用いるデータを記憶する記憶領域と、処理の結果を出力する出力手段と、を備える情報処理装置である。畳込みニューラルネットワークは、第１の内積演算を含む第１の処理を行う第１の中間層と、第２の内積演算を含む第２の処理を行う第２の中間層と、を備え、第１の内積演算のための第１のフィルタデータと、第２の内積演算のための第２のフィルタデータのビット幅が異なるように構成される。
【０００８】
本発明の他の一側面は、画像を受け付ける入力手段と、画像を処理する演算ユニットと、演算ユニットで用いるデータを記憶する記憶領域と、処理の結果を出力する出力手段と、を備え、画像に写っている物体の種類を分類し識別する画像認識装置である。演算ユニットは、画像の処理のために、画像の特徴量抽出を行うフィルタの畳込み演算を行う複数の階層を有し、前の階層で得られた畳込み演算の結果に対して、後の階層で更に畳込み演算を行い、畳込み演算に用いられるフィルタデータのデータタイプは、少なくとも２つの異なるデータタイプが含まれるように、階層毎に定める。
【０００９】
本発明のさらに他の一側面は、データを受け付け、データに対して処理を行い、処理の結果を出力する畳込みニューラルネットワークであって、第１の内積演算を行う第１の中間層と、第２の内積演算を行う第２の中間層と、を備える畳込みニューラルネットワークのパラメータ設定方法である。この方法では、第１の内積演算のための第１のフィルタデータのビット幅と、第２の内積演算のための第２のフィルタデータのビット幅を独立に設定するパラメータ設定処理を含む。
【発明の効果】
【００１０】
本発明によれば、記憶領域に搭載すべきフィルタデータのデータ量の低減が可能となる。前述した以外の課題、構成及び効果は、以下の実施の形態の説明により明らかになる。
【図面の簡単な説明】
【００１１】
【図１Ａ】実施例における畳込みニューラルネットワークの構成を示す概念図である。
【図１Ｂ】実施例におけるデータタイプの定義例を示す概念図である。
【図１Ｃ】実施例におけるデータタイプとデータ容量を比較例と比較した表図である。
【図２】実施例1における画像認識装置100の構成を示すブロック図である。
【図３】実施例1におけるフィルタデータ記憶領域107の構成を示す概念図である。
【図４】実施例1における畳込み層のフィルタデータのビット数と画像認識装置の認識精度の関係を示すグラフ図である。
【図５】実施例における各中間層のフィルタデータのビット数と画像認識装置の認識精度の関係を示すグラフ図である。
【図６】実施例におけるそれぞれの中間層のフィルタデータのビット数の決定処理フローを示すフロー図である。
【図７】実施例における演算ユニット内部のデコード演算モジュールと畳込み演算・全結合演算モジュールの構成を示すブロック図である。
【図８】実施例におけるデコード演算モジュールが畳込み層のフィルタデータをデコードする様子を示すタイミングチャートである。
【図９】実施例における画像認識装置の処理手順を示すフローチャートである。
【図１０】実施例における畳込み演算の処理を示すフロー図である。
【図１１】実施例における全結合演算の処理を示すフロー図である。
【図１２】実施例におけるフィルタデータのデコード処理を示すフロー図である。
【図１３】図３に示したフィルタデータ記憶領域の変化の形態を示す概念図である。
【図１４】図６に示したフィルタデータのビット数を決定する処理の他の形態例を示すフロー図である。
【図１５】図１４に示したフィルタデータのビット数を決定する処理の変形例を示すフロー図である。
【発明を実施するための形態】
【００１２】
以下、実施例を図面に基づいて説明する。なお、実施例を説明する全図において、同一の機能有する部材には同一の符号を付し、その繰り返しの説明は特に必要な場合を除き省略する。
【００１３】
以下で説明される実施例の一例を挙げるならば、複数の中間層を持つ畳込みニューラルネットワークであり、それぞれの中間層でフィルタデータのデータタイプを変更しビット幅を可変とする。データタイプのビット幅は畳込みニューラルネットワークの認識率を維持することが可能なフィルタデータの演算精度を見極めることで決定する。
【００１４】
図１Ａは、実施例における、畳込みニューラルネットワークの処理の概念を示す図である。実施例では、ネットワークパラメータをネットワーク全体で一律に削減するのではなく、階層ごとにネットワークパラメータの有効精度を求め、有効精度のみを保存するように構成する例を説明している。以下の実施例では処理対象を画像データとしているが、これに限るものではない。
【００１５】
実施例での畳込みニューラルネットワークは入力層IN、第１の畳込み層CN1、第２の畳込み層CN2、全結合層IP1、出力層OUTを持つこととする。層の数は任意に変更することができる。また層の種類も上記には限らず、処理にパラメータを用いるものであれば本実施例を適用できる。入力層INは入力する画像101をを正規化したものである。出力層OUTは第２の全結合層IP2としている。なお、通常は畳込み層にはプーリング層や活性化層が付随するが、ここでは省略する。この畳込みニューラルネットワークには、画像101が入力され、認識結果102が出力される。
【００１６】
畳込み層は、入力された画像101から、認識するために必要な情報(特徴量)を抽出する。特徴量を抽出するために必要な畳込み処理（一種のフィルタリングのための内積演算）のために、畳込み層はパラメータ（フィルタデータ）を使用する。プーリング層は、畳み込み層で得られた情報を要約するとともに、データが画像の場合には、位置に対する不変性を高める。
【００１７】
全結合層IP1、IP2は、抽出された特徴量を使って、その画像がどのカテゴリに属するかを判断する、つまりパターン分類を行う。各全結合層は多層パーセプトロン(multi−layer perceptron)の一つの層を構成する。概念的には、一つの全結合層には複数のユニットが一列に並んでいると考えることができる。1つのユニットは、前の全結合層の全てのユニットと結合されている。結合一つ一つに対しては、パラメータ(重みデータ)が割り当てられている。後の全結合層のユニットの入力は、前の全結合層の入力と重みデータの内積に所定のバイアスを加算したものとなる。本明細書では、これらのフィルタデータ、重みデータ、バイアスなどを総称してフィルタデータということにする。本実施例では、ニューラルネットワークを構成するそれぞれの層でフィルタデータのデータタイプを変更し、異なるビット幅を使用する。
【００１８】
図１Ｂは、タイプ別にビット幅を定義した様子を示す概念図である。一例として、Type1は小数点以下5bitと符号の1bitで合計6bitである。同様に、Type2は小数点以下3bit、Type3は小数点以下３桁から3bit、Type4は小数点以下４桁から3bit、Type5は小数点以下２桁から2bitのように定義している。以下の実施例では、必要な演算精度に応じて、各層のビット幅を選択する。
【００１９】
図１Ｃは、図１Ａに示す各層で異なるビット幅を用いた例と、均一にデータ削減をして同じビット幅を用いた例とで、データ容量の差を示した表図である。各層で異なるビット幅を用いると、データ容量を節減することが期待できる。
【００２０】
各層でビット幅をどのように定めるかは、（Ａ）演算に必要となるパラメータの数が多い層では高精度が必要となるため、演算精度を相対的に多くする、（Ｂ）ネットワークの階層が進むほど必要な演算精度は自然と低下するため、演算精度を相対的に少なくする、（Ｃ）物体のエッジ検出を行う層では画像の階調を多く必要としないため演算精度を相対的に少なくし、色の情報を用いて物体の検出を行う層では演算精度を相対的に多くする、等の手法がある。さらに以下の実施例では、認識精度をフィードバックしてデータタイプを決定する方式も説明している。この方式では、階層ごとにネットワークパラメータの有効精度を求め、有効精度を考慮してデータタイプを決める。
【実施例１】
【００２１】
図２に、本実施例における画像認識装置100の構成を示す。画像認識装置100の入力は画像101であり、出力は画像101の認識結果102である。画像認識装置100は内部に演算データ記憶領域103と演算ユニット104を持ち、入力ポートと出力ポートと演算データ記憶領域103と演算ユニット104はすべてバス105で接続されており、バス105を通じて演算データは転送される。
【００２２】
演算データ記憶領域103の内部は一時記憶領域106とフィルタデータ記憶領域107で構成される。一時記憶領域106には、画像認識装置100で実行される演算の途中結果が格納される。フィルタデータ記憶領域107には、畳込みニューラルネットワークの中間層のフィルタデータが予め格納されている。
【００２３】
演算ユニット104は、畳込みニューラルネットワークの演算に必要な演算モジュールで構成されている。
【００２４】
演算制御モジュール108は、畳込みニューラルネットワークのアルゴリズムにしたがって他の演算モジュールや演算データのフローを制御するモジュールである。
【００２５】
デコード演算モジュール109はフィルタデータ記憶領域に圧縮され格納されたフィルタデータをデコードするモジュールである。後に詳細に説明する。
【００２６】
畳込み演算・全結合演算モジュール110は畳込みニューラルネットワークにおける畳込み演算もしくは前結合演算を実行するモジュールである。畳込み演算と全結合演算の内容は、ともに内積演算であるため1つのモジュールで実行可能である。また畳込み層や全結合層が複数枚あったとしても、1つの畳込み演算・全結合演算モジュール110で実行可能である。
【００２７】
活性化演算モジュール111は、畳込みニューラルネットワークの活性化層の演算を実行するモジュールである。
【００２８】
プーリング演算モジュール112は、畳込みニューラルネットワークにおけるプーリング層の演算を実行するモジュールである。
【００２９】
正規化演算モジュール113は、畳込みニューラルネットワークにおける正規化層の演算を実行するモジュールである。
【００３０】
最大値演算モジュール114は、畳込みニューラルネットワークにおける出力層の最大値を検出し認識結果102を得るためのモジュールである。これら演算モジュールのなかで本実施例の内容に深く関わるモジュールはデコード演算モジュール109と畳込み演算・全結合演算モジュール110であり、これら2つのモジュールについて後に詳細に説明する。
【００３１】
自動車などの組込み用途においては、例えば、画像認識装置100はFPGA(field-programmable gate array）のような半導体集積回路で構成することができる。この半導体集積回路は、例えば１チップで構成され、汎用用途のCPU（Central Processing Unit)と協働して、主に画像に関する処理を行う。演算データ記憶領域103は、半導体メモリであって、例えばSRAM（Static Random Access Memory)のような高速のメモリが用いられる。また、画像認識装置100はFPGAではなく、記憶装置に格納されたプログラムがCPUによって実行されることで、定められた処理を他のハードウェアと協働して行うように構成することもできる。なお、本実施例では画像認識処理を例に説明しているが、本実施例は他の処理に用いることも可能であり、特に用途を限定するものではない。
【００３２】
この画像認識装置100がFPGAで構成される場合には、例えば演算データ記憶領域103はSRAMで構成され、演算ユニット104はプログラム可能なロジックセルで構成される。プログラムのためのデータは、例えばフラッシュメモリのような外部記憶装置（図示せず）から演算データ記憶領域103のコンフィグレーションメモリと呼ばれる領域（図示せず）にロードされ、演算ユニットの各モジュールを実現するようにロジックセルを設定する。
【００３３】
図３は、本実施例におけるフィルタデータ記憶領域107の構成を示す図である。フィルタデータ記憶領域には、畳込みニューラルネットワークにおける中間層の畳込み層と全結合層のフィルタデータが予め格納されている。本実施例での畳込みニューラルネットワークは畳込み層を2枚と全結合層を1枚持つこととする。フィルタデータ記憶領域107は、畳込み層1のフィルタデータ記憶領域120aと畳込み層2のフィルタデータ記憶領域120bと全結合層のフィルタデータ記憶領域120cとで構成される。
【００３４】
それぞれのフィルタデータ記憶領域120は内部がバンク121によって分割されアドレス122によりアドレス番号が振られている。これらバンク121の構成やアドレス122の振り方は画像認識装置100の物理的構成に依存しており、フィルタデータ記憶領域107の中で共通している。これに対して、それぞれのフィルタデータ記憶領域120で保存されるフィルタデータ124のビット幅123は異なる。
【００３５】
畳込み層1のフィルタデータ記憶領域120aのフィルタデータ124aは一つの番地に3つフィルタデータaが格納可能であるのに対して、畳込み層2のフィルタデータ記憶領域120bのフィルタデータ124bは一つの番地に1つ、畳込み層3のフィルタデータ記憶領域120cのフィルタデータ124cは一つの番地に2つ格納可能である。これは各畳込み層の演算に必要な演算精度を見極め、演算精度を満足するビット幅123のみを保存しているためである。この演算精度は畳込み層1、畳込み層2、全結合層で全て異なる場合がある。仮に演算精度の見極めをせずにフィルタデータのデータタイプを決めたとすると、アドレスのビット幅に適合したビット幅のデータタイプを用いることになる。一つのアドレスにつき一つのデータを格納可能なデータタイプを用いれば、畳込み層1では3倍、全結合層では2倍の記憶領域が必要となる。それぞれの中間層で必要な演算精度を層毎に個別に見極めることで、必要なビット幅のみを保存することができ、記憶領域を節約している。
【００３６】
図４は、本実施例における畳込み層1のフィルタデータのビット数130と画像認識装置の認識精度131の関係を示す図である。横軸が畳込み層1のフィルタデータのビット数130で、縦軸が画像認識装置の認識精度131である。畳込みニューラルネットワークの学習の段階では、画像認識装置100の認識精度がアプリケーションの要求する要求認識精度132を上回ることを目標にフィルタデータを訓練する。このとき、32bit幅の単精度浮動小数点数をフィルタデータのデータタイプに用いることが一般的である。これは畳込みニューラルネットワークの学習アルゴリズムではフィルタデータの微分値など微小量を扱うためである。
【００３７】
しかしながら、画像認識装置100に畳込みニューラルネットワークを実装するにあたりフィルタデータのデータタイプを学習に用いたのと同じ32bit幅の単精度浮動小数点数を用いると演算精度が余剰である。
【００３８】
図４に示すように、畳込み層1のフィルタデータのビット数130を32bit、31bit、…、(na+2)bit、 (na+1)bit、 na bitと削減したとしても画像認識装置100の認識精度がアプリケーションの要求する要求認識精度132を下回ることはない。フィルタデータのビット数na bitから(na-1)bitに削減したときに画像認識装置100の認識精度がアプリケーションの要求認識精度132をはじめて下回ったとすれば、畳込み層1のフィルタデータのビット数130の必要ビット数133aはna bitであることがわかる。したがって、畳込み層1のフィルタデータのビット数130はna bit以上である必要があり、畳込み層1のフィルタデータ記憶領域120aにおけるフィルタデータ124aの演算ビット幅123aはna bitとすることは妥当である。
【００３９】
図５は、本実施例における各中間層のフィルタデータのビット数140と画像認識装置の認識精度131の関係を示す図である。この図には3つのグラフが描画されており、それぞれ畳込み層1のフィルタデータのビット数のみ削減するグラフ141と、畳込み層1のフィルタデータのビット数のみ削減するグラフ142と、畳込み層1のフィルタデータのビット数のみ削減するグラフ143である。畳込み層1のフィルタデータのビット数のみ削減するグラフ141は図４に示したものと同一のものを省略して示したものである。
【００４０】
畳込み層2のフィルタデータのビット数のみ削減するグラフ142は、畳込み層2のフィルタデータのみを畳込み層1の場合と同様にフィルタデータのビット数を削減した場合の画像認識装置の認識精度131の変化を示すグラフである。畳込み層2のフィルタデータのビット数がnb bitまでは画像認識装置の認識精度131がアプリケーションの要求認識精度132を上回るが、(nb−1)bitでは下回る。したがって、畳込み層2のフィルタデータのビット数はnb bit以上である必要があり、畳込み層2のフィルタデータ記憶領域120bにおけるフィルタデータ124bの演算ビット幅123bはnb bitとする。
【００４１】
同様に、全結合のフィルタデータのビット数のみ削減するグラフ143を着目すると、nc bitでは画像認識装置の認識精度131が要求認識精度132を上回り、(nc-1)bitでは下回る。このため、畳込み層2のフィルタデータのビット数はnb bit以上である必要があり、全結合層のフィルタデータ記憶領域120cにおけるフィルタデータ124cの演算ビット幅123cはnc bitとする。それぞれの中間層の演算ビット幅na、 nb、 ncは必ずしも一致しない事実があり、画像認識装置100のフィルタデータ記憶領域107にフィルタデータを格納する場合は、それぞれの中間層の演算ビット幅na、 nb、 ncの大きさに応じてフィルタデータを保存することで記憶領域を効率的に利用可能である。
【００４２】
図６は、本実施例におけるそれぞれの中間層のフィルタデータのビット数の決定処理フローを示す図である。このフローでは、最初所定ビット（例えば32bit）でフィルタデータを通常の方法で学習し、その後、各中間層のフィルタデータのビット数を減少させ、要求認識精度が維持できるかどうかを確認していく。そして、要求認識精度が維持できるできるだけ小さなビット数で、各中間層のフィルタデータのビット数を設定する。このため、各層において図６の処理を行う。
【００４３】
ステップ150: 畳込みニューラルネットワークの学習により、フィルタデータすべてを32bitの単精度浮動小数点数で学習する。
【００４４】
ステップ151: 演算ビット数を n=31 bitに設定する。
【００４５】
ステップ152: 着目している中間層のフィルタデータすべての演算ビット数を演算精度まで削減する。ステップ150で求めた32bitの単精度浮動小数点数のデータタイプのフィルタデータのLSB(Least significant bit)から(32−n)bitをすべて”0”とする。このときフィルタデータの丸め方として最近点丸めを用いる。
【００４６】
ステップ153: 着目している中間層の演算ビット数を削減した畳込みニューラルネットワークの認識精度を求める。学習テストデータとして定義されるすべての画像データの認識をバッチ処理で行い、認識精度を取得する。
【００４７】
ステップ154: ステップ153で求めた認識精度がアプリケーションの要求認識精度132以上でかつ演算ビット数が0でないならステップ155に進む。そうでないなら、ステップ156に進む。
【００４８】
ステップ155: n=n−1とし、演算ビット数を1bit削減する。
【００４９】
ステップ156: n bitで要求認識精度132を満足しなかったため、(n+1)bit以上をフィルタデータのビット数に決定する。
【００５０】
図７は、本実施例における演算ユニット104内部のデコード演算モジュール109と畳込み演算・全結合演算モジュール110の構成を示す図である。演算ユニット104は複数の畳込み演算・全結合演算モジュール110を含み、全体で１つの層を構成する。また、各演算モジュールを相互接続するバス160が存在し、各演算モジュールが演算データを交換するために使用される。演算ユニット104内部のバスは画像認識装置100内部のバス105と接続しており、演算データ記憶領域103と演算データの交換が可能である。畳込み演算・全結合演算モジュール110は、１つのモジュールを、入力レジスタ163に格納するデータを変更してパラメータを変更することにより、異なる中間層として利用することできる。ただし、複数備えていても良い。
【００５１】
デコード演算モジュール109は内部にフィルタデータを一時保存するためのレジスタ162と、フィルタデータのデコードを行うためのデコード処理部161を持つ。畳込み演算・全結合演算モジュール110は内積演算を実行する演算モジュールであり、入力レジスタ163と乗算器164と加算器165と出力レジスタ166を持つ。入力レジスタ163は計(2N+1)個で奇数個あり、フィルターデータを保持するレジスタＦと、前の層の演算結果を保持するレジスタＤを含む。入力レジスタ163は、演算ユニット104内部のバス160と接続しバス160から入力データを受け取り保持する。これら入力レジスタ163は1個をのぞき全てが乗算器164の入力に接続し、残りの1個は加算器165の入力に接続する。乗算器164の入力に接続する2N個の入力レジスタ163は半数のN個＋1個（レジスタＦ)は中間層のフィルタデータを受け取って保持し、残り半数のN個（レジスタＤ）は演算データ記憶領域103における一時記憶領域106に保存された演算中間結果を受け取って保持する。畳込み演算・全結合演算モジュール110はN個の乗算器と加算器を持つ。N個の乗算器はそれぞれがフィルタデータと演算中間結果の積を計算し出力する。N個の加算器は、N個の乗算器の結果と1個の入力レジスタの総和を計算し、その結果は出力レジスタ166に保存される。出力レジスタ166に保存された演算データは演算ユニット104内部のバス160を通じて他の記憶領域もしくは演算モジュールに転送される。
【００５２】
図８は、本実施例におけるデコード演算モジュール109が畳込み層1のフィルタデータ124aをデコードする様子を示すタイミングチャートである。本タイミングチャートでデコードの対象となるデータは、図３に示した畳込み層1のフィルタデータ記憶領域120aのi番目のバンク121でj番目のアドレス122に格納されている3つのフィルタデータであるデータp 124a_p、 データq 124a_q、 データr 124a_rである。
【００５３】
まず最初に、演算ユニット104内部の演算制御モジュール108がアドレス122に格納されている3つのフィルタデータp、 q、 rをデコード演算モジュール109内部のレジスタ162に転送するよう指示を出す。これにより1サイクル目170に演算ユニット内部のバス160はアドレス122に格納されているデータと同期し、2サイクル目171にはデコード演算モジュール109内部のレジスタ162のデータとバス160のデータが同期する。
【００５４】
デコード演算モジュール109内部のデコード処理部161はフィルタデータ124aのビット幅123aの情報を用いて上位からna bitが1つ目のデータp 124a_pであることを検出し、バス160を通じて畳込み演算・全結合演算モジュール110内部の入力レジスタ163pにデータp 124a_pを転送する。またデコード処理部161はデータp 124a_pの隣のna bitが2つ目のデータq 124a_qであることと更に隣のna bitが3つ目のデータr 124a_rであることを検出し、それぞれを畳込み演算・全結合演算モジュール110内部の入力レジスタ163q、 163rに転送する。これによって3サイクル目にバス160はデータp 124a_pと同既し、4サイクル目にバス160と入力レジスタ163pはそれぞれデータq 124a_qとバス160と同期し、5サイクル目にバス160と入力レジスタ163qはそれぞれデータr 124rとバス160と同期し、6サイクル目には入力レジスタ163rはバス160と同期する。
【００５５】
なお、上記で用いるビット幅の情報は、図１に示したような各層毎のデータタイプの情報を、演算データ記憶領域103に記憶しておき、デコード演算モジュール109が参照することによって実現される。あるいは、情報は一括して演算制御モジュール108が管理することにしてもよい。また、この情報は、各層のフィルタのフィルタデータ個数mや、該当するフィルタデータが一つのアドレスに格納されている個数nを含んでいても良い。また、各レジスタの大きさや、その他の記憶領域の管理に関する情報を含んでいても良い。
【００５６】
図９は、本実施例における画像認識装置100の処理手順を示すフローチャートである。
【００５７】
ステップ180: 画像認識装置100は入力データである画像101を受け取り、演算データ記憶領域103内部の一時記憶領域106に格納する。画像データは、畳込みニューラルネットワークにおける入力層INに相当する。
【００５８】
ステップ181: 畳込み演算・全結合演算モジュール110を用いてフィルタデータによる特徴量抽出を行う。畳込みニューラルネットワークにおける畳込み層に相当する。詳細は後ほど説明する。
【００５９】
ステップ182: 演算データ記憶領域103内部の一時記憶領域106に格納されている畳込み演算の結果や全結合演算の結果に対して、活性化演算モジュール111やプーリング演算モジュール112を適用する。畳込みニューラルネットワークにおける活性化層やプーリング層に相当する演算を実行する。
【００６０】
ステップ183: 演算データ記憶領域103内部の一時記憶領域106に格納されている中間層データに対して、正規化演算モジュールを適用する。畳込みニューラルネットワークにおける正規化層に相当する演算を実行する。
【００６１】
ステップ184: 畳込み演算・全結合演算モジュール110を用いてフィルタデータによる特徴量抽出を行う。畳込みニューラルネットワークにおける全結合層に相当する。詳細は後ほど説明する。
【００６２】
ステップ185: 出力層の中で最大値を持つ要素のインデックスを求め、認識結果102として出力する。
【００６３】
図１０は、本実施例における畳込み演算の処理フロー181を示す図である。
【００６４】
ステップ190: ループ変数を i=1 と初期化する。
【００６５】
ステップ191: 畳込み層のi枚目のフィルタを選択する。
【００６６】
ステップ192: フィルタデータのデコードを行う。詳細は後ほど説明する。
【００６７】
ステップ193: 演算データ記憶領域103内部の一時記憶領域106に格納されている中間層のデータを、畳込み演算・全結合演算モジュール110の入力レジスタ163にロードする。
【００６８】
ステップ194: 畳込み演算・全結合演算モジュール110を用いて内積演算を実行する。出力レジスタ166に格納されている出力データは演算データ記憶領域103内部の一時記憶領域106に格納する。
【００６９】
ステップ195: すべての中間層データに対してフィルタを適用したならばステップ196に進む。そうでないなら、フィルタを適用する対象の中間層データを変更し、ステップ192に進む。
【００７０】
ステップ196: すべてのフィルタデータの処理が完了したならば、畳込み演算の処理フローを終了する。そうでないなら、ステップ197に進む。
【００７１】
ステップ197: ループ変数を i=i+1 と更新する。
【００７２】
以上の処理により、１つの畳込み層に対する処理が行われる。
【００７３】
図１１は、本実施例における全結合演算の処理フロー184を示す図である。図１１の処理には、図１０の処理と同じ畳込み演算・全結合演算モジュール110を用いることができ、処理の構成も類似している。本質的に同一の構成には同一の符号を付している。
【００７４】
ステップ200: 全結合層のi枚目のフィルタを選択する。
【００７５】
ステップ201: すべてのフィルタデータの処理が完了したならば、全結合演算の処理フローを終了する。そうでないなら、ステップ197に進む。
【００７６】
以上の処理により、１つの全結合層に対する処理が行われる。
【００７７】
図１２は、本実施例におけるフィルタデータのデコード処理フローのステップ192を示す図である。この処理のタイミングは図８に示したものに対応する。デコード処理フローのステップ192の結果、図７で示したレジスタＦのそれぞれに、フィルタデータの格納が完了する。
【００７８】
ステップ210: 該当するフィルタのフィルタデータ個数を参照し、m個と設定する。また、該当するフィルタデータが一つのアドレスに格納されている個数を参照し、n個とする。
【００７９】
ステップ211: 外側ループ変数jを j=1 と初期化する。
【００８０】
ステップ212: 演算制御モジュール108はj番目のアドレスに格納されたフィルタデータすべてを、画像認識装置100内部のバス105や演算ユニット104内部のバス160を通じてデコード演算モジュール109内部のレジスタ162に転送する。これにより、デコード演算モジュール109はn個のフィルタデータを取得する。
【００８１】
ステップ213: 内側ループ変数iを i=1 と初期化する。
【００８２】
ステップ214: デコード演算モジュール109が取得したn個のデータのうち、i番目のデータを畳込み演算・全結合演算モジュール110内の(2*((j−1)*n+i)−1)番目の入力レジスタ163にロードする。これにより、畳込み演算・全結合演算モジュール110内部の乗算器164は一時記憶領域106に格納されている演算中間層のデータとフィルタデータを適切に乗算し、畳込み演算・全結合演算を実行可能である。
【００８３】
ステップ215: i≦nならばステップ216に進み、そうでないならステップ217に進む。
【００８４】
ステップ216: 内側ループ変数iをi=i+1と更新する。
【００８５】
ステップ217: j≦mならばステップ218に進み、そうでないならフィルタデータのデコード処理フローを終了する。
【実施例２】
【００８６】
図１３は図３に示したフィルタデータ記憶領域120の変化の形態を示す図である。図１３が示すように、フィルタデータがアドレスの境界220をまたぐようにしてもよい。演算制御モジュール108がデータ幅n1を管理していれば、各アドレス122からデータ毎に切り出すことができる。
【実施例３】
【００８７】
図１４は図６に示したフィルタデータのビット数を決定する処理フローの他の形態例を示す図である。実施例１では浮動小数点型のフィルタデータを用いたが、実施例３では固定小数点型のフィルタデータを用いる。
【００８８】
ステップ230: 着目する全フィルタデータを32bit固定小数点数に変換する。このとき、固定小数点数の小数点の位置は全フィルタデータの中で絶対値が最大のものの小数点の位置を用いる。
【００８９】
ステップ231: 着目している中間層のフィルタデータすべての演算ビット数を演算精度まで削減する。ステップ230で求めた32bitの固定小数点数のデータタイプのフィルタデータのLSB(Least significant bit)から(32−n)bitをすべて”0”とする。このときフィルタデータの丸め方として最近点丸めを用いる。
【実施例４】
【００９０】
図１５は図１４に示したフィルタデータのビット数を決定する処理フローの変化の形態を示す図であり、再学習処理ステップ240を含めたものである。
【００９１】
ステップ240: 畳込みニューラルネットワークの学習アルゴリズムを用いて、再度フィルタデータを学習する。学習した後、フィルタデータのLSB(Least significant bit)から(32-n)bitをすべて”0”とする。このときフィルタデータの丸め方として最近点丸めを用いる。
【００９２】
本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることが可能である。また、各実施例の構成の一部について、他の実施例の構成の追加・削除・置換をすることが可能である。
【符号の説明】
【００９３】
101：画像、102：認識結果、103：演算データ記憶領域、104：演算ユニット、105：バス
【図１Ａ】
2018142049.tif 000003
【図１Ｂ】
2018142049.tif 000004
【図１Ｃ】
2018142049.tif 000005
【図２】
2018142049.tif 000006
【図３】
2018142049.tif 000007
【図４】
2018142049.tif 000008
【図５】
2018142049.tif 000009
【図６】
2018142049.tif 000010
【図７】
2018142049.tif 000011
【図８】
2018142049.tif 000012
【図９】
2018142049.tif 000013
【図１０】
2018142049.tif 000014
【図１１】
2018142049.tif 000015
【図１２】
2018142049.tif 000016
【図１３】
2018142049.tif 000017
【図１４】
2018142049.tif 000018
【図１５】
2018142049.tif 000019