(57)【要約】      （修正有）【課題】畳み込みニューラルネットワークの畳み込み層における演算効率を向上させる方法及び装置を提供する。【解決手段】折り畳まれていない特徴データ及びオリジナル畳み込みカーネルを読み取るステップと、折り畳まれていない特徴データを幅と高さとの少なくとも一つの次元において折り畳んで折り畳まれた特徴データを生成するステップと、折り畳まれた特徴データ及びオリジナル畳み込みカーネルを前処理するステップと、折り畳まれた特徴データをＳＲＡＭに記憶するステップと、オリジナル畳み込みカーネルを少なくとも一つの次元において折り畳んで、オリジナル畳み込みカーネルに対応する折り畳まれた畳み込みカーネルを生成するステップと、折り畳まれた畳み込みカーネルをＳＲＡＭに記憶するステップと、ＳＲＡＭから折り畳まれた特徴データ及び折り畳まれた畳み込みカーネルを演算手段に読み取り、畳み込み演算を実行するステップとを含む。【選択図】図１
2019125351.tif 000002
【特許請求の範囲】
【請求項１】
畳み込みニューラルネットワークの畳み込み層における演算を実行する方法であって、
前記畳み込み層に提供される折り畳まれていない特徴データ及びオリジナル畳み込みカーネルを、ダイナミックランダムアクセス（ＤＲＡＭ）から読み取るステップと、
前記折り畳まれていない特徴データを幅と高さの少なくとも一つの次元において折り畳んで、折り畳まれた特徴データを生成するステップと、
前記折り畳まれた特徴データ及び前記オリジナル畳み込みカーネルの前処理を実行するステップと、
前処理された折り畳まれた特徴データをスタティックランダムアクセスメモリ（ＳＲＡＭ）に記憶するステップと、
前記前処理されたオリジナル畳み込みカーネルを前記少なくとも一つの次元において折り畳んで、前記オリジナル畳み込みカーネルに対応する１つ又は複数の折り畳まれた畳み込みカーネルを生成するステップと、
前記１つ又は複数の折り畳まれた畳み込みカーネルを前記スタティックランダムアクセスメモリに記憶するステップと、
前記スタティックランダムアクセスメモリから前記前処理された折り畳まれた特徴データ及び前記１つ又は複数の折り畳まれた畳み込みカーネルを演算手段に読み込み、前記１つ又は複数の折り畳まれた畳み込みカーネルを使用して前処理された折り畳まれた特徴データに対して畳み込み演算を実行するステップと
を含む畳み込みニューラルネットワークの畳み込み層における演算を実行する方法。
【請求項２】
前記スタティックランダムアクセスメモリは複数のメモリ手段を含み、前記前処理された折り畳まれた特徴データは、少なくとも２つのピクセルごとに同一の前記メモリ手段に記憶され、各前記折り畳まれた畳み込みカーネルは、少なくとも２つのピクセルごとに同一の前記メモリ手段に記憶される請求項１に記載の方法。
【請求項３】
前記演算手段は複数の乗算器及び複数の加算器を含む請求項１に記載の方法。
【請求項４】
前記折り畳まれていない特徴データを前記少なくとも一つの次元において折り畳むことは、
第一の次元におけるNx枚ごとの連続したスライスを深さの方向で接合するように、前記第一の次元において、前記折り畳まれていない特徴データに対して、第一の折り畳みを行うステップをさらに含み、
前記第一の次元は幅と高さのいずれかであり、Nxは１より大きい整数であり、
前記折り畳まれていない特徴データにおける前記第一の次元のifx×Nx+jfx番目のスライスのすべてのCx個のチャネルのデータが、前記第一の折り畳みの結果の前記第一の次元におけるifx番目のスライスのjfx×Cx番目のチャネルから始まる連続したCx個のチャネルのデータに対応し、ifxは０以上の整数で、jfxは０以上Nx未満の整数で、Cxは０より大きい整数である
請求項３に記載の方法。
【請求項５】
前記前処理は、
前記畳み込み層によって指定されたパディング方法に従って、前記パディング方法が求める前記折り畳まれていない特徴データの前記第一の次元における開始境界にパディングする量を示す第一パディング量P1を決定するステップと、
前記第一パディング量P1は０以上であり、
【数１】
2019125351.tif 000023
を含む請求項４に記載の方法。
【請求項６】
前記畳み込み演算を実行することは、
前記オリジナル畳み込みカーネルの前記第一の次元における第一ストライドがNxに等しくない場合、前記オリジナル畳み込みカーネルに対応するすべての折り畳まれた畳み込みカーネルを用いて、前処理された折り畳まれた特徴データの同一の部分を畳み込んでから、前記オリジナル畳み込みカーネルに対応するすべての折り畳まれた畳み込みカーネルを、前記第一の次元で前記第一ストライドに従って同時に移動させ、前記前処理された折り畳まれた特徴データに対して、前記すべての折り畳まれた畳み込みカーネルを用いて畳み込み演算を実行することは、前記複数の乗算器を利用して前記前処理された折り畳まれた特徴データにおける複数のピクセルのそれぞれが、複数の折り畳まれた畳み込みカーネルの対応するピクセルと乗算することを含み、又は
前記オリジナル畳み込みカーネルに対応する各前記折り畳まれた畳み込みカーネルをそれぞれ用いて、前処理された折り畳まれた特徴データの全体に対して畳み込み演算を実行し、前記折り畳まれた畳み込みカーネルごとの前記第一の次元におけるストライドは前記第一ストライドに等しく、及び
前記オリジナル畳み込みカーネルの前記第一の次元における第一ストライドがNxに等しい場合、折り畳まれた畳み込みカーネルごとの前記第一の次元におけるストライドは１である
ことを含む請求項４に記載の方法。
【請求項７】
前処理されたオリジナル畳み込みカーネルを前記少なくとも一つの次元において折り畳みを行うことは、
前処理されたオリジナル畳み込みカーネルの前記第一の次元における開始境界においてkx×Sx個のゼロスライスをそれぞれパディングすることで、Ex個の第一の変換された畳み込みカーネルを生成するステップと、
ただし、Sxは前記オリジナル畳み込みカーネルの前記第一の次元における第一ストライドであり、ExはNxとSxによって決まる１以上の値であり、kxは０以上Ex未満の整数であり、
前記第一の次元におけるNx枚ごとの連続したスライスを深さ方向で接合するように、前記第一の次元において、第一の変換された畳み込みカーネルごとに第二の折り畳みを行い、対応する第一の折り畳まれた畳み込みカーネルを生成するステップとをさらに含み、
第一の変換された畳み込みカーネルごとの前記第一の次元におけるikx×Nx+jkx番目のスライスのすべてのCx個のチャネルのデータは、対応する第一の折り畳まれた畳み込みカーネルの前記第一の次元におけるikx番目のスライスのjkx×Cx番目のチャネルから始まる連続したCx個のチャネルのデータに対応し、ただし、ikxは０以上の整数で、jkxは０以上Nx未満の整数である
請求項４に記載の方法。
【請求項８】
前記折り畳まれていない特徴データを前記少なくとも一つの次元において折り畳むことは、
第二の次元におけるNy枚ごとの連続したスライスを深さ方向で接合するように、前記第二の次元において前記第一の折り畳みの結果に対して第三の折り畳みを行うことをさらに含み、
前記第二の次元は幅と高さの他方であり、Nyは１より大きい整数であり、
前記第一の折り畳みの結果における前記第二の次元のify×Ny+jfy番目のスライスのすべてのCy個のチャネルのデータは、前記第三の折り畳みの結果における前記第二の次元のify番目のスライスのjfy×Cy番目のチャネルから始まる連続したCy個のチャネルのデータに対応し、ifyは０以上の整数で、jfyは０以上Ny未満の整数で、Cyは０より大きい整数である
請求項７に記載の方法。
【請求項９】
前記前処理は、
前記畳み込み層によって指定されたパディング方法に従って、前記パディング方法が求める前記折り畳まれていない特徴データの前記第二の次元における開始境界にパディングする量を示す第三パディング量P3を決定するステップと、
前記第三パディング量P3は０以上であり、
【数２】
2019125351.tif 000024
をさらに含む請求項８に記載の方法。
【請求項１０】
前処理されたオリジナル畳み込みカーネルを前記少なくとも一つの次元において折り畳むことは、
第一の変換された畳み込みカーネルごとの前記第二の次元における開始境界において、ky×Sy個のゼロスライスをそれぞれパディングすることで、第一の折り畳まれた畳み込みカーネルごとに、Ey個の第二の変換された畳み込みカーネルをそれぞれ生成するステップと、
ただし、Syは前記オリジナル畳み込みカーネルの前記第二の次元における第二ストライドであり、EyはNyとSyによって決まる１以上の値であり、kyは0以上Ey未満の整数であり、
前記第二の次元におけるNy枚ごとの連続したスライスを深さ方向で接合するように、前記第二の次元において、第二の変換された畳み込みカーネルごとに第四の折り畳みを行い、対応する第二の折り畳まれた畳み込みカーネルを生成するステップとをさらに含み、
第二の変換された畳み込みカーネルごとの前記第二の次元におけるiky×Ny+jky番目のスライスのすべてのCy個のチャネルのデータは、対応する第二の折り畳まれた畳み込みカーネルの前記第二の次元におけるiky番目のスライスのjky×Cy番目のチャネルから始まる連続したCy個のチャネルのデータに対応し、ただし、ikyは０以上の整数で、jkyは０以上Ny未満の整数である
請求項８に記載の方法。
【請求項１１】
前記畳み込み演算を実行することは、
前記オリジナル畳み込みカーネルの前記第二の次元における第二ストライドがNyに等しくない場合、前記オリジナル畳み込みカーネルに対応するすべての折り畳まれた畳み込みカーネルを用いて、前処理された折り畳まれた特徴データの同一の部分を畳み込んでから、前記オリジナル畳み込みカーネルに対応するすべての折り畳まれた畳み込みカーネルを、前記第二の次元に前記第二ストライドに従って同時に移動させるステップ、又は
前記オリジナル畳み込みカーネルに対応する各前記折り畳まれた畳み込みカーネルをそれぞれ用いて、前処理された折り畳まれた特徴データの全体に対して畳み込み演算を実行するステップをさらに含み、
前記折り畳まれた畳み込みカーネルごとの前記第二の次元におけるストライドが前記第二ストライドに等しく、
前記オリジナル畳み込みカーネルの前記第二の次元における第二ストライドがNyに等しい場合、折り畳まれた畳み込みカーネルごとの前記第二の次元におけるストライドは１である
請求項８に記載の方法。
【請求項１２】
指令が格納されたメモリと、
前記指令を実行するように構成される１つ又は複数のプロセッサとを具備し、
前記指令が実行されると、前記１つ又は複数のプロセッサによって請求項１〜１１のいずれか１項に記載の方法が実行される
畳み込みニューラルネットワークの畳み込み層における演算を実行するための装置。
【請求項１３】
畳み込みニューラルネットワークの畳み込み層における演算を実行するための装置であって、
前記畳み込み層に提供される折り畳まれていない特徴データを、幅と高さとの少なくとも一つの次元において折り畳んで、折り畳まれた特徴データを生成するように構成された第一折り畳み部と、
前記折り畳まれた特徴データ及び前記折り畳み層のオリジナル畳み込みカーネルを前処理するように構成された前処理部と、
前処理されたオリジナル畳み込みカーネルを前記少なくとも一つの次元において折り畳んで、前記オリジナル畳み込みカーネルに対応する１つ又は複数の折り畳まれた畳み込みカーネルを生成するように構成された第二折り畳み部と、
前記１つ又は複数の折り畳まれた畳み込みカーネルを用いて前処理された折り畳まれた特徴データに対して畳み込み演算を実行するように構成された演算部と
を含む畳み込みニューラルネットワークの畳み込み層における演算を実行するための装置。
【請求項１４】
前記請求項１〜１１のいずれか１項に記載の方法が実行されるによって得られたデータ構造のデータブロックが格納されたメモリ。
【請求項１５】
１つ又は複数のメモリ及び１つ又は複数のプロセッサを具備する装置によって、前記請求項１〜１１のいずれか１項に記載の方法が実行されるように構成されるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、畳み込みニューラルネットワークの技術分野に関し、具体的には、畳み込みニューラルネットワークの畳み込み層における演算を実行する方法及び装置に関する。
【背景技術】
【０００２】
畳み込みニューラルネットワークに基づくディープラーニング技術は、画像認識、ビデオ分析、自然言語処理、補助運転などの様々な分野に広く利用されている。 
【発明の概要】
【発明が解決しようとする課題】
【０００３】
畳み込みニューラルネットワークは、通常では演算の量は膨大であり、汎用型中央処理装置（ＣＰＵ）、グラフィックプロセッサ（ＧＰＵ）、専用アクセラレータなどのハードウェアを利用して畳み込みニューラルネットワークにおける演算を効率的に実行することが望ましい。
【課題を解決するための手段】
【０００４】
本開示は、畳み込みニューラルネットワークの畳み込み層における演算を実行する方法を提供する。該方法は、畳み込み層に提供される折り畳まれていない特徴データを、幅と高さの少なくとも一つの次元において折り畳んで、折り畳まれた特徴データを生成するステップと、折り畳まれた特徴データ及び前記折り畳み層のオリジナル畳み込みカーネルを前処理するステップと、前処理されたオリジナル畳み込みカーネルを少なくとも一つの次元において折り畳んで、オリジナル畳み込みカーネルに対応する１つ又は複数の折り畳まれた畳み込みカーネルを生成するステップと、生成された１つ又は複数の折り畳まれた畳み込みカーネルを用いて前処理された折り畳まれた特徴データに対して畳み込み演算を実行するステップとを含む。
【０００５】
本開示は、畳み込みニューラルネットワークの畳み込み層における演算を実行する装置をさらに提供する。該装置は、指令が格納されたメモリと、前記指令を実行するように構成される１つ又は複数のプロセッサとを具備し、前記指令が実行されると、前記１つ又は複数のプロセッサによって前記方法が実行される。
【０００６】
本開示は、畳み込みニューラルネットワークの畳み込み層における演算を実行する装置をさらに提供する。該装置は、畳み込み層に提供される折り畳まれていない特徴データを、幅と高さの少なくとも一つの次元において折り畳んで折り畳まれた特徴データを生成するように構成された第一折り畳み部と、折り畳まれた特徴データ及び折り畳み層のオリジナル畳み込みカーネルを前処理するように構成された前処理部と、前処理されたオリジナル畳み込みカーネルを少なくとも一つの次元において折り畳んで、オリジナル畳み込みカーネルに対応する１つ又は複数の折り畳まれた畳み込みカーネルを生成するように構成された第二折り畳み部と、１つ又は複数の折り畳まれた畳み込みカーネルを用いて前処理された折り畳まれた特徴データに対して畳み込み演算を実行するように構成された演算部とを具備する。
【０００７】
本開示は、上記方法が実行されるによって得られたデータ構造のデータブロックが格納された記憶媒体をさらに提供する。
【０００８】
本開示は、１つ又は複数のメモリ及び１つ又は複数のプロセッサを含む装置によって、前記方法が実行されるように構成されるコンピュータプログラムをさらに提供する。
【発明の効果】
【０００９】
本開示に係る方法及び／又は装置によれば、チャネルの利用効率を向上させ、キャッシュメモリの占有量を低減することができ、演算効率を向上させることができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、本開示の実施形態に係る畳み込みニューラルネットワークの畳み込み層における演算を実行する方法のフローチャートを示す。
【図２】図２は、本開示の実施形態に係る折り畳まれていない特徴データを一つの次元において折り畳む例を示す。
【図３】図３は、本開示の実施形態に係る折り畳まれていない特徴データを二つの次元において折り畳む例を示す。
【図４】図４は、本開示の実施形態に係る折り畳まれた特徴データ及びオリジナル畳み込みカーネルを前処理する例を示す。
【図５】図５は、本開示の実施形態に係る前処理されたオリジナル畳み込みカーネルを一つの次元において折り畳む例を示す。
【図６】図６は、本開示の実施形態に係る前処理されたオリジナル畳み込みカーネルを二つの次元において折り畳む例を示す。
【図７】図７は、本開示の実施形態に係る畳み込み演算を実行する例を示す。
【図８】図８は、本開示の実施形態に係る畳み込み演算を実行する例を示す。
【図９】図９は、本開示の実施形態に係る畳み込みニューラルネットワークの畳み込み層における演算を実行する装置を示す。
【図１０】図１０は、本開示の実施形態に係る畳み込みニューラルネットワークの畳み込み層における演算を実行する装置を示す。
【図１１】図１１は、本開示の実施形態に係る折り畳まれた特徴データに対して畳み込み演算を実行する装置を示す。
【図１２Ａ】図１２Ａは、特徴データがスタチックランダムアクセスメモリ（ＳＲＡＭ）に記憶されている例を示す。
【図１２Ｂ】図１２Ｂは、特徴データがスタチックランダムアクセスメモリ（ＳＲＡＭ）に記憶されている例を示す。
【発明を実施するための形態】
【００１１】
以下の記載において、添付図面を参照しつつ、本開示に係る例示的な実施形態を述べる。
【００１２】
本開示において、畳み込みニューラルネットワークに提供される特徴データは、幅、高さ及び深さ（すなわち異なるチャネル）などのような複数の次元を有するデータキューブとみなすことができる。該特徴データにおける一つのデータが、データキューブ内の一つの点にそれぞれ対応させることができる。畳み込みニューラルネットワークにおける畳み込み演算のための重みパラメータも畳み込みカーネルごとに一つのデータキューブとみなすことができる。
【００１３】
通常、データキューブを記述するときに、「スライス」という用語を使うことができる。データキューブの３つの次元を、それぞれ３次元デカルト座標系のＸ軸、Ｙ軸、Ｙ軸で示される次元に対応するとみなす場合、Ｘ軸で示される次元に対応する第一の次元における該データキューブのスライスが、Ｘ軸に直交する平面を用いて該データキューブ内のデータに対してサンプリングした結果を示す。該結果は、Ｙ軸及びＺ軸によって示される二次元平面内の矩形のデータである。形式的には、データキューブを点の集合とみなす場合、すなわち、
【数１】
2019125351.tif 000003
ただし、Ｗ、Ｈ、及びＤはいずれも０より大きい整数である場合、該データキューブのＸ軸で示される次元に対応する第一の次元におけるスライスは、
【数２】
2019125351.tif 000004
すべてのデータがゼロ（又はゼロに相当）であるスライスは、ゼロスライスと呼ばれることがある。
【００１４】
さらに、「ピクセル」という用語もデータキューブを記述するために用いられる。データキューブのピクセルは、同じ幅（Ｘ軸）及び高さ（Ｙ軸）の座標を有するデータキューブ内の点を含み、
【数３】
2019125351.tif 000005
と記される。１つのスライスは複数のピクセルを含み得ることは理解される。
【００１５】
本明細書において、便宜上、特徴データ又は畳み込みカーネルの特定の次元におけるデータも「スライス」で記述することがあり、例えば、幅の次元のスライス（「幅のスライス」と略称）、高の次元のスライス（「高さのスライス」と略称）などである。
【００１６】
なお、データキューブＡの第一の次元（例えば幅の次元）でパディングし又は１つ以上のゼロスライスを追加することを言及する場合に、データキューブＡの第一の次元のある境界（例えば幅の次元の左側又は右側）に１つ又は複数のゼロスライスを追加することによって該データキューブＡの第一の次元の次元値（例えば幅）を増加させ、増加した各ゼロスライスが別の２つの次元（例えば、高さの次元及び深さの次元）においてオリジナルデータキューブＡと同一の次元値（例えば高さの値及び深さの値）を有することを意味するものとすることができる。
【００１７】
なお、データキューブＡの第一の次元及び第二の次元（例えば幅の次元及び高さの次元）でパディングし、又は１つ以上のゼロスライスを附加することに言及するとき、データキューブＡの第一の次元のある境界（例えば幅の次元の左側又は右側）に１つ又は複数のゼロスライスを追加することによって該データキューブＡの第一の次元の次元値（例えば幅）を増加させ、増加した各ゼロスライスが別の２つの次元（例えば、高さの次元及び深さの次元）においてオリジナルデータキューブＡと同一の次元値（例えば高さの値及び深さの値）を有することを意味するものとすることができる。そして、幅が増加した後に得られたデータキューブＡ’の第二の次元のある境界（例えば高さの次元の上側又は下側）に１つ又は複数のゼロスライスを追加することによって該データキューブＡ’の第二の次元の次元値（例えば高さ）を増加させ、増加した各ゼロスライスが別の２つの次元（例えば、幅の次元及び深さの次元）においてデータキューブＡ’と同一の次元値（例えば幅の値及び深さの値）を有することを意味するものとすることができる。
【００１８】
なお、データキューブＡの各スライスを深さ方向に揃える（align）ことを言及するとき、データキューブＡの所望の深さ値を有しないスライス（幅スライスであってもよく又は高さスライスであってもよい）に対して、パディングされたデータキューブＡの各スライスが所望の深さ値を有するように深さの次元にゼロ（又はゼロに相当する値）を追加することを意味するものとすることができる。
【００１９】
なお、データキューブＡの第一の次元及び／又は第二の次元においてパディングをすると言及するときは、特に明記しない限り、パディングされるゼロスライスの数はゼロ、又は一つ又は複数であってもよい。
【００２０】
畳み込みニューラルネットワークは、通常では演算の量は膨大であり、汎用型中央処理装置、グラフィックプロセッサ、専用のアクセラレータなどのハードウェアを利用して畳み込みニューラルネットワークにおける演算を効率的に実行することが望まれている。演算効率を向上させ、及び／又はハードウェア設計を簡素化させ、例えば、マルチチャネルをサポートするメモリを設計して、畳み込み演算を実行する加算器及び／又は乗算器にデータを提供するや、演算手段をマルチチャネルの演算を対応できるようにすることができる。
【００２１】
一般的に、畳み込みニューラルネットワークの入力層に提供される特徴データのチャネルの数は少い（通常、３つのチャネル又は１つのチャネル）可能性があり、かつ、畳み込みニューラルネットワークのフィードフォワード推論（feedforward reasoning）方向に、相対的に前寄りの畳み込み層への入力特徴データも、チャネルの数が少い可能性がある。チャネルを揃えさせるため、深さ又はチャネルの次元において、特徴データ及び対応する畳み込みカーネルにゼロスライスを追加する必要があるため、キャッシュや乗算器などのハードウェアリソースの使用率が低くなり、多くの無効な演算を導入してしまう可能性がある。
【００２２】
図１は、本開示の実施形態に係る畳み込みニューラルネットワークの畳み込み層における演算を実行する例示方法１００を示し、該方法は、
畳み込み層に提供された折り畳まれていない特徴データを、幅と高さの少なくとも一つの次元において折り畳んで、折り畳まれた特徴データを生成するステップＳ１０１と、
折り畳まれた特徴データ及び前記畳み込み層のオリジナル畳み込みカーネルを前処理するステップＳ１０５と、
前処理されたオリジナル畳み込みカーネルを折り畳んで、該オリジナル畳み込みカーネルに対応する折り畳まれた畳み込みカーネルを生成するステップＳ１１０と、
生成した折り畳まれた畳み込みカーネルを用いて前処理された折り畳まれた特徴データに対して畳み込み演算を実行するステップＳ１１５とを含む。
【００２３】
本開示の実施形態に係る方法によれば、少なくとも、ハードウェア設計を簡素化させることができ、チャネル又はハードウェアリソースの使用率を向上させ、及び／又は演算の並列性を向上させることが可能である。
【００２４】
図１に示したように、本開示の実施形態に係る畳み込みニューラルネットワークの畳み込み層における演算を実行する例示方法１００は、ステップＳ１０１から実行し、畳み込み層に提供された折り畳まれていない特徴データを、幅と高さの少なくとも一つの次元において折り畳む。
【００２５】
一実施形態において、畳み込み層に提供された折り畳まれていないオリジナル特徴データＦＤに対して、幅と高さの一つの次元Ｄ１において、ＦＤのＤ１におけるNx枚（本明細書では「Ｄ１における接合の数」、文脈が明らかな場合には「接合の数」とも略称する）ごとの連続したスライスを深さ方向において接合するように、ＦＤを折り畳んでＦＤ’を生成し、これによって、次元Ｄ１における該ＦＤのifx×Nx+jfx番目のスライスのすべてのCx個のチャネルのデータを、次元Ｄ１におけるＦＤ’のifx番目のスライスのjfx×Cx番目のチャネルから始まる連続したCx個のチャネルのデータに対応させる。ただし、Nxは１より大きい整数で、ifxは０以上の整数で、jfxは０以上Nx未満の整数で、Cxは０より大きい整数である。
【００２６】
一実施形態において、ＦＤ'が得られた後、幅と高さの別の次元Ｄ２において、ＦＤ'のＤ２におけるNy枚（本明細書では「Ｄ２における接合の数」、文脈が明らかな場合には「接合の数」とも略称する）ごとの連続したスライスを深さ方向において接合するように、ＦＤ'を折り畳んでＦＤ''を生成し、これによって、次元Ｄ２における該ＦＤ'のify×Ny+jfy番目のスライスのすべてのCy個のチャネルのデータを、次元Ｄ２におけるＦＤ''のify番目のスライスのjfy×Cy番目のチャネルから始まる連続したCyつのチャネルのデータに対応させる。ただし、Nyは１より大きい整数で、ifyは０以上の整数で、jfyは０以上Ny未満の整数で、Cyは０より大きい整数である。
【００２７】
図２は、畳み込み層に提供された幅、高さ及び深さがそれぞれ６、５及び３であるオリジナル特徴データＦＤを幅方向で折り畳む例を示している。図２において、各小キューブは、折り畳まれていない特徴データＦＤにおける一つのデータ値（例えば、ＲＧＢ画像における一の色の画素値）を示す。各小キューブの前面には、幅及び高さの二つの次元の座標値が「ｘ，ｙ」の形式で示され、側面には、小キューブが代表するデータ値が特徴データＦＤにおけるチャネル番号が示されている。例えば、小キューブの前面のラベル「１，１」は、特徴データＦＤにおいて、該小キューブは幅の次元及高さの二つの次元からみた第１行、第１列に位置することを示す。また、小キューブの側面のラベル「１」は、該小キューブは特徴データＦＤの深さ（又はチャネル）次元からみた第１行に位置することを示す。これらのすべての小キューブによって折り畳まれていない特徴データＦＤを構成し、折り畳まれていない特徴データＦＤは６枚の幅のスライスを含み、すなわち、ＦＤの第１列のすべての小キューブ（ｙ＝１）、ＦＤの第２列のすべての小キューブ（ｙ＝２）、ＦＤの第３列のすべての小キューブ（ｙ＝３）、ＦＤの第４列のすべての小キューブ（ｙ＝４）、ＦＤの第５列のすべての小キューブ（ｙ＝５）、ＦＤの第６列のすべての小キューブ（ｙ＝６）を含む。
【００２８】
図２に示したように、第２列の幅のスライスを深さの方向において第１列の幅スライスの後に接合して、第４列の幅のスライスを深さの方向において第３列の幅スライスの後に接合して、第６列の幅のスライスを深さの方向において第５列の幅スライスの後に接合し、ＦＤの幅の方向におけるスライスを２枚（Ｎｘ＝２）毎に深さ方向で接合することによって、特徴データＦＤを幅方向で折り畳んで幅方向の折り畳まれた特徴データＦＤ’を生成する。図２に示したように、例えば、特徴データＦＤの第２列の幅スライスのデータは、特徴データＦＤ’の第１列の幅スライスの第４乃至６チャネルのデータに対応する。
【００２９】
図２に示したように、特徴データＦＤと比較して、特徴データＦＤ’は高さが変わらないが、幅が狭くなり、深さが倍になるため、チャネルの利用率を向上させことができ、少なくとも幅方向の演算量を減らすことができる。 
【００３０】
本明細書において、例えば図２では、折り畳む前後の特徴データ（又は後述の畳み込みカーネル）におけるスライスの対応関係を明確に示すために、折り畳んだ特徴データによって生成された画像内の各小キューブに対して番号を付け直していない。さらに、文脈において明らかな場合、特徴データ（又は後述の畳み込みカーネル）における小キューブを示すことなく、平面でスライスを示すこともある。例えば、幅、高さ、深さの三次元がそれぞれ三次元デカルト座標系のＸ軸、Ｙ軸、Ｚ軸に対応する場合、Ｘ軸に垂直する（又はＹ−Ｚ平面に平行する）平面を用いて特徴データ（又は後述する畳み込みカーネル）の幅のスライスを示すことができる。
【００３１】
図３は、図２に示した幅方向において折り畳まれた特徴データＦＤ’を高さ方向においてさらに折り畳む例を示している。図３に示したように、第２行の高さのスライスを深さの方向で第１行の高さのスライスの後に接合し、第４行の高さのスライスを深さの方向で第３行の高さのスライスの後に接合し、ＦＤ’の高さの方向における第２枚目のスライス（Ny=2）を深さ方向で接合することによって、高さ方向で特徴データＦＤ’を折り畳んで、高さ方向の折り畳まれた特徴データＦＤ''を生成する。図３に示したように、例えば、特徴データＦＤ'の第４行の高さスライスのデータは、特徴データＦＤ''の第２行の高さスライスにおける第７乃至第１２チャネルのデータに対応する。
【００３２】
図３に示したように、折り畳みの過程で、特徴データＦＤ'に第５行の高さスライスの後に接合することができる高さスライスがない。すなわち、特徴データＦＤ'において、ＦＤ'の第５行の高さスライスと深さ方向で接合することができる別の高さスライスがないため、生成された特徴データＦＤ''の各高さスライスが深さ（又はチャネル）において揃っていない。
【００３３】
このような場合、一実施形態では、折り畳む前に特徴データＦＤ'における高さスライスの総数（すなわち、特徴データＦＤ'の高さ）をチェックしておいてもよい。該特徴データＦＤ'における高さスライスの総数がNyの整数倍ではない場合、ＦＤ'における高さスライスの総数がNyの整数倍になるように特徴データＦＤ'の下側（すなわち、高さの終了境界）に１つ又は複数のゼロスライスを予め附加することができる（図３に図示せず）。附加されたゼロスライスの数は接合の数より少なくてもよい。
【００３４】
別の実施形態において、折り畳みの際、特徴データＦＤ’におけるの最後の高さスライス（すなわち、第５行のスライス）について、該スライスに基づいて深さ方向で接合するか否かを判断する。接合する場合、例えば、特徴データＦＤ'における第５行のスライスのようなスライスに対して、追加の１つ又は複数のゼロスライス（例えば、図３に示した特徴データＦＤ''における点線のキューブＡによって示されるスライス）を、該スライスと深さ方向で接合してもよい。
【００３５】
別の実施形態において、折り畳んだ後に、特徴データＦＤ''に対して余分の１つ又は複数のゼロスライス（例えば、図３に示した特徴データＦＤ''における破線のキューブＡによって示されるスライス）を附加することができ、それにより、附加した特徴データＦＤ''の各高さスライスがチャネルにおいて揃えるようにする。
【００３６】
別の実施形態において、ハードウェア（例えば、マルチチャネルの演算を対応できる演算装置や記憶装置）の特性及び処理能力を直接利用することも可能である。例えば、チャネル整列の（チャネルを揃える）機能を備えてもよいハードウェア場合、実際のデータに占有されていないチャネルは、ハードウェアは自動的にゼロ値を有するとみなす。このような場合、特徴データＦＤ''におけるスライスごとのチャネルはハードウェアによって自動的に揃えるようになる。例えば、ハードウェアが３２チャネルを同時に対応できる場合、特徴データＦＤ''におけるチャネル数は、ハードウェアによって自動的に３２チャネルに揃えるようにしてもよい。
【００３７】
なお、図２に示されていないが、幅方向における折り畳みには、同様に、折り畳まれた特徴データの最後の幅スライスのチャネルの数とその他の幅スライスのチャネルの数と一致しない場合がある。図３に示したＦＤ'及び／又はＦＤ''に対する処理と同様に、幅において、折り畳む前、折り畳む途中、折り畳む後に、パディングされた折り畳まれていない特徴データ又は得られた折り畳まれた特徴データに対して処理し、又はハードウェアの機能を利用して自動的に処理し、最終的に得られた特徴データにおける幅スライスごとのチャネルを揃うようにする。
【００３８】
なお、図２は、特徴データＦＤを幅方向で折り畳んで特徴データＦＤ'を得た例、図３は、特徴データＦＤ'を高さ方向で折り畳んで特徴データＦＤ''を得る例をそれぞれ示したが、別の実施形態では、ＦＤを高さ方向に折り畳んでから、幅方向で折り畳んでもよく、又は幅方向及び高さ方向のいずれか一つにのみ折り畳んでもよい。
【００３９】
また、本開示の実施形態による方法は、図２に示したNxの値及び／又は図３に示したNyの値に限定されることはなく、接合の数Nx又はNｙは例えば３、４であってもよく、１より大きい整数であれば足りる。一実施形態において、ハードウェア（例えばマルチチャネルを対応できる記憶装置又は演算装置）が対応できるチャネルの数に基づいて、幅の折り畳み又は高さの折り畳みのための接合の数Nx又はNｙを設定することができる。例えば、ハードウェアの対応できるチャネルの数がＴＣである場合、
【数４】
2019125351.tif 000006
かつNxとNyの値はいずれも１より大きくなるようにNxとNyの値を決定すればよい。
【００４０】
ステップＳ１０１の後に、例示方法１００は折り畳まれた特徴データ及びオリジナル畳み込みカーネルの前処理を実行するステップＳ１０５に進む。
【００４１】
従来の畳み込み演算において、すなわち、畳み込み層に提供されたオリジナル折り畳まれていない特徴データに対して、オリジナル畳み込みカーネルを用いて畳み込みを行う場合、オリジナル畳み込みカーネルは、幅方向にストライドSx（Sxは１以上）で、高さ方向にストライドSy（Syは１以上）でオリジナル折り畳まれていない特徴データにスライドし、該オリジナル折り畳まれていない特徴データのスライディングウィンドウ（sliding window）に対応する部分のデータを畳み込む。所望の出力特徴データを得るために、畳み込みを実行する前に、あらかじめ指定されたパディング方法で、オリジナル折り畳まれていない特徴データの幅と高さの２つの次元の周り（幅の次元の開始境界及び終了境界(starting and ending boundaries)ならびに高さ次元の開始境界及び終了境界を含む）にゼロスライスをパディングすることができる。パディングされたゼロスライスの数は０、１又は複数であってもよい。
【００４２】
設計された畳み込みニューラルネットワークに対して、各畳み込み層において使用される重みパラメータ（畳み込みカーネルの数、畳み込みカーネルごとの幅、高さ、深さ、及び含まれている値を含む）及び該畳み込み層に提供されるオリジナル折り畳まれていない特徴データに対するパディング方法は公知のものである。これらの設定は、畳み込みニューラルネットワークを設計するときに畳み込みニューラルネットワークの設計者によって事前に指定されてもよく、又は学習によって設計又は調整されてもよい。
【００４３】
本開示の実施形態による方法によって正確かつ所望の結果が得られることを確保するために、折り畳まれた特徴データ及びオリジナル畳み込みカーネルを前処理する必要がある。
【００４４】
畳み込み層に提供されるオリジナル折り畳まれていない特徴データＦＤに対して、幅と高さの一つの次元Ｄ１において、接合の数Nxにしたがって折り畳んで、折り畳まれた特徴データＦＤ'が得られると、該畳み込み層によって指定された特徴データＦＤについてのパディング方法に基づいて特徴データＦＤ対して次元Ｄ１の開始境界にパディングする量P1を決定でき、
【数５】
2019125351.tif 000007
【００４５】
ＦＤ'の次元Ｄ１内における終了境界に対して、該畳み込み層によって指定された特徴データＦＤについてのパディング方法に基づいて特徴データＦＤ対して次元Ｄ１の終了境界にパディングする量P2を決定でき、
【数６】
2019125351.tif 000008
のゼロスライスをパディングしてもよい。
【００４６】
ここで、FVx及びFVx’は、ＦＤ及びＦＤ'の次元Ｄ１における次元値（例えばＤ１が幅である場合は幅の値）をそれぞれ示す。または、
【数７】
2019125351.tif 000009
を算出しておき、ただし、Sxはオリジナル畳み込みカーネルの次元Ｄ１におけるストライドを示し、KVxはオリジナル畳み込みカーネルの次元Ｄ１における次元値を示し、（Nx,Sｘ）はNxとSxの最大公約数を示す。
【数８】
2019125351.tif 000010
の結果値がSxの整数倍となるように、ＦＤ'の次元Ｄ１における終了境界でのパディング量P2'を決定し、そうでなければ、P2’<KVx’となるように、ＦＤ'の次元Ｄ１における終了境界でのパディング量P2'を決定することができる。
【００４７】
また、オリジナル畳み込みカーネルの次元Ｄ１における開始境界で
【数９】
2019125351.tif 000011
個のゼロスライスをパディングしてもよい。
【００４８】
一実施形態では、特徴データＦＤに対して、次元Ｄ１において折り畳みを行い、最終の折り畳まれた特徴データとしてのＦＤ'を得ただけの場合、畳み込み層によって指定された幅と高さにおける他方の次元Ｄ２でＦＤに対してパディングするように、特徴データＦＤ'の次元Ｄ２における開始境界及び／又は終了境界にてパディングをしてもよい。
【００４９】
別の実施形態では、特徴データＦＤ'に対してさらに次元Ｄ２において接合の数Ｎｙに従って折り畳みを行い、最終の折り畳まれた特徴データとしてのＦＤ''を得る場合、ステップＳ１０５において、該畳み込み層によって指定された特徴データＦＤについてのパディング方法に従って特徴データＦＤ対して次元Ｄ２の開始境界にてパディングする量Ｐ３を決定でき、ただし
【数１０】
2019125351.tif 000012
個のゼロスライスをパディングしてもよい。
【００５０】
同様に、ＦＤ''の次元Ｄ２内における終了境界に対して、該畳み込み層によって指定された特徴データＦＤに対するパディング方法に従って、特徴データＦＤの次元Ｄ１における終了境界にパディングする量P4を決定でき、
【数１１】
2019125351.tif 000013
個のゼロスライスをパディングしてもよい。ここで、FVy'及びFVy''はＦＤ'及びＦＤ''の次元Ｄ２における次元値（例えばＤ２が高さである場合は高さの値）をそれぞれ示す。または、
【数１２】
2019125351.tif 000014
を算出しておき、ただし、Syはオリジナル畳み込みカーネルの次元Ｄ２におけるストライドを示し、KVyはオリジナル畳み込みカーネルの次元Ｄ２における次元値を示し、(Ny,Sy)はNyとSyの最大公約数を示す。
【数１３】
2019125351.tif 000015
の結果値がSyの整数倍となるように、ＦＤ''の次元Ｄ２の終了境界におけるパディング量P4'を決定し、そうでなければ、P4'<KVy’となるように、ＦＤ''の次元Ｄ２の終了境界におけるパディング量P4'を決定することができる。
【００５１】
また、該実施形態では、オリジナル畳み込みカーネルの次元Ｄ２における開始境界にて
【数１４】
2019125351.tif 000016
個のゼロスライスをパディングしてもよい。
【００５２】
例えば、図２に示した例における特徴データＦＤの設定された重みパラメータの畳み込みカーネルＫは、幅、高さ及び深さがそれぞれ３、３及び、３であり、幅及び高さにおける畳み込みストライドがいずれも１であり、ＦＤに対して指定されたパディング方法は、上側及び下側にはパディングせずに、左側及び右側にそれぞれ１列（すなわち、それぞれ１つのゼロスライス）をパディングする場合、ステップＳ１０５において、図４に示したように、図３における特徴データＦＤ''に対して、
【数１５】
2019125351.tif 000017
のゼロスライスＫＰをパディングし、幅が４である前処理された畳み込みカーネルＫ'を生成することができる。
【００５３】
図４の例示では、１つのオリジナル畳み込みカーネルしか示していないが、一つの畳み込み層の重みパラメータは複数の畳み込みカーネルも含んでもよい。この場合、本開示の実施形態に係る方法に基づいて該重みパラメータの各畳み込みカーネルを処理することができる。
【００５４】
折り畳まれた特徴データ及びオリジナル畳み込みカーネルが前処理された後、例示方法１００はステップＳ１１０に進み、前処理されたオリジナル畳み込みカーネルの折り畳みを行う。
【００５５】
ステップＳ１１０において、前処理された畳み込みカーネルＫ'の次元Ｄ１の開始境界においてkx×Sx個のゼロスライスをそれぞれパディングし、オリジナル畳み込みカーネルＫ又は前処理された畳み込みカーネルＫ'に対応する１つ又は複数の変換された畳み込みカーネルK'[kx]を生成し、ただし、Sxはオリジナル畳み込みカーネルＫの次元Ｄ１におけるストライドであり、ｋｘは０以上の整数である。例えば、０個のゼロスライス、Sx個のゼロスライス、及び2×Sx個のゼロスライスをそれぞれパディングすることによって、オリジナル畳み込みカーネルＫに対応する３つの変換された畳み込みカーネルを生成することができる。
【００５６】
変換された畳み込みカーネルの数を制御するために、kxの最大値を設定することができる。例えば、kx<Exにすることができ、ここで、Exを、SxとNxの最小公倍数をSxで除算して得られた結果値、又はNxを、NxとSxの最大公約数で除算して得られた結果値として決定してもよく、又はSx=1の場合もしくはSxとNxが互い素である場合、Nxに等しいとして決定してもよい。したがって、オリジナル畳み込みカーネルＫ又は前処理された畳み込みカーネルＫ'に対応するEx個の変換された畳み込みカーネルK'[kx]を生成することができる。
【００５７】
そして、各変換された畳み込みカーネルK'[kx］に対して、次元Ｄ１におけるNx枚ごとの連続したスライスを深さ方向において接合するように、Ｄ１においてK'[kx]ごとに、それぞれ折り畳んで、変換された畳み込みカーネルK'[kx］ごとに、対応する折り畳まれた畳み込みカーネルK''[kx]を生成することによって、K''[kx]ごとの次元Ｄ１におけるikx×Nx+jkx番目のスライスのすべてのCx個のチャネルのデータは、K'[kx]の次元Ｄ１におけるikx番目のスライスのjkx×Cx番目のチャネルから始まる連続したCx個のチャネルのデータに対応するようにする。ただし、ikxは０以上の整数で、jkxは０以上Nx未満の整数である。
【００５８】
生成した変換された畳み込みカーネルK'[kx]は、次元Ｄ１において異なる次元値（例えば、Ｄ１が幅である場合は幅の値）を有する可能性があり、又は１つ以上の変換された畳み込みカーネルK'[kx]が存在する可能性があり、K'[kx]が次元Ｄ１における次元値はNxの整数倍ではないため、対応するK''[kx]のスライスが深さにおいて揃っていない。
【００５９】
このような場合、前述した特徴データに対する処理と同様に、全ての変換された畳み込みカーネルK'[kx]が次元Ｄ１において同一の次元値を有し、かつ全ての折り畳まれた畳み込みカーネルK''[kx]のスライスが深さで揃うように、畳み込みカーネルK'[kx]を処理してもよい。例えば、前述のように、ハードウェア（例えば、マルチチャネルの演算を対応できる演算装置や記憶装置）の特性又は処理能力を利用することも可能である。例えば、ハードウェアがチャネル整列（揃う）の機能を備えてもよい場合、実際のデータに占められていないチャネルは、ハードウェアによって自動的にゼロ値を有するとみなされる。このような場合、K''[kx]におけるスライスごとのチャネルはハードウェアによって自動的に揃える。例えば、ハードウェアが３２チャネルを同時に対応している場合、K''[kx]のチャネル数は、ハードウェアによって自動的に３２チャネルとして揃えるようにしてもよい。
【００６０】
さらに、Ex、Sx、Nx及び前処理された畳み込みカーネルＫ'の次元Ｄ１における次元値Vxに基づいて、変換された畳み込みカーネルK'[kx]ごとの期待次元値EVxを決定しても良い。例えば、式
【数１６】
2019125351.tif 000018
に基づいて変換された畳み込みカーネルK'[kx]ごとの次元Ｄ１における期待次元値EVxを決定することができる。変換された畳み込みカーネルK'[kx]の次元Ｄ１における次元値がEVxより小さい場合、変換された畳み込みカーネルK'[kx]のＤ１における終了境界にゼロスライスを附加することで調整したK'[kx]によって、調整した変換された畳み込みカーネルK'[kx]のＤ１における次元値がEVxに等しくなる。そして、次元Ｄ１において調整した変換された畳み込みカーネルK'[kx]を折り畳んで、対応する折り畳まれた畳み込みカーネルK''[kx]を生成することができる。
【００６１】
一実施形態では、特徴データＦＤに対して、次元Ｄ１において折り畳みを行い、最終の折り畳まれた特徴データとしてのＦＤ'を生成するだけの場合、対応して、ステップＳ１１０において、得られた折り畳まれた畳み込みカーネルK''[kx]を最終の折り畳まれた畳み込みカーネルとすることができる。
【００６２】
別の実施形態では、特徴データＦＤ'に対して、引き続き次元Ｄ２において接合の数Nyに従って折り畳みを行ってＦＤ''を得る場合、対応して、ステップＳ１１０において、続いて次元Ｄ２において接合の数Nyに従って折り畳まれた畳み込みカーネルK''[kx]ごとに折り畳みを行う。次元Ｄ２においてNyに従ってK''[kx]を折り畳む手順は、次元Ｄ１においてNxに従って前処理された畳み込みカーネルK'[kx]を折り畳む手順と同様である。
【００６３】
例えば、K''[kx]の次元Ｄ２における開始境界においてkx×Sx個のゼロスライスをそれぞれパディングすることで、K''[kx]に対応する１つ又は複数の変換された畳み込みカーネルK''[kx,ky］を生成し、ただし、Syはオリジナル畳み込みカーネルＫの次元Ｄ２におけるストライドであり、kyは０以上の整数である。同様に、変換された畳み込みカーネルの数を制御するために、kyの最大値を設定することができる。例えば、ky<Eyにし、ここで、Eyを、SyとNyの最小公倍数をSyで除算しして得た結果値、又はNyを、NyとSyの最大公約数で除算して得た結果値として決定してもよく、又はSy=1の場合もしくはSyとNyが互い素である場合、EyはNyに等しいとして決定してもよい。したがって、K''[kx]に対応するEy個の変換された畳み込みカーネルK''[kx,ky]、あるいはK又はK'に対応するEx×Ey個の変換された畳み込みカーネルK''[kx,ky]を生成することができる。
【００６４】
そして、各変換された畳み込みカーネルK''[kx,ky]に対して、次元Ｄ２におけるNy枚ごとの該K''[kx,ky]のＤ２における連続したスライスを深さ方向で接合するように、Ｄ２においてK''[kx,ky]ごとに折り畳みをそれぞれ行い、対応する折り畳まれた畳み込みカーネルK'''[kx,ky]を生成し、K'''[kx,ky]の次元Ｄ２におけるiky×Ny+jky番目のスライスのすべてのCy個のチャネルのデータが、K''[kx,ky ]の次元Ｄ２におけるiky番目のスライスのjky×Cy番目のチャネルから始まる連続したCy個のチャネルのデータに対応するようにする。ただし、ikyは０以上の整数で、jkyは０以上Ny未満の整数である。
【００６５】
同様に、Ey、Sy、Ny及びK'の次元Ｄ２における次元値Vyから、変換された畳み込みカーネルK''[kx,ky]ごとの次元Ｄ２における期待次元値EVyを決定してもよい。例えば、式
【数１７】
2019125351.tif 000019
に基づいて変換された畳み込みカーネルK''[kx,ky]ごとの次元Ｄ２における期待次元値EVyを決定することができる。変換された畳み込みカーネルK''[kx,ky]の次元Ｄ２における次元値がEVyより小さい場合、変換された畳み込みカーネルK''[kx,ky]のＤ２における終了境界にゼロスライスを附加することによって調整したK''[kx,ky]によって、調整した変換された畳み込みカーネルK''[kx,ky]の次元値がEVyに等しくなる。そして、次元Ｄ２において調整した変換された畳み込みカーネルK''[kx,ky]を折り畳んで、対応する折り畳まれた畳み込みカーネルK'''[kx,ky］を生成することができる。
【００６６】
そして、得られたEx×Ey個の折り畳まれた畳み込みカーネルK'''[kx,ky]を最終の折り畳まれた畳み込みカーネルとすることができる。
【００６７】
図５は、図３のＦＤ''に対応して図４における４つの幅のスライスを含む畳み込みカーネルＫ'を幅方向で折り畳んだ例を示す。図５に示されるように、Nx=2、Sx=1であるので、Ｋ'に対応する変換された畳み込みカーネルの数は２であると決定することができる。そして、Ｋ'の左側に０つのゼロスライスＫＡ、右側に２つのゼロスライスＫＡ（変換１）をそれぞれパディングし、調整後の変換された畳み込みカーネルK'[0]を得るとともに、Ｋ'に対して、左側及び右側に１つのゼロスライスＫＡ（変換２）をそれぞれパディングし、調整後の変換された畳み込みカーネルK'[1]を得る。ただし、調整後の変換された畳み込みカーネルK'[0]及びK'[1]の幅はいずれも６
【数１８】
2019125351.tif 000020
である。次に、K'[0]に対して、スライスKS1をKPの後、KS3をKS2の後、及びKAをKAの後に接合することによって、折り畳まれた畳み込みカーネルK''[0]を生成し、K'[1]に対して、スライスKPをKAの後、KS2をKS1の後、及びKAをKS3の後に接合することによって、折り畳まれた畳み込みカーネルK''[1]を生成することができる。折り畳まれた畳み込みカーネルK''[0]及びK''[1]ごとの幅、高さ及び深さは、それぞれ３、３及び６である。
【００６８】
そして、K''[0]及びK''[1]ごとに高さの方向でさらに折り畳むことができる。図６に示されるように、K''[0]に対し、Ny=2、Sy=1であるので、K''[0]に対応する変換された畳み込みカーネルの数は２であると決定することができる。そして、K''[0]の上側及び下側に０つのゼロスライスKA'、及び１つのゼロスライスKA'をそれぞれパディングし、調整後の変換された畳み込みカーネルK''[0,0]を得、かつK''[0]の上側に１つのゼロスライスKA'をパディングして調整後の変換された畳み込みカーネルK''[0,1]を得る。同様に、K''[1]に対して、変換された畳み込みカーネルK''[1,0]及びK''[1,1]を得る。K''[0,0]、K''[0,1]、K''[1,0]及びK''[1,1]ごとの高さは４
【数１９】
2019125351.tif 000021
である。
【００６９】
次に、変換された畳み込みカーネルK''[0,0]に対して、スライスKS2'をKS1'の後、KA'をKS3'の後に接合することによって、対応する折り畳まれた畳み込みカーネルK'''[0,0]を生成する。同様に、変換された畳み込みカーネルK''[0,1]、K''[1,0]及びK''[1,1]のそれぞれに対しても対応する折り畳まれた畳み込みカーネルK'''[0,1]、K'''[1,0]及びK'''[1,1]を生成する。折り畳まれた畳み込みカーネルK'''[0,1]、K'''[1,0]及びK'''[1,1]ごとの幅、高さ及び深さは、それぞれ３、２及び１２である。
【００７０】
図１に例示方法１００のステップＳ１０１、Ｓ１０５及びＳ１１０を順に実行することを示したが、別の実施形態では、ステップＳ１０５を、折り畳まれた特徴データの前処理を実行する部分と、オリジナル畳み込みカーネルの前処理を実行する部分との２つの部分とに分けてもよい。さらに、ステップＳ１０１及び折り畳まれた特徴データに対する前処理を、オリジナル畳み込みカーネルに対する前処理及びステップＳ１１０の後で行ってもよく、又はステップＳ１０１及び折り畳まれた特徴データに対する前処理を、オリジナル畳み込みカーネルに対する前処理及びステップＳ１１０と並行して実行してもよい。
【００７１】
次いで、例示方法１００はステップＳ１１５に進み、ステップＳ１１０で得られた１つ又は複数の折り畳まれた畳み込みカーネルを利用して、ステップＳ１０５で得られた前処理された折り畳まれた特徴データに対して畳み込み演算を実行する。
【００７２】
ステップＳ１０１において、オリジナル折り畳まれていない特徴データＦＤに対して幅及び高さのうちの一つの次元Ｄ１においてNyに従って折り畳みを行い、折り畳まれた特徴データＦＤ'が得られただけの場合、ステップＳ１１５において、ステップＳ１１０で得られたEx個の折り畳まれた畳み込みカーネルK''[kx]を用いて、ステップＳ１０５で得られた前処理された折り畳まれた特徴データに対して畳み込み演算を実行する。この場合、オリジナル畳み込みカーネルＫが次元Ｄ１におけるストライドSxの値がNxに等しい場合、折り畳まれた畳み込みカーネルK''[kx]ごとのは次元Ｄ１におけるストライドは１であり、そうでなければ、折り畳まれた畳み込みカーネルK''[kx］ごとの次元Ｄ１におけるストライドはSxである。また、折り畳まれた畳み込みカーネルK''[kx]ごと幅及び高さの他方の次元Ｄ２におけるストライドは、オリジナル畳み込みカーネルＫが次元Ｄ２におけるストライドSyである。
【００７３】
ステップＳ１０１において、特徴データＦＤ'に対してさらに次元Ｄ２においてNyに従って折り畳みを行い、折り畳まれた特徴データＦＤ''が得られた場合、ステップＳ１１５において、ステップＳ１１０で得られたEx×Ey個の折り畳まれた畳み込みカーネルK'''[kx,ky]を用いて、ステップＳ１０５で得られた前処理された折り畳まれた特徴データに対して畳み込み演算を行う。この場合、オリジナル畳み込みカーネルＫが次元Ｄ１におけるストライドSxの値がNxに等しい場合、折り畳まれた畳み込みカーネルK'''[kx,ky]ごとの次元Ｄ１におけるストライドは１であり、そうでなければ、折り畳まれた畳み込みカーネルK'''[kx,ky]ごとの次元Ｄ１におけるストライドはSxである。また、オリジナル畳み込みカーネルＫが次元Ｄ２におけるストライドSyがNyに等しい場合、折り畳まれた畳み込みカーネルK'''[kx,ky]ごとの次元Ｄ２におけるストライドは１であり、そうでなければ、折り畳まれた畳み込みカーネルK'''[kx,ky]ごとの次元Ｄ2におけるストライドはSyである。
【００７４】
一実施形態では、ステップＳ１１５において、すべての折り畳まれた畳み込みカーネルを用いて、折り畳まれた特徴データの同一の部分を畳み込んでから、次元Ｄ１又はＤ２における折り畳まれた畳み込みカーネルのＤ１におけるストライドに従って、又はＤ２におけるストライドに従って、すべての折り畳まれた畳み込みカーネルを移動させ、折り畳まれた特徴データの別の部分に対して畳み込みを実行することができる。折り畳まれた特徴データすべての部分に対して畳み込みを行った後、最終的な出力特徴データを得ることができる。
【００７５】
図７は、次ような畳み込みを実行する例を示す。図７に示した例では、図６に示した折り畳まれた畳み込みカーネルK'''[0,0]、K'''[0,1]、K'''[1,0]及びK'''[1,1]を用いて図４における折り畳まれた特徴データＦＤ'''に対して畳み込み演算を実行する。
【００７６】
図７に示されるように、まず、ＦＤ'''の第１行及び第２行に(1,1)、(1,2)、(1,3)、(2,1)、(2,2)、(2,3)を含む部分に対して、４つの折り畳まれた畳み込みカーネルK'''[0,0]、K'''[0,1]、K'''[1,0]及びK'''[1,1]をそれぞれ使用して畳み込みを実行し、出力特徴データＦＤＯ(1,1)、(2,1)、(1,2)及び(2,2)を含む部分データをそれぞれ得る。次は、幅方向でストライド１（即ち、オリジナル畳み込みカーネルＫの幅方向におけるストライド）に従って４つの折り畳まれた畳み込みカーネルK'''[0,0]、K'''[0,1]、K'''[1,0]及びK'''[1,1]を移動させ、FD'''の第1行及び第2行の(1,2)、(1,3)、(1,4)、(2,2)、(2,3)、(2,4)を含む部分に対して畳み込みを実行し、出力特徴データＦＤＯにおける(1,3)、(2,3)、(1,4)及び(2,4)を含む部分のデータをそれぞれ得る。さらに、幅方向でストライド１（即ち、オリジナル畳み込みカーネルの幅方向のストライド）に従って４つの折り畳まれた畳み込みカーネルK'''[0,0]、K'''[0,1]、K'''[1,0]及びK'''[1,1]を移動させ、ＦＤ'''の第１行及び第２行の(1,3)、(1,4)、(1,5)、(2,3)、(2,4)、(2,5)を含む部分に対して畳み込みを実行することで、出力特徴データＦＤＯの(1,5)、(2,5)、(1,6)及び(2,6)を含む部分のデータをそれぞれ得る。
【００７７】
ＦＤ'''の第１行及び第２行の折り畳みを完了した後、高さ方向でストライド１（即ち、オリジナル畳み込みカーネルＫの高さ方向のストライド）に従って、４つの折り畳まれた畳み込みカーネルK'''[0,0]、K'''[0,1]、K'''[1,0]及びK'''[1,1]をそれぞれ移動させ、ＦＤ'''の第２行及び第３行に対して畳み込みを実行する。ＦＤ'''の第２行及び第３行に対する畳み込み手順は、４つの折り畳まれた畳み込みカーネルK'''[0,0]、K'''[0,1]、K'''[1,0]及びK'''[1,1]を使用してＦＤ'''の第１行及び第２行に対して畳み込みを実行する手順と同様であるので、重複な説明は省略する。
【００７８】
４つの折り畳まれた畳み込みカーネルK'''[0,0]、K'''[0,1]、K'''[1,0]及びK'''[1,1]を使用して、FD'''に対して畳み込みの実行を完了した後、最終的な出力特徴データＦＤＯが得られる。出力特徴データＦＤＯの最後の行のデータ(4、1)、(4、2)、(4、3)、(4、4)、(4、5)及び(4、6)は、必要に応じて保留又は廃棄しても良い。例えば、図２に示されるオリジナル折り畳まれていない特徴データＦＤに対しては、図４に示したオリジナル畳み込みカーネルＫを使用して畳み込みを実行した後、３行の出力特徴データを得る（対応して、高さ方向でＦＤをパディングしない）ことが望まれる場合、出力特徴データＦＤＯの最後の行のデータ(4、1)、(4、2)、(4、3)、(4、4)、(4、5)及び(4、6）を廃棄しても良い。
【００７９】
畳み込み層の重みパラメータが複数の畳み込みカーネルを含む場合、図７の出力特徴データＦＤＯは最終の出力特徴データの一つのチャネルにおけるデータに対応することができる。
【００８０】
他の実施形態では、各折り畳み畳み込みカーネルをそれぞれ用いて、折り畳まれた特徴データ全体に対して畳み込みを行うことができる。この場合、ハードウェア用の畳み込み指令を修正する必要はないが、１つのオリジナル畳み込みカーネルが複数の折り畳まれた畳み込みカーネルに対応する場合、各折り畳まれた畳み込みカーネルを使用して得られた部分的な結果が複数のチャネルに分布することになる。出力特性データを畳み込みニューラルネットワークの次の層に提供する前、又は畳み込みニューラルネットワーク全体の最終出力とする前に、１つのチャネルで完全な出力結果を得るように、異なるチャネルに分布している部分的な結果を再編成又は展開してもよい。
【００８１】
図８は、上述の畳み込みを実行する一例を示す。図７の例と異なり、図８に示した例では、４つの折り畳まれた畳み込みカーネルK'''[0,0]、K'''[0,1]、K'''[1,0]及びK'''[1,1]をそれぞれ使用してＦＤ'''全体に対して畳み込みを実行する。図８にしたように、折り畳まれた畳み込みカーネルごとの使用は出力特徴データＦＤＯの部分データしか得ることができない。例えば、K'''[0,0]を用いてＦＤ'''に対して畳み込みを実行た後、出力特徴データＦＤＯにおける(1,1)、(1,3)、(1,5)、(3,1)、(3,3)及び(3,5)含む一部のデータしか得ることができない。各折り畳まれた畳み込みカーネルのそれぞれを使用して得られた部分的な結果をまとめて、完全な出力特徴データＦＤＯを取得するようにしてもよい。同様に、畳み込み層の重みパラメータが複数の畳み込みカーネルを含む場合、図８の例示における出力特徴データＦＤＯは最終の出力特徴データの一つのチャネルにおけるデータに対応することができる。
【００８２】
特徴データ及び畳み込みカーネルを折り畳んで、得られた折り畳まれた特徴データ及び折り畳まれた畳み込みカーネルを用いて畳み込み演算を実行することにより、チャネルの利用効率を向上させ、キャッシュメモリの占有量を低減することができ、演算効率を向上させることができる。
【００８３】
例えば、プロセッサ（例えば、畳み込み演算用の乗算器のアレイ）が一度に３２チャネルを処理することができると仮定すると、5×5の畳み込みカーネルを用いて720×1280のＲＧＢ画像（チャネル数は３）に対して畳み込み（幅及び高さのストライドはいずれも１である）を実行する場合、従来の畳み込み（即ち、オリジナル畳み込みカーネルを用いてオリジナル折り畳まれていない特徴データに対して畳み込みを実行する）、幅方向の折り畳み畳み込み（即ち、２枚のスライスごとに幅方向において特徴データ及びオリジナル畳み込みカーネルを折り畳んでから、畳み込みを行う）、及び幅及び高さ方向の折り畳み畳み込み（即ち、２枚のスライスごとに幅方向及び高さ方向のそれぞれに特徴データ及びオリジナル畳み込みカーネルを折り畳んでから、畳み込みを実行する）をそれぞれ使用する演算量の比較を以下の表１に示される。
【００８４】
【表１】
2019125351.tif 000022
【００８５】
表１の例示されたデータによれば、特徴データ及び畳み込みカーネルを折り畳んで得られた折り畳まれた特徴データ及び折り畳まれた畳み込みカーネルを用いて畳み込み演算を実行することにより、演算量を著しく低減させることができ（例えば、幅及び高さ方向の折り畳み畳み込みに係る演算量は、従来の畳み込みの演算量の３６％に過ぎない）、有効演算率を著しく向上させることができる（例えば、従来の畳み込みに対して幅及び高さ方向の折り畳みによる畳み込みに係る有効演算率は約４倍高くなる）。
【００８６】
図９及び図１０は、本開示に係る実施形態による畳み込みニューラルネットワークの畳み込み層における演算を実行する装置のブロック図を示す。
【００８７】
図９に示すように、例示装置９００は、一以上のプロセッサ９１０を含むことができる。プロセッサ９１０は、汎用ＣＰＵ、ＧＰＵ、専用ニューラルネットワークプロセッサ又はアクセラレータなどのようなデータ処理能力及び／又は指令の実行能力を有する任意の形態の処理手段であってもよい。例えば、プロセッサ９１０は、例えば本開示に係る実施形態により特徴データ及び畳み込みカーネルを折り畳んで、得られた折り畳まれた特徴データ及び折り畳まれた畳み込みカーネルを用いて畳み込み演算を実行する方法を実行することができる。さらに、プロセッサ９１０は、装置９００における他の部品を制御して、所望の機能を実行することもできる。
【００８８】
プロセッサ９１０は、バスシステム及び／又は他の形態の接続機構（図示せず）を介して、メモリ９２０及びＩ／Ｏインターフェイス９３０に接続することができる。
【００８９】
メモリ９２０は、例えば、揮発性メモリ及び／又は不揮発性メモリなどの様々なコンピュータ読み書き可能な記憶媒体を含むことができる。揮発性メモリは、ランダムアクセスメモリ（ＲＡＭ）及び／又はキャッシュメモリ（キャッシュ）などを含むことができる。不揮発性メモリは、例えば、読み取り専用メモリ（ＲＯＭ）、ハードディスク、フラッシュメモリ等を含むことができる。読み書き可能な記憶媒体は、例えば、電気、磁気、光、電磁気、赤外線、又は半導体のシステム、装置、デバイス、又はそれらの任意の組み合わせを含むことができるがこれらに限らない。例えば、ニューラルネットワーク専用プロセッサに合わせて使用する場合、メモリ９２０は、専用プロセッサが搭載されるチップ上のＲＡＭであってもよい。メモリ９２０は、本開示に係る実施形態による特徴データ及び畳み込みカーネルを折り畳んで、得られた折り畳まれた特徴データ及び折り畳まれた畳み込みカーネルを用いて畳み込み演算を実行する方法を、装置９００に実行させるためのプログラム指令を含むことができる。
【００９０】
Ｉ／Ｏインターフェイス９３０は、プロセッサ９１０にパラメータ又はデータを提供し、かつプロセッサ９１０によって処理された結果データの出力のために用いることができる。
【００９１】
図１０に示すように、例示装置１０００は、第１の折り畳み手段１０１０、前処理手段１０２０、第２の折り畳み手段１０３０、及び演算手段１０４０を含むことができる。
【００９２】
第１の折り畳み手段１０１０は、畳み込み層に提供された折り畳まれていない特徴データを、幅と高さの少なくとも一つの次元において折り畳んで、折り畳まれた特徴データを生成するように構成することができる。一実施形態では、第１の折り畳み手段１０１０は、例えば図１に示した例示方法１００のステップＳ１０１を実行するように構成してもよい。
【００９３】
前処理手段１０２０は、折り畳まれた特徴データ及び前記畳み込み層のオリジナル畳み込みカーネルに対して前処理を実行するように構成することができる。一実施形態では、前処理手段１０２０は、例えば図１に示した例示方法１００のステップＳ１０５を実行するように構成してもよい。
【００９４】
第２の折り畳み手段１０３０は、少なくとも一つの次元において前処理されたオリジナル畳み込みカーネルを折り畳んで、該オリジナル畳み込みカーネルに対応する一つ又は複数の折り畳まれた畳み込みカーネルを生成するように構成することができる。一実施形態では、第２の折り畳み手段１０３０は、例えば図１に示した例示方法１００のステップＳ１１０を実行するように構成してもよい。
【００９５】
演算手段１０４０は、生成した一つ又は複数の折り畳まれた畳み込みカーネルを利用して前処理された折り畳まれた特徴データに対して畳み込み演算を実行するように構成することができる。一実施形態では、演算手段１０４０は、例えば図１に示した例示方法１００のステップＳ１１５を実行するように構成してもよい。
【００９６】
なお、図９及び図１０に示された装置９００及び１０００は単なる例示であって限定的なものではない。必要に応じて、本開示に係る実施形態による装置は、その他の部材及び／又は構造を有することができる。
【００９７】
図１１は、本開示に係る実施形態による折り畳まれた特徴データに対して畳み込み演算を実行する装置のブロック図を示す。図１１に示すように、装置１１００は、メインプロセッサ１１１０、ダイナミックランダムアクセス（ＤＲＡＭ）１１２０、及び畳み込みエンジン１１３０を含むことができる。これらの手段はバスシステム１１０１を介して互いに接続されている。
【００９８】
メインプロセッサ１１１０は、ＡＲＭプロセッサ、汎用ＣＰＵなどのような任意の形態の処理手段であってもよい。メインプロセッサ１１１０は、プログラム指令を実行させることで、装置１１００における他の部品例えばＤＲＡＭ１１２０及び畳み込みエンジン１１３０を制御する。
【００９９】
ＤＲＡＭは、ＤＤＲＲＡＭ又は他の任意の形態のＤＲＡＭであってもよい。磁気ハードディスクなどの不揮発性メモリから読み出されたデータが一時的に記憶されてもよい。例えば、前述した畳み込みニューラルネットワークの畳み込み層における折り畳まれていない特徴データ及びオリジナル畳み込みカーネル、又はメインプロセッサ１１１０によって実行されるプログラム指令などがＤＲＡＭ１１２０に記憶される。
【０１００】
畳み込みエンジン１１３０は、折り畳まれていない特徴データ及びオリジナル畳み込みカーネルをＤＲＡＭ１１２０から読み出して、前述した方法のいずれか１つに従って畳み込み演算を実行する。畳み込みエンジン１１３０は、チップとして構成されてもよいし、その構成及び動作は、以下で詳細に説明する。
【０１０１】
図１１に示すように、畳み込みエンジン１１３０は、スタティックランダムアクセスメモリ（ＳＲＡＭ）などの入力バッファ１１３１を含むことができる。折り畳まれていない特徴データ及びオリジナル畳み込みカーネルは、ＤＲＡＭ１１２０から読み出され、ＳＲＡＭ１１３１に記憶されてもよい。図１１に示すように、折り畳まれていない特徴データ及びオリジナル畳み込みカーネルは同じＳＲＡＭ１１３１に記憶される。
【０１０２】
他の例では、それらは異なるＳＲＡＭに記憶されてもよい。折り畳まれていない特徴データ及びオリジナル畳み込みカーネルは、ＳＲＡＭ１１３１に記憶する前又は記憶しているとき、図１〜６を参照して上述した折り畳み及び前処理を実行しても良い。折り畳み及び前処理の詳細は繰り返し説明しない。
【０１０３】
一実施形態では、折り畳まれていない特徴データの折り畳み、前処理、及び折り畳まれていない特徴データをＳＲＡＭ１１３１に記憶することは、同一のステップで実行されてもよい。例えば、ＤＲＡＭ１１２０から読み出した折り畳まれていない特徴データをＳＲＡＭ１１３１に書き込むとき、折り畳まれていない特徴データのデータストリームに附加のゼロ値を挿入して所定の書式で該折り畳まれていない特徴データをＳＲＡＭ１１３１書き込むことは可能である。これにより、ＳＲＡＭ１１３１に記憶されている特徴データが折り畳まれて前処理されたものになる。図１２Ａ及び図１２Ｂは、特徴データがＳＲＡＭ１１３１に記憶されている例を示す図であり、図１２Ａは、図１のオリジナル特徴データＦＤを示し、図１２Ｂは図１の折り畳まれた特徴データＦＤ'を示す。
【０１０４】
まず、図１２Ａを参照すると、ＳＲＡＭ１１３１は、複数の列１１４０に配列されている複数のメモリ手段１１４１を含み、各列１１４０は「スライス」とも呼ばれる。各ＳＲＡＭのスライス１１４０は列方向に連続的にアドレス指定（addressing）され、幅方向で複数のビットを格納することができる。スライス１１４０ごとに６４ビットの幅を有し、メモリ手段１１４１ごとに８ビットを記憶することができると仮定する。オリジナル特徴データＦＤは折り畳まれていないので、図１２Ａに示したように、メモリ手段１１４１ごとに１つのピクセル（３チャネル、３データ）しか格納されず、メモリ手段１１４１の残りの４０（６４−３×８）ビットは５つのゼロ値でパディングされている。しかしながら、折り畳まれた特徴データＦＤ'については、図１２Ｂに示したように、メモリ手段１１４１ごとに２つのピクセルを格納でき、各ピクセルの末尾にそれぞれ１つのゼロ値だけパディングする。別の例として、代わりに、第２のピクセルの末尾にだけ２つのゼロ値をパディングしてもよい。メモリ手段１１４１がより広いデータの幅を有する場合、各メモリ手段１１４１においてより多くのピクセルを格納することができる。
【０１０５】
なお、オリジナル畳み込みカーネルは、ＳＲＡＭ１１３１に記憶する前又は記憶しているとき、前処理及び折り畳みを行うことができる。図４〜６を参照して上述したように、特徴データを折り畳む折り畳み方法に基づいて、幅と高さの少なくとも一つの次元においてオリジナル畳み込みカーネルの前処理及び折り畳みを実行しても良い。折り畳み処理の詳細はここで繰り返し説明しない。
【０１０６】
１つ又は複数のオリジナル畳み込みカーネルをＳＲＡＭ１１３１に記憶することができる。同様に、オリジナル畳み込みカーネルの前処理、折り畳み及び記憶は、同一のステップで実行されてもよい。例えば、ＤＲＡＭ１１２０から読み出したオリジナル畳み込みカーネルのデータを、所定の書式でＳＲＡＭ１１３１に書き込むことができ、オリジナル畳み込みカーネルのデータストリームに余分のゼロ値を挿入することにより、ＳＲＡＭ１１３１に記憶されている畳み込みカーネルが上述した前処理されて折り畳まれたものになる。
【０１０７】
１つ又は複数の折り畳まれた畳み込みカーネルのＳＲＡＭ１１３１への記憶は、ＳＲＡＭの異なるスライス１１４０に格納される以外に、図１２Ａ及び図１２Ｂを参照して上述した折り畳まれた特徴データの記憶と同様である。ここで、折り畳まれた畳み込みカーネルのＳＲＡＭ１１３１における格納の詳細の繰り返しは省略する。なお、ＳＲＡＭ１１３１がＤＲＡＭ１１２０より小さい容量を有するので、毎回、一部の特徴データ及び一部の畳み込みカーネルしか読み取らないようにすることができる。
【０１０８】
図１１を参照し、折り畳まれた特徴データ及び１つ又は複数の折り畳まれた畳み込みカーネルをＳＲＡＭ１１３１から計算手段１１３３に読み込んで、１つ又は複数の折り畳まれた畳み込みカーネルを用いて折り畳まれた特徴データに対して畳み込み演算を実行することができる。計算手段１１３３は、畳み込み演算のために複数の乗算器及び複数の加算器を含んでもよい。
【０１０９】
一実施形態では、計算手段１１３３は、折り畳まれた特徴データ内の複数のピクセルのそれぞれと、複数の折り畳まれた畳み込みカーネルの対応するピクセルとの乗算を同時に実行することができる。該乗算を繰り返すことによって、すべての折り畳まれた畳み込みカーネルを用いて、折り畳まれた特徴データの同一部分に対して畳み込みを実行することができる。
【０１１０】
例えば、計算手段１１３３が２５６個の乗算器を含む場合、折り畳まれた特徴データの８個のピクセル（ピクセルごとに４チャネルを有し、合計で３２個のデータを有する）のそれぞれと、８個の畳み込みカーネルの対応するピクセル（同様に４チャネルを有する）とを同時に乗算し、６４個のデータ（８ピクセル×８チャネル）を生成してもよい。特徴データが折り畳まれない従来の場合と比較して、計算効率が大幅に向上される。
【０１１１】
計算手段１１３３からの演算結果は、出力バッファ（ＳＲＡＭ）１１３５に格納することができる。計算手段１１３３に提供されるデータ又は計算手段１１３３から受信されたデータを制御するように、入力バッファ１１３１及び出力バッファ１１３５は、それぞれバッファクロスバースイッチ１１３２及び１１３４を備えても良い。必要に応じて、計算結果を出力バッファ１１３５からＤＲＡＭ１１２０に移動させてもよい。
【０１１２】
前後文から明確に別途の要求がある場合を除き、明細書及び特許請求の範囲全体において、用語「ｃｏｍｐｒｉｓｅ」（有する）、「ｉｎｃｌｕｄｅ」（含む）などは、排他性又は限界性（ｅｘｈａｕｓｔｉｖｅ）の意味の逆である包括的な意味として解釈すべきであり、つまり、「を含むが、これに限定されない」の意味として解釈すべきである。また、用語「本明細書中」、「以上の記載に」、「以下の記載に」及び似たような意味の用語が本開示において使用される場合に、本開示のある具体的な部分ではなく、本開示全体を指すとすべきである。前後文が許される場合、単数形又は複数形を使用する以上の記載における用語も、それぞれ複数又は単数を含むことができる。二つ又は複数の項目のリストを言及する場合の用語「又は」について、該用語は該用語の以下の解釈における全部をカバーする。すなわち、リストにおける任意の項目、リストにおけるすべての項目、及びリストにおける項目の任意の組み合わせである。
【０１１３】
本開示に係る実施形態の以上の詳細な説明は、制限的又は本発明を以上の記載によって開示された適切な形式に限定することを意図するものではない。説明のために、本開示に係る具体的な実施形態及び例示を述べたが、当該分野における技術者が認識しているように本発明の技術的範囲内である限り、各種の均等の範囲における変更は可能である。例えば、処理又はブロックが所定の順序で示したが、代替の実施形態において、これらのステップの処理又は異なる順序でこれらのブロックのシステムを使用することができ、かついくつかの処理又はブロックは、削除、移動、追加、細分化、組み合わせ、及び／又は変更が可能である。これらの処理又はブロックのそれぞれは異なる方法で実施することができる。また、処理又はブロックは直列的な実行で示されるが、代わりに、これらの処理又はブロックは並列的に実行されてもよく、又は異なる時間に実行されることも可能である。
【０１１４】
本明細書で提供される本発明の教示は、必ずしも上記のシステムである必要はなく、他のシステムにも適用することができる。上述のそれぞれの実施形態の部品及び動作を組み合わせることにより、別の実施形態を提供することができる。
【０１１５】
本開示に係るいくつかの実施形態について説明したが、これらの実施形態は、例示として提示するものであり、本開示の範囲を限定することを意図していない。実際、本明細書に記載された新規の方法及びシステムは、様々なその他の形態で実施することができる。また、本発明の範囲から逸脱しなければ、本明細書に記載された方法及びシステムの形式に種々の省略、置換及び変更をすることが可能である。
【符号の説明】
【０１１６】
１００  例示方法
９００  例示装置
９１０  プロセッサ
９２０  メモリ
９３０ Ｉ／Ｏインターフェイス
１０００  例示装置
１０１０  第１の折り畳み手段
１０２０  前処理手段
１０３０  第２の折り畳み手段
１０４０  演算手段
１１００  装置
１１０１  バスシステム
１１１０  メインプロセッサ
１１２０  ダイナミックランダムアクセス
１１３０  畳み込みエンジン
１１３１  入力バッファ（ＳＲＡＭ）
１１３２  バッファクロスバースイッチ 
１１３３  計算手段
１１３４  バッファクロスバースイッチ
１１３５  出力バッファ
１１４０ 列(スライス)
１１４１ メモリ手段
【図１】
2019125351.tif 000025
【図２】
2019125351.tif 000026
【図３】
2019125351.tif 000027
【図４】
2019125351.tif 000028
【図５】
2019125351.tif 000029
【図６】
2019125351.tif 000030
【図７】
2019125351.tif 000031
【図８】
2019125351.tif 000032
【図９】
2019125351.tif 000033
【図１０】
2019125351.tif 000034
【図１１】
2019125351.tif 000035
【図１２Ａ】
2019125351.tif 000036
【図１２Ｂ】
2019125351.tif 000037
【外国語明細書】
2019125351000001.pdf