(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022141064
(43)【公開日】2022-09-29
(54)【発明の名称】処理装置、処理方法、およびプログラム
(51)【国際特許分類】
G06F 17/10 20060101AFI20220921BHJP
G06F 12/02 20060101ALI20220921BHJP
G06N 3/063 20060101ALI20220921BHJP
【FI】
G06F17/10 A
G06F12/02 510A
G06N3/063
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2021041201
(22)【出願日】2021-03-15
(71)【出願人】
【識別番号】000002945
【氏名又は名称】オムロン株式会社
(74)【代理人】
【識別番号】110002860
【氏名又は名称】特許業務法人秀和特許事務所
(72)【発明者】
【氏名】澤田 龍樹
【テーマコード(参考)】
5B056
5B160
【Fターム(参考)】
5B056BB26
5B160AA12
5B160AB13
(57)【要約】
【課題】畳み込みニューラルネットワークの畳み込み層の処理を効率的に実現する。
【解決手段】各セルにデータを有する2次元データである入力データであって、畳み込みニューラルネットワークの畳み込み層の入力データに対する畳み込み処理を行う処理装置は、前記入力データから複数の領域を選択して、前記複数の領域のデータを連結しメインメモリ上の連続したアドレスに配置データとして配置する配置手段と、前記配置データをプロセッサにより読み出して、前記配置データに対してフィルタを用いた畳み込み処理を行う処理手段と、を有し、前記複数の領域のそれぞれの行方向の大きさは、プロセッサが一括で読み出し可能なセルの数の整数倍に対応する大きさであって、前記複数の領域のそれぞれは、前記フィルタのサイズから1を引いた数の列だけ他の領域の列と重複したデータを有する。
【選択図】
図3
【特許請求の範囲】
【請求項1】
各セルにデータを有する2次元データである入力データであって、畳み込みニューラルネットワークの畳み込み層の入力データに対する畳み込み処理を行う処理装置であって、
前記入力データから複数の領域を選択して、前記複数の領域のデータを連結しメインメモリ上の連続したアドレスに配置データとして配置する配置手段と、
前記配置データをプロセッサにより読み出して、前記配置データに対してフィルタを用いた畳み込み処理を行う処理手段と、
を有し、
前記複数の領域のそれぞれの行方向の大きさは、プロセッサが一括で読み出し可能なセルの数の整数倍に対応する大きさであって、
前記複数の領域のそれぞれは、前記フィルタのサイズから1を引いた数の列だけ他の領域の列と重複したデータを有する、
ことを特徴とする処理装置。
【請求項2】
前記配置手段は、前記複数の領域のデータをメインメモリ上で列方向に連結して前記配置データとして配置する、
ことを特徴とする請求項1に記載の処理装置。
【請求項3】
前記配置手段は、前記配置データを配置する場合に、前記複数の領域のうち隣接する2つの領域の間に前記フィルタのデータを有する行を配置する、
ことを特徴とする請求項2に記載の処理装置。
【請求項4】
前記複数の領域のそれぞれは、さらに、前記フィルタのサイズから1を引いた数の行だけ他の領域の行と重複したデータを有する、
ことを特徴とする請求項1から3のいずれか1項に記載の処理装置。
【請求項5】
前記配置データの各行の先頭のメモリアドレスは、前記プロセッサが一括で読み出せるメモリアドレスの数の整数倍のメモリアドレスである、
ことを特徴とする請求項1から4のいずれか1項に記載の処理装置。
【請求項6】
前記入力データは、複数のチャンネルに渡るデータであり、
前記配置手段は、前記複数の領域に対して列、行、チャンネルの順で優先順序を決定し、前記複数の領域のデータを前記優先順序に従いメインメモリ上で列方向に連結して前記配置データとして配置する、
ことを特徴とする請求項1から5のいずれか1項に記載の処理装置。
【請求項7】
前記処理手段は、前記畳み込み処理を行う場合には、
前記フィルタのサイズ分の数の行のデータブロックであって、前記配置データにおいて列方向に連続する第1の複数の行のデータブロックを前記配置データから読み出してレジスタに格納し、
前記第1の複数の行の各行のデータブロックに対して、行方向へのシフトする処理およびフィルタの1つのセルの値を乗算する処理を行う、
ことを特徴とする請求項1から6のいずれか1項に記載の処理装置。
【請求項8】
前記処理手段は、前記畳み込み処理を行う場合には、
前記第1の複数の行の各行のデータブロックを1セル分だけ行方向にシフトしたデータブロックから、前記第1の複数の行の各行のデータブロックを前記フィルタのサイズから1引いた数のセル分だけ行方向にシフトしたデータブロックまでのそれぞれのデータブロックと、前記第1の複数の行の各行のデータブロックとを取得し、
取得したデータブロックのそれぞれに対して、前記第1の複数の行のうちの当該データブロックが対応する行と当該データブロックをシフトした量とに対応する前記フィルタのセルが示す値を乗算することにより、第2の複数の行のデータブロックを取得し、
前記第2の複数の行の各行のデータブロックにおける対応する位置のセルの値同士を合計する、
ことを特徴とする請求項7に記載の処理装置。
【請求項9】
各セルにデータを有する2次元データである入力データであって、畳み込みニューラルネットワークの畳み込み層の入力データに対する畳み込み処理を行う処理装置のプロセッサが実行する処理方法であって、
前記入力データから複数の領域を選択して、前記複数の領域のデータを連結しメインメモリ上の連続したアドレスに配置データとして配置する配置ステップと、
前記配置データをプロセッサにより読み出して、前記配置データに対してフィルタを用いた畳み込み処理を行う処理ステップと、
を有し、
前記複数の領域のそれぞれの行方向の大きさは、プロセッサが一括で読み出し可能なセルの数の整数倍に対応する大きさであって、
前記複数の領域のそれぞれは、前記フィルタのサイズから1を引いた数の列だけ他の領域の列と重複したデータを有する、
ことを特徴とする処理方法。
【請求項10】
各セルにデータを有する2次元データである入力データであって、畳み込みニューラルネットワークの畳み込み層の入力データに対する畳み込み処理を行う処理装置のプロセッサが処理方法を実行するためのプログラムであって、
前記処理方法は、
前記入力データから複数の領域を選択して、前記複数の領域のデータを連結しメインメモリ上の連続したアドレスに配置データとして配置する配置ステップと、
前記配置データをプロセッサにより読み出して、前記配置データに対してフィルタを用いた畳み込み処理を行う処理ステップと、
を有し、
前記複数の領域のそれぞれの行方向の大きさは、プロセッサが一括で読み出し可能なセルの数の整数倍に対応する大きさであって、
前記複数の領域のそれぞれは、前記フィルタのサイズから1を引いた数の列だけ他の領域の列と重複したデータを有する、
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、畳み込みニューラルネットワークに用いる処理装置、処理方法、およびプログラムに関する。
【背景技術】
【0002】
従来、機械学習の分野において、畳み込みニューラルネットワーク(CNN;Convolutional neural network)と呼ばれるモデルを用いて、画像や動画の認識が行われている。例えば、画像の認識では、畳み込み層とプーリング層を使って入力画像を変換しながら、データ量を徐々に小さくしていき、最終的に各カテゴリの確率の値を出力する。
【0003】
ここで、CNNの畳み込み層では、入力データにおけるそれぞれの局所領域(例えば、3×3のセルの領域)に対して、フィルタをかけ合わせること(フィルタ処理;畳み込み処理)が行われる。畳み込み処理では、入力データの同じセルのデータが何度も(例えばフィルタのセル(係数)の数と同じ回数)メインメモリ(RAM)から読み出される可能性がある。しかも、1つの畳み込み層において、数十から数百のフィルタが用いられる。このため、メインメモリからのデータ読み出しの回数が極めて多く、これがCNNの処理の高速化を阻むボトルネックとなっていた。
【0004】
特許文献1では、CNNの畳み込み層の効率的実装のために、複数のチャンネルに渡っている入力データを並び替えることが行われている。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかし、特許文献1では、入力データを単純に分割して並び替えているだけなので、例えば、元の入力データにおいて分割の境目に位置するセルでは、並び替え後には隣接関係が大きく変化してしまう。このため、元の入力データにおいて分割の境目に位置するセルに対してフィルタ処理を行う場合には、並び替えた後のデータの様々な位置のセルを参照する必要がある。このため、メインメモリからレジスタへの並び替え後のデータの読み出し処理などに多くの処理数を要し、効率的な畳み込み層の処理が実現できなかった。
【0007】
そこで、本発明は、畳み込みニューラルネットワークの畳み込み層の処理を効率的に実現することを目的とする。
【課題を解決するための手段】
【0008】
上記目的を達成するために本発明は、以下の構成を採用する。
【0009】
すなわち、本発明の一側面に係る処理装置は、各セルにデータを有する2次元データである入力データであって、畳み込みニューラルネットワークの畳み込み層の入力データに対する畳み込み処理を行う処理装置であって、前記入力データから複数の領域を選択して、前記複数の領域のデータを連結しメインメモリ上の連続したアドレスに配置データとして配置する配置手段と、前記配置データをプロセッサにより読み出して、前記配置データに対してフィルタを用いた畳み込み処理を行う処理手段と、を有し、前記複数の領域のそ
れぞれの行方向の大きさは、プロセッサが一括で読み出し可能なセルの数の整数倍に対応する大きさであって、前記複数の領域のそれぞれは、前記フィルタのサイズから1を引いた数の列だけ他の領域の列と重複したデータを有することを特徴とする処理装置である。
【0010】
このように、複数の領域のそれぞれの行方向の大きさが、プロセッサが一括で読み出し可能なセルの数(ワードサイズ)の整数倍であることによれば、一括で所定数のセルからデータを読み出せるプロセッサが、対象の領域から所定数未満のセルのデータしか読み出さないことを防げる。つまり、プロセッサの読み出し能力を最大限に活用できる。また、配置データには重畳領域が存在するため、フィルタ処理の対象のセルの周囲に、当該フィルタ処理に必要な他のセルが集まっている状態になる。このため、プロセッサは、メインメモリからの読み出し回数を低減しながら、畳み込み層のフィルタ処理を実行可能である。従って、畳み込みニューラルネットワークの畳み込み層の処理を効率的に実現できる。なお、ここで、フィルタのサイズとは、nセル×nセルのフィルタであれば、nセル分の大きさである。
【0011】
上記処理装置において、前記配置手段は、前記複数の領域のデータをメインメモリ上で列方向に連結(接続)して前記配置データとして配置してもよい。これによれば、複数の領域のうちの1つの領域に、当該領域に関するフィルタ処理を実行するために必要なセル(データ)が集約される。このため、プロセッサは、メインメモリからの読み出し回数を低減しながら、畳み込み層のフィルタ処理を実行可能である。従って、畳み込みニューラルネットワークの畳み込み層の処理を効率的に実現できる。
【0012】
上記処理装置において、前記配置手段は、前記配置データを配置する場合に、前記複数の領域のうち隣接する2つの領域の間に前記フィルタのデータを有する行を配置してもよい。これによれば、例えば、チャンネル数分のフィルタのデータを常に、プロセッサにおける複数のレジスタが格納しておく必要がなくなるため、レジスタをより効果的にフィルタ処理に用いることが可能になる。
【0013】
上記処理装置において、前記複数の領域のそれぞれは、さらに、前記フィルタのサイズから1を引いた数の行だけ他の領域の行と重複したデータを有していてもよい。行が重複していることによれば、フィルタ処理を実行する場合に、複数の領域のうちの他の領域を参照せずにフィルタ処理を実行することができる。このため、配置データにおいて一度読み出した行を再度読み出すことなく、畳み込み層の処理ができるため、畳み込み層の処理が効率化できる。
【0014】
上記処理装置において、前記配置データの各行の先頭のメモリアドレスは、前記プロセッサが一括で読み出せるメモリアドレスの数の整数倍のメモリアドレスであってもよい。これによれば、配置データの各行の先頭のメモリアドレスを、メインメモリのメモリブロックの先頭のメモリアドレスに合わせることができる。このため、不要なメモリブロックにアクセスすることを抑制できるため、プロセッサのメインメモリからの読み出し処理が効率化する。
【0015】
上記処理装置において、前記入力データは、複数のチャンネルに渡るデータであり、前記配置手段は、前記複数の領域に対して列、行、チャンネルの順で優先順序を決定し、前記複数の領域のデータを前記優先順序に従いメインメモリ上で列方向に連結して前記配置データとして配置してもよい。このような配置によれば、フィルタ処理を行う場合に、同じ列かつ同じ行でチャンネルのみが異なる領域に対して、連続的に処理を実行することができる。このため、1つのチャンネルに対して実行したフィルタ処理の結果を中間結果としてレジスタに格納させている間に、他のレジスタを用いて他のチャンネルのフィルタ処理を実行できる。つまり、1つのチャンネルの中間結果をメインメモリに読み書きする処
理の発生を抑制できるので、全てのチャンネルについての中間結果を合計する必要のある畳み込み層の処理を効率的に実行できる。
【0016】
上記処理装置において、前記処理手段は、前記畳み込み処理を行う場合には、前記フィルタのサイズ分の数の行のデータブロックであって、前記配置データにおいて列方向に連続する第1の複数の行のデータブロックを前記配置データから読み出してレジスタに格納し、前記第1の複数の行の各行のデータブロックに対して、行方向へのシフトする処理およびフィルタの1つのセルの値を乗算する処理を行ってもよい。これによれば、1つのデータブロックが有する複数のデータに対して一括で演算処理を適用することができるので、結果的に、複数の局所領域に対して一括でフィルタ処理を実行することができる。このため、畳み込みニューラルネットワークの畳み込み層の処理を効率的に実現できる。
【0017】
上記処理装置において、前記処理手段は、前記畳み込み処理を行う場合には、前記第1の複数の行の各行のデータブロックを1セル分だけ行方向にシフトしたデータブロックから、前記第1の複数の行の各行のデータブロックを前記フィルタのサイズから1引いた数のセル分だけ行方向にシフトしたデータブロックまでのそれぞれのデータブロックと前記第1の複数の行の各行のデータブロックとを取得し、取得したデータブロックのそれぞれに対して、前記第1の複数の行のうちの当該データブロックが対応する行と当該データブロックをシフトした量とに対応する前記フィルタのセルが示す値を乗算することにより、第2の複数の行のデータブロックを取得し、前記第2の複数の行の各行のデータブロックにおける対応する位置のセルの値同士を合計してもよい。
【0018】
本発明は、上記手段の少なくとも一部を有する装置として捉えてもよいし、電子機器や制御システム、情報処理システム、情報処理装置、処理システム、データ配置装置として捉えてもよい。また、本発明は、上記処理の少なくとも一部を含む制御方法、処理方法、配置方法して捉えてもよい。また、本発明は、かかる方法を実現するためのプログラムやそのプログラムを非一時的に記録した記録媒体(記憶媒体)として捉えることもできる。なお、上記手段および処理の各々は可能な限り互いに組み合せて本発明を構成することができる。
【発明の効果】
【0019】
本発明によれば、畳み込みニューラルネットワークの畳み込み層の処理を効率的に実現できる。
【図面の簡単な説明】
【0020】
【
図1】
図1Aは処理装置の簡易的な構成図であり、
図1Bはプロセッサの内部構成図である。
【
図2】
図2は、畳み込み層の処理を説明する図である。
【
図3】
図3は、データ配置処理のフローチャートである。
【
図5】
図5は、選択領域の優先順序を説明する図である。
【
図6】
図6は、データ配置処理を行わない場合のフィルタ処理を説明する図である。
【発明を実施するための形態】
【0021】
以下、本発明を実施するための実施形態について図面を用いて記載する。
【0022】
まず、畳み込みニューラルネットワーク(CNN)について説明する。CNNは、畳み込み層とプーリング層を含む。画像などの入力データは、畳み込み層とプーリング層とに
おける処理のセットが繰り返し実行されることによって、データ量が減少していく。そして、最終的には、例えば、当該画像が所定の物体(例えば、人、顔、犬などの動物)である確率の値が出力データとして出力される。
【0023】
畳み込み層では、例えば、
図2に示すように、画像の各画素のR,G,Bのそれぞれチャンネルについて、画素値を2次元状に示したマトリクスが入力データとして入力される。そして、畳み込み層では、入力画像の各チャンネルの局所領域201~203(例えば、3×3の領域)に対して、カーネルと呼ばれるフィルタ211~213をかけ合わせる(適用する)。このように、一般的には、チャンネルの数、またはそれ以上の数だけ、入力データに適用するためのフィルタが必要になる。その後、局所領域201にフィルタ211をかけた値と、局所領域202にフィルタ212をかけた値と、局所領域203にフィルタ213をかけた値とを、合計することによって当該局所領域(当該局所領域の中心のセル)に対応する出力220(出力値V22)を得る。ここで、例えば、局所領域201にフィルタ211をかけた結果は、局所領域201とフィルタ211とにおける3×3の領域の対応する位置の数値同士を乗算した結果を合計する処理によって、式1に示す値のように算出できる。なお、以下では、入力データ(局所領域)に基づき出力220を有するような出力データを生成する処理を「畳み込み処理」と呼ぶ。また、「畳み込み処理」の一部の処理であって、局所領域に対してフィルタをかけ合わせる処理を、「フィルタ処理」と呼ぶ。
【数1】
【0024】
プーリング層では、畳み込み層で処理された後のマトリクスについて、局所領域ごとに、情報を処理して出力する。例えば、2×2の領域における最大値や平均値などが、その局所領域に対応する出力値として出力される。
【0025】
<適用例>
以下では、各セルにデータを有する2次元データである入力データであって、畳み込みニューラルネットワークの畳み込み層の入力データに対する畳み込み処理(フィルタ処理)を行う処理装置1について説明する。処理装置1は、入力データから複数の領域(選択領域)を選択して、複数の選択領域のデータを連結しメインメモリ上の連続したアドレスに配置データとして配置する。そして、処理装置1は、配置データをプロセッサにより読み出して、畳み込み処理を行う。このとき、処理装置1は、複数の選択領域のそれぞれの行方向の大きさを、プロセッサが一括で読み出し可能なセルの数(ワードサイズ)の整数倍に対応する大きさにする。また、処理装置1は、複数の選択領域のそれぞれが、フィルタサイズから1を引いた数の列だけ他の選択領域の列と重畳したデータ(重畳領域)を有するように、複数の選択領域を選択する。
【0026】
複数の選択領域のそれぞれの行方向の大きさがワードサイズの整数倍であることによれば、一括で所定数のセルからデータを読み出せるプロセッサが、対象の選択領域から所定数未満のセルのデータしか読み出さないことを防げる。つまり、プロセッサの読み出し能力を最大限に活用できる。また、配置データには重畳領域が存在するため、フィルタ処理の対象のセルの周囲に、当該フィルタ処理に必要な他のセルが集まっている状態になる。このため、プロセッサは、メインメモリからの読み出し回数を低減しながら、畳み込み処理を実行可能である。従って、畳み込みニューラルネットワークの畳み込み層の処理を効率的に実現できる。
【0027】
<実施形態1>
以下では、
図1A、
図1Bを参照して、実施形態1に係る処理装置1の構成について説明する。
図1Aは、処理装置1の簡易的な構成図である。処理装置1は、PC、サーバ、スマートフォンなどの任意の処理装置(処理端末)であってよい。処理装置1は、プロセッサ10、記憶装置20、入出力装置30、バス40を有する。
【0028】
プロセッサ10(CPU;中央処理装置)は、処理装置1における各構成(装置)を制御する。例えば、入出力装置30に対して入力されたユーザ指示に従って、記憶装置20に記憶されたデータを用いた制御をする。プロセッサ10は、複数のレジスタ11(一般的には、16個または32個のレジスタ11)を有する。
【0029】
複数のレジスタ11のそれぞれは、データを一時的に格納する記憶回路である。複数のレジスタ11のそれぞれは、記憶装置20(メインメモリ21)よりも高速にデータの読み書きをすることができる。このため、プロセッサ10は、複数のレジスタ11にデータを一時的に格納しながら、各種の処理を実行する。なお、複数のレジスタ11は、演算などの用途が特定された複数の専用レジスタと、用途が特定されていない複数の汎用レジスタを有する。複数のレジスタ11のそれぞれは、例えば、16bitのデータを8セット格納することができる。このため、例えば、複数のレジスタ11のそれぞれは、入力データの8つのセルのデータを一括で格納することもできる。
【0030】
記憶装置20は、プロセッサ10が処理を行うためのデータを記憶(記録)する。記憶装置20は、ハードディスク、RAM(メインメモリ21;Random Access
Memory)、データを非一時的に記憶するROM(Read Only Memory)を含む。ROMは、例えば、OS(Operation System)のバイオスや、プロセッサ10が動作するためのプログラムを記憶する。
【0031】
メインメモリ21は、入力データやフィルタなどのデータを一時的に記憶する。メインメモリ21では、1ビットの情報を記憶するメモリセルが2次元状(行方向および列方向)に広がっている。なお、メインメモリ21は処理装置1から取り外し可能であってもよく、この場合には、処理装置1をメモリ制御装置として捉えることができる。なお、上述のように、フィルタは、入力データのチャンネルの数(またはそれ以上の数)だけ必要であるので、メインメモリ21には入力データのチャンネル分のフィルタのデータが記憶される。
【0032】
また、メインメモリ21は、所定のブロック(以下、メモリブロックと称する)単位でデータを記憶する。このため、例えば、1つのメモリブロックのサイズが4Byteである場合には、各メモリブロックの先頭のメモリアドレスは、4Byteの整数倍になる。一方で、プロセッサ10は、ワード(プロセッサ10が一括して読み出し可能なセルの数またはビット数)単位で、メインメモリ21からデータを一括で読み出すことができる。このため、プロセッサ10が読み出し要求するデータが、メインメモリ21における2つのメモリブロックに渡っている場合には、プロセッサ10は2回のメモリアクセスをする必要がある。従って、プロセッサ10がメインメモリ21にアクセスする場合には、アクセスの対象となるメモリブロックの数を少なくすることが、高速なメモリアクセスを実現する。なお、プロセッサ10は、1行における複数のセルから一括でデータを読み出すことはできるが、1列における複数のセルから一括でデータを読み出すことはできない。
【0033】
入出力装置30は、ユーザの指示(操作)を受け付ける入力装置と、プロセッサ10による処理後のデータを出力する出力装置を有する。入力装置は、例えば、マウス、キーボード、タッチパネル、ボタン、ダイヤル、マイク(音声入力装置)、姿勢検知装置(ジャ
イロセンサ)、温度センサなどを含む。出力装置は、例えば、ディスプレイ(表示装置)、スピーカー(音声出力装置)、プリンタなどを含む。
【0034】
バス40は、プロセッサ10と記憶装置20と入出力装置30との間の通信を行うための経路である。プロセッサ10は、バス40を介して、記憶装置20からデータを取得して、当該データを用いて処理を実行し、処理後のデータを記憶装置20に記憶させることができる。
【0035】
(プロセッサの内部構成)
続いて、
図1Bを参照して、プロセッサ10の内部構成を説明する。
図1Bは、入力データの再配置や畳み込み処理(フィルタ処理)などに用いられるプロセッサ10の内部構成図である。プロセッサ10は、取得部101、配置部102、処理部103を有する。これらの構成は、専用のロジック回路により実現されてもよいし、プロセッサ10がプログラムを実行することによりソフトウエア的に実現されてもよい。
【0036】
取得部101は、CNNの入力データ(
図2参照)をメインメモリ21やプーリング層から取得する。ここで、例えば、入力データは、複数のチャンネル(例えば、それぞれがRBGのいずれかの画素値を示すチャンネルR、チャンネルB、チャンネルB)に渡るデータを有する。各チャンネルにおいて、1つ1つがデータを有するセルが2次元状に広がっている。なお、入力データは、複数のチャンネルを有している必要はなく、単一のチャンネルのみを有していてもよい。
【0037】
配置部102は、入力データにおいて、所定の大きさの複数の領域を選択領域として選択する。また、配置部102は、選択領域のデータを所定の順序(優先順序)で連結(接続)するように配置していき、配置データとしてメインメモリ21に記憶させる。これによって、入力データを並び変えた配置データがメインメモリ21に記憶される。そして、処理部103は、メインメモリ21に記憶された配置データをレジスタ11に読み出して、畳み込み層における畳み込み処理(フィルタ処理)を実行する。
【0038】
[データ配置処理]
以下では、上述したデータ配置処理の詳細な処理を
図3のフローチャートを用いて説明する。
図3のフローチャートの処理は、プロセッサ10がROMに記憶されたプログラムを実行することによって実現する。
【0039】
ステップS1001では、取得部101は、CNNの畳み込み層に用いられる入力データを取得する。
【0040】
ステップS1002では、配置部102は、入力データから複数の領域を選択領域として選択する。ここでは、複数の選択領域のそれぞれの行方向の大きさが、上述のワード(プロセッサ10が一括で読み出し可能なセルの数)のサイズの整数倍であるように、配置部102は、複数の選択領域を選択する。また、複数の選択領域のそれぞれが、フィルタのサイズから1を引いた数の列だけ他の選択領域の列と重複したデータを有するように、配置部102は、複数の選択領域を選択する。ここで、フィルタのサイズとは、3×3のセルを有するフィルタであれば、3セル分の大きさである。なお、複数の選択領域のそれぞれが、フィルタのサイズから1を引いた数の行だけ他の選択領域の行と重複したデータを有していてもよい。
【0041】
ステップS1003では、配置部102は、選択した全ての選択領域から、配置する順序を表す優先順序を決定する。具体的には、配置部102は、列、行、チャンネルの順で、全ての選択領域における優先順序を決定する。
【0042】
例えば、配置部102が、
図4Aに示すような選択領域CH_R11,CH_R21,CH_R31,CH_G11,CH_G21,CH_G31,CH_B11,CH_B21,CH_B31を、入力データから選択したと仮定する。この場合には、チャンネルよりも行が優先されるため、配置部102は、選択領域CH_R11,CH_G11,CH_B11,CH_R21,CH_G21,CH_B21,CH_R31,CH_G31,CH_B31の順を優先順序として決定する(
図4B参照)。
【0043】
また、例えば、
図5に示すような選択領域CH_R11,CH_R12,CH_R13,CH_R21,CH_R22,CH_R23,CH_R31,CH_R32,CH_R33を、入力データから選択したと仮定する。この場合には、行よりも列が優先されるため、配置部102は、選択領域CH_R11,CH_R21,CH_R31,CH_R12,CH_R22,CH_R32,CH_R13,CH_R23,CH_R33の順を優先順序として決定する。
【0044】
ステップS1004では、配置部102は、優先順序に従って、選択領域のデータを連結して配置データを生成する。例えば、配置部102は、
図4Aに示すように、入力データから選択領域を選択していた場合には、選択領域CH_R11を先頭に、選択領域CH_G11,CH_B11,CH_R21と優先順序に従って列方向に連結するように配置していく。配置部102は、このように選択した複数の選択領域を配置することによって、配置データを生成する。
【0045】
ステップS1005では、配置部102は、配置データをメインメモリ21に記憶させる。なお、配置部102は、配置データの各行の先頭のメモリアドレスが、プロセッサ10が一括で読み出せるメモリアドレスの数(個数)の整数倍のメモリアドレスであるように、配置データを配置するとよい。ここで、プロセッサ10が一括で読み出せるメモリアドレスの数(個数)は一般的にメインメモリ21の1つのメモリブロックが含むメモリアドレスの数と同等または整数倍である。このため、配置データの各行の先頭のメモリアドレスを、メインメモリ21のメモリブロックの先頭のメモリアドレスに一致させることができる。従って、メインメモリ21のワードサイズ分のセルからプロセッサ10がデータを一括で読み出す場合に、読み出しの対象のメモリブロックの数を少なくできるため、メモリアクセスを行う回数を少なくできる。
【0046】
本実施形態のように、複数の選択領域それぞれの行方向の大きさがワードのサイズの整数倍であれば、プロセッサ10が1つの選択領域の1つの行を読み出す場合に、選択領域からワードサイズずつ読み出して、ワードサイズずつの読み出しから余ったセルのみ読み出すといった処理が不要になる。従って、プロセッサ10によるメインメモリの不要な読み出しを減らすことができるので、畳み込み層での処理が効率化する。
【0047】
なお、上述のようにプロセッサ10は、1行に並んだ複数のセルから一括でデータを読み出すことはできるが、1列に並んだ複数のセルから一括でデータを読み出すことはできない。従って、複数の選択領域それぞれの列方向の大きさは、フィルタサイズよりも大きければ任意の大きさであってもよい。ここで、レジスタ11の数が十分に多い場合には、複数の選択領域それぞれの列方向の大きさを大きくすることで、フィルタ処理の対象の選択領域の切り替わりを少なくできる。このため、レジスタ11へのデータの読み込みおよびレジスタ11のデータの解放の処理を少なくできる。一方で、レジスタ11の数が少ない場合には、複数の選択領域それぞれの列方向の大きさを小さくすることで、1つの選択領域に対するフィルタ処理の算出結果(中間結果)をレジスタ11に格納しておくだけの余裕ができる。このため、結果的に中間結果をメインメモリ21に一時的に書き込み、その後、中間結果をメインメモリ21から読み出すという処理の発生を抑制できる。従って
、プロセッサ10は、複数の選択領域それぞれの列方向の大きさを、レジスタ11の個数などに基づき、決定するとよい。また、プロセッサ10は、複数の選択領域それぞれの列方向の大きさを実験的に様々な大きさにして畳み込み層の処理を行って、結果として最も早く処理が可能なものを最終的な複数の選択領域それぞれの列方向の大きさとしてもよい。
【0048】
また、本実施形態では、複数の選択領域のそれぞれが、フィルタのサイズから1を引いた数の列だけ他の選択領域の列と重複したデータを有する。なお、複数の選択領域のそれぞれが、フィルタのサイズから1を引いた数の行だけ他の選択領域の行と重複したデータを有していてもよい。ここで、選択領域間でデータが重複させずに、例えば、選択領域の端のセルについてフィルタ処理を行う場合、入力データにおける当該端のセルの周囲のセルのデータも用いる必要がある。このため、このような場合には、プロセッサ10は、他の選択領域(メインメモリ21の他のメモリブロック)から当該周囲のセルのデータを読み出す必要がある。一方、本実施形態のようにデータが重複していれば、その重複部分のセルのデータを用いて、フィルタ処理を実行できるため、他の選択領域のセルからプロセッサ10がデータを読み出す必要がなくなる。よって、プロセッサ10によるメインメモリ21の不要な読み出しを減らすことができるので、畳み込み処理(畳み込み層での処理)が効率化する。
【0049】
[優先順序に従って配置することの効果]
また、以下では、列、行、チャンネルの順で、全ての選択領域における優先順序を決定して、当該優先順序に従って選択領域を配置することの効果を説明する。
【0050】
(優先順序に従って配置しない場合)
まず、優先順序に従って配置しない場合のプロセッサ10がメインメモリ21からデータを読み出す際の処理の一例を説明する。データ配置処理を行わない場合、
図4Aに示すような、複数のチャンネルに渡っている入力データに対して畳み込み層における処理が行われる。そして、この場合には、プロセッサ10は、例えば、チャンネルRの先頭行の先頭列のデータから順に、複数のレジスタ11に格納していき、レジスタ11に格納されたデータに基づきフィルタ処理を実行する。ここで、例えば、フィルタのサイズが3×3であった場合、
図6に示すように、左上から順に、3行のワードサイズのブロックBLK1~BLK3(データブロック)をレジスタ11に格納する。これによって、プロセッサ10は、3つのブロックとフィルタを用いた計算により、フィルタ処理による出力値が計算できる。その後、プロセッサ10は、ブロックBLK1~BLK3の次の列(右方向)に移動して、3つのブロックBLK4~BLK6をレジスタ11に格納して、フィルタと掛け合わせて出力値を計算する。なお、例えば、ブロックBLK1~BLK3とブロックBLK4~BLK6とに跨る局所領域に対してフィルタ処理を行う場合には、プロセッサ10は、ブロックBLK1~BLK6の6つをレジスタ11に格納して、これらのブロックのデータを用いてフィルタ処理を行う。つまり、1つの局所領域に対してフィルタ処理を行う場合に、取得したブロックのデータを格納しておくために、6個(フィルタサイズの2倍)のレジスタが必要になることがある。
【0051】
そして、このような処理を繰り返して、先頭の3行のデータを用いたフィルタ処理が終了すると、2行目~4行目のデータに対して同様の処理を行う。このとき、複数のレジスタ11の数にも限りがあるので、初期のフィルタ処理に用いたブロックについてのデータは、複数のレジスタ11から破棄されてしまう。これによれば、プロセッサ10は、3行目のブロックBLK3のセルを中心とする局所領域についてフィルタ処理を実行しようとする場合に、再度、ブロックBLK2,BLK3を読み出す必要がある。このため、本実施形態の優先順序に従って配置しない場合には、1つのセルのデータが、フィルタのサイズの数だけ複数のメインメモリ21から読み出される可能性がある。
【0052】
(優先順序に従って配置する場合)
続いて、本実施形態に係るデータ配置処理を行う場合のプロセッサ10がメインメモリ21からデータを読み出す際の処理を説明する。本実施形態では、
図4Aに示す入力データを、
図4Bに示すような配置データに配置し直して、当該配置データを用いてプロセッサ10は、フィルタ処理を実行する。
【0053】
ここで、例えば、各選択領域の行の大きさがワードサイズと同じであると仮定する。この場合、プロセッサ10は、配置データを1行ずつ列方向に連続で(行順で)読み出して、レジスタ11にそれぞれ格納していく。そして、そのレジスタ11に格納されたデータを用いてフィルタ処理を実行する。なお、各選択領域は、列方向および行方向に、フィルタサイズから1を引いた分の行および列だけ他の選択領域と重複したデータを有するとする。この場合には、プロセッサ10は、配置データを行順に読み出せば、過去に配置データから読み出した行を再度読み出して、フィルタ処理に用いるということを行わなくてよい。つまり、プロセッサ10によるレジスタ11への読み出し処理を連続的にする(単純化する)ことができる。
【0054】
そして、
図2を用いて説明したように、複数のチャンネルそれぞれに対してフィルタ処理をした結果(中間結果)を合計することによって、畳み込み層の出力値は算出される。これに対応すべく、配置データでは、複数のチャンネルにおいて対応する位置(対応する列および行)の選択領域が連続して連結されるように配置されている。これによれば、プロセッサ10は、例えば、チャンネルRの選択領域、これに対応するチャンネルGの選択領域、チャンネルBの選択領域を連続してフィルタ処理することができる。このため、チャンネルRの選択領域に対してフィルタ処理した結果をレジスタ11に保持した状態で、チャンネルGの選択領域、チャンネルBの選択領域をフィルタ処理できる可能性が向上する。従って、例えば、プロセッサ10が、チャンネルRの選択領域に対してフィルタ処理した結果をメインメモリ21に記憶し、チャンネルG,B選択領域をフィルタ処理し終わった後に、メインメモリ21からチャンネルRの選択領域に対してフィルタ処理した結果を読み出すという処理が不要になる。よって、畳み込み層における処理が効率化できる。
【0055】
[本実施形態に係るフィルタ処理について]
ここで、
図7を参照して、本実施形態に係るフィルタ処理について具体的に説明する。以下では、選択領域の列方向に連続する、3行のブロック710,720,730(3行のデータブロック)とフィルタ750を用いて、ブロック720に含まれる複数のセル(R22~R27の値を有するセル)それぞれを中心とする局所領域に対するフィルタ処理について説明する。なお、ブロック710,720,730のそれぞれは、ワードサイズと同一の8つのセルを有しており、レジスタ11に一時的に格納されるものとする。また、フィルタ750のサイズは、3セル分のサイズである(3セル×3セルである)とする。
【0056】
まず、プロセッサ10の処理部103は、ブロック710から、ブロック710、ブロック710を左方向(行方向)に1セル分シフトしたブロック711、ブロック710を左方向に2セル分シフトしたブロック712を取得する。つまり、処理部103は、対象のブロックから、フィルタサイズから1を引いた値のセル分だけ対象のブロックを左にシフトしたブロックまでのそれぞれを取得する。そして、処理部103は、ブロック710の各セルの値にフィルタ750の1行1列目のセルの値aを一括に乗算したブロック715を取得する。同様に、処理部103は、ブロック711の各セルの値にフィルタ750の1行2列目のセルの値bを一括に乗算したブロック716を取得し、ブロック710の各セルの値にフィルタ750の1行3列目のセルの値を一括に乗算したブロック717を取得する。つまり、3行のブロックのうち1行目に対応するブロック710~712には
、フィルタ750の1行目のセルの値を乗算する。このとき、ブロック710~712のそれぞれについて、フィルタにおける、当該ブロックのシフトの量に応じた列(位置)のセルの値をブロック710~712に乗算する。
【0057】
このような処理を、ブロック720,730についても同様に行うことにより、処理部103は、
図7に示す、ブロック720,730をシフトした、ブロック720~722,730~732を取得する。また、処理部103は、ブロック720~722,730~732のそれぞれに、フィルタ750のうちの対応するセルの値(3つのブロック710,720,730のうち対象のブロックが対応するブロック(行)、および対象のブロックのシフト量に、対応するセルの値)を乗算することによって、ブロック725,726,727,735,736,737を取得する。
【0058】
そして、処理部103は、ブロック715~717,725~727,735~737の同じ位置(列)のセルの値を合計することによって、R22~R27を有するセルを中心とする局所領域についての出力値v22~v27を算出できる。
【0059】
なお、出力値v22~v27を算出するにあたっては、上述の算出順序である必要はなく、最適化された算出順序であってよい。例えば、処理部103は、ブロック715~ブロック717の同一の位置のセルの値を合計した後にその値を1つのレジスタ11に格納し、ブロック720に基づき、ブロック720~ブロック723を取得し、さらにブロック725~727を取得する順序で処理を行ってもよい。これによれば、ブロック715~ブロック717の値を格納していた3つのレジスタ11のうち少なくとも一部は、格納しているデータを解放(破棄)できる。このため、少ないレジスタ11の数で、フィルタ処理が可能になる。
【0060】
このようにフィルタ処理が行われることによれば、複数のセル(本実施形態では6つのセル)について一括でフィルタ処理を実行することができる。このため、1つ1つのセルについて、フィルタ処理を実行する場合よりも、大幅に処理数を減少させることができる。なお、このような一括の処理は、例えば、単一の命令で複数のデータに対して同じ処理を行うことができるSIMD(Single Instruction Multiple Data)と呼ばれる処理方式を用いることで実現できる。
【0061】
そして、本実施形態では、メインメモリの配置データにおいて、複数の選択領域のそれぞれの行方向の大きさは、プロセッサが一括で読み出し可能なセルの数(ワードサイズ)の整数倍に対応する大きさである。これによれば、一括で所定数のセルからデータを読み出せるプロセッサが、選択領域から所定数未満のセルのデータしか読み出さないことを防げる。つまり、プロセッサの読み出し能力を最大限に活用できる。
【0062】
さらに、複数の選択領域のそれぞれは、フィルタのサイズから1を引いた数の列(および行)だけ他の選択領域の列(および行)と重複したデータを有する。これによれば、フィルタ処理の対象のセルの周囲に、当該フィルタ処理に必要な他のセルが集まっている状態になる。このため、メインメモリからの不要な読み出しを行う必要性が低減できるので、プロセッサは、メインメモリからの読み出し回数を低減しながら、畳み込み層のフィルタ処理を実行可能である。
【0063】
従って、畳み込みニューラルネットワークの畳み込み層の処理を効率的に実現できる。
【0064】
なお、ステップS1004において、配置部102は、2つの選択領域のデータを連結する場合に、当該2つの選択領域の間にフィルタのデータを差し込んでもよい。つまり、配置データにおいて、配置部102は、隣接する2つの選択領域の間に、フィルタのデー
タを有する行が配置されていてもよい。このとき、2つの選択領域のうちフィルタよりも後に連結される選択領域に対して当該フィルタを用いたフィルタ処理を実行するために、当該選択領域に対応するフィルタのデータが差し込まれる。これによれば、例えば、チャンネル数分のフィルタのデータを常に、複数のレジスタ11が格納しておく必要がなくなるため、レジスタ11をより効果的にフィルタ処理に用いることが可能になる。
【0065】
なお、実施形態に記載された事項のみによって特許請求の範囲の記載の解釈が限定されるものではない。特許請求の範囲の記載の解釈には、出願時の技術常識を考慮した、発明の課題が解決できることを当業者が認識できるように記載された範囲も含む。
【0066】
(付記1)
各セルにデータを有する2次元データである入力データであって、畳み込みニューラルネットワークの畳み込み層の入力データに対する畳み込み処理を行う処理装置(1)であって、
前記入力データから複数の領域を選択して、前記複数の領域のデータを連結しメインメモリ(21)上の連続したアドレスに配置データとして配置する配置手段(102)と、
前記配置データをプロセッサ(10)により読み出して、前記配置データに対してフィルタを用いた畳み込み処理を行う処理手段(103)と、
を有し、
前記複数の領域のそれぞれの行方向の大きさは、プロセッサ(10)が一括で読み出し可能なセルの数の整数倍に対応する大きさであって、
前記複数の領域のそれぞれは、前記フィルタのサイズから1を引いた数の列だけ他の領域の列と重複したデータを有する、
ことを特徴とする処理装置(1)。
【0067】
(付記2)
各セルにデータを有する2次元データである入力データであって、畳み込みニューラルネットワークの畳み込み層の入力データに対する畳み込み処理を行う処理装置(1)のプロセッサ(10)が実行する処理方法であって、
前記入力データから複数の領域を選択して、前記複数の領域のデータを連結しメインメモリ(21)上の連続したアドレスに配置データとして配置する配置ステップ(S1005)と、
前記配置データをプロセッサ(10)により読み出して、前記配置データに対してフィルタを用いた畳み込み処理を行う処理ステップと、
を有し、
前記複数の領域のそれぞれの行方向の大きさは、プロセッサ(10)が一括で読み出し可能なセルの数の整数倍に対応する大きさであって、
前記複数の領域のそれぞれは、前記フィルタのサイズから1を引いた数の列だけ他の領域の列と重複したデータを有する、
ことを特徴とする処理方法。
【0068】
(付記3)
各セルにデータを有する2次元データである入力データであって、畳み込みニューラルネットワークの畳み込み層の入力データに対する畳み込み処理を行う処理装置(1)のプロセッサ(10)が処理方法を実行するためのプログラムであって、
前記処理方法は、
前記入力データから複数の領域を選択して、前記複数の領域のデータを連結しメインメモリ(21)上の連続したアドレスに配置データとして配置する配置ステップ(S1005)と、
前記配置データをプロセッサ(10)により読み出して、前記配置データに対してフィ
ルタを用いた畳み込み処理を行う処理ステップと、
を有し、
前記複数の領域のそれぞれの行方向の大きさは、プロセッサ(10)が一括で読み出し可能なセルの数の整数倍に対応する大きさであって、
前記複数の領域のそれぞれは、前記フィルタのサイズから1を引いた数の列だけ他の領域の列と重複したデータを有する、
ことを特徴とするプログラム。
【符号の説明】
【0069】
1:処理装置、10:プロセッサ、11:レジスタ、
20:記憶装置、21:メインメモリ、30:入出力装置、40:バス、
101:取得部、102:配置部、103:処理部