(57)【要約】      （修正有）【課題】中間結果を記憶するための記憶領域を減らし得るニューラルネットワーク内の畳み込み計算方法を提供する。【解決手段】入力特徴マップ、depthwise畳み込みカーネル、およびpointwise畳み込みカーネルに従ってdepthwise畳み込み計算およびpointwise畳み込み計算を実行して、すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の出力特徴値を取得し、上記演算を繰り返してすべてのpointwise畳み込み出力チャネル上ですべての点の出力特徴値を取得する。【選択図】図３
2019109896.tif 000002
【特許請求の範囲】
【請求項１】
ニューラルネットワークにおける畳み込み計算のための方法であって、
ダイナミックランダムアクセスメモリ(DRAM)から入力特徴マップ、depthwise畳み込みカーネル、pointwise畳み込みカーネルを読み出すステップと、
前記入力特徴マップ、前記depthwise畳み込みカーネル、および前記pointwise畳み込みカーネルに従ってdepthwise畳み込み計算ユニットおよびpointwise畳み込み計算ユニットによってdepthwise畳み込み計算およびpointwise畳み込み計算を実行して、すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の出力特徴値を取得するステップであって、前記第1の所定の数pは、オンチップメモリ内の利用可能な空間、前記depthwise畳み込み計算ユニットの数、前記入力特徴マップの高さと幅、およびチャネルの数の大きさ、のうちの少なくとも1つに従って決定される、ステップと、
すべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の前記出力特徴値をオンチップメモリに記憶するステップと、
上記の演算を繰り返して、すべてのpointwise畳み込み出力チャネル上のすべての点の出力特徴値を取得するステップとを含む方法。
【請求項２】
前記実行するステップは、
前記depthwise畳み込み計算を、前記入力特徴マップおよび前記depthwise畳み込みカーネルに従って実行して、第2の所定の数m個のdepthwise畳み込み出力チャネル上で前記第1の所定の数p個の点の中間特徴値を取得し、各中間特徴値を前記オンチップメモリに記憶するステップであって、前記第2の所定の数mは、前記depthwise畳み込み計算ユニットの数および前記第1の所定の数pに従って決定される、ステップと、
前記第1の所定の数p個の点の前記中間特徴値による前記pointwise畳み込み計算を前記第2の所定の数m個のdepthwise畳み込み出力チャネルおよび前記pointwise畳み込みカーネルに対して実行して、すべての前記pointwise畳み込み出力チャネル上で前記第1の所定の数p個の点の現在のpointwise畳み込み部分和を取得するステップと、
累算計算を、すべてのpointwise畳み込み出力チャネル上の前記第1の所定の数p個の点の前記現在のpointwise畳み込みの部分和と前記第1の所定の数p個の点の前の累算計算結果に対してそれぞれ実行して、前記第1の所定の数p個の点の現在の累算計算結果を生成し、前記第1の所定の数p個の点の前記現在の累算計算結果を前記オンチップメモリに記憶するステップと、
上記の演算を、次の第2の所定の数m個のdepthwise畳み込み出力チャネル上の前記第1の所定の数p個の点の中間特徴値および前記pointwise畳み込みカーネルに従って前記pointwise畳み込み計算を実行し、それに対応して、その後の演算を、前記pointwise畳み込み計算および累算計算がすべてのdepthwise畳み込み出力チャネル上で前記第1の所定の数p個の点の前記中間特徴値のすべてに対して完了するまで、実行することによって繰り返すステップであって、前記第1の所定の数p個の点の前記最終的累算計算結果がすべてのpointwise畳み込み出力チャネル上の前記第1の所定の数p個の点の出力特徴値である、ステップとを含む請求項1に記載の方法。
【請求項３】
前記depthwise畳み込み計算を、前記入力特徴マップおよび前記depthwise畳み込みカーネルに従って実行して、次の第2の所定の数m個のdepthwise畳み込み出力チャネル上で前記第1の所定の数p個の点の中間特徴値を取得するステップは、
前記入力特徴マップから第2の所定の数m個の入力チャネル上で点の第1の所定の数p個のグループの入力特徴値を読み出すステップと、
前記第2の所定の数m個の入力チャネル上で点の前記第1の所定の数p個のグループの前記入力特徴値に対応する、対応する第2の所定の数m個のdepthwise畳み込みカーネルにおける重み値を読み出すステップと、
前記対応する第2の所定の数m個のdepthwise畳み込みカーネルにおける重み値ととも前記第2の所定の数m個の入力チャネル上の点の前記第1の所定の数p個のグループの前記入力特徴値に対して前記depthwise畳み込み計算をそれぞれ実行して、前記第2の所定の数m個のdepthwise畳み込み出力チャネル上で点の前記第1の所定の数p個のグループにそれぞれ対応する前記第1の所定の数p個の点の中間特徴値を取得するステップとを含む請求項2に記載の方法。
【請求項４】
前記pointwise畳み込み計算を実行するステップと同時に、前記入力特徴マップから前記第2の所定の数m個の入力チャネル上の点の第1の所定の数p個のグループの前記入力特徴値と、前記対応する重み値とを読み出すステップをさらに含む請求項3に記載の方法。
【請求項５】
前記入力特徴マップから第2の所定の数m個の入力チャネル上で点の第1の所定の数p個のグループの入力特徴値を読み出すステップは、
前記入力特徴マップから前記第2の所定の数m個の入力チャネル上で点の前記第1の所定の数p個のグループの前記入力特徴値を読み出すステップであって、点の各グループは前記depthwise畳み込みカーネルにおける前記重み値の幅および高さに等しい幅および高さを有し、点の2つの隣接するグループは前記depthwise畳み込み計算のストライドに等しいストライドを有する、ステップを含む請求項3に記載の方法。
【請求項６】
前記対応する第2の所定の数m個のdepthwise畳み込みカーネルにおける重み値とともに前記第2の所定の数m個の入力チャネル上の点の前記第1の所定の数p個のグループの前記入力特徴値に対して前記depthwise畳み込み計算をそれぞれ実行して、前記第2の所定の数m個のdepthwise畳み込み出力チャネル上で点の前記第1の所定の数p個のグループにそれぞれ対応する前記第1の所定の数p個の点の中間特徴値を取得するステップは、
点の前記第1の所定の数p個のグループ内の点の各グループに対して、
前記第2の所定の数m個の入力チャネル上の点の前記グループ内の1つの点の前記入力特徴値、および前記対応する第2の所定の数m個のdepthwise畳み込みカーネルにおける対応する重み値に対して乗算計算をそれぞれ実行して、点の前記グループの現在の乗算計算結果を取得する演算と、
点の前記グループの前記現在の乗算計算結果および点の前記グループの前の乗算計算結果に対して累算計算をそれぞれ実行して、点の前記グループの現在の累算計算結果を生成する演算と、
上記演算を、前記第2の所定の数m個の入力チャネル上の点の前記グループの次の点の入力特徴値、および前記対応する第2の所定の数m個のdepthwise畳み込みカーネルにおける対応する次の1つの重み値に対して乗算計算をそれぞれ実行し、それに対応して、前記第2の所定の数m個の入力チャネル上の点の前記グループのすべての点の前記入力特徴値に対する前記乗算計算および累算計算が完了するまでその後の演算を実行することによって繰り返す演算であって、点の前記グループの前記最終的累算計算結果は前記第2の所定の数m個のdepthwise畳み込み出力チャネル上の点の前記グループに対応する1つの点の中間特徴値である、演算とを実行するステップを含む請求項3に記載の方法。
【請求項７】
活性化演算および量子化演算のうちの少なくとも一方を各中間特徴値に対して、それを前記オンチップメモリに記憶する前に実行するステップをさらに含む請求項2に記載の方法。
【請求項８】
前記第1の所定の数p個の点の前記中間特徴値による前記pointwise畳み込み計算を前記第2の所定の数m個のdepthwise畳み込み出力チャネルおよび前記pointwise畳み込みカーネルに対して実行して、すべての前記pointwise畳み込み出力チャネル上で前記第1の所定の数p個の点の現在のpointwise畳み込み部分和を取得するステップは、
それぞれ、すべてのpointwise畳み込みカーネル内の対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値とともに第3の所定の数m'個のdepthwise畳み込み出力チャネル上の前記第1の所定の数p個の点の中間特徴値に従って前記pointwise畳み込み計算を実行して、すべてのpointwise畳み込み出力チャネル上の前記第1の所定の数p個の点の現在のpointwise畳み込み下位部分和を取得するステップと、
すべてのpointwise畳み込み出力チャネル上の前記第1の所定の数p個の点の前記現在のpointwise畳み込みの下位部分和および前記第1の所定の数p個の点の前記前の累算計算部分結果に対する累算計算を実行して、前記第1の所定の数p個の点の前記現在の累算計算部分結果を生成するステップと、
上記の演算を、それぞれ、すべてのpointwise畳み込みカーネルにおける対応する次の第3の所定の数m'個のpointwise畳み込みチャネル上の重み値とともに次の第3の所定の数m'個のdepthwise畳み込み出力チャネル上の前記第1の所定の数p個の点の中間特徴値に従って前記pointwise畳み込み計算を実行し、それに対応して、その後の演算を、前記pointwise畳み込み計算および累算計算が前記第2の所定の数m個のdepthwise畳み込み出力チャネル上で前記第1の所定の数p個の点の中間特徴値のすべてに対して完了するまで実行することによって繰り返すステップであって、前記第1の所定の数p個の点の前記最終的累算計算部分結果はすべてのpointwise畳み込み出力チャネル上の前記第1の所定の数p個の点の前記現在のpointwise畳み込み部分和である、ステップとを含む請求項2に記載の方法。
【請求項９】
それぞれ、前記pointwise畳み込み計算を、すべてのpointwise畳み込みカーネル内の対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値とともに第3の所定の数m'個のdepthwise畳み込み出力チャネル上の前記第1の所定の数p個の点の中間特徴値に従って実行して、すべてのpointwise畳み込み出力チャネル上の前記第1の所定の数p個の点の現在のpointwise畳み込み下位部分和を取得するステップは、
前記pointwise畳み込み計算を、第4の所定の数n個のpointwise畳み込みカーネル内の前記対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値とともに前記第3の所定の数m'個のdepthwise畳み込み出力チャネル上の前記第1の所定の数p個の点の前記中間特徴値に従って実行して、前記第4の所定の数n個のpointwise畳み込みカーネルに対応する第4の所定の数n個のpointwise畳み込み出力チャネル上の前記第1の所定の数p個の点の現在のpointwise畳み込み下位部分和を取得するステップであって、前記第3の所定の数m'および前記第4のプリセットされた数nは、pointwise畳み込み計算ユニットの数および前記第1の所定の数pに従って決定される、ステップと、
上記の演算を、前記pointwise畳み込み計算を、次の第4の所定の数n個のpointwise畳み込みカーネル内の前記対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値とともに前記第3の所定の数m'個のdepthwise畳み込み出力チャネル上の前記第1の所定の数p個の点の前記中間特徴値に対して実行して、前記次の第4の所定の数n個のpointwise畳み込みカーネルに対応する次の第4の所定の数n個のpointwise畳み込み出力チャネル上の前記第1の所定の数p個の点の現在のpointwise畳み込み下位部分和を取得することによって、すべてのpointwise畳み込み出力チャネル上の前記第1の所定の数p個の点の前記現在のpointwise畳み込み下位部分和が取得されるまで繰り返すステップとを含む請求項8に記載の方法。
【請求項１０】
前記pointwise畳み込み計算を、第4の所定の数n個のpointwise畳み込みカーネル内の前記対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値とともに前記第3の所定の数m'個のdepthwise畳み込み出力チャネル上の前記第1の所定の数p個の点の前記中間特徴値に従って実行して、前記第4の所定の数n個のpointwise畳み込みカーネルに対応する第4の所定の数n個のpointwise畳み込み出力チャネル上の前記第1の所定の数p個の点の前記現在のpointwise畳み込み下位部分和を取得するステップは、
前記第2の所定の数m個のdepthwise畳み込み出力チャネル上の前記第1の所定の数p個の点の前記中間特徴値から前記第3の所定の数m'個のdepthwise畳み込み出力チャネル上の前記第1の所定の数p個の点の前記中間特徴値を読み出すステップと、
前記第3の所定の数m'個のdepthwise畳み込み出力チャネル上の前記第1の所定の数p個の点の前記中間特徴値に対応して前記第4の所定の数n個のpointwise畳み込みカーネル内の前記対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値を読み出すステップと、
それぞれ、前記pointwise畳み込み計算を、前記第3の所定の数m'個のdepthwise畳み込み出力チャネル上の前記第1の所定の数p個の点の前記中間特徴値および前記第4の所定の数n個のpointwise畳み込みカーネル内の前記対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値に対して実行して、前記第4の所定の数n個のpointwise畳み込みカーネルに対応する第4の所定の数n個のpointwise畳み込み出力チャネル上の前記第1の所定の数p個の点の現在のpointwise畳み込み下位部分和を取得するステップとを含む請求項9に記載の方法。
【請求項１１】
それぞれ、前記pointwise畳み込み計算を、前記第3の所定の数m'個のdepthwise畳み込み出力チャネル上の前記第1の所定の数p個の点の前記中間特徴値および前記第4の所定の数n個のpointwise畳み込みカーネル内の前記対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値に対して実行して、前記第4の所定の数n個のpointwise畳み込みカーネルに対応する第4の所定の数n個のpointwise畳み込み出力チャネル上の前記第1の所定の数p個の点の現在のpointwise畳み込み下位部分和を取得するステップは、
前記第1の所定の数p個の点のうちの各点に対して、
第4の所定の数n個のpointwise畳み込みカーネル内の対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値とともに第3の所定の数m'個のdepthwise畳み込み出力チャネル上の点の中間特徴値に対して乗算計算をそれぞれ実行して、結果の第4の所定の数n個のグループを取得する演算であって、その各グループが第3の所定の数m'個の乗算計算結果を含む、演算と、
それぞれ、結果の前記第4の所定の数n個のグループ内に結果の各グループの前記第3の所定の数m'個の乗算計算結果を加算して、前記第4の所定の数n個のpointwise畳み込みカーネルに対応する前記第4の所定の数n個のpointwise畳み込み出力チャネル上の前記点の現在のpointwise畳み込み下位部分和を取得する演算とを実行するステップを含む請求項10に記載の方法。
【請求項１２】
前記現在の累算計算部分結果を生成した後に、前記第1の所定の数p個の点の前記現在の累算計算部分結果を前記オンチップメモリに記憶し、前記第1の所定の数p個の点の前記前の累算計算部分結果をカバーするステップをさらに含む請求項8に記載の方法。
【請求項１３】
活性化演算および量子化演算のうちの少なくとも一方を、前記第1の所定の数p個の点の前記最終的累算計算結果をすべてのpointwise畳み込み出力チャネル上の前記第1の所定の数p個の点の出力特徴値として前記オンチップメモリに記憶する前に、各出力特徴値に対して実行するステップをさらに含む請求項2に記載の方法。
【請求項１４】
電子デバイスであって、
プロセッサと、
コンピュータプログラム命令が記憶されているメモリであって、前記命令は、前記プロセッサによって実行されたときに、ニューラルネットワークにおける畳み込み計算の方法を前記プロセッサに実行させ、前記命令は
ダイナミックランダムアクセスメモリ(DRAM)から入力特徴マップ、depthwise畳み込みカーネル、pointwise畳み込みカーネルを読み出すステップと、
前記入力特徴マップ、前記depthwise畳み込みカーネル、および前記pointwise畳み込みカーネルに従ってdepthwise畳み込み計算ユニットおよびpointwise畳み込み計算ユニットによってdepthwise畳み込み計算およびpointwise畳み込み計算を実行して、すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の出力特徴値を取得するステップと、
すべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の前記出力特徴値をオンチップメモリに記憶するステップと、
上記の演算を繰り返して、すべてのpointwise畳み込み出力チャネル上のすべての点の出力特徴値を取得するステップとを含む、メモリとを備える電子デバイス。
【請求項１５】
コンピュータプログラム命令が記憶されているコンピュータ可読記憶媒体であって、前記命令は、プロセッサによって実行されたときに、ニューラルネットワークにおける畳み込み計算の方法をプロセッサに実行させ、前記命令は
ダイナミックランダムアクセスメモリ(DRAM)から入力特徴マップ、depthwise畳み込みカーネル、pointwise畳み込みカーネルを読み出すステップと、
前記入力特徴マップ、前記depthwise畳み込みカーネル、および前記pointwise畳み込みカーネルに従ってdepthwise畳み込み計算ユニットおよびpointwise畳み込み計算ユニットによってdepthwise畳み込み計算およびpointwise畳み込み計算を実行して、すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の出力特徴値を取得するステップと、
すべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の前記出力特徴値をオンチップメモリに記憶するステップと、
上記の演算を繰り返して、すべてのpointwise畳み込み出力チャネル上のすべての点の出力特徴値を取得するステップとを含む、コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ニューラルネットワークの技術分野に関し、より詳細には、ニューラルネットワークにおける畳み込み計算のための方法および電子デバイスに関する。
【背景技術】
【０００２】
畳み込みニューラルネットワークに基づくディープラーニング技術は、画像認識および検出、音声認識などを高い精度で行うために使用されてよく、したがって、安全監視、運転補助、インテリジェントコンパニオンロボット、インテリジェント医療などの分野において広く使用されている。
【０００３】
畳み込みニューラルネットワークは演算集約的であるため、ニューラルネットワークのパラメータの数および計算量を減らすことが、現在の研究のホットな動向(hot direction)となっている。モバイルネットワーク(すなわち、MobileNet)は、最新の特別な畳み込みニューラルネットワークであり、これは、従来の3次元畳み込み演算を2つの畳み込み演算、すなわち、depthwise畳み込み(depthwise convolution)とpointwise畳み込み(pointwise convolution)に分解することによって計算量を減らし、その一方で計算精度は従来の畳み込みと少しだけ異なる。
【０００４】
MobileNetの既存の実装ソリューションに関して、それが汎用プロセッサ(CPU)に基づこうと、専用グラフィックスプロセッサ(GPU)に基づこうと、または専用処理チップに基づこうと、depthwise畳み込み演算の出力を最初に計算し、次いで、それらをpointwise畳み込み演算の入力データとして受け取り、次いで、計算を実行することが必要である。
【０００５】
このアプローチの不利点は、入力および出力のデータ量が比較的大きいときに、中間結果をバッファリングするためにより大きいオンチップランダムアクセスメモリ(SRAM)が必要になることである。しかしながら、オンチップSRAMのサイズは固定されている。オンチップSRAMのサイズが、中間結果をバッファリングするのに不十分である場合、depthwise畳み込み演算を複数の計算に分割し、各計算結果を、depthwise畳み込み演算の計算結果が完全に計算され、オフチップメモリ(DDR)に書き込まれるまでオフチップメモリ(DDR)内に書き込み、次いで、これらの結果をバッチでDDRから読み出し、pointwise畳み込み計算を実行する必要がある。明らかに、これは、限られたデータ伝送帯域幅に非常に大きな負担をかけ、システム消費電力の増大を引き起こすことになる。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記の技術的問題を解決するために、本開示が提案されている。中間結果を記憶するための記憶領域を減らし得るニューラルネットワーク内の畳み込み計算のための方法および電子デバイスが、本開示の実施形態において実現される。
【課題を解決するための手段】
【０００７】
本開示の一態様によれば、開示されているのは、ニューラルネットワークにおける畳み込み計算のための方法であり、これは、ダイナミックランダムアクセスメモリ(DRAM)から入力特徴マップ、depthwise畳み込みカーネル、pointwise畳み込みカーネルを読み出すステップと、入力特徴マップ、depthwise畳み込みカーネル、およびpointwise畳み込みカーネルに従ってdepthwise畳み込み計算ユニットおよびpointwise畳み込み計算ユニットによってdepthwise畳み込み計算およびpointwise畳み込み計算を実行して、すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の出力特徴値を取得するステップと、すべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値をオンチップメモリに記憶するステップと、上記の演算を繰り返して、すべてのpointwise畳み込み出力チャネル上ですべての点の出力特徴値を取得するステップとを含む。
【０００８】
一実施形態において、入力特徴マップ、depthwise畳み込みカーネル、pointwise畳み込みカーネルに従ってdepthwise畳み込み計算およびpointwise畳み込み計算を実行してすべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値を取得するステップは、入力特徴マップおよびdepthwise畳み込みカーネルに従ってdepthwise畳み込み計算を実行してすべてのdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値を取得するステップと、すべてのdepthwise畳み込み出力チャネルおよびpointwise畳み込みカーネル上で第1の所定の数p個の点の中間特徴値に従ってpointwise畳み込み計算を実行して、すべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値を取得するステップとを含む。
【０００９】
一実施形態において、入力特徴マップ、depthwise畳み込みカーネル、pointwise畳み込みカーネルに従ってdepthwise畳み込み計算およびpointwise畳み込み計算を実行してすべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値を取得するステップは、入力特徴マップおよびdepthwise畳み込みカーネルに従ってdepthwise畳み込み計算を実行して、第2の所定の数m個のdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値を取得するステップと、第1の所定の数p個の点の中間特徴値によるpointwise畳み込み計算を第2の所定の数m個のdepthwise畳み込み出力チャネルおよびpointwise畳み込みカーネルに対して実行して、すべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の現在のpointwise畳み込み部分和を得るステップと、すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の現在のpointwise畳み込みの部分和と第1の所定の数p個の点の前の累算計算結果に対する累算計算をそれぞれ実行して、第1の所定の数p個の点の現在の累算計算結果を生成するステップと、上記の演算を繰り返し、次の第2の所定の数m個のdepthwise畳み込み出力チャネルおよびpointwise畳み込みチャネル上で第1の所定の数p個の点の中間特徴値に従ってpointwise畳み込み計算を実行するステップと、それに対応して、その後の演算を、pointwise畳み込み計算および累算計算がすべてのdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値のすべてに対して完了するまで、実行するステップであって、第1の所定の数p個の点の最終的累算計算結果がすべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の出力特徴値である、ステップとを含む。
【００１０】
本開示の別の態様によれば、開示されているのは、プロセッサと、プロセッサによって実行されたときに、プロセッサにニューラルネットワークにおいて畳み込み計算のための方法を実行させるコンピュータプログラム命令が記憶されているメモリとを備える電子デバイスであり、方法はダイナミックランダムアクセスメモリ(DRAM)から入力特徴マップ、depthwise畳み込みカーネル、pointwise畳み込みカーネルを読み出すステップと、入力特徴マップ、depthwise畳み込みカーネル、およびpointwise畳み込みカーネルに従ってdepthwise畳み込み計算ユニットおよびpointwise畳み込み計算ユニットによってdepthwise畳み込み計算およびpointwise畳み込み計算を実行して、すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の出力特徴値を取得するステップと、すべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値をオンチップメモリに記憶するステップと、上記の演算を繰り返して、すべてのpointwise畳み込み出力チャネル上ですべての点の出力特徴値を取得するステップとを含む。
【００１１】
本開示の別の態様によれば、開示されているのは、プロセッサによって実行されたときに、プロセッサにニューラルネットワークにおいて畳み込み計算のための方法を実行させるコンピュータプログラム命令を備えるコンピュータプログラム製品であり、方法はダイナミックランダムアクセスメモリ(DRAM)から入力特徴マップ、depthwise畳み込みカーネル、pointwise畳み込みカーネルを読み出すステップと、入力特徴マップ、depthwise畳み込みカーネル、およびpointwise畳み込みカーネルに従ってdepthwise畳み込み計算ユニットおよびpointwise畳み込み計算ユニットによってdepthwise畳み込み計算およびpointwise畳み込み計算を実行して、すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の出力特徴値を取得するステップと、すべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値をオンチップメモリに記憶するステップと、上記の演算を繰り返して、すべてのpointwise畳み込み出力チャネル上ですべての点の出力特徴値を取得するステップとを含む。
【００１２】
本開示の別の態様によれば、開示されているのは、プロセッサによって実行されたときに、プロセッサにニューラルネットワークにおいて畳み込み計算のための方法を実行させるコンピュータプログラム命令が記憶されているコンピュータ可読および書込可能記憶媒体であり、方法はダイナミックランダムアクセスメモリ(DRAM)から入力特徴マップ、depthwise畳み込みカーネル、pointwise畳み込みカーネルを読み出すステップと、入力特徴マップ、depthwise畳み込みカーネル、およびpointwise畳み込みカーネルに従ってdepthwise畳み込み計算ユニットおよびpointwise畳み込み計算ユニットによってdepthwise畳み込み計算およびpointwise畳み込み計算を実行して、すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の出力特徴値を取得するステップと、すべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値をオンチップメモリに記憶するステップと、上記の演算を繰り返して、すべてのpointwise畳み込み出力チャネル上ですべての点の出力特徴値を取得するステップとを含む。
【００１３】
従来技術と比較して、ニューラルネットワークにおける畳み込み計算方法および本開示の実施形態による電子デバイスは、入力特徴マップ、depthwise畳み込みカーネル、およびpointwise畳み込みカーネルに従ってdepthwise畳み込み計算およびpointwise畳み込み計算を実行して、すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の出力特徴値を取得し、上記演算を繰り返してすべてのpointwise畳み込み出力チャネル上ですべての点の出力特徴値を取得するものとしてよい。したがって、中間結果を記憶するための記憶領域は減らされ、それにより、より効率的な畳み込みニューラルネットワークが実現され得る。
【００１４】
本開示の上記のならびに他の目的、特徴、および利点は、添付図面を参照しつつより詳しく本開示の実施形態を説明することを通じてさらに明らかになるであろう。図面は、本開示の実施形態をさらに深く理解してもらうために使用されており、本明細書の一部をなし、図面は、本開示の実施形態と併せて、本開示を説明するために使用され、本開示に対する制限を構成しない。図面中、同じ参照番号は、一般的に、同じ部分またはステップを指す。
【図面の簡単な説明】
【００１５】
【図１】従来の畳み込みニューラルネットワーク内の畳み込みカーネルを示す概略図である。
【図２Ａ】MobileNetにおけるdepthwise畳み込み演算の畳み込みカーネルを示す概略図である。
【図２Ｂ】MobileNetにおけるpointwise畳み込み演算の畳み込みカーネルを示す概略図である。
【図３】本開示の一実施形態による畳み込み計算のための方法を示すフローチャートである。
【図４】本開示の第1の実施形態によるすべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値を計算するステップを示すフローチャートである。
【図５】本開示の第1の実施形態によるすべてのdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値を計算するステップを示すフローチャートである。
【図６】本開示の第1の実施形態によるすべてのdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値を計算するステップを示す概略図である。
【図７】中間特徴値によるすべてのpointwise畳み込み出力チャネルおよび本開示の第1の実施形態によるpointwise畳み込みカーネル上で第1の所定の数p個の点の出力特徴値を計算するステップを示すフローチャートである。
【図８】中間特徴値によるすべてのpointwise畳み込み出力チャネルおよび本開示の第1の実施形態によるpointwise畳み込みカーネル上で第1の所定の数p個の点の出力特徴値を計算するステップを示す概略図である。
【図９】本開示の一実施形態によるdepthwise畳み込み計算を示す概略図である。
【図１０】本開示の一実施形態によるpointwise畳み込み計算を示す概略図である。
【図１１】中間特徴値によるすべてのpointwise畳み込み出力チャネルおよび本開示の第2の実施形態によるpointwise畳み込みカーネル上で第1の所定の数p個の点の出力特徴値を計算するステップを示すフローチャートである。
【図１２】中間特徴値によるすべてのpointwise畳み込み出力チャネルおよび本開示の第2の実施形態によるpointwise畳み込みカーネル上で第1の所定の数p個の点の出力特徴値を計算するステップを示すフローチャートである。
【図１３】本開示の第3の実施形態によるすべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値を計算するステップを示すフローチャートである。
【図１４】本開示の第3の実施形態によるすべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の現在のpointwise畳み込み部分和を計算するステップを示す概略図である。
【図１５】本開示の一実施形態による電子デバイスを示すブロック図である。
【発明を実施するための形態】
【００１６】
これ以降、本開示による例示的な一実施形態は、図面を参照しつつ詳しく説明される。明らかに、説明されている実施形態は、本開示の実施形態の一部のみであり、本開示の実施形態すべてではなく、本開示は、本明細書において説明されている例示的な実施形態によって限定されないことは理解されるであろう。
【００１７】
開示の要約
畳み込みニューラルネットワークは、一般的に、複数の畳み込み層を含み得る。各畳み込み層において、層の入力特徴マップ(入力特徴データまたは入力特徴値とも呼ばれる)に対して畳み込み演算を実行して層の出力特徴マップ(出力特徴データまたは出力特徴値とも呼ばれる)を取得するために層の畳み込みカーネルが使用される。畳み込みニューラルネットワークの各層において、入力特徴マップは、特定の幅および高さを有するものとしてよく、特定の数のチャネル(深さとも呼ばれる)を有し得る。各畳み込みカーネルは、入力特徴マップの幅および高さより小さい(または等しい)、同じ(または異なる)幅および高さを有するものとしてよく、入力特徴マップのチャネルの数に等しい、同じ数のチャネルを有し得る。
【００１８】
ライトウェイトニューラルネットワークとしてのMobileNetは、depthwise separable畳み込みの考え方を使用し、畳み込みを計算するときにチャネルを融合する代わりに(たとえば、3*3畳み込みカーネルまたはそれより大きいサイズ)、これは、depthwise(またはchannel-wiseと呼ばれる)および1*1 pointwise畳み込み法を使用して、畳み込みを分解し、それにより、速度およびモデルサイズが最適化され、計算精度は基本的に保たれる。
【００１９】
次に、従来の畳み込みニューラルネットワークの畳み込み計算プロセスとMobileNetの畳み込み計算プロセスとの比較が、図1から図2Bを参照しつつ説明される。
【００２０】
図1は、従来の畳み込みニューラルネットワーク内の畳み込みカーネルの概略図を示し、図2Aは、MobileNetにおけるdepthwise畳み込み演算の畳み込みカーネルの概略図を示し、図2Bは、MobileNetにおけるpointwise畳み込み演算の畳み込みカーネルの概略図を示す。
【００２１】
図1に示されているように、従来の畳み込みニューラルネットワーク内の畳み込みカーネルのサイズは、R行およびS列であり、全部でM個のチャネルとN個のそのような畳み込みカーネルがあると仮定すると、1つの点を出力する入力特徴マップによる畳み込み計算の計算量は、R*S*M*Nとなる。入力特徴マップサイズがX行およびY列であり、全部でM個のチャネルがあると仮定すると、全畳み込み計算の計算量は、R*S*M*N*X*Yとなる。式で表すと、特定の出力点(x,y,n)の値は、
【００２２】
【数１】
2019109896.tif 000003
【００２３】
となる。
【００２４】
図2Aに示されているdepthwise畳み込みと図2Bに示されているpointwise畳み込みのカスケードは、図1の従来の畳み込み演算に対応するMobileNet畳み込み演算である。
【００２５】
図2Aのdepthwise畳み込みは、従来の畳み込みにおける1つの畳み込みカーネルのM個のチャネルをM個のdepthwise畳み込みカーネルに分割することとして見なされてよく、その各々はR行およびS列、ならびに1個のチャネルのみを有する。M個のdepthwise畳み込みカーネルは、入力特徴マップのM個のチャネルとそれぞれ畳み込みし、累算することなくM個のチャネルの出力結果を得る。全畳み込み計算の計算量は、R*S*M*1*X*Yである。式で表すと、特定の出力点(x,y,m)の値は、
【００２６】
【数２】
2019109896.tif 000004
【００２７】
となる。
【００２８】
図2Bにおけるpointwise畳み込みは、畳み込みカーネルのサイズが1行および1列で、全部でM個のチャネルおよびそのような畳み込みカーネルのうちのN個があることを除き、従来の畳み込み演算と全く同じである。N個のdepthwise畳み込みカーネルは、それぞれ、入力特徴マップと畳み込みし、N個のチャネルの出力結果を得る。全畳み込み計算の計算量は、1*1*M*N*X*Yである。式で表すと、特定の出力点(x,y,n)の値は、
【００２９】
【数３】
2019109896.tif 000005
【００３０】
となる。
【００３１】
MobileNet畳み込み演算は、従来の畳み込みの計算量をR*S*M*N*X*YからR*S*M*X*Y+M*N*X*Yに減らし、畳み込み演算の計算量を著しく低減することがわかる。したがって、R*Sが3*3である場合、計算量は、同等の従来の畳み込みの1/9から1/8であることがわかる。
【００３２】
現在、MobileNetの既存の実装ソリューションはすべて、最初に、depthwise畳み込み演算の中間出力結果を計算して、それらを連続的にオンチップSRAMに記憶することをすべての計算が完了するまで行い、次いで、それらをオンチップSRAMからpointwise畳み込み演算の入力データとして読み出し、計算を実行する必要がある。多数のdepthwise畳み込み中間出力結果がオンチップランダムアクセスメモリに記憶されるべきであるので、大量のオンチップメモリが必要であり、そのため、チップ面積およびコストが増大するか、または中間結果がオフチップランダムアクセスメモリに記憶される場合、限られているデータ伝送帯域幅により大きな負担がかかり、システムの消費電力が増大する。
【００３３】
この技術的問題について、MobileNetネットワークの特別な畳み込み構造--depthwise畳み込みとそれに続くpointwise畳み込みを考察することで、本開示は、ニューラルネットワークにおける畳み込み計算のための方法、装置、電子デバイス、コンピュータプログラム製品、およびコンピュータ可読記憶媒体を実現し、入力特徴マップ、depthwiseカーネル、およびpointwiseカーネルに従ってdepthwise畳み込み計算およびpointwise畳み込み計算を実行し、pointwise出力チャネルのすべてにおける第1の所定の数p個の点の出力特徴値を取得し、上記の演算を繰り返してすべてのpointwise出力チャネル上のすべての点の出力特徴値を取得し得る。したがって、depthwise畳み込みの中間出力結果を記憶するための記憶領域は減らされ、それにより、より効率的な畳み込みニューラルネットワークが実現され得る。
【００３４】
当業者であれば、本開示の実施形態による畳み込み計算方法は、MobileNet畳み込みニューラルネットワークに適用されるだけでなく、depthwise畳み込みの後にpointwise畳み込みが続く畳み込み計算プロセスを含む限り、他のタイプの畳み込みニューラルネットワークにも適用されてよく、したがって、本開示の実施形態は、畳み込みニューラルネットワークのタイプに制限を課すことを意図していないことを理解するであろう。
【００３５】
本開示の基本原理を導入した後、本開示の様々な非限定的な実施形態は、MobileNetを例として取りあげ、図面を参照することによって以下で具体的に説明される。
【００３６】
例示的な方法
図3は、本開示の一実施形態による畳み込み計算のための方法を示すフローチャートである。
【００３７】
図3に示されているように、本開示の一実施形態による畳み込み計算方法は以下のステップを含み得る。
【００３８】
ステップS110において、depthwise畳み込み計算およびpointwise畳み込み計算は、入力特徴マップ、depthwise畳み込みカーネル、pointwise畳み込みカーネルに従って実行され、すべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値を取得する。
【００３９】
第1の所定の数pは、メモリ内の利用可能な空間、depthwise畳み込み計算ユニットの数、高さおよび幅の大きさ、ならびに入力特徴マップのチャネル数の大きさのうちの少なくとも1つに従って決定され得る。
【００４０】
たとえば、メモリは、より高速なアクセス速度を実現し、データ伝送帯域幅を占有するのを回避するためにオンチップランダムアクセスメモリ(SRAM)であってよい。しかし、本開示は、それに限定されない。たとえば、メモリは、オフチップメモリ(DDR)などの、他のメモリであってよい。メモリ内の利用可能な空間は、depthwise畳み込み演算の中間出力結果をバッファリングするために使用され得る。
【００４１】
たとえば、幅および高さがより大きく(すなわち、点が多い)、現在の畳み込み層のチャネルの数がより少ない(すなわち、深さが非常に浅い)(たとえば、現在の層は畳み込みニューラルネットワーク全体の第1の少数の層内にある)ときに、第1の所定の数pは、より大きい値に設定されてよい。反対に、現在の畳み込み層の幅および高さがより小さく(すなわち、点がより少ない)、チャネルの数がより多い(すなわち、深さが非常に深い)(たとえば、現在の層は畳み込みニューラルネットワーク全体の最近の少数の層内にある)ときに、第1の所定の数pは、より小さい値に設定されてよい。
【００４２】
depthwise畳み込みがM個のチャネル(またはM個のdepthwise畳み込みカーネルとも呼ばれる)を有していると仮定すると、メモリ内の利用可能な空間は、depthwise畳み込み演算の中間出力結果をバッファリングする必要がある、すなわち、p*M個の中間特徴値がバッファリングされる必要がある。特徴値が逆量子化データであるときには、利用可能な空間の容量Cは、p*m*32ビット以上であるべきであり、特徴値が8ビット量子化データであるときには、利用可能な空間の容量Cは、p*m*8ビット以上であるべきである。したがって、別の角度から見ると、利用可能な空間の容量Cが固定されている場合、量子化が使用されなければ、第1の所定の数pはC/(M*32)をとってもよく、量子化が使用される場合、第1の所定の数pはC/(M*8)をとってもよい。
【００４３】
さらに、第1の所定の数pは、乗算器-加算器ユニットの数の約数であり得る、depthwise畳み込み計算ユニット(たとえば、乗算器-加算器ユニットMAC)の数によっても制限されることがある。
【００４４】
ステップS120において、上記の演算(すなわち、ステップS110)が繰り返され、すべてのpointwise畳み込み出力チャネル上ですべての点の出力特徴値を取得する。
【００４５】
たとえば、ステップS110が再び実行され、すべてのpointwise畳み込み出力チャネル上で次の第1の所定の数p個の点の出力特徴値が計算され、ステップS110は、すべてのpointwise畳み込み出力チャネル上ですべての点の出力特徴値が取得されるまで連続的に繰り返される。
【００４６】
残りの点の数が、最後の計算のプロセスにおいてp個の点の出力特徴値を生成するのに十分でない場合、これはパディング(たとえば、0がパディングされる)方式で実現され得る。代替的に、これは、畳み込み計算ユニットの作業量を減らすなどの他の方式によっても実現され得る。
【００４７】
既存の実装ソリューションによれば、depthwise畳み込み演算のすべての中間出力結果は、最初に計算され記憶される。depthwise畳み込み演算の中間出力結果として、高さおよび幅の大きさにおいて全部でH行およびW列があると仮定される。本開示の一実施形態において、MobileNetではdepthwise畳み込みの後にpointwise畳み込みが続くという特徴によれば、pointwise畳み込み演算を計算する前にH*W中間出力点のすべてに対する計算が完了しているのを待つ代わりに、pointwise畳み込み演算は、p(pはH*W未満、好ましくはH*Wよりかなり小さく、確かにpはH*Wに等しくてもよい)個の点のdepthwise畳み込み結果が計算された直後にのみ実行され、それにより、depthwise畳み込み演算の中間出力結果に必要な記憶領域は、従来の畳み込みニューラルネットワークに必要な記憶領域のp/(H*W)まで低減され、これは、depthwise畳み込み演算の中間出力結果を記憶するための記憶領域を著しく減らす。depthwise畳み込み演算によって出力される中間データ量がH*W*Mであると仮定すると、本開示の実施形態では、すべてのdepthwise畳み込み演算によって出力される中間結果が計算され、pointwise畳み込み計算のためにバッチで読み出されるまでオンチップ記憶領域が不十分なのでdepthwise畳み込み結果をオフチップメモリにバッチで書き込む複雑なプロセスを回避するために、p*M(H*W*Mよりかなり小さくてよい)サイズを有するオンチップ記憶リソースだけあればよい。統計によれば、オンチップ記憶リソースが畳み込み出力結果の次の完全層を記憶するのに十分でないが、畳み込み出力結果の次の完全層のp/(H*W)が記憶されてよい場合、本開示では、MobileNetネットワークのデータ伝送帯域幅を約50%低減する。
【００４８】
これ以降、本開示の実施形態による入力特徴マップにおいてdepthwise畳み込み計算およびpointwise畳み込み計算を実行しすべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値を取得するステップS110を、様々な実施形態において詳しく説明する。
【００４９】
様々な実施形態がそれぞれ説明されているが、様々な実施形態を可能な場合に全体としてまたは一部だけ一緒に組み合わせ得ることに留意されたい。
【００５０】
第1の実施形態
本開示の第1の実施形態において、すべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値を取得するために、(1)depthwise畳み込み演算を実行してすべてのdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値を取得する演算と、(2)中間特徴値に基づきpointwise畳み込み演算を実行し、1つまたは複数のpointwise畳み込み出力チャネル上でp個の点の出力特徴値を取得する演算と、(3)上記の演算(2)を繰り返して、すべてのpointwise畳み込み出力チャネル上でp個の点の出力特徴値を取得する演算が実行され得る。
【００５１】
図4は、本開示の第1の実施形態によるすべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値を計算するステップのフローチャートを示している。
【００５２】
図4に示されているように、本開示の第1の実施形態によれば、すべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値を計算するステップS110は以下のステップを含み得る。
【００５３】
ステップS210において、depthwise畳み込み計算が入力特徴マップおよびdepthwise畳み込みカーネルに従って実行され、すべてのdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値を取得する。
【００５４】
現在の畳み込み層において、入力特徴マップおよびdepthwise畳み込みカーネルが取得され、depthwise畳み込み計算が実行される。入力特徴マップのサイズがX行およびY列であり、全部でM個のチャネルがあると仮定される。それに対応して、M個のdepthwise畳み込みカーネルがあり、各depthwise畳み込みカーネルのサイズは、R行およびS列、ならびにただ1つのチャネルである。depthwise畳み込み計算を実行するときに、入力特徴マップの第1のチャネルは、第1のdepthwise畳み込みカーネルと畳み込まれて中間特徴マップの第1のチャネルを取得し、入力特徴マットの第2のチャネルは、第2のdepthwise畳み込みカーネルと畳み込まれて中間特徴マップの第2のチャネルを取得する、などと続き、中間特徴値を含み、H行およびW列および全部でM個のチャネルを有する中間特徴マップを取得する。depthwise畳み込み計算のストライドが1であり、パディングが1であるときにH=RおよびW=Sである。
【００５５】
第1の実施形態では、従来技術とは異なり、すべてのM個のdepthwise畳み込み出力チャネル上のすべてのH*W個の点のすべての中間特徴値が直接計算される代わりに、すべてのM個のチャネル上のp個の点の中間特徴値のみが計算される。
【００５６】
ステップS220において、pointwise畳み込み計算は、すべてのdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値、およびpointwise畳み込みカーネルに従って実行され、すべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値を取得する。
【００５７】
pointwise畳み込みカーネルが取得され、pointwise畳み込み計算が、すべてのM個のチャネル上でp個の点の中間特徴値に対して実行され、すべてのpointwise畳み込み出力チャネル上でp個の点の出力特徴値を取得する。
【００５８】
上で説明されているように、中間特徴マップのサイズは、H行およびW列であり、全部でM個のチャネルがある。それに対応して、各々1行および1列を有し、チャネルを1つだけ有するN個のpointwise畳み込みカーネルがある。pointwise畳み込み計算を実行するときに、中間特徴マップのすべてのチャネルが第1のpointwise畳み込みカーネルのすべてのチャネルと畳み込まれて出力特徴マップの第1のチャネルを取得し、中間特徴マップのすべてのチャネルが、第2のpointwise畳み込みカーネルのすべてのチャネルと畳み込まれて出力特徴マップの第2のチャネルを取得する、などと続き、出力特徴値を含み、E行およびF列を有し、全部でN個のチャネルがある出力特徴マップを取得する。pointwise畳み込み計算のストライドが1であるときに、E=HおよびF=Wである。
【００５９】
第1に、入力特徴マップに対してdepthwise畳み込み計算を実行してすべてのdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値を取得するステップS210は、図5および図6を参照しつつ説明される。
【００６０】
図5は、本開示の第1の実施形態によるすべてのdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値を計算するステップのフローチャートを示している。図6は、本開示の第1の実施形態によるすべてのdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値を計算するステップの概略図を示している。
【００６１】
図5に示されているように、すべてのdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値を計算するステップS210は、以下のステップを含み得る。
【００６２】
ステップS211において、depthwise畳み込み計算が入力特徴マップおよびdepthwise畳み込みカーネルに従って実行され、第2の所定の数m個のdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値を取得する。
【００６３】
たとえば、第2の所定の数mは、depthwise畳み込み計算ユニットの数および第1の所定の数pに従って決定され得る。たとえば、計算効率の考慮事項に基づき、ハードウェア回路内のdepthwise畳み込み計算ユニットを全容量で動作させることが望ましい。この場合、第2の所定の数m*第1の所定の数p=depthwise畳み込み計算ユニットのMACの数である。
【００６４】
depthwise畳み込み計算、たとえば、32個の点(p=32)のdepthwise畳み込み計算に対して512個の乗算器-加算器ユニットがあると仮定すると、16個のチャネル(m=16)が一度に同時に計算され得る。上で述べたように、pおよびmの異なる値も、他の考慮事項に関して選択されてよい。たとえば、現在の畳み込み層の幅および高さが比較的大きく、チャネルの数が比較的小さいときに、pは、より大きい値、たとえば、64、128などに設定されるものとしてよく、それに対応して、mは、より小さい値、たとえば、8、4などに設定されてよい。逆に、現在の畳み込み層の幅および高さがより小さく、チャネルの数がより大きいときに、pは、より小さい値、たとえば、16、8などに設定されるものとしてよく、それに対応して、mは、より大きい値、たとえば、32、64などに設定されてよい。
【００６５】
たとえば、図6に示されているように、中間特徴マップ(1)は、最初に、入力特徴マップ(1)およびdepthwise畳み込みカーネル(1)に基づき計算され得る。図6において、入力特徴マップ(1)は、p個の点、m個の入力チャネルを有する一組の入力特徴点であり、depthwise畳み込みカーネル(1)は、一組のm個のdepthwise畳み込みカーネルである。
【００６６】
一例において、ステップS211は以下のステップを含み得る。
【００６７】
サブステップ1:入力特徴マップの第2の所定の数m個の入力チャネル上で点の第1の所定の数p個のグループの入力特徴値を読み出す。一例において、第2の所定の数m個の入力チャネル上の点の第1の所定の数p個のグループの入力特徴値は、第2の所定の数m個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値およびpointwise畳み込みカーネルに従ってpointwise畳み込み計算を実行するステップと同時に、入力特徴マップから読み出される。別の例では、第2の所定の数m個の入力チャネル上の点の第1の所定の数p個のグループの入力特徴値を読み出す上記のサブステップは、第2の所定の数m個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値およびpointwise畳み込みカーネルに従ってpointwise畳み込み計算を実行する上記のステップと同時でない。
【００６８】
たとえば、第2の所定の数m個の入力チャネル上で点の第1の所定の数p個のグループの入力特徴値は、入力特徴マップから読み出されるものとしてよく(図6における入力特徴マップに示されているように)、点の各グループは、depthwise畳み込みカーネルにおける重み値の幅および高さ(図6のdepthwise畳み込みカーネル(1)におけるシャドウに示されているような、すなわち、R*S)に等しい幅および高さ(図6の入力特徴マップ(1)におけるシャドウに示されているような)を有し、点の2つの隣接するグループは、depthwise畳み込み計算のストライドに等しいリーディングストライド(reading stride)を有する。
【００６９】
リーディングストライドに応じて、重なり合う部分が、点のp個のグループ内の点の1つおきの隣接するグループの間に配置され得る。
【００７０】
たとえば、第1の実行において、前者のm個の入力チャネル上の点の前者のp個のグループの入力特徴値は、入力特徴マップから読み出されるものとしてよい(図6における入力特徴マップ(1)に示されている入力特徴値)。
【００７１】
サブステップ2:点の第1の所定の数p個のグループの入力特徴値に対応して、第2の所定の数m個の入力チャネル上で第2の所定の数m個のdepthwise畳み込みカーネルの対応する重み値を読み出す。一例において、第2の所定の数m個の入力チャネル上の点の第1の所定の数p個のグループの入力特徴値および対応する重み値は、第2の所定の数m個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値およびpointwise畳み込みカーネルに従ってpointwise畳み込み計算を実行するステップと同時に、入力特徴マップから読み出される。したがって、この例に基づき、畳み込みニューラルネットワークの計算効率は改善され、より効率的な畳み込みニューラルネットワークが得られる。
【００７２】
たとえば、第1の実行において、前者のm個のdepthwise畳み込みカーネルにおける重み値(図6に示されているdepthwise畳み込みカーネル(1)における重み値として)は、depthwise畳み込みカーネル(図6に示されているM個のdepthwise畳み込みカーネル(1)として)から読み出され得る。
【００７３】
サブステップ3:第2の所定の数m個の入力チャネル上の点の第1の所定の数p個のグループの入力特徴値および対応する第2の所定の数m個のdepthwise畳み込みカーネルにおける重み値に対してdepthwise畳み込み計算をそれぞれ実行して、第2の所定の数m個のdepthwise畳み込み出力チャネル上で点の第1の所定の数p個のグループにそれぞれ対応する第1の所定の数p個の点の中間特徴値を取得する。
【００７４】
たとえば、中間特徴マップ(1)は、入力特徴マップ(1)およびdepthwise畳み込みカーネル(1)に従って計算され得る。
【００７５】
たとえば、サブステップ3において、点の第1の所定の数p個のグループの中の点の各グループについて、(1)第2の所定の数m個の入力チャネル上で点のグループの1つの点の入力特徴値、および対応する第2の所定の数m個のdepthwise畳み込みカーネルにおける1つの対応する重み値に対して乗算計算をそれぞれ実行して、点のグループの現在の乗算計算結果を取得する演算、(2)点のグループの現在の乗算計算結果および点のグループの前回の乗算計算結果に対して累算計算をそれぞれ実行する演算であって、前回の乗算計算結果は第2の所定の数m個の入力チャネル上で点のグループ内の前の1つの点の入力特徴値、および対応する第2の所定の数m個のdepthwise畳み込みカーネルにおける対応する前の重み値に対して乗算計算をそれぞれ実行することによって取得される、演算、および(3)上記の演算(1)および(2)を繰り返し、第2の所定の数m個の入力チャネル上で点のグループの次の点の入力特徴値、および対応する第2の所定の数m個のdepthwise畳み込みカーネルにおける対応する次の重み値に対して乗算計算をそれぞれ実行し、それに対応して、その後の演算を、乗算計算および累算計算が第2の所定の数m個の入力チャネル上で点のグループ内のすべての点の入力特徴値、および第2の所定の数m個のdepthwise畳み込み出力チャネル上で点のグループに対応する1つの点(図6の中間特徴マップ(1)内にシャドウで示されているような)の中間特徴値である点のグループの最終累算計算結果に対して完了するまで実行する演算が実行され得る。
【００７６】
点のグループ内の第1の点に対して乗算計算を実行した後に、点のグループの前回の乗算計算結果が存在しないか、または0であるので、累算を実行する必要がない、言い換えれば、累算計算結果は乗算計算結果それ自体である。
【００７７】
図6に示されているように、点の1つのグループ内に全部でR*S個の点がある、すなわち、サブステップ(3)において、R*S回の乗算計算および対応する累算計算が点の1つのグループについて実行される。
【００７８】
上記の計算を通じて、第2の所定の数m個のdepthwise畳み込み出力チャネル上の点の第1の所定の数p個の点の中間特徴値(図6の中間特徴マップ(1)に示されている中間特徴値)が取得され得る。
【００７９】
たとえば、第2の所定の数m個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値は、ステップS211の後にメモリに記憶され得る。言い換えれば、第2の所定の数m個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値を取得した後に、各中間特徴値がメモリの利用可能な空間に記憶される。
【００８０】
畳み込み層の現在の設計パラメータによれば、各中間特徴値を取得した後、ただし記憶する前に、各中間特徴値について、活性化演算および量子化演算のうちの少なくとも一方が実行され得る。
【００８１】
ニューラルネットワークに活性化関数が加えられていない場合、これはある程度線形式と見なされてよく、最終的な式の能力は良好でなく、いくつかの非線形活性化関数が加えられた場合、ネットワーク全体に非線形部分が導入され、ネットワークの式の能力が高められる。現在、人気のある活性化関数は、主にSigmoid、Tanh、ReLu、Softmaxなどを含む。
【００８２】
さらに、量子化演算および逆量子化演算も、計算データに導入され得る。たとえば、高精度の出力データは、シフトまたは乗算および除算によって低精度の出力データに圧縮されてよく、それにより、メモリ内で各データによって占有される記憶領域は低減され、アクセス速度が完全に改善される。
【００８３】
たとえば、逆量子化された高精度データは、32ビットであってよいが、量子化された低精度のデータは、8ビットであり、75%の記憶領域が節約される。
【００８４】
たとえば、任意選択の活性化演算が実行され得、次いで、任意選択の量子化演算が実行される。
【００８５】
ステップS212において、上記の演算が繰り返され(すなわち、ステップS211)、depthwise畳み込み計算は、入力特徴マップおよびdepthwise畳み込みカーネルに従って実行され、次の第2の所定の数m個のdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値を取得し、それに対応して、その後の演算を、すべてのdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値が取得されるまで実行する。
【００８６】
たとえば、次に、図6に示されているように、中間特徴マップ(2)は、入力特徴マップ(2)およびdepthwise畳み込みカーネル(2)に従って計算される、などと続くものとしてよく、中間特徴マップ(z)は、入力特徴マップ(z)およびdepthwise畳み込みカーネル(z)に従って計算され得る。たとえば、
【００８７】
【数４】
2019109896.tif 000006
【００８８】
である。最後の計算において、残っているチャネルの数およびdepthwise畳み込みカーネルの数が、m個のdepthwise畳み込みカーネル内の重み値とともにm個のチャネルの入力特徴値を読み出すのに十分でない場合、これはパディング(たとえば、パディング0)方式で実現され得る。代替的に、これは、たとえばdepthwise畳み込み計算ユニットの作業量を減らす、他の方式によっても実現され得る。
【００８９】
最後に、図6の中間特徴マップに示されているように、depthwise畳み込み演算の中間出力結果として中間特徴値を含む完全な中間特徴マップを意味する、中間特徴マップ(1)から中間特徴マップ(z)への組合せについて、中間特徴マップのサイズは点p個分であり、全部でM個のチャネルを有する。
【００９０】
次に、中間特徴マップ上でpointwise畳み込み計算を実行してすべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値を取得するステップS220を説明するために図7および図8を参照する。
【００９１】
図7は、中間特徴値によるすべてのpointwise畳み込み出力チャネルおよび本開示の第1の実施形態によるpointwise畳み込みカーネル上で第1の所定の数p個の点の出力特徴値を計算するステップのフローチャートを示している。図8は、中間特徴値によるすべてのpointwise畳み込み出力チャネルおよび本開示の第1の実施形態によるpointwise畳み込みカーネル上で第1の所定の数p個の点の出力特徴値を計算するステップの概略図を示している。
【００９２】
図7に示されているように、中間特徴値によるすべてのdepthwise畳み込み出力チャネルおよびpointwise畳み込みカーネル上で第1の所定の数p個の点の出力特徴値を計算するステップS220は、以下のステップを含み得る。
【００９３】
ステップS221において、pointwise畳み込み計算が、それぞれ、第4の所定の数n個のpointwise畳み込みカーネル内のすべてのpointwise畳み込みチャネル上の重み値とともにすべてのdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値に従って実行され、第4の所定の数n個のpointwise畳み込みカーネルに対応する第4の所定の数n個のpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値を取得する。
【００９４】
たとえば、第4の所定の数nは、pointwise畳み込みカーネルの総数N以下である。さらに、第4の所定の数nは、乗算器-加算器ユニットの数の約数であり得る、pointwise畳み込み計算ユニット(たとえば、乗算器-加算器ユニットMAC)の数によっても制限されることがある。
【００９５】
たとえば、図8に示されているように、出力特徴マップ(1)は、最初に、中間特徴マップおよびpointwise畳み込みカーネル(1)に基づき計算され得る。図8では、pointwise畳み込みカーネル(1)は、一組のn個のpointwise畳み込みカーネルである。
一例において、ステップS221は以下のステップを含み得る。
【００９６】
一例において、ステップS221は以下のステップを含み得る。
【００９７】
サブステップ1:第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値(図8の中間特徴マップ(1)に示される中間特徴値としての)をすべてのdepthwise畳み込み出力チャネル(図8の中間特徴マップ(1)に示されるような)上の第1の所定の数p個の点の中間特徴値から読み出す。
【００９８】
たとえば、第3の所定の数m'および第4のプリセットされた数nは、pointwise畳み込み計算ユニットの数および第1の所定の数pに従って決定され得る。たとえば、計算効率の考慮事項に基づき、ハードウェア回路内のpointwise畳み込み計算ユニットを全容量で動作させることが望ましい。この場合、第3の所定の数m'*第4の所定の数n*第1の所定の数p*=pointwise畳み込み計算ユニットのMAC'の数である。
【００９９】
たとえば、異なるハードウェア設計について、pointwise畳み込み計算ユニットMAC'の数は、depthwise畳み込み計算ユニットMACの数に等しい場合も等しくない場合もある。さらに、第3の所定の数m'は、第2の所定の数m以下であってよい。
【０１００】
pointwise畳み込み計算に対しても、たとえば、32個の点(p=32)のpointwise畳み込み計算に対して512個の乗算器-加算器ユニットがあると仮定すると、4個のチャネル(m'=4)および4個の畳み込みカーネル(n=4)が一度に同時に計算され得る。上で述べたように、mおよびnの異なる値も、他の考慮事項に関して選択されてよい。たとえば、現在の畳み込みカーネルの数が比較的大きく、チャネルの数が比較的小さいときに、p=32のままで変更がない場合、nは、より大きい値、たとえば、8、16などに設定されるものとしてよく、それに対応して、m'は、より小さい値、たとえば、2、1などに設定されてよい。逆に、現在の畳み込みカーネルの数が比較的小さく、チャネルの数が比較的大きいときに、p=32のままで変更がない場合、nは、より小さい値、たとえば、2、1などに設定されるものとしてよく、それに対応して、m'は、より小さい値、たとえば、8、16などに設定されてよい。
【０１０１】
たとえば、第1の実行において、前者のm'個のチャネル上のp個の点の中間特徴値は、図8における中間特徴マップ(1)に示されているように、depthwise畳み込み計算によって得られる中間特徴マップから読み出されるものとしてよい。
【０１０２】
サブステップにおける読み出し演算では、第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第5の所定の数p'個の点の中間特徴値も読み出され得ることに留意されたい。たとえば、第5の所定の数p'は、第1の所定の数p以下である。
【０１０３】
サブステップ2:第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値に対応して第4の所定の数n個のpointwise畳み込みカーネル内の対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値を読み出す。
【０１０４】
たとえば、第1の実行において、前者のm'個のpointwise畳み込みチャネル上の重み値(図8のpointwise畳み込みカーネル(1)内のpointwise畳み込みカーネル(11)によって示される重み値など)は、N個のpointwise畳み込みカーネル内の前者のn個のpointwise畳み込みカーネル(図8のpointwise畳み込みカーネル(1)に示されているような)から読み出され得る。
【０１０５】
サブステップ3:pointwise畳み込み計算を、第4の所定の数n個のpointwise畳み込みカーネル内の対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値とともに第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値に対して実行して、第4の所定の数n個のpointwise畳み込みカーネルに対応する第4の所定の数n個のpointwise畳み込み出力チャネル上の第1の所定の数p個の点の現在のpointwise畳み込み部分和を取得する。
【０１０６】
たとえば、現在のpointwise畳み込み部分和(1)は、中間特徴マップ(1)およびpointwise畳み込みカーネル(11)に従って計算されるものとしてよい(図8の出力特徴マップ(11)に示されているように)。
【０１０７】
たとえば、サブステップ3において、第1の所定の数p個の点における各点について、(1)それぞれ、第4の所定の数n個のpointwise畳み込みカーネル内の対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値とともに第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値に対して乗算計算を実行して、第4の所定の数n個のグループの結果を取得し、各グループの結果は第3の所定の数m'個の乗算計算結果を含む、演算、および(2)それぞれ、各グループの結果に対する第3の所定の数m'個の乗算計算結果を第4の所定の数n個のグループの結果に足し込んで、第4の所定の数n個のpointwise畳み込みカーネルに対応する第4の所定の数n個のpointwise畳み込み出力チャネル上のこの点の現在のpointwise畳み込み部分和を取得する演算が実行される。
【０１０８】
図8に示されているように、中間特徴マップ(1)内のp個の点の各々について、乗算計算が、それぞれ、各点のm'個の中間特徴値およびpointwise畳み込みカーネル(11)の第1の畳み込みカーネル内のm'個の重み値に対して実行され、m'個の乗算計算結果が累積され、第1のチャネル上の第1の出力特徴マップ(11)内のp個の点の現在のpointwise畳み込み部分和を取得する。上記の演算は、pointwise畳み込みカーネル(11)の各畳み込みカーネル内で実行され、前者のn個のチャネル上の第1の出力特徴マップ(11)内のp個の点の現在のpointwise畳み込み部分和を取得する。
【０１０９】
サブステップ4:第4の所定の数n個のpointwise畳み込みカーネルに対応する第4の所定の数n個のpointwise畳み込み出力チャネル上の第1の所定の数p個の点の現在のpointwise畳み込み部分和と、第1の所定の数p個の点の前の累算計算結果とに対して累算計算を実行して、第1の所定の数p個の点の現在の累算計算結果を生成する。
【０１１０】
前者のn個のチャネル上の第1の出力特徴マップ(11)内のp個の点の現在のpointwise畳み込み部分和を取得した後に、p個の点の前の累算計算結果が存在しないか、または0であるので、累算を実行する必要がない、すなわち、累算計算結果は乗算計算結果それ自体である。
【０１１１】
たとえば、サブステップ4の後に、第1の所定の数p個の点の現在の累算計算結果はメモリに記憶され、第1の所定の数p個の点の前の累算計算結果をカバーする。
【０１１２】
サブステップ5:上記の演算(すなわち、サブステップ1〜4)を繰り返し、次の第3の所定の数m'個のdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値を読み出し、第4の所定の数n個のpointwise畳み込みカーネル内の対応する次の第3の所定の数m'個のpointwise畳み込みチャネル上の重み値を読み出し、それに対応して、その後の演算を、pointwise畳み込み計算および累算計算がすべてのdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値に対して完了するまで実行し、第1の所定の数p個の点の最終的累算計算結果が第4の所定の数n個のpointwise畳み込みカーネルに対応する第4の所定の数n個のpointwise畳み込み出力チャネル上の第1の所定の数p個の点の出力特徴値である。
【０１１３】
たとえば、次に、図8に示されているように、出力特徴マップ(12)は、中間特徴マップ(2)およびpointwise畳み込みカーネル(12)に従って計算されるものとしてよく、累算計算は、出力特徴マップ(12)および出力特徴マップ(11)、などに対して実行されてよく、出力特徴マップ(1z')は、中間特徴マップ(z')およびpointwise畳み込みカーネル(1z')に従って計算され、累算計算は、出力特徴マップ(1z')および出力特徴マップ(1(z'-1))に対して実行される。たとえば、
【０１１４】
【数５】
2019109896.tif 000007
【０１１５】
である。最後の計算において、残っているチャネルの数が、m'個のチャネルの中間特徴値およびm'個のチャネルのpointwise畳み込み重み値を読み出すのに十分でない場合、これはパディング(たとえば、パディング0)方式で実現され得る。代替的に、これは、たとえばpointwise畳み込み計算ユニットの作業量を減らす、他の方式によっても実現され得る。
【０１１６】
最後に、出力特徴マップ(1z')および出力特徴マップ(1(z'-1))の累算結果は、図8の出力特徴マップ(1)に示されているように、n個のpointwise畳み込み出力チャネル上のp個の点の出力特徴値として形成され、出力特徴マップ(1)のサイズは点p個分であり、全部でN個のチャネルがある。
【０１１７】
たとえば、活性化演算および量子化演算のうちの少なくとも一方が、第1の所定の数p個の点の最終的累算計算結果が第4の所定の数n個のpointwise畳み込みカーネルに対応する第4の所定の数n個のpointwise畳み込み出力チャネル上の第1の所定の数p個の点の出力特徴値としてメモリに記憶される前に各出力特徴値に対して実行され得る。
【０１１８】
ステップS222において、上記の演算が繰り返され(すなわち、ステップS211)、pointwise畳み込み計算は、それぞれ、次の第4の所定の数n個のpointwise畳み込みカーネル内のすべてのpointwise畳み込みチャネル上の重み値とともにすべてのdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値に従って、すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の出力特徴値が取得されるまで実行される。
【０１１９】
たとえば、次に、図8に示されているように、出力特徴マップ(2)は、中間特徴マップおよびpointwise畳み込みカーネル(2)に従って計算される、などと続くものとしてよく、出力特徴マップ(g)は、中間特徴マップおよびpointwise畳み込みカーネル(g)に従って計算され得る。たとえば、
【０１２０】
【数６】
2019109896.tif 000008
【０１２１】
である。最後の計算において、残っているpointwise畳み込みカーネルの数が、n個のpointwise畳み込みカーネル内の重み値を読み出すのに十分でない場合、これはまたパディング(たとえば、パディング0)方式で実現され得る。代替的に、これは、たとえばpointwise畳み込み計算ユニットの作業量を減らす、他の方式によっても実現され得る。
【０１２２】
最後に、図8の出力特徴図に示されているように、pointwise畳み込み演算の最終的出力結果として出力特徴値を含む完全な出力特徴マップを意味する、出力特徴マップ(1)から出力特徴マップ(g)への組合せについて、出力特徴マップのサイズは点p個分であり、全部でN個のチャネルを有する。
【０１２３】
上で説明されているように、出力特徴マップは、任意選択の活性化演算および任意選択の量子化演算を実行し得る。
【０１２４】
これ以降、本開示の第1の実施形態による畳み込み計算のための方法は、特定の例を用いて説明される。
【０１２５】
たとえば、図6および図8に示されているように、depthwise畳み込みの幅および高さの大きさがS*Rであると仮定すると、チャネルの数(またはチャネル数が1と考えられるときには番号としても見なされ得る)はMであり、depthwise畳み込みの幅および高さの大きさは1*1であり、チャネル数はMであり、番号はNであり、入力特徴マップの幅および高さの大きさはX*Yであり、中間特徴マップの幅および高さの大きさはW*Hであり、出力特徴マップの幅および高さの大きさはE*Fであり、畳み込み計算方法は次のステップを含み得る。
【０１２６】
1.depthwise畳み込みについて、最初にp(p<=H*W)点およびm(m<=M)チャネルの乗算および累算結果を計算し、累算はここでは図6に示されているRおよびSとして、畳み込みカーネルの長さおよび幅の方向で実行される累算であり、ここでp*m乗算-累算(MAC)ユニットは共有され、p*m乗算-累算結果が取得される。
【０１２７】
図9は、本開示の一実施形態によるdepthwise畳み込み計算を示す概略図である。
【０１２８】
図9に示されているように、512個の乗算器-加算器ユニット(MAC)、および32個の点(上述のp=32)があり、16個のチャネル(上述のm=16、すなわち、チャネル変数cは0から15の範囲の値をとる)は一度に同時に計算されると仮定される。畳み込みカーネルのサイズが3*3であると仮定すると、乗算および累算の計算(MultおよびAccu)を9回実行した後(depthwise畳み込みカーネルの高さおよび幅変数rおよびsが0から2にそれぞれ変わり、入力特徴マップの幅変数xが0〜31から2〜33に変わり、高さ変数yが0から2に変わる)、32個の点の出力値、16個のチャネルが得られる。全部で128個のチャネルがあると仮定すると、(128/16)*9=72回の計算の後、32個の点、128個のチャネルの出力データが得られる。
【０１２９】
2.ステップ1の上述の結果に対して任意選択の活性化演算を実行し、活性化演算は非線形関数により数値を再マップすることを意味し、活性化関数は限定はしないがReLu関数、Sigmoid関数、arctangent(tan)関数などを含む。
【０１３０】
3.上述のステップ2によって取得された結果に対して任意選択の量子化演算を実行し、量子化演算は高精度乗算および累算結果(通常32ビット)をシフトまたは乗算および除算することによって低精度乗算および累算結果(通常8ビット)を取得することを意味している。
【０１３１】
4.ステップ3の上述の結果をレジスタまたはオンチップSRAMに記憶する。
【０１３２】
5.
【０１３３】
【数７】
2019109896.tif 000009
【０１３４】
回の循環を通じて、M個のチャネル上でp個の点のdepthwise畳み込み結果を計算した後にp*M個の値を取得するが、p*M個の値は活性化関数演算および量子化演算の実行によって得られるかまたは得られない。完全な出力結果の層の点の数は、pよりかなり大きいので、全部でH*W個の点があると仮定すると、ここで使用される記憶領域はdepthwise演算結果の完全な層を計算するためにわずかp/(H*W)である。
【０１３５】
6.ステップ5の上述の結果に対してpointwise計算を直接実行する。具体的なプロセスは、次のとおりである。
【０１３６】
a)レジスタまたはオンチップSRAMからp個の点、m個のチャネルのdepthwise畳み込み計算の結果を読み出し、p個の点、m個のチャネルの乗算および累算結果を計算し、累算はここではチャネル方向の累算であり、p個の点、1個の出力チャネルのpointwise畳み込み部分和(第1から第mの入力チャネルの部分和)を取得する。
【０１３７】
b)
【０１３８】
【数８】
2019109896.tif 000010
【０１３９】
回の循環を通じてp個の点のpointwise畳み込み結果に対する計算の後にp個の点の最終的乗算および累算結果を取得する。
【０１４０】
c)上記の結果に対して任意選択の活性化演算を実行し、活性化演算は非線形関数により数値を再マップすることを意味し、活性化関数は限定はしないがReLu関数、Sigmoid関数、arctangent(tan)関数などを含む。
【０１４１】
d)上記の結果に対して任意選択の量子化演算を実行し、量子化演算は高精度乗算および累算結果(通常32ビット)をシフトまたは乗算および除算することによって低精度乗算および累算結果(通常8ビット)を取得し、結果をレジスタまたはオンチップSRAMまたはオフチップDDRに記憶することを意味している。
【０１４２】
e)pointwise畳み込みに対して全部でN個の畳み込みカーネルがあると仮定して、上記の演算a)、b)、c)、d)のN回の循環を通じてN個のチャネル上でp個の点の計算結果の出力を完了させる。
【０１４３】
図10は、本開示の一実施形態によるpointwise畳み込み計算を示す概略図である。
【０１４４】
図10に示されているように、pointwise畳み込みの畳み込みカーネルのサイズは1*1であり、また、512個の乗算器-加算器ユニット(ここでは512個の乗算器-加算器ユニットがあり、depthwise計算プロセスの512個の乗算器-加算器ユニットは、同じであっても、異なっていてもよい)があり、32個の点(上述のp=32)、16個のチャネル(上述のm=16、すなわち、チャネル変数cは0から15の範囲内の値をとる)に対する畳み込み、および1つの畳み込みカーネルが、毎回計算され、32個の点、1個の出力チャネルに対する累算和のデータの一部が取得されると仮定される。全部で128個のチャネルがあると仮定すると、128/16=8回の計算の後(チャネル変数cは0〜15から112〜127に変わる)、32個の点および1つの出力チャネルの累算和のデータが取得される。256個の畳み込みカーネルがあると仮定すると、256*(128/16)=2048回の計算の後、32個の点および256個の出力チャネルの累算和のデータが取得される。すなわち、32個の点の出力特徴値が取得される。
【０１４５】
7.完全な出力特徴マップが取得されるまで次のp個の点を連続的に計算することによってステップ1〜6の上記の演算を繰り返す。
【０１４６】
第2の実施形態
本開示の第2の実施形態において、すべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値を取得するために、1)depthwise畳み込み演算を実行してすべてのdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値を取得する演算、2)中間特徴値に従ってpointwise畳み込み演算を実行してpointwise畳み込み出力チャネルのすべての上でp個の点に対する現在のpointwise畳み込み部分和を取得する演算、(3)現在のpointwise畳み込み部分和および前の累算計算結果に対して累算を実行して、現在の累算計算結果を生成する演算、(4)上記の演算(2)および(3)を繰り返して、すべてのpointwise畳み込み出力チャネル上でp個の点の出力特徴値を取得する演算が実行され得る。
【０１４７】
すなわち、第2の実施形態においてdepthwise畳み込み演算を実行するステップ(ステップ210)は、第1の実施形態においてdepthwise畳み込み演算を実行するステップと同じであり、第2の実施形態においてpointwise畳み込み演算を実行するステップ(ステップ220)は、第1の実施形態においてpointwise畳み込み演算を実行するステップと異なる。したがって、次に、2つの実施形態の間の違いが強調して説明される。
【０１４８】
図11は、中間特徴値によるすべてのpointwise畳み込み出力チャネルおよび本開示の第2の実施形態によるpointwise畳み込みカーネル上で第1の所定の数p個の点の出力特徴値を計算するステップのフローチャートを示している。図12は、中間特徴値によるすべてのpointwise畳み込み出力チャネルおよび本開示の第2の実施形態によるpointwise畳み込みカーネル上で第1の所定の数p個の点の出力特徴値を計算するステップの概略図を示している。
【０１４９】
図11に示されているように、中間特徴値によるすべてのdepthwise畳み込み出力チャネルおよびpointwise畳み込みカーネル上で第1の所定の数p個の点の中間特徴値を計算するステップS220は、以下のステップを含み得る。
【０１５０】
ステップS223において、それぞれ、第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値およびすべてのpointwise畳み込みカーネル内の対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値に従ってpointwise畳み込み計算を実行し、すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の現在のpointwise畳み込み部分和を取得する。
【０１５１】
たとえば、第3の所定の数m'は、第2の所定の数m以下である。さらに、第3の所定の数m'は、乗算器-加算器ユニットの数の約数であり得る、pointwise畳み込み計算ユニット(たとえば、乗算器-加算器ユニットMAC)の数によっても制限されることがある。
【０１５２】
一例において、ステップS223は以下のステップを含み得る。
【０１５３】
サブステップ1:pointwise畳み込み計算を、第4の所定の数n個のpointwise畳み込みカーネル内の対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値とともに第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値に従って実行して、第4の所定の数n個のpointwise畳み込みカーネルに対応する第4の所定の数n個のpointwise畳み込み出力チャネル上の第1の所定の数p個の点の現在のpointwise畳み込み部分和を取得する。
【０１５４】
たとえば、サブステップ1において、次のステップが実行され得る。
【０１５５】
(1)すべてのdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値から第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値を読み出す。
【０１５６】
たとえば、第1の実行において、前者のm'個のチャネル上のp個の点の中間特徴値は、図12における中間特徴マップ(1)に示されているように、depthwise畳み込み計算によって得られる中間特徴マップから読み出されるものとしてよい。
【０１５７】
(2)第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の入力特徴値に対応して第4の所定の数n個のpointwise畳み込みカーネル内の対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値を読み出す。
【０１５８】
たとえば、第1の実行において、前者のm'個のpointwise畳み込みチャネル上の重み値(図12のpointwise畳み込みカーネル(1)のpointwise畳み込みカーネル(11)によって示される重み値など)は、N個のpointwise畳み込みカーネル内の前者のn個のpointwise畳み込みカーネル(図12のpointwise畳み込みカーネル(1)に示されているような)から読み出され得る。
【０１５９】
(3)pointwise畳み込み計算を、第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値、および第4の所定の数n個のpointwise畳み込みカーネル内の対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値上で実行して、第4の所定の数n個のpointwise畳み込みカーネルに対応する第4の所定の数n個のpointwise畳み込み出力チャネル上の第1の所定の数p個の点の現在のpointwise畳み込み部分和を取得する。
【０１６０】
たとえば、現在のpointwise畳み込み部分和(11)は、中間特徴マップ(1)およびpointwise畳み込みカーネル(11)に基づき計算されるものとしてよい(図12の出力特徴マップ(11)に示されているように)。
【０１６１】
このステップは、第1の実施形態におけるステップS221のサブステップ3と同じであり、したがって、その詳細な説明は省かれる。
【０１６２】
サブステップ2:pointwise畳み込み計算を、第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値および次の第4の所定の数n個のpointwise畳み込みカーネル内の対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値上で実行して、次の第4の所定の数n個のpointwise畳み込みカーネルに対応する次の第4の所定の数n個のpointwise畳み込み出力チャネル上の第1の所定の数p個の点の現在のpointwise畳み込み部分和を取得することによって、すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の現在のpointwise畳み込み部分和が取得されるまで上記の演算を繰り返す。
【０１６３】
たとえば、次に、図12に示されているように、現在のpointwise畳み込み部分和(21)は、中間特徴マップ(1)およびpointwise畳み込みカーネル(21)に従って計算される(図12の出力特徴マップ(21)に示されているように)、などと続くものとしてよく、現在のpointwise畳み込み部分和(g1)は、中間特徴マップ(1)およびpointwise畳み込みカーネル(g1)に従って計算される(図12の出力特徴マップ(g1)に示されているように)。
【０１６４】
最後に、現在のpointwise畳み込み部分和(g1)に対する現在のpointwise畳み込み部分和(11)が組み合わされるが、これは、サイズが点p個分であり、全部でN個のチャネルを有する、すべてのpointwise畳み込み出力チャネル上のp個の点のすべてのpointwise畳み込み出力チャネル(1)上のp個の点の現在のpointwise畳み込み部分和を意味する。
【０１６５】
ステップS224において、累算計算が、それぞれ、すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の現在のpointwise畳み込みの部分和と第1の所定の数p個の点の前の累算計算結果とに対して実行され、第1の所定の数p個の点の現在の累算計算結果を生成する。
【０１６６】
pointwise畳み込み出力チャネルのすべての上のp個の点の現在のpointwise畳み込み部分和(1)を取得した後に、前の累算計算結果が存在しないか、または0であるので、累算を実行する必要がない、すなわち、現在のpointwise畳み込み部分和(1)は現在の累算計算結果である。
【０１６７】
ステップS224の後に、現在の累算計算結果は、第1の所定の数p個の点の前の累算計算結果をカバーするようにメモリに記憶される。
【０１６８】
ステップS225において、上記の演算(すなわち、ステップS223およびステップS224)が繰り返され、pointwise畳み込み計算は、それぞれ、次の第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値およびすべてのpointwise畳み込みカーネル内の対応する次の第3の所定の数m'個のpointwise畳み込みチャネル上の重み値に従って実行され、その後の演算は、それに対応して、pointwise畳み込み計算および累算計算がすべてのdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値のすべてに対して完了するまで実行され、第1の所定の数p個の点の最終的累算計算結果がすべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の出力特徴値である。
【０１６９】
たとえば、次に、図12に示されているように、現在のpointwise畳み込み部分和(12)は、中間特徴マップ(2)およびpointwise畳み込みカーネル(12)に従って計算されるものとしてよく、現在のpointwise畳み込み部分和(22)は、中間特徴マップ(2)およびpointwise畳み込みカーネル(22)に従って計算される、などとしてよく、現在のpointwise畳み込み部分和(g2)は、中間特徴マップ(2)およびpointwise畳み込みカーネル(g2)に従って計算される。
【０１７０】
現在のpointwise畳み込み部分和(g2)に対する現在のpointwise畳み込み部分和(12)は、一緒に組み合わされて、サイズが点p個分であり、全部でN個のチャネルを有する、すべてのpointwise畳み込み出力チャネル上のp個の点の現在のpointwise畳み込み部分和(2)を取得する。
【０１７１】
pointwise畳み込み出力チャネルのすべての上のp個の点の現在のpointwise畳み込み部分和(2)を取得した後、現在のpointwise畳み込み部分和(2)は、前の累算計算結果(すなわち、現在のpointwise畳み込み部分和(1))と累算される。
【０１７２】
同様に、現在のpointwise畳み込み部分和(gz')に対する現在のpointwise畳み込み部分和(1z')は、一緒に組み合わされて、サイズが点p個分であり、全部でN個のチャネルを有する、すべてのpointwise畳み込み出力チャネル上のp個の点の現在のpointwise畳み込み部分和(z')を取得する。
【０１７３】
pointwise畳み込み出力チャネルのすべての上のp個の点の現在のpointwise畳み込み部分和(z')を取得した後、現在のpointwise畳み込み部分和(z')は、前の累算計算結果(すなわち、現在のpointwise畳み込み部分和(z'-1)への現在のpointwise畳み込み部分和(1))と累算され、それにより、pointwise畳み込み演算の最終的出力結果として出力特徴値を含む出力特徴マップは、図8の出力特徴図に示されているように、取得され、そのサイズは点p個分であり、全部でN個のチャネルを有する。
【０１７４】
たとえば、活性化演算および量子化演算のうちの少なくとも一方が、第1の所定の数p個の点の最終的累算計算結果がすべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の出力特徴値としてメモリに記憶される前に各出力特徴値に対して実行され得る。
【０１７５】
第3の実施形態
本開示の第3の実施形態において、すべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値を取得するために、(1)depthwise畳み込み演算を実行して第2の所定の数m個のdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値を取得する演算、(2)中間特徴値に従ってpointwise畳み込み演算を実行してdepthwise畳み込み出力チャネルのすべての上でp個の点の現在のpointwise畳み込み部分和を取得する演算、(3)現在のpointwise畳み込み部分和および前の累算計算結果に対して累算を実行して、現在の累算計算結果を生成する演算、(4)上記の演算(1)および(3)を繰り返して、すべてのpointwise畳み込み出力チャネル上でp個の点の出力特徴値を取得する演算が実行され得る。
【０１７６】
図13は、本開示の第3の実施形態によるすべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値を計算するステップのフローチャートを示している。図14は、本開示の第3の実施形態によるすべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の現在のpointwise畳み込み部分和
【０１７７】
【数９】
2019109896.tif 000011
【０１７８】
を計算するステップを示す概略図である。
【０１７９】
図13に示されているように、本開示の第3の実施形態によれば、すべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の出力特徴値を計算するステップS110は以下のステップを含み得る。
【０１８０】
ステップS310において、depthwise畳み込み計算が入力特徴マップおよびdepthwise畳み込みカーネルに従って実行され、第2の所定の数m個のdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値を取得する。
【０１８１】
たとえば、第2の所定の数mは、depthwise畳み込み計算ユニットの数および第1の所定の数pに従って決定される。
【０１８２】
一例において、ステップS310は以下のステップを含み得る。
【０１８３】
サブステップ1:入力特徴マップから第2の所定の数m個の入力チャネル上で点の第1の所定の数p個のグループの入力特徴値を読み出す。
【０１８４】
サブステップ2:第2の所定の数m個の入力チャネル上で点の第1の所定の数p個のグループの入力特徴値に対応して対応する第2の所定の数m個のdepthwise畳み込みカーネルにおける重み値を読み出す。
【０１８５】
サブステップ3:対応する第2の所定の数m個のdepthwise畳み込みカーネルにおける重み値ととも第2の所定の数m個の入力チャネル上の点の第1の所定の数p個のグループの入力特徴値に対してdepthwise畳み込み計算をそれぞれ実行して、第2の所定の数m個のdepthwise畳み込み出力チャネル上で点の第1の所定の数p個のグループにそれぞれ対応する第1の所定の数p個の点の中間特徴値を取得する。
【０１８６】
このステップS310におけるサブステップ1〜3は、第1の実施形態におけるステップS211のサブステップ1〜3と同じであり、したがって、その詳細な説明は省かれる。
【０１８７】
たとえば、第1の実行において、最初に、前者のm個の入力チャネル上の点の前者のp個のグループの入力特徴値は、入力特徴マップから読み出されるものとしてよい(図14における入力特徴マップ(i=1)に示されている入力特徴値)。次いで、前者のm個のdepthwise畳み込みカーネルにおける重み値(図6のdepthwise畳み込みカーネル(1)に示されている重み値として)は、depthwise畳み込みカーネル(図6のM個のdepthwise畳み込みカーネルに示されているような)から読み出され得る。最後に、中間特徴マップ(i=1)は、入力特徴マップ(1)およびdepthwise畳み込みカーネル(1)に従って計算され得る。
【０１８８】
たとえば、第2の所定の数m個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値は、サブステップ3の後にメモリに記憶され得る。言い換えれば、第2の所定の数m個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値を取得した後に、各中間特徴値がメモリの利用可能な空間に記憶される。
【０１８９】
さらに、畳み込み層の現在の設計パラメータによれば、各中間特徴値が取得された後、記憶される前に、各中間特徴値について、活性化演算および量子化演算のうちの少なくとも一方が実行され得る。
【０１９０】
ステップS320において、pointwise畳み込み計算は、第2の所定の数m個のdepthwise畳み込み出力チャネルおよびpointwise畳み込みカーネルに対して第1の所定の数p個の点の中間特徴値に従って実行され、すべてのpointwise畳み込み出力チャネル上で第1の所定の数p個の点の現在のpointwise畳み込み部分和を取得する。
【０１９１】
一例において、ステップS320は以下のステップを含み得る。
【０１９２】
サブステップ1:それぞれ、第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値およびすべてのpointwise畳み込みカーネル内の対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値に従ってpointwise畳み込み計算を実行し、すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の現在のpointwise畳み込み下位部分和を取得する。
【０１９３】
たとえば、サブステップ1において、(1)pointwise畳み込み計算を、第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値、および第4の所定の数n個のpointwise畳み込みカーネル内の対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値に従って実行して、第4の所定の数n個のpointwise畳み込みカーネルに対応する第4の所定の数n個のpointwise畳み込み出力チャネル上の第1の所定の数p個の点の現在のpointwise畳み込み下位部分和を取得するステップが実行され得る。
【０１９４】
たとえば、第3の所定の数m'および第4の所定の数nは、pointwise畳み込み計算ユニットの数および第1の所定の数pに従って決定され得る。
【０１９５】
たとえば、演算(1)は、(1-1)第2の所定の数m個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値から第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値を読み出すステップと、(1-2)第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値に対応して第4の所定の数n個のpointwise畳み込みカーネル内の対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値を読み出すステップと、(1-3)pointwise畳み込み計算を、第4の所定の数n個のpointwise畳み込みカーネル内の対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値とともに第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値に対してそれぞれ実行して、第4の所定の数n個のpointwise畳み込みカーネルに対応する第4の所定の数n個のpointwise畳み込み出力チャネル上の第1の所定の数p個の点の現在のpointwise畳み込み下位部分和を取得するステップとを含み得る。
【０１９６】
特に、(1-3)において、第1の所定の数p個の点の各々について、それぞれ、第4の所定の数n個のpointwise畳み込みカーネル内の対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値とともに第3の所定の数m'個のdepthwise畳み込み出力チャネル上の点の中間特徴値に対して乗算計算を実行して、第4の所定の数n個のグループの結果を取得する演算であって、その各グループが第3の所定の数m'個の乗算計算結果を含む、演算、およびそれぞれ、第4の所定の数n個のグループの結果の各グループの結果に第3の所定の数m'個の乗算計算結果を足し込んで、第4の所定の数n個のpointwise畳み込みカーネルに対応する第4の所定の数n個のpointwise畳み込み出力チャネル上のこの点に対する現在のpointwise畳み込み下位部分和を取得する演算が実行され得る。
【０１９７】
(2)pointwise畳み込み計算を、次の第4の所定の数n個のpointwise畳み込みカーネル内の対応する第3の所定の数m'個のpointwise畳み込みチャネル上の重み値とともに第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値に対して実行して、次の第4の所定の数n個のpointwise畳み込みカーネルに対応する次の第4の所定の数n個のpointwise畳み込み出力チャネル上の第1の所定の数p個の点の現在のpointwise畳み込み下位部分和を取得することによって、すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の現在のpointwise畳み込み下位部分和が取得されるまで上記の演算を繰り返す。
【０１９８】
サブステップ2:すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の現在のpointwise畳み込みの下位部分和と第1の所定の数p個の点の前の累算計算部分結果に対する累算計算を実行して、第1の所定の数p個の点の現在の累算計算部分結果を生成する。
【０１９９】
たとえば、第1の所定の数p個の点の現在の累算計算部分結果を生成した後、現在の累算計算部分結果はメモリに記憶され、第1の所定の数p個の点の前の累算計算部分結果をカバーし得る。
【０２００】
サブステップ3:上記の演算を、それぞれ、すべてのpointwise畳み込みカーネル内の対応する次の第3の所定の数m'個のpointwise畳み込みチャネル上の重み値とともに次の第3の所定の数m'個のdepthwise畳み込み出力チャネル上の第1の所定の数p個の点の中間特徴値に従ってpointwise畳み込み計算を実行することによって繰り返し、それに対応して、その後の演算を、pointwise畳み込み計算および累算計算が第2の所定の数m個のdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値のすべてに対して完了するまで実行し、第1の所定の数p個の点の最終的累算計算部分結果はすべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の現在のpointwise畳み込み部分和である。
【０２０１】
ステップS320のサブステップ1〜3は、第2の実施形態におけるステップS220のステップS223〜S225に実質的に類似しており、したがって、その詳細な説明は省かれる。
【０２０２】
たとえば、第1の実行において、最初に、前者のm'個のdepthwise畳み込み出力チャネル上のp個の点の中間特徴値は、depthwise畳み込み計算によって得られる中間特徴マップから読み出されるものとしてよい。次いで、前者のm'個のpointwise畳み込みチャネル上の重み値が、N個のpointwise畳み込みカーネル内の前者のn個のpointwise畳み込みカーネルから読み出され得る。次に、前者のn個のpointwise畳み込み出力チャネル上のpointwise畳み込み下位部分和が、両方に従って計算されるものとしてよい。次いで、後者のn個のpointwise畳み込み出力チャネル上のpointwise畳み込み下位部分和は、N個のpointwise畳み込み出力チャネル上のpointwise畳み込み下位部分和が取得されるまで計算される。次に、下位部分和が累算され、後者のm'個のチャネル上のp個の点の中間特徴値が読み出され、上記の演算が繰り返され、pointwise畳み込み出力チャネルのすべての上でp個の点の現在のpointwise畳み込み部分和を取得する。
【０２０３】
本明細書において説明されている内容は、繰り返しが最初にpointwise畳み込みカーネルの数の大きさ(n)に関して実行され、次いで、繰り返しがチャネルの数の大きさ(m)に関して実行されるが、ただし、本開示の実施形態はそれに限定されないことに留意されたい。たとえば、繰り返しは、チャネルの数の大きさ(m)に関して実行されてもよく、次いで、繰り返しは、pointwise畳み込みカーネルの数の大きさ(n)に関して実行される。
【０２０４】
単純な場合において、m'=mであれば、第1の実行において、最初に、第1のm個のチャネル上のp個の点の中間特徴値は、図14の中間特徴マップ(i=1)に示されているように、読み出されるものとしてよい。次いで、N個のpointwise畳み込みカーネルにおける前者のm個のpointwise畳み込みチャネル上の重み値は図14のpointwise畳み込みカーネル(i=1)に示されているように読み出され得る。次に、現在のpointwise畳み込み部分和は、図14の出力特徴マップ(i=1)に示されているように、両方に従って計算されるものとしてよい。
【０２０５】
ステップS330において、累算計算が、それぞれ、すべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の現在のpointwise畳み込みの部分和と第1の所定の数p個の点の前の累算計算結果とに対して実行され、第1の所定の数p個の点の現在の累算計算結果を生成する。
【０２０６】
たとえば、第1の所定の数p個の点の現在の累算計算部分結果を生成した後、現在の累算計算結果はメモリに記憶され、第1の所定の数p個の点の前の累算計算結果をカバーする。
【０２０７】
ステップS340において、上記の演算が繰り返され、pointwise畳み込み計算は、次の第2の所定の数m個のdepthwise畳み込み出力チャネルおよびpointwise畳み込みチャネル上で第1の所定の数p個の点の中間特徴値に従って実行され、その後の演算は、それに対応して、pointwise畳み込み計算および累算計算がすべてのdepthwise畳み込み出力チャネル上で第1の所定の数p個の点の中間特徴値のすべてに対して完了するまで実行され、第1の所定の数p個の点の最終的累算計算結果がすべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の出力特徴値である。
【０２０８】
たとえば、次に、中間特徴マップ(i=2)は、入力特徴マップ(i=2)およびdepthwise畳み込みカーネル(i=2)に従って計算されてよく、次いで、現在のpointwise畳み込み部分和は、図14の出力特徴マップ(i=2)に示されているように、中間特徴マップ(i=2)およびpointwise畳み込みカーネル(i=2)に従って計算されてよく、次に、出力特徴マップ(i=2)は、前の累算計算結果(すなわち、図14の出力特徴マップ(i=1))と累算され、現在の累算計算結果を生成する。同様にして、中間特徴マップ(i=z)は、入力特徴マップ(i=z)およびdepthwise畳み込みカーネル(i=z)に従って計算されてよく、次いで、現在のpointwise畳み込み部分和は、図14の出力特徴マップ(i=z)に示されているように、中間特徴マップ(i=z)およびpointwise畳み込みカーネル(i=z)に従って計算されてよく、次に、出力特徴マップ(i=z)は、前の累算計算結果(すなわち、現在のpointwise畳み込み部分和(z'-1)に対する現在のpointwise畳み込み部分和(1))と累算され、それにより、pointwise畳み込み演算の最終的出力結果として出力特徴値を含む出力特徴マップは、図8の出力特徴図に示されているように、取得され、そのサイズは点p個分であり、全部でN個のチャネルを有する。
【０２０９】
たとえば、活性化演算および量子化演算のうちの少なくとも一方が、第1の所定の数p個の点の最終的累算計算結果がすべてのpointwise畳み込み出力チャネル上の第1の所定の数p個の点の出力特徴値としてメモリに記憶される前に各出力特徴値に対して実行され得る。
【０２１０】
これ以降、本開示の第1の実施形態による畳み込み計算法は、特定の例を用いて説明される。
【０２１１】
たとえば、図14に示されているように、depthwise畳み込みの幅および高さの大きさがS*Rであると仮定すると、チャネルの数(またはチャネル数が1と考えられるときには番号としても見なされ得る)はMであり、depthwise畳み込みの幅および高さの大きさは1*1であり、チャネル数はMであり、番号はNであり、入力特徴マップの幅および高さの大きさはX*Yであり、中間特徴マップの幅および高さの大きさはW*Hであり、出力特徴マップの幅および高さの大きさはE*Fであり、畳み込み計算方法は次のステップを含み得る。
【０２１２】
1.depthwise畳み込みについて、最初にp(p<=H*W)点およびm(m<=M)チャネルの乗算および累算結果を計算し、累算はここでは図6に示されているRおよびSとして、畳み込みカーネルの長さおよび幅の方向で実行される累算であり、p*m乗算-累算(MAC)ユニットはここで共有され、p*m乗算-累算結果が取得される。
【０２１３】
図9に示されているように、512個の乗算器-加算器ユニット(MAC)、および32個の点(上述のp=32)があり、16個のチャネル(上述のm=16、すなわち、チャネル変数cは0から15の範囲の値をとる)は一度に同時に計算されると仮定される。畳み込みカーネルのサイズが3*3であると仮定すると、乗算および累算の計算(MultおよびAccu)を9回実行した後(depthwise畳み込みカーネルの高さおよび幅変数rおよびsが0から2にそれぞれ変わり、入力特徴マップの幅変数xが0〜31から2〜33に変わり、高さ変数yが0から2に変わる)、32個の点の出力値、16個のチャネルが得られる。
【０２１４】
2.上述のステップ1の結果に対して任意選択の活性化演算を実行し、活性化演算は非線形関数により数値を再マップすることを意味し、活性化関数は限定はしないがReLu関数、Sigmoid関数、arctangent(tan)関数などを含む。
【０２１５】
3.上述のステップ2の結果に対して任意選択の量子化演算を実行し、量子化演算は高精度(通常32ビット)を有する乗算および累算結果をシフトまたは乗算および除算することによって低精度(通常8ビット)を有する乗算および累算結果を取得することを意味している。
【０２１６】
4.上述のステップ3の結果をレジスタまたはオンチップSRAMに記憶する。
【０２１７】
5.上述のステップ4の結果に対してpointwise計算を直接実行し、レジスタまたはオンチップSRAMからp個の点、m個のチャネルのdepthwise畳み込み計算の結果を読み出し、p個の点、m個のチャネルの乗算および累算結果を計算し、累算はここではチャネル方向の累算であり、p個の点、1個の出力チャネルのpointwise畳み込み部分和(第1から第mの入力チャネルの部分和)を取得する。
【０２１８】
6.上述のステップ5の結果をレジスタまたはオンチップSRAMに記憶する。
【０２１９】
7.ステップ5およびステップ6の演算をN回循環させることによってp個の点、N個の出力チャネルのpointwise畳み込み部分和(第1から第mまでの入力チャネルの部分和)の計算および記憶を完了させるが、ただし、pointwise畳み込みは、全部でn個の畳み込みカーネルを有し、N個の出力チャネル上のp個の出力点の部分和の結果はレジスタまたはオンチップSRAMに記憶されると仮定する。
【０２２０】
図10に示されているように、pointwise畳み込みの畳み込みカーネルのサイズは1*1であり、また、512個の乗算器-加算器ユニット(ここでは512個の乗算器-加算器ユニットがあり、depthwise計算プロセスの512個の乗算器-加算器ユニットは、同じ512個の乗算器-加算器ユニットであっても、異なっていてもよい)があり、32個の点(上述のp=32)、16個のチャネル(上述のm=16、すなわち、チャネル変数cは0から15の範囲からの値をとる)、1つの畳み込みカーネルの畳み込みを毎回計算し、1個の出力チャネル上で32個の点の部分和のデータを取得すると仮定される。256個の畳み込みカーネルがあると仮定すると、256*(128/16)=2048回の計算の後、256個の出力チャネル上の32個の点の部分和のデータが取得される。
【０２２１】
8.ステップ1〜7の演算を繰り返し、連続的に計算して、次のm個の出力チャネル上のp個の点の部分和(第m+1から第2mまでの入力チャネル上の部分和)を取得し、これらの部分和を前に記憶された部分和とともに累算し、累算結果をレジスタまたはオンチップSRAMに記憶し、このようにして、
【０２２２】
【数１０】
2019109896.tif 000012
【０２２３】
回の循環を通じてN個の出力チャネル上のp個の出力点のpointwise畳み込みの最終的累算結果を取得する。
【０２２４】
9.上述のステップ8の結果に対して任意選択の活性化演算を実行し、活性化演算は非線形関数により数値を再マップすることを意味し、活性化関数は限定はしないがReLu関数、Sigmoid関数、arctangent(tan)関数などを含む。
【０２２５】
10.上述のステップ9の結果に対して任意選択の量子化演算を実行し、量子化演算は高精度乗算および累算結果(通常32ビット)をシフトまたは乗算および除算することによって低精度乗算および累算結果(通常8ビット)を取得することを意味している。
【０２２６】
11.完全な出力特徴マップが取得されるまで次のp個の点を連続的に計算することによってステップ1〜10の上記の演算を繰り返す。
【０２２７】
第1の実施形態の特定の例および第3の実施形態の特定の例と比較すると、depthwise畳み込みがM個のチャネルを有している場合(またはチャネルの数が1であると考えられるときには、これは番号と見なされてもよい)、およびpointwise畳み込みがN個の畳み込みカーネルを有している場合に、前者のソリューションは、一般的に量子化されるp*M個のdepthwise畳み込み結果データをバッファリングする必要があり(8bi)、p*M*8ビットのバッファ領域が必要であることがわかる。後者のソリューションは、一般的に高精度で、逆量子化されているp*N個の部分和データ(32ビット)をバッファリングする必要があり、次いで、p*N*32ビットの記憶領域が必要である。depthwise畳み込み結果が量子化され、部分和結果が量子化されていない典型的な場合において、M>4nであれば、後者のソリューションは、より多くの記憶領域を節減し、そうでなければ、前者のソリューションは、より多くの記憶領域を節減する。
【０２２８】
したがって、本開示の一実施形態において、ニューラルネットワークにおける畳み込み計算法は、畳み込みカーネルのチャネル(または番号)Mの数とpointwise畳み込みカーネルの数Nとを比較するステップと、M>4Nであることに応答して、本開示の第1の実施形態による畳み込み計算法を実行して出力特徴値を計算するステップと、そうでなければ、本開示の第3の実施形態による畳み込み計算法を選択して出力特徴値を計算するステップとをさらに含み得る。
【０２２９】
例示的な電子デバイス
これ以降、本開示の一実施形態による電子デバイスが、図15を参照しつつ説明される。
【０２３０】
図15は、本開示の一実施形態による電子デバイスのブロック図を示している。
【０２３１】
図15に示されているように、電子デバイス10は、1つまたは複数のプロセッサ11とメモリ12とを備える。
【０２３２】
プロセッサ11は、データ処理機能および/または命令実行機能を有する任意の形態の処理ユニットであってよく、電子デバイス10内の他のアセンブリを制御して所望の機能を実行し得る。
【０２３３】
メモリ12は、揮発性メモリおよび/または不揮発性メモリなどの、様々な形態のコンピュータ可読および書込可能記憶媒体を備え得る1つまたは複数のコンピュータプログラム製品を含み得る。揮発性メモリは、たとえば、ランダムアクセスメモリ(RAM)および/またはキャッシュなどを含むものとしてよい。不揮発性メモリは、たとえば、リードオンリーメモリ(ROM)、ハードディスク、フラッシュメモリなどを含み得る。1つまたは複数のコンピュータプログラム命令は、コンピュータ可読記憶媒体に格納されてよく、プロセッサ11はプログラム命令を実行して、上で説明されているような本開示の様々な実施形態のニューラルネットワークにおける畳み込み計算方法および/または他の所望の機能を実装し得る。
【０２３４】
一例において、電子デバイス10は、入力デバイス13および出力デバイス14も備えてよく、これらのアセンブリは、バスシステムおよび/または他の形態の接続メカニズム(図示せず)によって相互接続される。
【０２３５】
たとえば、入力デバイス13は、たとえば、キーボード、マウス、ならびに通信ネットワークおよびそれが接続されるリモート入力デバイスならびに同様のものを含み得る。
【０２３６】
たとえば、出力デバイス14は、たとえば、ディスプレイ、プリンタ、ならびに通信ネットワークおよびそれが接続されるリモート出力デバイスならびに同様のものを含み得る。
【０２３７】
もちろん、簡単のため、電子デバイス10における本開示に関係するアセンブリの一部のみが図15に示されており、バス、入出力インターフェース、および同様のものなどのアセンブリは省かれている。図15に示されている電子デバイス10のアセンブリおよび構造は、例にすぎず、また限定するものでなく、電子デバイス10は、必要に応じて他のアセンブリおよび構造を有し得ることに留意されたい。
【０２３８】
例示的なコンピュータプログラム製品およびコンピュータ可読および書込可能記憶媒体
上で説明されている方法および装置に加えて、本開示の実施形態は、また、コンピュータプログラム命令を含むコンピュータプログラム製品であってよく、前記コンピュータプログラム命令は、プロセッサによって実行されたときに、プロセッサに、本開示の上述の「例示的な方法」部分で説明されているように本開示の様々な実施形態によりニューラルネットワークのための複合演算方法におけるステップを実行させる。
【０２３９】
コンピュータプログラム製品は、Java(登録商標)、C++、などのオブジェクト指向プログラミング言語、および「C」言語または類似のプログラミング言語などの伝統的な手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組合せで本開示の実施形態の演算を実行するためのプログラムコードを書くものとしてよい。プログラムコードは、全体がユーザコンピューティングデバイス上で実行されるか、ユーザデバイス上に部分的に実行されるか、スタンドアロンソフトウェアパッケージとして実行されるか、ユーザコンピューティングデバイス上で一部が実行されリモートコンピューティングデバイス上で一部が実行されるか、または全体がリモートコンピューティングデバイスもしくはサーバ上で実行され得る。
【０２４０】
さらに、本開示の実施形態は、また、コンピュータプログラム命令が記憶されているコンピュータ可読および書込可能記憶媒体であってよく、前記コンピュータプログラム命令は、プロセッサによって実行されたときに、プロセッサに、本開示の上述の「例示的な方法」部分で説明されているように本開示の様々な実施形態によりニューラルネットワークのための複合演算方法におけるステップを実行させる。
【０２４１】
コンピュータ可読および書込可能記憶媒体は、1つまたは複数の可読および書込可能媒体の任意の組合せを使用し得る。可読および書込可能媒体は、可読および書込可能信号媒体または可読および書込可能記憶媒体であってよい。可読および書込可能記憶媒体は、限定はしないが、電気、磁気、光学、電磁気、赤外線、または半導体のシステム、装置、もしくはデバイス、または上記の任意の組合せを含み得る。可読および書込可能記憶媒体のより具体的な例(非網羅的なリスト)は、1つまたは複数の電線を有する電気的接続、携帯型ディスク、ハードディスク、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、消去可能プログラム可能リードオンリーメモリ(EPROMまたはフラッシュメモリ)、光ファイバ、携帯型コンパクトディスクリードオンリーメモリ(CD-ROM)、光学式記憶装置デバイス、磁気記憶装置デバイス、または上記のものの任意の好適な組合せを含む。
【０２４２】
本開示の基本原理は、特定の実施形態と併せて上で説明されている。しかしながら、本開示において言及されている利点、優れている点、および効果などは単なる例であるが、本発明を制限することを意図していないことを指摘しておく必要がある。これらの利点、優れている点、効果などは、本開示の実施形態に本質的であるとは考えられない。それに加えて、前記の開示の特定の詳細は、例示することおよび理解しやすくすることのみを目的としており、限定することを目的としておらず、上記の詳細は、上で述べた特定の詳細において実装されるべきアプリケーションを制限しない。
【０２４３】
本開示において関係するデバイス、装置、機器、システムのブロック図は、単に図解している例にすぎず、接続、配置構成、および構成がブロック図内で示されている方式で行われなければならないことを要求するか、または暗示することを意図していない。当業者であれば、デバイス、装置、機器、システムは、任意の方式で接続されるか、配置構成されるか、または構成され得ることを理解するであろう。「含む」、「備える」、「有する」および同様の語は開放語であり、「限定はしないが含む」ことを意味し、交換して使用され得る。本明細書で使用されているような「または」および「および」という語は、「および/または」を指し、文脈上明らかにそうでないことを示さない限り交換して使用され得る。本明細書で使用されているような「など」という語は、「限定はしないが、...など」という語句を指し、交換して使用される。
【０２４４】
本開示の装置、機器、および方法において、各コンポーネントまたは各ステップは、分解され、および/または組み換えられ得ることにも留意されたい。これらの分解および/または組換は、本開示と同等であると見なされるべきである。
【０２４５】
開示されている態様の上記の説明は、当業者が本出願を製作または使用することができるようにするために提示されている。これらの態様への様々な修正は、当業者には非常に明白であり、本明細書で定義される一般原理は、本出願の範囲から逸脱することなく他の態様に適用され得る。したがって、本開示は、本明細書に示されている態様に限定されることを意図されておらず、むしろ本明細書で開示されている原理および新規性のある特徴と一致する最も広い範囲を提示することを意図されている。
【０２４６】
上記の説明は、例示および説明を目的として提示されている。それに加えて、説明は、本開示の実施形態を本明細書で開示されている形態に限定することを意図されていない。様々な例示的な態様および実施形態が上で説明されたが、当業者であれば、様々な変形、修正、変更、追加、および部分組合せを認識するであろう。
【符号の説明】
【０２４７】
10  電子デバイス
11  プロセッサ
12  メモリ
13  入力デバイス
14  出力デバイス
【図１】
2019109896.tif 000013
【図２Ａ】
2019109896.tif 000014
【図２Ｂ】
2019109896.tif 000015
【図３】
2019109896.tif 000016
【図４】
2019109896.tif 000017
【図５】
2019109896.tif 000018
【図６】
2019109896.tif 000019
【図７】
2019109896.tif 000020
【図８】
2019109896.tif 000021
【図９】
2019109896.tif 000022
【図１０】
2019109896.tif 000023
【図１１】
2019109896.tif 000024
【図１２】
2019109896.tif 000025
【図１３】
2019109896.tif 000026
【図１４】
2019109896.tif 000027
【図１５】
2019109896.tif 000028
【外国語明細書】
2019109896000001.pdf