(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-10-21
(45)【発行日】2022-10-31
(54)【発明の名称】データ処理装置及びプログラム
(51)【国際特許分類】
G06F 17/10 20060101AFI20221024BHJP
G06F 12/00 20060101ALI20221024BHJP
G06F 17/16 20060101ALI20221024BHJP
G06N 3/10 20060101ALI20221024BHJP
【FI】
G06F17/10 A
G06F12/00 560B
G06F17/16 M
G06N3/10
(21)【出願番号】P 2019159501
(22)【出願日】2019-09-02
【審査請求日】2021-07-30
(73)【特許権者】
【識別番号】000004260
【氏名又は名称】株式会社デンソー
(73)【特許権者】
【識別番号】502324066
【氏名又は名称】株式会社デンソーアイティーラボラトリ
(74)【代理人】
【識別番号】110001519
【氏名又は名称】弁理士法人太陽国際特許事務所
(72)【発明者】
【氏名】森 政文
(72)【発明者】
【氏名】安倍 満
【審査官】漆原 孝治
(56)【参考文献】
【文献】特開2018-116419(JP,A)
【文献】特開2014-225089(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/10
G06F 12/00
G06F 17/16
G06N 3/10
(57)【特許請求の範囲】
【請求項1】
処理対象データを格納する外部メモリ(52)と、
前記外部メモリに格納されているデータのうち少なくとも一部を格納する入力バッファ部(54)と、
前記入力バッファ部に格納されたデータを用いてM×Mの畳み込み処理を行うM×Mデータ処理部(56A)と、
前記入力バッファ部に格納されたデータを用いてN×Nの畳み込み処理を行うN×Nデータ処理部(56B)と、
前記M×Mデータ処理部及び前記N×Nデータ処理部の処理結果のうちの一方を格納する第1出力バッファ部(58A)と、
前記M×Mデータ処理部及び前記N×Nデータ処理部の処理結果のうちの他方を格納する第2出力バッファ部(58B)と、
を備え、
前記第1出力バッファ部に格納された処理結果は、前記入力バッファ部に格納され、
前記第2出力バッファ部に格納された処理結果は、前記外部メモリに転送される、
データ処理装置(100)。
【請求項2】
M及びNは1以上の整数であり、M>Nである請求項1記載のデータ処理装置。
【請求項3】
N=1とする請求項2記載のデータ処理装置。
【請求項4】
前記処理対象データは、3つ以上の直交軸で規定されるデータであり、
前記処理対象データにおける第一の軸及び第二の軸に対して、前記M×Mの畳み込み処理または前記N×Nの畳み込み処理が行われる請求項1~請求項3の何れか1項記載のデータ処理装置。
【請求項5】
前記M×Mの畳み込み処理の結果のデータにおける第三の軸に属するデータ数が、前記N×Nの畳み込み処理の結果のデータにおける前記第三の軸に属するデータ数より小さい場合、前記M×Mデータ処理部の処理結果を前記第2出力バッファ部に格納し、前記N×Nデータ処理部の処理結果を前記第1出力バッファ部に格納する請求項4記載のデータ処理装置。
【請求項6】
前記N×Nの畳み込み処理の結果のデータにおける第三の軸に属するデータ数が、前記M×Mの畳み込み処理の結果のデータにおける前記第三の軸に属するデータ数より小さい場合、前記N×Nデータ処理部の処理結果を前記第2出力バッファ部に格納し、前記M×Mデータ処理部の処理結果を前記第1出力バッファ部に格納する請求項4記載のデータ処理装置。
【請求項7】
ニューラルネットワークを用いた画像処理の一部として、前記N×Nの畳み込み処理及び前記M×Mの畳み込み処理を行う請求項1~請求項6の何れか1項記載のデータ処理装置。
【請求項8】
処理対象データを格納する外部メモリ(52)を含むコンピュータ(200)を、
前記外部メモリに格納されているデータのうち少なくとも一部を格納する入力処理部(254)、
前記入力処理部からのデータを用いてM×Mの畳み込み処理を行うM×Mデータ処理部(256A)、
前記入力処理部からのデータを用いてN×Nの畳み込み処理を行うN×Nデータ処理部(256B)、
前記M×Mデータ処理部及び前記N×Nデータ処理部の処理結果のうちの一方を格納する第1出力処理部(258A)、及び
前記M×Mデータ処理部及び前記N×Nデータ処理部の処理結果のうちの他方を格納する第2出力処理部(258A)として機能させるためのプログラムであって、
前記第1出力処理部は、前記処理結果を前記入力処理部に格納し、
前記第2出力処理部は、前記処理結果を前記外部メモリに転送する
プログラム。
【請求項9】
M及びNは1以上の整数であり、M>Nである請求項8記載のプログラム。
【請求項10】
N=1とする請求項9記載のプログラム。
【請求項11】
前記処理対象データは、3つ以上の直交軸で規定されるデータであり、
前記処理対象データにおける第一の軸及び第二の軸に対して、前記M×Mの畳み込み処理または前記N×Nの畳み込み処理が行われる請求項8~請求項10の何れか1項記載のプログラム。
【請求項12】
前記M×Mの畳み込み処理の結果のデータにおける第三の軸に属するデータ数が、前記N×Nの畳み込み処理の結果のデータにおける前記第三の軸に属するデータ数より小さい場合、前記M×Mデータ処理部の処理結果を前記第2出力処理部に格納させ、前記N×Nデータ処理部の処理結果を前記第1出力処理部に格納させる請求項11記載のプログラム。
【請求項13】
前記N×Nの畳み込み処理の結果のデータにおける第三の軸に属するデータ数が、前記M×Mの畳み込み処理の結果のデータにおける前記第三の軸に属するデータ数より小さい場合、前記N×Nデータ処理部の処理結果を前記第2出力処理部に格納させ、前記M×Mデータ処理部の処理結果を前記第1出力処理部に格納させる請求項11記載のプログラム。
【請求項14】
ニューラルネットワークを用いた画像処理の一部として、前記N×Nの畳み込み処理及び前記M×Mの畳み込み処理を行う請求項8~請求項13の何れか1項記載のプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ処理装置及びプログラムに関する。
【背景技術】
【0002】
既存ネットワークのレイヤの分解や圧縮レイヤの追加をすることで演算量を削減する手法がある(例えば、特許文献1、2)
【0003】
特許文献1には、CNN(Convolutional Neural Network)のフィルターを分解する手法が記載されている。
【0004】
特許文献2には、圧縮レイヤを挿入する手法が記載されている。
【先行技術文献】
【特許文献】
【0005】
【文献】特表2017-525038号公報
【文献】特表2018-506785号公報
【非特許文献】
【0006】
【文献】J. Qiu et al, “Going Deeper with Embedded FPGA Platform for Convolutional Neural Network”, FPGA 2016
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、上記特許文献1、2の手法では、レイヤの分解や圧縮レイヤの挿入により畳み込み演算の特徴量の中間特徴量が発生し、中間特徴量のサイズが大きく外部メモリに書き出す必要がある場合には、非特許文献1のような1layerごとに演算するハードウェアでは外部メモリへのアクセスが増大する(
図30参照)。
【0008】
本発明は、上記の問題点を鑑みてなされたものであり、外部メモリへのアクセス回数を抑えて、畳み込み処理の高速化を図ることができることを目的とする。
【課題を解決するための手段】
【0009】
上記目的を達成するために、本発明に係るデータ処理装置は、処理対象データを格納する外部メモリと、前記外部メモリに格納されているデータのうち少なくとも一部を格納する入力バッファ部と、前記入力バッファ部に格納されたデータを用いてM×Mの畳み込み処理を行うM×Mデータ処理部と、前記入力バッファ部に格納されたデータを用いてN×Nの畳み込み処理を行うN×Nデータ処理部と、前記M×Mデータ処理部及び前記N×Nデータ処理部の処理結果のうちの一方を格納する第1出力バッファ部と、前記M×Mデータ処理部及び前記N×Nデータ処理部の処理結果のうちの他方を格納する第2出力バッファ部と、を備え、前記第1出力バッファ部に格納された処理結果は、前記入力バッファ部に格納され、前記第2出力バッファ部に格納された処理結果は、前記外部メモリに転送される。これにより、外部メモリへのアクセス回数を抑えて、畳み込み処理の高速化を図ることができる。具体的には、2つの畳み込み演算を並列に動作可能であるため、サイズの大きい特徴量の、外部メモリへの保存回数が半減する。
【0010】
また、本発明に係るプログラムは、処理対象データを格納する外部メモリを含むコンピュータを、前記外部メモリに格納されているデータのうち少なくとも一部を格納する入力処理部、前記入力処理部からのデータを用いてM×Mの畳み込み処理を行うM×Mデータ処理部、前記入力処理部からのデータを用いてN×Nの畳み込み処理を行うN×Nデータ処理部、前記M×Mデータ処理部及び前記N×Nデータ処理部の処理結果のうちの一方を格納する第1出力処理部、及び前記M×Mデータ処理部及び前記N×Nデータ処理部の処理結果のうちの他方を格納する第2出力処理部として機能させるためのプログラムであって、前記第1出力処理部は、前記処理結果を前記入力処理部に格納し、前記第2出力処理部は、前記処理結果を前記外部メモリに転送する。これにより、外部メモリへのアクセス回数を抑えて、畳み込み処理の高速化を図ることができる。具体的には、2つの畳み込み演算を並列に動作可能であるため、サイズの大きい特徴量の、外部メモリへの保存回数が半減する。
【発明の効果】
【0011】
本発明に係るデータ処理装置及びプログラムによれば、外部メモリへのアクセス回数を抑えて、畳み込み処理の高速化を図ることができる。
【図面の簡単な説明】
【0012】
【
図1】第1の実施の形態に係るデータ処理装置の構成を示すブロック図である。
【
図2】中間特徴量と出力特徴量のデータサイズを説明するための図である。
【
図3】外部メモリへのデータアクセスが生じるサイクルの例を示す図である。
【
図5】第1の実施の形態に係るデータ処理装置の畳み込み演算制御処理の流れを示すフローチャートである。
【
図6】第1の実施の形態に係るデータ処理装置の畳み込み演算制御処理の流れを示すフローチャートである。
【
図7】各畳み込み層による畳み込み演算の流れの一例を示す図である。
【
図8】第1の実施の形態に係るデータ処理装置の動作を説明するための図である。
【
図9】第1の実施の形態に係るデータ処理装置の動作を説明するための図である。
【
図10】第1の実施の形態に係るデータ処理装置の動作を説明するための図である。
【
図11】第1の実施の形態に係るデータ処理装置の動作を説明するための図である。
【
図12】第1の実施の形態に係るデータ処理装置の動作を説明するための図である。
【
図13】第1の実施の形態に係るデータ処理装置の動作を説明するための図である。
【
図14】第1の実施の形態に係るデータ処理装置の動作を説明するための図である。
【
図15】第1の実施の形態に係るデータ処理装置の動作を説明するための図である。
【
図16】各畳み込み層による畳み込み演算の流れの一例を示す図である。
【
図17】第1の実施の形態に係るデータ処理装置の動作を説明するための図である。
【
図18】第1の実施の形態に係るデータ処理装置の動作を説明するための図である。
【
図19】第1の実施の形態に係るデータ処理装置の動作を説明するための図である。
【
図20】第1の実施の形態に係るデータ処理装置の動作を説明するための図である。
【
図21】第1の実施の形態に係るデータ処理装置の動作を説明するための図である。
【
図22】第1の実施の形態に係るデータ処理装置の動作を説明するための図である。
【
図23】第1の実施の形態に係るデータ処理装置の動作を説明するための図である。
【
図24】第1の実施の形態に係るデータ処理装置の動作を説明するための図である。
【
図25A】外部メモリへのデータアクセスが生じるサイクルが変更される例を示す図である。
【
図25B】外部メモリへのデータアクセスが生じるサイクルが変更される例を示す図である。
【
図26】第2の実施の形態に係るデータ処理装置の構成を示すブロック図である。
【
図27】第2の実施の形態に係るデータ処理装置の演算部の構成を示すブロック図である。
【
図28】第2の実施の形態に係るデータ処理装置の畳み込み演算制御処理の流れを示すフローチャートである。
【
図29】第2の実施の形態に係るデータ処理装置の畳み込み演算制御処理の流れを示すフローチャートである。
【
図30】レイヤの分解や圧縮レイヤの挿入により畳み込み演算の中間特徴量が発生することを説明するための図である。
【発明を実施するための形態】
【0013】
<本実施の形態の概要>
以下、本発明に係るデータ処理装置の実施の形態について図面を参照しながら説明する。
【0014】
本実施の形態では、中間特徴量のデータアクセスが発生する問題の対処法として、
図1に示すように、2layerをパイプライン処理して、中間特徴量のための外部メモリへのアクセス回数を低減させる。
【0015】
具体的には、SVD(Singular Value Decomposition)での分解を前提として、M×Mフィルターを用いた畳み込みを行うM×Mデータ処理部56Aと、N×Nフィルターを用いた畳み込みを行うN×Nデータ処理部56Bとの2つを用意して、並列に計算する。計算結果を保存する第1出力バッファ部58Aから、M×Mデータ処理部56AとN×Nデータ処理部56Bとのデータを入力するための入力バッファ部54へ計算結果を書き戻せるように配線を用意する。例えば、SVDを使用して、M×Mの畳み込み層を、M×Mの畳み込み層→1×1の畳み込み層に分解することができる。これにより、演算量の多い又はパラメータ数(データ量)の多いレイヤの演算を効率的にできるようになる。
【0016】
また、
図2に示すように、SVDにより分解した層の畳み込み演算の処理結果の中間特徴量は、元の出力特徴量よりもデータサイズが小さい。そこで、データサイズが大きい出力特徴量については、外部メモリへのデータアクセスが生じないように、パイプライン処理する。一方、データサイズが小さい中間特徴量のみを外部メモリへ転送することで外部メモリへのデータアクセスを削減する(
図3参照)。すなわち、
図3に示すような処理サイクルA-cycleでは、1×1の畳み込み→N×Nの畳み込みの後に、中間特徴量を外部メモリへ転送する。
【0017】
例えば、出力特徴量のデータサイズは以下の式で表される(
図4参照)。
【0018】
Cout * Nox * Noy * bit_width
【0019】
ただし、Coutは、出力特徴量のチャネル数、Nox、Noyは、出力特徴量のx方向のサイズ、y方向のサイズ、bit_widthは、ビット幅である。
【0020】
また、中間特徴量のデータサイズは以下の式で表される。
【0021】
Cmid * Nox * Noy * bit_width
【0022】
ただし、Cmidは、中間特徴量のチャネル数である。
【0023】
従って、中間特徴量のチャネル数Cmidが、出力特徴量のチャネル数Coutより小さい場合には、中間特徴量のデータサイズは、出力特徴量のデータサイズより小さくなる。
【0024】
なお、DNN(Deep Neural Network)の特徴量は大きく、すべてをオンチップメモリで行うことが難しいため、従来技術では、1layerごとに演算することが主流になっている。例えば、VGG(Visual Geometry Group)第一層目出力(activation 32bit)は、224 * 224 * 64 * 32 / 8 ≒12MByteとなる。
【0025】
また、上記では、SVDによる分解(N×Nの畳み込み -> 1×1の畳み込みに分解。以下、分解手法1という。)について説明したが、分解手法2(1×1の畳み込み->N×Nの畳み込みに分解)もある(
図4参照)。
【0026】
このとき、分解手法1,2の何れにおいても認識精度を担保できる場合には、分解効率(入力チャネル数と出力チャネル数の数に依存する)がよい方に切り替えて使う。
【0027】
すなわち、分解手法1,2ともに中間特徴量のほうが出力特徴量よりも小さいので、分解手法1,2に対応して、N×Nの畳み込み -> 外部メモリ転送 -> 1×1の畳み込み -> N×Nの畳み込み・・・と繰り返すループと、1×1の畳み込み -> 外部メモリ転送 -> N×Nの畳み込み -> 1×1の畳み込み・・と繰り返すループとを切り替える。
【0028】
ここで、分解手法1の演算に必要な特徴量へのアクセス回数は、以下の式で表される。
【0029】
Cin * Kx * Ky * Cmid * Nix * Niy + Cmid * Cout * Nox * Noy
【0030】
ただし、Kx、Kyは、フィルターのサイズであり、例えば、Kx=N、Ky=Nである。Nix、Niyは、入力特徴量のx方向のサイズ、y方向のサイズである。
【0031】
また、分解手法2の演算に必要な特徴量へのアクセス回数は、以下の式で表される。
【0032】
Cin * Cmid * Nix * Niy + Cmid * Cout * Kx * Ky * Nox * Noy
【0033】
従って、Cmidの数が同じであれば、Cin > Coutである場合、分解手法2のほうが特徴量へのアクセス回数が少ないため、分解手法2を使用し、Cin < Cout である場合、分解手法1のほうが特徴量へのアクセス回数が少ないため、分解手法1を使用する。
【0034】
このように、本実施の形態では、ニューラルネットワークを用いた画像処理において、畳み込み層の各々を、SVDにより分解するか、又は、1×1の畳み込みとN×Nの畳み込みとを含む構造とし、分解後の畳み込み層の各々について、認識精度及び入力チャネル数と出力チャネル数の数に応じて定まる、分解手法1、2の何れかを用いるように、N×Nの畳み込み -> 外部メモリ転送 -> 1×1の畳み込み -> N×Nの畳み込み・・・と繰り返すループ、又は、1×1の畳み込み -> 外部メモリ転送 -> N×Nの畳み込み -> 1×1の畳み込み・・と繰り返すループにより、画像処理を行う。
【0035】
[第1の実施の形態]
<第1の実施の形態に係るデータ処理装置の構成>
次に、本実施の形態に係るデータ処理装置の構成について説明する。
図1に示すように、本実施の形態に係るデータ処理装置100は、制御部50と、外部メモリ52と、入力バッファ部54と、M×Mデータ処理部56Aと、N×Nデータ処理部56Bと、第1出力バッファ部58Aと、第2出力バッファ部58Bとを備えている。制御部50と、外部メモリ52と、入力バッファ部54と、M×Mデータ処理部56Aと、N×Nデータ処理部56Bと、第1出力バッファ部58Aと、第2出力バッファ部58Bとは、バス60を介して相互に接続されている。ここで、M及びNは1以上の整数であり、M>Nである。なお、本実施の形態では、M=3、N=1の場合を例に説明する。
【0036】
制御部50は、外部メモリ52と、入力バッファ部54と、M×Mデータ処理部56Aと、N×Nデータ処理部56Bと、第1出力バッファ部58Aと、第2出力バッファ部58Bとの各々を制御する。
【0037】
外部メモリ52は、処理対象データを格納する。処理対象データとは、例えば、畳み込み演算の対象となる特徴マップである。外部メモリ52は、更に、フィルターに関する重みデータなどを格納する。
【0038】
入力バッファ部54は、外部メモリ52のデータまたは第1出力バッファ部58Aからのデータを格納する。
【0039】
M×Mデータ処理部56Aは、入力バッファ部54からのデータを用いてM×Mの畳み込み処理を行う。
【0040】
N×Nデータ処理部56Bは、入力バッファ部54からのデータを用いてN×Nの畳み込み処理を行う。
【0041】
第1出力バッファ部58Aは、M×Mデータ処理部56A及びN×Nデータ処理部56Bの何れか一方の処理結果を格納する。
【0042】
第2出力バッファ部58Bは、M×Mデータ処理部56A及びN×Nデータ処理部56Bの何れか他方の処理結果を格納する。また、第2出力バッファ部58Bは、処理結果を外部メモリ52に転送する。
【0043】
処理対象データは、3つ以上の直交軸で規定されるデータであり、処理対象データにおける第一の軸及び第二の軸に対して、3×3の畳み込み処理または1×1の畳み込み処理が行われる。
【0044】
また、制御部50は、3×3の畳み込み処理の結果のデータにおける第三の軸に属するデータ数(例えば、中間特徴量のチャネル数)が、1×1の畳み込み処理の結果のデータにおける第三の軸に属するデータ数(例えば、中間特徴量のチャネル数)より小さい場合、M×Mデータ処理部56Aの処理結果を第2出力バッファ部58Bに格納し、N×Nデータ処理部56Bの処理結果を第1出力バッファ部58Aに格納するように制御する。
【0045】
また、制御部50は、1×1の畳み込み処理の結果のデータにおける第三の軸に属するデータ数(例えば、中間特徴量のチャネル数)が、3×3の畳み込み処理の結果のデータにおける第三の軸に属するデータ数(例えば、中間特徴量のチャネル数)より小さい場合、N×Nデータ処理部56Bの処理結果を第2出力バッファ部58Bに格納し、M×Mデータ処理部56Aの処理結果を第1出力バッファ部58Aに格納するように制御する。
【0046】
<第1の実施の形態に係るデータ処理装置の作用>
次に、本実施の形態に係るデータ処理装置の作用について説明する。
【0047】
ニューラルネットワークを用いた画像処理において、畳み込み層の各々を、SVDにより分解するか、又は、1×1の畳み込みと3×3の畳み込みとを含む構造とし、分解後の畳み込み層の各々について、制御部50は、Cin < Cout である場合、
図5に示す畳み込み演算制御処理を繰り返し、Cin > Coutである場合、
図6に示す畳み込み演算制御処理を繰り返す。
【0048】
次に、
図5に示す畳み込み演算制御処理について説明する。ここでは、一例として、
図7に示すように、処理対象データD0を入力として、3×3の畳み込み演算と、1×1の畳み込み演算とを順に実行して外部メモリ52に格納することを、繰り返し行う場合を例に説明する。
【0049】
まず、ステップS100において、制御部50は、外部メモリ52から、処理対象データD0を読み込んで、入力バッファ部54へ転送するように制御し、入力バッファ部54に処理対象データD0を格納する(
図8参照)。
【0050】
ステップS102において、制御部50は、入力バッファ部54に格納された処理対象データD0をM×Mデータ処理部56Aに入力して3×3の畳み込み演算C1を行うように制御する(
図9参照)。
【0051】
ステップS104において、制御部50は、3×3の畳み込み演算C1の処理結果データD1を、第1出力バッファ部58Aに格納するように制御する(
図10参照)。
【0052】
ステップS106において、制御部50は、第1出力バッファ部58Aに格納された処理結果データD1を、入力バッファ部54に格納するように制御する(
図11参照)。
【0053】
ステップS108において、制御部50は、入力バッファ部54に格納された処理結果データD1をN×Nデータ処理部56Bに入力して1×1の畳み込み演算C2を行うように制御する(
図12参照)。
【0054】
ステップS110において、制御部50は、1×1の畳み込み演算C2の処理結果データD2を、第2出力バッファ部58Bに格納するように制御する(
図13参照)。
【0055】
ステップS112において、制御部50は、第2出力バッファ部58Bに格納された処理結果データD2を、外部メモリ52へ転送するように制御する(
図14参照)。
【0056】
ステップS114において、制御部50は、繰り返し処理を終了するか否かを判定する。繰り返し処理を終了しないと判定された場合には、上記ステップS100へ戻り、上記ステップS100~S114の処理を繰り返す(
図15参照)。一方、繰り返し処理を終了すると判定された場合には、畳み込み演算制御処理を終了する。
【0057】
次に、
図6に示す畳み込み演算制御処理について説明する。ここでは、一例として、
図16に示すように、M=3、N=1とし、処理対象データD0を入力として、1×1の畳み込み演算と、3×3の畳み込み演算とを順に実行して外部メモリ52に格納することを、繰り返し行う場合を例に説明する。
【0058】
まず、ステップS120において、制御部50は、外部メモリ52から、処理対象データD0を、入力バッファ部54へ転送するように制御し、入力バッファ部54に処理対象データD0を格納する(
図17参照)。
【0059】
ステップS122において、制御部50は、入力バッファ部54に格納された処理対象データD0をN×Nデータ処理部56Bに入力して1×1の畳み込み演算C1を行うように制御する(
図18参照)。
【0060】
ステップS124において、制御部50は、1×1の畳み込み演算C1の処理結果データD1を、第1出力バッファ部58Aに格納するように制御する(
図19参照)。
【0061】
ステップS126において、制御部50は、第1出力バッファ部58Aに格納された処理結果データD1を、入力バッファ部54に格納するように制御する(
図20参照)。
【0062】
ステップS128において、制御部50は、入力バッファ部54に格納された処理結果データD1をM×Mデータ処理部56Aに入力して3×3の畳み込み演算C2を行うように制御する(
図21参照)。
【0063】
ステップS130において、制御部50は、3×3の畳み込み演算C2の処理結果データD2を、第2出力バッファ部58Bに格納するように制御する(
図22参照)。
【0064】
ステップS132において、制御部50は、第2出力バッファ部58Bに格納された処理結果データD2を、外部メモリ52へ転送するように制御する(
図23参照)。
【0065】
ステップS134において、制御部50は、繰り返し処理を終了するか否かを判定する。繰り返し処理を終了しないと判定された場合には、上記ステップS120へ戻り、上記ステップS120~S134の処理を繰り返す(
図24参照)。一方、繰り返し処理を終了すると判定された場合には、畳み込み演算制御処理を終了する。
【0066】
上記では、入力チャネル数Cinと出力チャネル数Coutとの大小関係が各畳み込み層で同じ場合を例に説明したが、入力チャネル数Cinと出力チャネル数Coutとの大小関係が、ニューラルネットワークの中間の畳み込み層で切り替わってもよい。
【0067】
例えば、
図25A(a)に示すオリジナルネットワークを、
図25A(b)に示すように、途中で分解手法を変更して分解した場合に、1×1の畳み込み -> N×Nの畳み込み-> 外部メモリ転送・・・と繰り返すサイクル(A-cycle)から、N×Nの畳み込み -> 1×1の畳み込み-> 外部メモリ転送・・・と繰り返すサイクル(B-cycle)に切り替える。サイクルの切り替えのタイミングで、1×1の畳み込み->1×1の畳み込みの演算が発生するが、1<Nの場合、1×1の畳み込みの演算はN×Nデータ処理部56Bで処理可能なため、変更位置をまたいで、当該サイクルを実行する。この場合、サイクル切り替え前には、上記
図5の畳み込み演算制御処理を繰り返し、サイクル切り替え後には、上記
図6の畳み込み演算制御処理を繰り返すようにすればよい。
【0068】
あるいは、
図25B(a)に示すオリジナルネットワークを、
図25B(b)に示すように、途中で分解手法を変更して分解した場合に、N×Nの畳み込み -> 1×1の畳み込み-> 外部メモリ転送・・・と繰り返すサイクル(B-cycle)から、1×1の畳み込み ->N xNの畳み込み-> 外部メモリ転送・・・と繰り返すサイクル(A-cycle)に切り替える。サイクルの切り替えのタイミングで、N×Nの畳み込み->N×Nの畳み込みの演算が発生するが、N×Nの畳み込み->N×Nの畳み込みの演算は同一のデータ処理部を使うため、演算サイクルを半分にする。この場合、サイクル切り替え前には、上記
図6の畳み込み演算制御処理を繰り返し、サイクル切り替え後には、上記
図5の畳み込み演算制御処理を繰り返すようにすればよい。
【0069】
以上説明したように、本発明の実施の形態に係るデータ処理装置では、第1出力バッファ部から、M×Mデータ処理部及びN×Nデータ処理部の何れか一方の畳み込み演算の結果を、入力バッファ部に格納するようにし、第2出力バッファ部は、M×Mデータ処理部及びN×Nデータ処理部の何れか他方の畳み込み演算の結果を外部メモリに転送する。これにより、外部メモリへのアクセス回数を抑えて、畳み込み処理の高速化を図ることができる。具体的には、2つの畳み込み演算を並列に動作させ、サイズの大きい特徴量を持つ層(レイヤ)の次の層の計算を逐次実行するため、特徴量の、外部メモリへの保存回数が半減する。
【0070】
また、本発明の実施の形態に係るデータ処理装置において、M×Mの畳み込み処理の結果のデータにおける第三の軸に属するデータ数が、N×Nの畳み込み処理の結果のデータにおける第三の軸に属するデータ数より小さい場合、M×Mデータ処理部の処理結果を第2出力バッファ部に格納し、N×Nデータ処理部の処理結果を第1出力バッファ部に格納する。これにより、分解手法1の構造のネットワークに対しての演算回数削減を生かしつつ、外部メモリ転送を抑えることができる。
【0071】
また、本発明の実施の形態に係るデータ処理装置において、N×Nの畳み込み処理の結果のデータにおける第三の軸に属するデータ数が、M×Mの畳み込み処理の結果のデータにおける第三の軸に属するデータ数より小さい場合、N×Nデータ処理部の処理結果を第2出力バッファ部に格納し、M×Mデータ処理部の処理結果を第1出力バッファ部に格納する。これにより、分解手法2の構造のネットワークに対しての演算回数削減を生かしつつ、外部メモリ転送を抑えることができる。
【0072】
[第2の実施の形態]
<第2の実施の形態に係るデータ処理装置の構成>
次に、本実施の形態に係るデータ処理装置の構成について説明する。
図26に示すように、本実施の形態に係るデータ処理装置200は、演算部250と、外部メモリ52と、を備えている。演算部250と、外部メモリ52とは、バス60を介して相互に接続されている。
【0073】
演算部250は、CPU(Central Processing Unit)と、RAM(Random Access Memory)と、後述する各処理ルーチンを実行するためのプログラムや各種データを記憶したROM(Read Only Memory)と、を含むコンピュータで構成することが出来る。
【0074】
演算部250は、
図27に示すように、機能的には、入力処理部254と、M×Mデータ処理部256Aと、N×Nデータ処理部256Bと、第1出力処理部258Aと、第2出力処理部258Bとを備えている。ここで、M及びNは1以上の整数であり、M>Nである。なお、本実施の形態では、M=3、N=1の場合を例に説明する。
【0075】
入力処理部254は、外部メモリ52のデータまたは第1出力処理部258AからのデータをRAMに格納する。また、入力処理部254は、RAMに格納したデータを、M×Mデータ処理部256A又はN×Nデータ処理部256Bに出力する。
【0076】
M×Mデータ処理部256Aは、入力処理部254からのデータを用いて3×3の畳み込み処理を行う。
【0077】
N×Nデータ処理部256Bは、入力処理部254からのデータを用いて1×1の畳み込み処理を行う。
【0078】
第1出力処理部258Aは、M×Mデータ処理部256A及びN×Nデータ処理部256Bの何れか一方の処理結果をRAMに格納する。また、第1出力処理部258Aは、RAMに格納したデータを、入力処理部254に出力する。
【0079】
第2出力処理部258Bは、M×Mデータ処理部256A及びN×Nデータ処理部256Bの何れか他方の処理結果をRAMに格納する。また、第2出力処理部258Bは、RAMに格納した処理結果を外部メモリ52に転送する。
【0080】
処理対象データは、3つ以上の直交軸で規定されるデータであり、処理対象データにおける第一の軸及び第二の軸に対して、3×3の畳み込み処理または1×1の畳み込み処理が行われる。
【0081】
また、3×3の畳み込み処理の結果のデータにおける第三の軸に属するデータ数(例えば、中間特徴量のチャネル数)が、1×1の畳み込み処理の結果のデータにおける第三の軸に属するデータ数(例えば、中間特徴量のチャネル数)より小さい場合、M×Mデータ処理部256Aは、3×3の畳み込み処理の結果を第2出力処理部258Bに出力し、N×Nデータ処理部256Bは、1×1の畳み込み処理の結果を第1出力処理部258Aに出力する。
【0082】
また、3×3の畳み込み処理の結果のデータにおける第三の軸に属するデータ数(例えば、中間特徴量のチャネル数)が、3×3の畳み込み処理の結果のデータにおける第三の軸に属するデータ数(例えば、中間特徴量のチャネル数)より小さい場合、N×Nデータ処理部256Bは、1×1の畳み込み処理の結果を第2出力処理部258Bに出力し、M×Mデータ処理部256Aは、3×3の畳み込み処理の結果を第1出力処理部258Aに出力する。
【0083】
<第2の実施の形態に係るデータ処理装置の作用>
次に、本実施の形態に係るデータ処理装置の作用について説明する。
【0084】
ニューラルネットワークを用いた画像処理において、畳み込み層の各々を、SVDにより分解し、分解後の畳み込み層の各々について、演算部250は、Cin < Cout である場合、
図28に示す畳み込み演算制御処理を繰り返し、Cin > Coutである場合、
図29に示す畳み込み演算制御処理を繰り返す。
【0085】
次に、
図28に示す畳み込み演算制御処理について説明する。ここでは、一例として、上記
図7に示すように、処理対象データD0を入力として、3×3の畳み込み演算と、1×1の畳み込み演算とを順に実行して外部メモリ52に格納することを、繰り返し行う場合を例に説明する。
【0086】
まず、ステップS200において、演算部250は、外部メモリ52から、処理対象データD0を読み出して、入力処理部254へ転送するように制御し、演算部250は、入力処理部254として、処理対象データD0をRAMに格納する。
【0087】
ステップS202において、演算部250は、入力処理部254として、RAMに格納された処理対象データD0をM×Mデータ処理部256Aに入力し、演算部250は、M×Mデータ処理部256Aとして、3×3の畳み込み演算C1を行う。
【0088】
ステップS204において、演算部250は、M×Mデータ処理部256Aとして、3×3の畳み込み演算C1の処理結果データD1を、第1出力処理部258Aへ出力し、演算部250は、第1出力処理部258Aとして、処理結果データD1をRAMに格納する。
【0089】
ステップS206において、演算部250は、第1出力処理部258Aとして、RAMに格納された処理結果データD1を、入力処理部254に出力し、演算部250は、入力処理部254として、処理結果データD1をRAMに格納する。
【0090】
ステップS208において、演算部250は、入力処理部254として、RAMに格納された処理結果データD1を、N×Nデータ処理部256Bに入力し、演算部250は、N×Nデータ処理部256Bとして、1×1の畳み込み演算C2を行う。
【0091】
ステップS210において、演算部250は、N×Nデータ処理部256Bとして、1×1の畳み込み演算C2の処理結果データD2を、第2出力処理部258Bに出力し、演算部250は、第2出力処理部258Bとして、処理結果データD2をRAMに格納する。
【0092】
ステップS212において、演算部250は、第2出力処理部258Bとして、RAMに格納された処理結果データD2を、外部メモリ52へ転送する。
【0093】
ステップS214において、演算部250は、繰り返し処理を終了するか否かを判定する。繰り返し処理を終了しないと判定された場合には、上記ステップS200へ戻り、上記ステップS200~S214の処理を繰り返す。一方、繰り返し処理を終了すると判定された場合には、畳み込み演算制御処理を終了する。
【0094】
次に、
図29に示す畳み込み演算制御処理について説明する。ここでは、一例として、上記
図16に示すように、処理対象データD0を入力として、1×1の畳み込み演算と、3×3の畳み込み演算との組み合わせを、繰り返し行う場合を例に説明する。
【0095】
まず、ステップS220において、演算部250は、外部メモリ52から、処理対象データD0を、入力処理部254へ転送するように制御し、演算部250は、入力処理部254として、処理対象データD0をRAMに格納する。
【0096】
ステップS222において、演算部250は、入力処理部254として、RAMに格納された処理対象データD0をN×Nデータ処理部256Bに入力し、演算部250は、N×Nデータ処理部256Bとして、1×1の畳み込み演算C1を行う。
【0097】
ステップS224において、演算部250は、N×Nデータ処理部256Bとして、1×1の畳み込み演算C1の処理結果データD1を、第1出力処理部258Aへ出力し、演算部250は、第1出力処理部258Aとして、処理結果データD1をRAMに格納する。
【0098】
ステップS226において、演算部250は、第1出力処理部258Aとして、RAMに格納された処理結果データD1を、入力処理部254に出力し、演算部250は、入力処理部254として、処理結果データD1をRAMに格納する。
【0099】
ステップS228において、演算部250は、入力処理部254として、RAMに格納された処理結果データD1を、M×Mデータ処理部256Aに入力し、演算部250は、M×Mデータ処理部256Aとして、3×3の畳み込み演算C2を行う。
【0100】
ステップS230において、演算部250は、M×Mデータ処理部256Aとして、3×3の畳み込み演算C2の処理結果データD2を、第2出力処理部258Bに出力し、演算部250は、第2出力処理部258Bとして、処理結果データD2をRAMに格納する。
【0101】
ステップS232において、演算部250は、第2出力処理部258Bとして、RAMに格納された処理結果データD2を、外部メモリ52へ転送する。
【0102】
ステップS234において、演算部250は、繰り返し処理を終了するか否かを判定する。繰り返し処理を終了しないと判定された場合には、上記ステップS220へ戻り、上記ステップS220~S234の処理を繰り返す。一方、繰り返し処理を終了すると判定された場合には、畳み込み演算制御処理を終了する。
【0103】
上記では、入力チャネル数Cinと出力チャネル数Coutとの大小関係が各畳み込み層で同じ場合を例に説明したが、上記第1の実施の形態と同様に、入力チャネル数Cinと出力チャネル数Coutとの大小関係が、ニューラルネットワークの中間の畳み込み層で切り替わってもよい。
【0104】
以上説明したように、第2の実施の形態に係るデータ処理装置では、第1出力処理部から、M×Mデータ処理部及びN×Nデータ処理部の何れか一方の畳み込み演算の結果を、入力処理部へ出力するようにし、第2出力処理部は、M×Mデータ処理部及びN×Nデータ処理部の何れか他方の畳み込み演算の結果を外部メモリに転送する。これにより、外部メモリへのアクセス回数を抑えて、畳み込み処理の高速化を図ることができる。具体的には、2つの畳み込み演算を並列に動作可能であるため、サイズの大きい特徴量の、外部メモリへの保存回数が半減する。
【0105】
また、第2の実施の形態に係るデータ処理装置において、M×Mの畳み込み処理の結果のデータにおける第三の軸に属するデータ数が、N×Nの畳み込み処理の結果のデータにおける第三の軸に属するデータ数より小さい場合、M×Mデータ処理部の処理結果を第2出力処理部に格納させ、N×Nデータ処理部の処理結果を第1出力処理部に格納させる。これにより、分解手法1の構造のネットワークに対しての演算回数削減を生かしつつ、外部メモリ転送を抑える事ができる。
【0106】
また、第2の実施の形態に係るデータ処理装置において、N×Nの畳み込み処理の結果のデータにおける第三の軸に属するデータ数が、M×Mの畳み込み処理の結果のデータにおける第三の軸に属するデータ数より小さい場合、N×Nデータ処理部の処理結果を第2出力処理部に格納させ、M×Mデータ処理部の処理結果を第1出力処理部に格納させる。これにより、分解手法2の構造のネットワークに対しての演算回数削減を生かしつつ、外部メモリ転送を抑える事ができる。
【符号の説明】
【0107】
50 制御部
52 外部メモリ
54 入力バッファ部
56A、256A M×Mデータ処理部
56B、256B N×Nデータ処理部
58A 第1出力バッファ部
58B 第2出力バッファ部
60 バス
100 データ処理装置
200 データ処理装置
250 演算部
254 入力処理部
258A 第1出力処理部
258B 第2出力処理部