IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社東芝の特許一覧 ▶ 東芝デバイス&ストレージ株式会社の特許一覧

<>
  • 特許-画像処理装置 図1
  • 特許-画像処理装置 図2
  • 特許-画像処理装置 図3
  • 特許-画像処理装置 図4
  • 特許-画像処理装置 図5
  • 特許-画像処理装置 図6
  • 特許-画像処理装置 図7
  • 特許-画像処理装置 図8
  • 特許-画像処理装置 図9
  • 特許-画像処理装置 図10
  • 特許-画像処理装置 図11
  • 特許-画像処理装置 図12
  • 特許-画像処理装置 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-06-09
(45)【発行日】2023-06-19
(54)【発明の名称】画像処理装置
(51)【国際特許分類】
   G06N 3/044 20230101AFI20230612BHJP
   G06N 3/08 20230101ALI20230612BHJP
   G06T 1/40 20060101ALI20230612BHJP
【FI】
G06N3/044
G06N3/08
G06T1/40
【請求項の数】 7
(21)【出願番号】P 2020046914
(22)【出願日】2020-03-17
(65)【公開番号】P2021149333
(43)【公開日】2021-09-27
【審査請求日】2021-12-07
(73)【特許権者】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(73)【特許権者】
【識別番号】317011920
【氏名又は名称】東芝デバイス&ストレージ株式会社
(74)【代理人】
【識別番号】110002907
【氏名又は名称】弁理士法人イトーシン国際特許事務所
(72)【発明者】
【氏名】小崎 南羽
【審査官】金田 孝之
(56)【参考文献】
【文献】特開2019-169131(JP,A)
【文献】特開2020-017274(JP,A)
【文献】特表2019-509566(JP,A)
【文献】特開2019-079446(JP,A)
【文献】Seok-Gyu Choi, et al.,A Study on Person Re-Identification System using Enhanced RNN,The Journal of The Institute of Internet, Broadcasting and Communication (IIBC),Vol. 17, No. 2,The Institute of Internet, Broadcasting and Communication,2017年04月30日,Pages 15-23,<URL: https://koreascience.kr/article/JAKO201715853765703.page>,<DOI: 10.7236/JIIBC.2017.17.2.15>
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00
G06T 1/40
G06T 7/00
(57)【特許請求の範囲】
【請求項1】
画像データが入力される第1のプロセッサと、
前記第1のプロセッサ内に設けられたバッファと、
前記画像データの複数の画素データと、前記バッファに格納された再帰型ニューラルネットワーク演算の演算結果の少なくとも一方を用いて、前記再帰型ニューラルネットワーク演算を行う、前記第1のプロセッサ内に設けられた第2のプロセッサと、
を有する、画像処理装置。
【請求項2】
前記再帰型ニューラルネットワーク演算の前記演算結果は、隠れ状態である、請求項1に記載の画像処理装置。
【請求項3】
前記複数の画素データは、前記第2のプロセッサにシーケンシャルに入力され、
前記第2のプロセッサは、入力された前記複数の画素データに対して、前記再帰型ニューラルネットワーク演算を逐次的に行い、前記演算結果を前記バッファに格納する、請求項1に記載の画像処理装置。
【請求項4】
前記第2のプロセッサは、前記再帰型ニューラルネットワーク演算を複数回実行する処理単位であるレイヤを、複数実行可能である、請求項3に記載の画像処理装置。
【請求項5】
前記複数のレイヤは、前記複数の画素データを入力して前記再帰型ニューラルネットワーク演算を実行する第1の処理単位と、前記第1の処理単位において得られた前記演算結果を入力して前記再帰型ニューラルネットワーク演算を実行する第2の処理単位と、含む、請求項4に記載の画像処理装置。
【請求項6】
前記第1の処理単位において得られた前記演算結果は、前記第2の処理単位において、設定されたオフセットだけ遅れたステップで、前記バッファから前記第2のプロセッサへ与えられる、請求項5に記載の画像処理装置。
【請求項7】
前記画像データは、n行m列の画素データからなり、
前記第2のプロセッサは、隣り合う2つの行間において、前記演算結果に対して所定の演算を行う、請求項3に記載の画像処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、画像処理装置に関する。
【背景技術】
【0002】
画像データに対する認識処理などを、ニューラルネットワークにより実現する技術がある。例えば、畳み込みニューラルネットワーク(Convolutional Neural Network:CNN。以下、CNNという)におけるカーネル演算は、画像の画像データ全体をDRAMなどのオフチップメモリ中のフレームバッファに保持した後に、その保持された画像データ全体に対して所定サイズのウインドウをスライドさせながら実行される。
【0003】
そのため、画像データ全体をオフチップメモリに格納すること、及びカーネル演算毎に行われる特徴マップの書き込み及び読み出しのためのオフチップメモリへのアクセスに時間が掛かってしまうことから、CNN演算のレイテンシは、大きい。画像処理プロセッサ(Image Signal Processor)のような装置では、レイテンシが小さいことが望ましい。
【0004】
CNN演算のレイテンシを小さくするために、フレームバッファのサイズよりも小さいラインバッファを用いることもできるが、カーネル演算のためのラインバッファへのアクセスが多く発生するため、高速アクセスが可能なメモリをラインバッファに用いる必要があり、画像処理装置のコスト高になる。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2019-46453号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
そこで、実施形態は、レイテンシが小さくかつ低コストで実現できる画像処理装置を提供することを目的とする。
【課題を解決するための手段】
【0007】
実施形態の画像処理装置は、画像データが入力される第1のプロセッサと、前記第1のプロセッサ内に設けられたバッファと、前記画像データの複数の画素データと、前記バッファに格納された再帰型ニューラルネットワーク演算の演算結果の少なくとも一方を用いて、前記再帰型ニューラルネットワーク演算を行う、前記第1のプロセッサ内に設けられた第2のプロセッサと、を有する。
【図面の簡単な説明】
【0008】
図1】実施形態に関わる画像処理装置のブロック図である。
図2】実施形態に関わる、画像処理プロセッサの処理内容を説明するための図である。
図3】実施形態に関わる、画像処理プロセッサの構成を示すブロック図である。
図4】実施形態に関わる、再帰型ニューラルネットワークセルプロセッサの構成図である。
図5】実施形態に関わる、入力画像データからストリームデータへの変換を説明するための図である。
図6】実施形態に関わる、入力画像データに含まれる複数の画素値に対する再帰型ニューラルネットワークセルの処理順番を説明するための図である。
図7】変形例1に関わる、各行の最終列の出力値に対するラインエンドセルの処理順番を説明するための図である。
図8】変形例2に関わる、入力画像データに含まれる複数の画素値に対する再帰型ニューラルネットワークセルの処理順番を説明するための図である。
図9】畳み込みニューラルネットワークにおける受容野(Receptive Field)を説明するための図である。
図10】実施形態における受容野を説明するための図である。
図11】畳み込みニューラルネットワークと再帰型ニューラルネットワークにおける受容野の範囲の違いを説明するための図である。
図12】変形例2に関わる、再帰型ニューラルネットワークセルの入力ステップを説明するための図である。
図13】変形例2に関わる、受容野の設定範囲を説明するための図である。
【発明を実施するための形態】
【0009】
以下、図面を参照して実施形態を説明する。
(構成)
図1は、本実施形態に関わる画像処理装置のブロック図である。本実施形態の画像処理装置が用いられる画像処理システム1は、カメラ装置からの画像データを処理して、画像認識などの処理を行い、その処理結果の情報を出力する。
【0010】
画像処理システム1は、画像処理プロセッサ(Image Signal Processor:ISP。以下、ISPという)11と、オフチップメモリ12と、プロセッサ13を含む。
【0011】
ISP11は、MIPI(Mobile Industry Processor Interface)CSI(Camera Serial Interface)規格などに沿ったインターフェースにより、カメラ装置(図示せず)と接続されている。ISP11は、カメラ装置のイメージセンサ14からの撮像信号を受けて、撮像信号に対して所定の処理を行い、所定の処理の結果データを出力する。すなわち、プロセッサであるISP11には、画像データの複数の画素データがシーケンシャルに入力される。ここでは、ISP11は、撮像素子であるイメージセンサ14からの撮像信号(以下、入力画像データという)IGを入力して、結果データとして、画像データ(以下、出力画像データという)OGを出力する。例えば、ISP11は、入力画像データIGに対してノイズ除去などを行い、ノイズなどのない出力画像データOGを出力する。
【0012】
なお、イメージセンサ14からの入力画像データIGの全てが、ISP11に入力されて、入力画像データIGの全てに対して、後述するRNN演算が実行されるようにしてもよいし、入力画像データIGの一部に対して、後述するRNN演算が実行されるようにしてもよい。
【0013】
ISP11は、ステートバッファ21と、再帰型ニューラルネットワーク(Recurrent Neural Network:RNN。以下、RNNという)による所定の演算を繰り返しながら実行するRNNセルプロセッサ22と、を含む。ISP11の構成については、後述する。
【0014】
オフチップメモリ12は、DRAMなどのメモリである。ISP11において生成され、ISP11から出力される出力画像データOGは、オフチップメモリ12に格納される。
【0015】
プロセッサ13は、オフチップメモリ12に格納された出力画像データOGに基づいて認識処理などを行う。プロセッサ13は、認識処理などによる結果データRDを出力する。よって、ISP11、オフチップメモリ12及びプロセッサ13は、例えば、画像に対して画像認識処理などを行う画像認識装置(図1の点線で示す)2を構成する。
【0016】
図2は、ISP11の処理内容を説明するための図である。図2に示すように、ISP11は、イメージセンサ14からの入力画像データIGに対して、ノイズ除去などの所定の処理を、RNNセルプロセッサ22(後述)を用いて行い、出力画像データOGを生成する。
【0017】
例えば、画像認識装置2が、プロセッサ13により出力画像データOGに基づいて認識処理などを実行するとき、出力画像データOGはノイズが除去されたデータであるので、プロセッサ13における認識処理などの精度の向上が期待できる。
【0018】
図3は、ISP11の構成を示すブロック図である。図4は、RNNセルプロセッサ22の構成図である。ISP11は、ステートバッファ21、RNNセルプロセッサ22及びピクセルストリームデコーダ23を含む。ピクセルストリームデコーダ23は、入力画像データIGをストリームデータSDに変換してRNNセルプロセッサ22へ出力する回路である。
【0019】
図5は、入力画像データIGからストリームデータSDへの変換を説明するための図である。ここでは、説明を簡単にするために、図5では、入力画像データIGの画像は、6行の画像データからなる。各行は、複数の画素データを含む。すなわち、画像は、複数行(ここでは、6行)で複数列の画素データからなる。
【0020】
ピクセルストリームデコーダ23は、イメージセンサ14からの入力画像データIGを受信すると、受信した入力画像データIGの複数の画素データを所定の順番のストリームデータSDに変換する。
【0021】
ピクセルストリームデコーダ23は、1行目の1列目の画素(すなわち最上行の左端の画素)から1行目の最終列の画素(すなわち最上行の右端の画素)の行データL1、行データL1に続いて2行目の1列目の画素(すなわち上から2行の左端の画素)から2行目の最終列の画素(すなわち2行の右端の画素)の行データL2、・・・、最終行目である6行目の1列目の画素(すなわち最下行の左端の画素)から6行目の最終列の画素(すなわち最下行の右端の画素)のデータ列LLまでの複数の画素データからなるストリームデータSDを、入力画像データIGから生成して出力する。
【0022】
よって、ピクセルストリームデコーダ23は、入力画像データIGをストリームデータSDに変換してRNNセルプロセッサ22へ出力する回路である。
【0023】
図4に示すように、RNNセルプロセッサ22は、1つのRNNセル31を含むプロセッサである。RNNセル31は、単純RNNセル(Simple RNN Cell)であり、2つの入力値IN1,IN2に対して、所定の演算を行って得られた隠れ状態(hidden state)を、2つの出力値OUT1,OUT2として出力するハードウエア回路である。
【0024】
なお、ここでは、RNNセルプロセッサ22は、1つのRNNセル31を含んでいるが、2以上のRNNセル31を含んでいてもよい。あるいは、RNNセル31の数は、後述するレイヤの数と同じでもよい。
【0025】
RNNセル31の入力値IN1は、il,tである。lは、レイヤを示し、tは、ステップを示す。RNNセル31の入力値IN2は、隠れ状態hl,t-1である。RNNセル31の出力値OUT1は、隠れ状態hl,tであり、次のレイヤ(l+1)のステップtにおける入力値IN1(すなわちil+1,t)となる。RNNセル31の出力値OUT2は、隠れ状態hl,tであり、同じレイヤの次のステップ(t+1)のRNNセル31の入力値IN2となる。
【0026】
ステップtはタイムステップとも呼ばれ、RNNにシーケンシャルデータが1つ入力され隠れ状態が更新されるごとに増える数字であり、隠れ状態や入出力のインデックスとして割り当てられ、現実の時刻とは必ずしも同一にはならない仮想的な単位である。
【0027】
図3に示すように、RNNセル31は、RNN演算に用いる各種パラメータ(点線で示す)を、オフチップメモリ12から読み出し、RNNセル31の内部に保持することが可能となっている。パラメータは、後述するレイヤ毎の各RNN演算における重みパラメータw及びバイアス値bなどを含む。
【0028】
なお、RNNセル31は、中央処理装置(CPU)により実行されるソフトウエアにより実現してもよい。
【0029】
RNNセル31は、後述するレイヤ毎に応じた動作を実行するが、最初のレイヤ(第1レイヤ)では、ストリームデータSDが、RNNセル31の入力値IN1として順番に入力される。RNNセル31は、所定の演算を行い、演算結果である隠れ状態hl,tを出力値OUT1、OUT2を生成してステートバッファ21に出力する。
【0030】
各レイヤにおいて得られた各出力値OUT1,OUT2は、ステートバッファ21中の所定の記憶領域に格納される。ステートバッファ21は、例えばラインバッファである。
【0031】
ステートバッファ21は、ISP11内に設けられているので、RNNセル31は、ステートバッファ21へのデータの書き込み及び読み出しを高速に行うことできる。RNNセル31は、所定の演算を行って得られた隠れ状態hは、ステートバッファ21に格納する。ステートバッファ21は、ラインバッファを含むSRAMであり、少なくともストリームデータの数分のデータを格納するバッファである。
【0032】
RNNセル31は、複数のレイヤ演算を実行可能である。ここでは、RNNセル31は、ストリームデータSDを入力として所定の演算を行う第1レイヤ演算と、第1レイヤにおける所定の演算の演算結果である隠れ状態hを入力として所定の演算を行う第2レイヤ演算と、第2レイヤにおける所定の演算の演算結果である隠れ状態hを入力として所定の演算を行う第3レイヤ演算と、等々を実行することができる。
【0033】
RNNセル31における所定の演算について説明する。l(エル)番目のレイヤ演算では、RNNセル31は、あるステップtにおいて、入力値IN1を画素データiとし、所定の演算としての非線形型関数である活性化関数tanhを用いて、出力値OUT1,OUT2を出力する。出力値OUT1,OUT2は、隠れ状態htである。ここでは、図4に示すように、隠れ状態hl,tは、次の式(1)により算出される。
【0034】
l,t=tanh(wl,ihl,t+wl,hhl,t-1+b) ・・・(1)
ここで、wl,ih及びwl,hhは、それぞれ次の式(2)、(3)で表される重みパラメータである。
ここで、Re×d及びRe×eは、e行d列及びe行e列の実行列による空間であり、いずれも実数による行列であることを示している。
【0035】
また、入力値(画素データil,t)は及び出力値(隠れ状態hl,t)は、それぞれ次の式(4)、(5)で表される。
ここで、Rは、d次元の実数空間を示し、Rは、e次元の実数空間を示し、いずれも実数によるベクトルであることを示している。
【0036】
上述した非線形型関数の各重みパラメータの値は、RNNの学習により最適化される。
【0037】
画素データil,tは、入力ベクトルであり、例えばRGB画像が入力される場合は、3次元ベクトルであり、中間特徴マップの場合は、そのチャンネル数である。隠れ状態hl,tは、出力ベクトルである。d,eは、それぞれ、入力ベクトルと出力ベクトルの次元を示す。lは、レイヤ番号であり、シーケンシャルデータのインデックスである。bは、バイアス値である。
【0038】
なお、図4では、RNNセル31は、入力値IN1と、前の画素からの出力値を入力値IN2とから、同じ値の2つの出力値OUT1、OUT2を生成して、出力しているが、RNNセル31は、互いに異なる2つの出力値OUT1,OUT2を出力するようにしてもよい。
【0039】
第2レイヤ演算では、RNNセル31は、入力値IN1を第1レイヤの出力値OUT1とし、所定の演算としての非線形型関数である活性化関数tanhを用いて、出力値OUT1,OUT2を出力する。
【0040】
第2レイヤ演算の次にさらに第3、第4等のレイヤ演算が行われるときは、第3、第4等のレイヤ演算では、第2レイヤ演算と同様に、RNNセル31は、入力値IN1を前のレイヤの出力値OUT1とし、所定の演算としての非線形型関数である活性化関数tanhを用いて、出力値OUT1,OUT2を出力する。
(作用)
次に、ISP11の動作について説明する。ここでは、3つのレイヤを有する例を説明する。上述したように、ピクセルストリームデコーダ23は、入力画像データIGを、第1行目L1の左端の画素から右端の画素までの複数の画素データ、第2行目L2の左端の画素から右端の画素までの複数の画素データ、・・・、最終行目のデータ列LL(すなわちL6)の左端の画素から右端の画素までの複数の画素データの順(矢印Aで示す順番)に並べたストリームデータSDを出力する(図5)。
【0041】
第1レイヤでは、RNNセル31への最初の入力値IN1は、ストリームデータSDの最初のデータ(すなわち入力画像データIGの1行目の1列目の画素)であり、入力値IN2は、所定のデフォルト値である。
【0042】
第1レイヤでは、RNNセル31は、最初のステップt1で、2つの入力値IN1,IN2が入力されると、所定の演算を実行して、出力値OUT1,OUT2を出力する。出力値OUT1,OUT2は、ステートバッファ21中の所定の記憶領域に格納される。第1レイヤのステップt1の出力値OUT1は、次の第2レイヤの最初のステップt1で、ステートバッファ21から読み出されて、RNNセル31の入力値IN1として用いられる。第1レイヤにおいて、ステップt1における出力値OUT2は、次のステップt2における入力値IN2として用いられる。
【0043】
以下同様にして、第1レイヤにおいて、その後の各ステップにおける出力値OUT1は、次の第2レイヤにおいて、対応するステップにおいて、ステートバッファ21から読み出されて、RNNセル31の入力値IN1として用いられる。第1レイヤにおいて、その後の各ステップにおける出力値OUT2は、次のステップにおいて、ステートバッファ21から読み出されて、RNNセル31の入力値IN2として用いられる。
【0044】
第1レイヤにおけるストリームデータSDの各画素データに対する所定の演算が終了すると、第2レイヤの処理が実行される。
第1レイヤにおける1つ目の画素データに対する所定の演算が終了すると、第2レイヤの1つ目の画素に対応する処理が実行される。
【0045】
第2レイヤでは、第1レイヤにおける最初から最後のステップまでに得られる複数の出力値OUT1が、入力値IN1としてRNNセル31にシーケンシャルに入力される。第1レイヤにおける処理と同様に、第1レイヤの第1のステップから最後のステップまでの順番で、第2レイヤにおいてRNNセル31が所定の演算を実行する。
【0046】
第2レイヤにおける第1レイヤの各出力値OUT1に対する所定の演算が終了すると、第3レイヤの処理が実行される。
第2レイヤにおける1つ目の画素データに対する所定の演算が終了すると、第3レイヤの1つ目の画素に対応する処理が実行される。
【0047】
第3レイヤでは、第2レイヤにおける最初から最後のステップまでに得られる複数の出力値OUT1が、入力値IN1としてRNNセル31にシーケンシャルに入力される。第2レイヤにおける処理と同様に、第2レイヤの第1のステップから最後のステップまでの順番で、第3レイヤにおいてRNNセル31が所定の演算を実行する。
【0048】
図6は、入力画像データIGに含まれる複数の画素値に対するRNNセル31の処理順番を説明するための図である。図6は、複数のステップにおける、RNNセル31に入力される入力値IN1,IN2とRNNセル31から出力される出力値OUT1,OUT2の流れを示す。第1レイヤではRNNセル31はRNNCell1として示され、第2レイヤではRNNセルはRNNCell2として示され、第3レイヤではRNNセルはRNNCell3として示されている。
【0049】
図6では、入力画像データIG中の行yの列xとその前の列(x-1)、(x-2)の画素データに対する処理の流れのみが示されている。
【0050】
図6に示すように、第1レイヤ(レイヤ1)の列(x-2)におけるRNNCell1の入力値IN1は、ステップtにおいて入力された画素データである。第1レイヤの列(x-2)におけるRNNCell1の入力値IN2は、第1レイヤの列(x-3)のRNNCell1の出力OUT2である。第1レイヤの列(x-2)におけるRNNCell1の出力値OUT1は、第2レイヤの列(x-2)におけるRNNCell2の入力値IN1となる。第1レイヤの列(x-2)におけるRNNCell1の出力値OUT2は、第1レイヤの列(x-1)にけるRNNCell1の入力値IN2となる。
【0051】
同様に、第1レイヤの列(x-1)におけるRNNCell1の入力値IN1は、ステップt(k+1)において入力された画素データである。第1レイヤの列(x-1)におけるRNNCell1の入力値IN2は、第1レイヤの列(x-2)におけるRNNCell1の出力OUT2である。第1レイヤの列(x-1)におけるRNNCell1の出力値OUT1は、第2レイヤの列(x-1)におけるRNNCell2の入力値IN1となる。第1レイヤの列(x-1)におけるRNNCell1の出力値OUT2は、第1レイヤの列(x)のRNNCell1の入力値IN2となる。
【0052】
第1レイヤの列(x)におけるRNNCell1の入力値IN1は、ステップt(k+2)において入力された画素データである。第1レイヤの列(x)におけるRNNCell1の入力値IN2は、第1レイヤの列(x-1)におけるRNNCell1の出力OUT2である。第1レイヤの列(x)におけるRNNCell1の出力値OUT1は、第2レイヤの列(x)におけるRNNCell2の入力値IN1となる。第1レイヤの列(x-1)におけるRNNCell1の出力値OUT2は、次のステップにおけるRNNCelllの入力値IN2として用いられる。
【0053】
以上のように、RNNプロセッサ22のRNNセル31は、入力された複数の画素データに対して、RNN演算を逐次的に行い、隠れ状態の情報をステートバッファ21に格納する。隠れ状態は、RNNセル31の出力である。
【0054】
第2レイヤ(レイヤ2)の列(x-2)におけるRNNCell2の入力値IN1は、第1レイヤの列(x-2)におけるRNNCell1の出力値OUT1である。第2レイヤの列(x-2)におけるRNNCell2の入力値IN2は、第2レイヤの列(x-3)におけるRNNCell2の出力OUT2である。第2レイヤの列(x-2)におけるRNNCell2の出力値OUT1は、第3レイヤの列(x-2)におけるRNNCell3の入力値IN1となる。第2レイヤの列(x-2)におけるRNNCell2の出力値OUT2は、第2レイヤの列(x-1)におけるRNNCell2の入力値IN2となる。
【0055】
同様に、第2レイヤの列(x-1)におけるRNNCell2の入力値IN1は、第1レイヤの列(x-1)におけるRNNCell1の出力値OUT1である。第2レイヤの列(x-1)におけるRNNCell2の入力値IN2は、第2レイヤの列(x-3)におけるRNNCell2の出力OUT2である。第2レイヤの列(x-1)におけるRNNCell2の出力値OUT1は、第3レイヤの列(x-1)におけるRNNCell3の入力値IN1となる。第2レイヤの列(x-1)におけるRNNCell2の出力値OUT2は、第2レイヤの列(x)におけるRNNCell2の入力値IN2となる。
【0056】
第2レイヤの列(x)におけるRNNCell2の入力値IN1は、第1レイヤの列(x)におけるRNNCell1の出力値OUT1である。第2レイヤの列(x)におけるRNNCell2の入力値IN2は、第2レイヤの列(x-1)におけるRNNCell2の出力OUT2である。第2レイヤの列(x)におけるRNNCell2の出力値OUT1は、第3レイヤの列(x)におけるRNNCell3の入力値IN1となる。第2レイヤの列(x)におけるRNNCell2の出力値OUT2は、次のステップにおけるRNNCell2の入力値IN2として用いられる。
【0057】
第3レイヤ(レイヤ3)の列(x-2)におけるRNNCell3の入力値IN1は、第2レイヤの列(x-2)のRNNCell2の出力値OUT1である。第3レイヤの列(x-2)におけるRNNCell3の入力値IN2は、第3レイヤの列(x-3)のRNNCell3の出力OUT2である。第3レイヤの列(x-2)におけるRNNCell3の出力値OUT1は、ここでは、ソフトマックスレイヤに入力され、ソフトマックスレイヤから、出力画像データOGが出力される。第3レイヤの列(x-2)におけるRNNCell3の出力値OUT2は、第3レイヤの列(x-1)のRNNCell3の入力値IN2となる。
【0058】
同様に、第3レイヤの列(x-1)におけるRNNCell3の入力値IN1は、第2レイヤの列(x-1)のRNNCell2の出力値OUT1である。第3レイヤの列(x-1)におけるRNNCell3の入力値IN2は、第3レイヤの列(x-2)のRNNCell3の出力OUT2である。第3レイヤの列(x-1)におけるRNNCell3の出力値OUT1は、ここでは、ソフトマックスレイヤに入力され、ソフトマックスレイヤから、出力画像データOGが出力される。第3レイヤの列(x-1)におけるRNNCell3の出力値OUT2は、第3レイヤの列(x)におけるRNNCell3の入力値IN2となる。
【0059】
第3レイヤの列(x)におけるRNNCell3の入力値IN1は、第2レイヤの列(x)におけるRNNCell2の出力値OUT1である。第3レイヤの列(x)におけるRNNCell3の入力値IN2は、第3レイヤの列(x-1)におけるRNNCell3の出力OUT2である。第3レイヤの列(x)におけるRNNCell3の出力値OUT1は、ここでは、ソフトマックスレイヤに入力され、ソフトマックスレイヤから、出力画像データOGが出力される。第3レイヤの列(x)のRNNCell3の出力値OUT2は、次のステップにおけるRNNCell3の入力値IN2として用いられる。
【0060】
よって、第3レイヤの出力は、複数のステップで得られた複数の出力値OUT1のデータである。第3レイヤの出力は、ソフトマックスレイヤに入力される。ソフトマックスレイヤの出力は、y行x列の画像データに変換されて、出力画像データOGとして、オフチップメモリ12に格納される。
【0061】
以上のように、RNNセルプロセッサ22は、画像データの複数の画素データと、ステートバッファ21に格納されたRNN演算の演算結果である隠れ状態の少なくとも一方を用いて、再帰型ニューラルネットワーク演算を行う。RNNプロセッサ22は、RNN演算を複数回実行する処理単位であるレイヤを、複数実行可能である。複数のレイヤは、複数の画素データを入力してRNN演算を実行する第1の処理単位(第1レイヤ)と、第1の処理単位(第1レイヤ)において得られた隠れ状態のデータを入力してRNN演算を実行する第2の処理単位(第2レイヤ)と、含む。
【0062】
なお、上述したように、RNN演算における非線形型関数の各重みパラメータの値は、RNNの学習により最適化される。
【0063】
以上のように、上述した実施形態によれば、CNNに代えて、RNNを用いて、画像データに対して所定の処理を行っている。
【0064】
よって、画像データをオフチップメモリ12に保持した後に、画像データ全体に対して所定サイズのウインドウをスライドさせながらカーネル演算を行うという方法とは異なり、本実施形態の画像処理装置は、画像データをストリームデータSDに変換して、RNN演算を順番に実行するので、レイテンシが小さくかつ低コストで、ニューラルネットワーク演算処理が可能である。
(変形例1)
上述した実施形態では、複数行で複数列の複数の画素からなる画像データが、ストリームデータSDに変換されて、1行目1列目の画素値から最終行の最終列の画素値までを順番に1つのRNNセルプロセッサ31の入力値IN1として入力されている。
【0065】
しかし、画像データの場合、各行の第1列の画素の画素値と、その前の行の最終列の画素値との間には、特徴量の傾向は異なる。
【0066】
そこで、本変形例1では、各行の最終列の出力値OUT2を、そのまま、次の行の最初の入力値IN2としないで、所定の値に変更してから、次の行のRNNセル31の最初の入力値IN2にするラインエンドセルを追加する。
【0067】
ラインエンドセルとしては、上述した非線形関数とは別の非線形関数の演算を行うように、RNNセル31の実行内容を変更することで、RNNセル31を用いてもよいし、あるいは図3において点線で示すように、RNNセルプロセッサ22内に設けた、RNNセル31とは別の演算セルとしてのラインエンドセル31aを用いてもよい。
【0068】
ラインエンドセルの非線形関数の各重みパラメータの値も、RNNの学習により最適化される。
【0069】
図7は、各行の最終列の出力値OUT2に対するラインエンドセル31aの処理順番を説明するための図である。ここでは、画像データの各行は、W個の画素値を有する。すなわち、画像データは、W列を有する。
【0070】
図7に示すように、第1列を0としたときの最終列(W-1)の画素データに対して、RNNセル31が所定の演算を実行した後、出力値OUT2は、ラインエンドセル31aに入力される。
【0071】
図7に示すように、ラインエンドセル31aは、レイヤ毎に、各行の最終列(W-1)のRNNセル31の出力値OUT2に対して処理を行う。図7において、第1レイヤにおけるラインエンドセル31aは、LineEndCell1として示し、第2レイヤにおけるラインエンドセル31aは、LineEndCell2として示し、第3レイヤにおけるラインエンドセル31aは、LineEndCell3として示している。
【0072】
第1レイヤにおいて、y行目のラインエンドセル31aは、第1レイヤのy行目の最終列のRNNCelllの出力値OUT2(h1(W-1,y))を入力して、演算結果の出力値としての隠れ状態h1(line)を、次の(y+1)行目のRNNCell1の入力値IN2としている。
【0073】
同様に、第2レイヤにおいても、y行目のラインエンドセル31aは、第2レイヤのy行目の最終列のRNNCell2の出力値OUT2(h2(W-1,y))を入力して、演算結果の出力値としての隠れ状態h2(line)を、次の(y+1)行目のRNNCell2の入力値IN2としている。
【0074】
同様に、第3レイヤにおいても、y行目のラインエンドセル31aは、第3レイヤのy行目の最終列のRNNCell3の出力値OUT2(h3(W-1,y))を入力して、演算結果の出力値としての隠れ状態h3(line)を、次の(y+1)行目のRNNCell3の入力値IN2としている。
【0075】
以上のように、RNNセルプロセッサ22は、画像データが、n行m列の画素データからなるとき、RNNプロセッサ22は、隣り合う2つの行間において、隠れ状態に対して所定の演算を行うラインエンドセル31aを有する。
【0076】
よって、ラインエンドセル31aは、各レイヤにおいて、行の変わり目に設けられている。そして、ラインエンドセル31aは、入力された出力値OUT2を変更する処理をして、変更された出力値を、次の行の処理を行うときのRNNセル31の入力値IN2となる。
【0077】
以上のように、ラインエンドセル31aにより、各行の最終列の出力値OUT2を変更することにより、各行の最終の画素値と次の行の最初の画素値との間の特徴量の傾向の違いの影響を排除することができ、ひいてはノイズ除去などの精度の向上が期待できる。
(変形例2)
上述した実施形態では、RNNセル31の入力値IN1は、全てのレイヤ間で一致したステップで取得されている。これに対して、本変形例2では、CNNにおける受容野(Receptive Field)と同様な受容野をRNN演算が有するように、RNNセル31の入力値IN1は、レイヤ間で一致したステップで取得されず、オフセットを持って遅れて取得される。言い換えれば、本変形例2の画像処理装置は、レイヤ間でオフセットを持ってRNN演算が実行されるように構成される。
【0078】
図8は、本変形例2に関わる、入力画像データIGに含まれる複数の画素値に対するRNNセル31の処理順番を説明するための図である。
【0079】
図8に示すように、ストリームデータSDの画素データiは、第1レイヤにおいてシーケンシャルに処理されている。しかし、第2レイヤにおいては、RNNCell2の入力値IN1として、画像のx方向においてオフセットu1だけ遅れて、画像のy方向においてオフセットv1だけ遅れてRNNCell1の出力値OUT1を使用している。なお、オフセット情報は、オフチップメモリ12に書き込まれ、パラメータとして、オフチップメモリ12からRNNセルプロセッサ22へ書き込まれる。
【0080】
図8では、RNNCell2の入力値IN1は、次の式(6)で表される。
さらに、第3レイヤにおいては、RNNCell3の入力値IN1は、画像のx方向においてオフセット(u1+u2)だけ遅れて、画像のy方向においてオフセット(v1+v2)だけ遅れてRNNCell1の出力値OUT1を使用している。すなわち、図8では、RNNCell3の入力値IN1は、次の式(7)で表される。
第3レイヤの各RNNCell3の出力値OUT1は、次の式(8)で表される。
図9は、CNNにおける受容野(Receptive Field)を説明するための図である。受容野は、カーネル演算に影響を与える入力値の範囲である。入力画像データIGに対してCNN演算を行うレイヤLY1により、出力画像データOGが生成される。この場合、レイヤLY1におけるカーネルサイズR1よりも広い範囲R2が、出力画像データの出力値P1に影響を与えている。よって、CNNの場合、CNN演算を繰り返すと、出力値を得られるために直接的あるいは間接的に参照している入力値の範囲である受容野は広くなる。
【0081】
これに対して、上述した実施形態では、RNN演算を行っているため、レイヤ毎に演算ステップにおいて、そのステップよりも前に行われたRNN演算の結果の範囲が、受容野ということができる。
【0082】
図10は、上述した実施形態における受容野を説明するための図である。図11は、CNNとRNNにおける受容野の範囲の違いを説明するための図である。RNNセル31が、レイヤLY11において入力画像データIGのストリームデータSDに対してRNN演算を行うと、図10において入力画像データIGにおいて点線で示す範囲R12が、受容野である。レイヤLY11の出力値P1の受容野は、出力値P1の演算ステップよりも前のステップの演算結果が範囲R11となる。
【0083】
そのため、上述した実施形態では、図9で示したCNNのような出力値P1の周囲の画素値の演算結果は、RNN演算においては用いられない。図11に示すように、RNNにおける受容野RNNRは、CNNにおける受容野CNNRとは異なる。
【0084】
そこで、上述した実施形態においても、CNNと同様に、受容野を考慮したRNN演算を行うために、あるレイヤのあるステップにおいて用いるRNNセル31の入力値IN1が、その前のレイヤにおいてそのステップと異なるステップにおけるRNNセル31の隠れ状態h(出力値)となるように、RNNセル31は、ステートバッファ32から読み出す入力値IN1の範囲をずらしている。すなわち、第1の処理単位である第1レイヤにおいて得られた隠れ状態のデータは、第2の処理単位である第2レイヤにおいて、設定されたオフセットだけ遅れたステップで、ステートバッファ21からRNNプロセッサ22へ与えられる。
【0085】
図8に示すように、第2レイヤでは、RNNCell2の入力値IN1は、x方向にu1だけかつy方向にv1だけオフセットした画素位置の出力値OUT1となっている。すなわち、第2レイヤでは、RNNCell2は、画像データの横方向及び縦方向において、それぞれ所定の値(u1,v1)だけずれた画素位置のおける第1レイヤのRNN演算の出力値OUT1が、第2レイヤのRNNCell2の入力値IN1となっている。
【0086】
また、第3レイヤでは、RNNCell3の入力値IN1は、第2レイヤの出力画像においてx方向に(u1+u2)だけかつy方向に(v1+v2)だけオフセットした出力値OUT1となっている。
【0087】
そして、RNNCell3の出力値OUT1は、第2レイヤの出力画像においてx方向に(u1+u2+u3)だけかつy方向に(v1+v2+v3)だけオフセットした出力値となっている。
【0088】
図12は、RNNセル31の入力ステップを説明するための図である。図12に示すように、最初の画素データi1(0,0)を入力値IN1としたRNNCell1の出力値OUT1は、第2レイヤにおいて、オフセット値に対応するステップtにおいて、入力値IN1として用いられる。第2レイヤにおけるオフセット値は、第1レイヤにおいてストリームデータSDの画素データの取得ステップに対するステップ差である。ここでは、オフセット値は、1行1列目の画素の位置(0,0)から、u1行v1列目の画素位置(u1、v1)までのステップ差に応じた値である。
【0089】
よって、第2レイヤの最初のステップtでは、RNNCell2の入力値IN1は、第1レイヤにおける最初のステップtからオフセット値だけ後のステップにおける出力値OUT1となる。
【0090】
さらに、オフセット値はレイヤ間で同じでもよいが、ここでは、レイヤ毎に異なっている。図12に示すように、第3レイヤにおけるステップtのRNNセル31の出力値OUT1は、画素位置(u11、v11)分のオフセット値が、第3レイヤにおけるRNNセル31の入力値IN1となっている。
【0091】
図13は、本変形例2における受容野の設定範囲を説明するための図である。レイヤLY21の入力値INのオフセット値を設ける場合、パディング(padding)により入力画像データIGに対して所定の領域AAが追加される。そして、図13に示すように、出力値P1は、受容野RNNR内の入力値P2の影響を受けて出力されることになる。よって、出力値P1は、レイヤLY21の受容野RNNRの出力値の影響を受け、かつレイヤLY21の受容野RNNRは、入力画像データIGの受容野RNNRの入力値の影響を受けている。出力値PEは、追加された領域AAの入力値P3の影響を受けている。
【0092】
以上のように、各RNN演算における入力値IN1の入力ステップのオフセットをレイヤ毎に設けることにおり、RNNを用いた画像処理においても、CNNと同様な受容野の設定をすることができる。
【0093】
以上のように、上述した実施形態及び各変形例によれば、レイテンシが小さくかつ低コストで実現できる画像処理装置を提供することができる。
【0094】
なお、上述したRNNセル31は、単純RNNであるが、LSTM(Long Short Term Memory)ネットワーク、GRU(Gated Recurrent Unit:ゲート付き回帰型ユニット)などの構造を有しているものでもよい。
【0095】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として例示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0096】
1 画像処理システム、2 画像認識装置、11 撮像素子、12 オフチップメモリ、13 プロセッサ、14 イメージセンサ、21 ステートバッファ、22 RNNセルプロセッサ、23 ピクセルストリームデコーダ、31 RNNセル、31a ラインエンドセル、32 ステートバッファ。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13