JP7071451B2 - コンボリューションニューラルネットワークでコンボリューション演算を加速させるプロセッサ、及び該プロセッサの動作方法 - Google Patents

コンボリューションニューラルネットワークでコンボリューション演算を加速させるプロセッサ、及び該プロセッサの動作方法 Download PDF

Info

Publication number
JP7071451B2
JP7071451B2 JP2020132496A JP2020132496A JP7071451B2 JP 7071451 B2 JP7071451 B2 JP 7071451B2 JP 2020132496 A JP2020132496 A JP 2020132496A JP 2020132496 A JP2020132496 A JP 2020132496A JP 7071451 B2 JP7071451 B2 JP 7071451B2
Authority
JP
Japan
Prior art keywords
data
vector
weighted value
input activation
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2020132496A
Other languages
English (en)
Other versions
JP2021034036A (ja
Inventor
サン イル アン,
スン ジョー ハ,
ドン ヨン キム,
ベオム スー キム,
マーティン ケルスナー,
Original Assignee
ハイパーコネクト インコーポレイテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ハイパーコネクト インコーポレイテッド filed Critical ハイパーコネクト インコーポレイテッド
Publication of JP2021034036A publication Critical patent/JP2021034036A/ja
Application granted granted Critical
Publication of JP7071451B2 publication Critical patent/JP7071451B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/213Feature extraction, e.g. by transforming the feature space; Summarisation; Mappings, e.g. subspace methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/217Validation; Performance evaluation; Active pattern learning techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computing Systems (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Biology (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)

Description

本発明は、コンボリューションニューラルネットワークでコンボリューション演算を行うプロセッサ、及び該プロセッサの動作方法に関する。
コンボリューションニューラルネットワーク(CNN:convolutional neural network)は、人工ニューラルネットワーク(ANN:artificial neural network)のうち一種類であり、複数のレイヤが積層されても構成される。
映像システムは、コンボリューションニューラルネットワークを介して、リアルタイムで映像を認識して感知することができる。コンボリューションニューラルネットワークの正確度は、コンボリューションレイヤが多く積層されるほど高くもなる。しかし、コンボリューションレイヤが多く積層されるほど、コンボリューション演算量が増加し、コンボリューションニューラルネットワークにおける映像処理時間が長くなってしまう。特に、モバイル装置のように、リソースが制限された環境において、コンボリューションニューラルネットワークを介して映像をリアルタイムで処理するには、困難さが伴う。
従って、リソースが制限された環境においても、コンボリューションニューラルネットワークを介して、コンボリューション演算を加速させる技術が要求される。
本発明は、ハードウェアリソースが制限された環境において、コンボリューション演算の正確度及び速度を増進させるものである。
一側によれば、コンボリューションニューラルネットワークでコンボリューション演算を行う方法において、入力イメージから、第1ビットで量子化された入力アクティベイションデータを獲得する段階と、前記コンボリューションニューラルネットワークを介して学習されたパラメーターの値を示す、第2ビットで量子化された加重値データを獲得する段階と、前記入力アクティベイションデータ及び加重値データそれぞれを二進化し、二進化入力アクティベイションベクトル及び二進化加重値ベクトルを獲得する段階と、前記二進化入力アクティベーションベクトルと前記二進化加重値ベクトルとの二進演算、並びに前記第1ビット及び前記第2ビットそれぞれと同一長を有する距離ベクトルに基づき、前記入力アクティベーションデータと加重値データとの内積演算を行う段階と、前記内積演算によってなされた結果を出力アクティベーションデータとして保存する段階と、を含んでもよい。
他の一側によれば、コンボリューションニューラルネットワークでコンボリューション演算を行う装置において、少なくとも1つのプログラムが保存されたメモリと、前記少なくとも1つのプログラムが実行されることにより、コンボリューションニューラルネットワークでコンボリューション演算を行うプロセッサと、を含み、前記プロセッサは、入力イメージから、第1ビットで量子化された入力アクティベーションデータを獲得し、前記コンボリューションニューラルネットワークを介して学習されたパラメータの値を示す、第2ビットで量子化された加重値データを獲得し、前記入力アクティベーションデータ及び加重値データそれぞれを二進化し、二進化入力アクティベーションベクトル及び二進化加重値ベクトルを獲得し、前記二進化入力アクティベーションベクトルと前記二進化加重値ベクトルとの二進演算、並びに前記第1ビット及び前記第2ビットそれぞれと同一長を有する距離ベクトルに基づき、前記入力アクティベーションデータと加重値データとの内積演算を行い、前記内積演算によってなされた結果を、前記メモリに出力アクティベーションデータとして保存することができる。
さらに他の一側によれば、第1ビットで量子化された入力アクティベーションデータと、第2ビットで量子化された加重値データとの内積演算によってなされた結果を示す出力アクティベーションデータを保存するアドレスをローディングする段階と、前記入力アクティベーションデータ内のコンポーネントが二進化された二進化入力アクティベーションベクトルをローディングする段階と、前記二進化入力アクティベーションベクトルと、前記加重値データ内のコンポーネントが二進化された二進化加重値ベクトルとの二進演算、並びに前記第1ビット及び前記第2ビットそれぞれと同一長を有する距離ベクトルに基づき、前記入力アクティベーションデータと加重値データとの内積演算を行う段階と、前記内積演算によってなされた結果を、前記ローディングされたアドレスに前記出力アクティベーションデータとして保存する段階と、を含む、コンボリューションニューラルネットワークでコンボリューション演算を行う方法をプロセッサと結合されて実行させるために媒体に保存されたコンピュータプログラムが提供される。
本発明によれば、コンボリューションニューラルネットワークを介してコンボリューション演算を行う専用ハードウェアだけではなく、一般的なプロセッサも、所定の二進演算を利用し、コンボリューション演算の正確度及び速度を増進させることができる。
一実施形態によるコンボリューションニューラルネットワークを示すブロック図である。 一実施形態による、コンボリューション演算を行う装置の構成を示したブロック図である。 一実施形態により、コンボリューション演算を行う装置がコンボリューション演算を行う過程について説明するための図面である。 一実施形態により、8ビットで量子化されたデータのコンボリューション演算を加速させる方法について説明するための図面である。 一実施形態により、入力アクティベーションブロックと加重値ブロックとをチャネル方向に分割し、分割されたサブブロックを利用し、コンボリューション演算を行う方法について説明するための図面である。 一実施形態により、プロセッサが8ビットSIMD MAC動作を介してコンボリューション演算を行う方法について説明するための図面である。 一実施形態により、入力アクティベーションブロックが幅方向に分割されたサブブロックと、加重値ブロックが分割されたサブブロックとを利用し、コンボリューション演算を行う方法について説明するための図面である。 一実施形態により、プロセッサが所定の二進演算を介してコンボリューション演算を行う方法について説明するための図面である。 一実施形態により、データのビット数及び距離ベクトルに基づき、量子化されたデータを獲得する方法について説明するための図面である。 一実施形態により、入力アクティベーションデータが1ビットであり、加重値データが1ビットである場合、内積演算値を獲得する過程について説明するための図面である 一実施形態により、入力アクティベーションデータが2ビットであり、加重値データが1ビットである場合、内積演算値を獲得する過程について説明するための図面である。 一実施形態により、入力アクティベーションデータが2ビットであり、加重値データが2ビットである場合、内積演算値を獲得する過程について説明するための図面である。 一実施形態により、コンボリューション演算を行う方法について説明するためのフローチャートである。
本発明は、以下の詳細な説明と、それに伴う図面との結合により、容易に理解され、参照番号は、構造的構成要素を意味する。
以下においては、図面を参照し、多様な実施形態について詳細に説明する。以下で説明される実施形態は、さまざまに異なる形態に変形されても実施される。本実施形態の特徴についてさらに明確に説明するために、以下の実施形態が属する技術分野において当業者に広く知られている事項について、詳細な説明は、省略する。
一方、本明細書において、ある構成が他の構成を「含む」とするとき、それは、特別に反対となる記載がない限り、それ以外の他構成を除くものではなく、他構成をさらに含んでもよいということを意味する。
また、本明細書で使用される「第1」または「第2」のように序数を含む用語は、多様な構成要素についての説明に使用することができるが、前記構成要素は、前記用語によって限定されるものではない。前記用語は、1つの構成要素を他の構成要素から区別する目的のみに使用される。
図1は、一実施形態によるコンボリューションニューラルネットワークを示すブロック図である。
コンボリューションニューラルネットワーク(CNN:convolutional neural network)は、人工ニューラルネットワーク(ANN:artificial neural network)のうち一種類であり、主に、マトリックス(matrix)データやイメージデータの特徴の抽出に利用されうる。該コンボリューションニューラルネットワークは、入力データから特徴を学習するアルゴリズムでもある。
該コンボリューションニューラルネットワーク上において、プロセッサは、第1コンボリューションレイヤ120を介し、入力イメージ110にフィルタを適用し、特徴を獲得することができる。該プロセッサは、第1プーリングレイヤ130を介してフィルタ処理されたイメージをサブサンプリングし、大きさを小さくすることができる。該プロセッサは、第2コンボリューションレイヤ140及び第2プーリングレイヤ150を介し、イメージのフィルタ処理を施して特徴を抽出し、フィルタ処理されたイメージをサブサンプリングし、大きさを小さくすることができる。その後、該プロセッサは、隠れ層160を介して処理されたイメージを完全連結し、出力データ170を獲得することができる。
該コンボリューションニューラルネットワークにおいて、コンボリューションレイヤ120,140は、三次元入力データである入力アクティベーションデータ(input activation data)と、学習可能なパラメータを示す四次元データである加重値データ(weight data)とのコンボリューション演算を行い、三次元出力データである出力アクティベーションデータ(output activation data)を獲得することができる。ここで、獲得された出力アクティベーションデータは、次のレイヤにおいて、入力アクティベーションデータとしても利用される。
一方、三次元出力データである出力アクティベーションデータ上の1つのピクセルを演算するところに、数千個の乗算と加算との演算が必要であるために、コンボリューションニューラルネットワーク上において、データが処理される時間のほとんどがコンボリューションレイヤで必要となる。図2ないし図13としては、コンボリューション演算を行う装置またはプロセッサが、コンボリューション演算を加速させるために遂行する動作について説明する。
図2は、一実施形態による、コンボリューション演算を行う装置の構成を示したブロック図である。
図2を参照すれば、コンボリューション演算を行う装置10(以下、コンボリューション演算装置)は、プロセッサ210及びメモリ220を含んでもよい。本実施形態と係わる技術分野で当業者であるならば、図2に図示された構成要素以外に、他の汎用的な構成要素がさらに含まれてもよいということが分かるであろう。
プロセッサ210は、コンボリューション演算装置10の全体的な動作を制御し、CPUのような少なくとも1つのプロセッサを含んでもよい。プロセッサ210は、各機能に対応する特化されたプロセッサを少なくとも一つ含むか、あるいは一つに統合された形態のプロセッサでもある。
メモリ220は、コンボリューションニューラルネットワークで行われるコンボリューション演算と係わるプログラム、データまたはファイルを保存することができる。メモリ220は、プロセッサ210によって実行可能な命令語を保存することができる。プロセッサ210は、メモリ220に保存されたプログラムを実行させたり、メモリ220に保存されたデータまたはファイルを読み取ったり、新たなデータを保存したりすることができる。また、メモリ220は、プログラム命令、データファイル、データ構造などを、単独でまたは組み合わせで保存することができる。
プロセッサ210は、高精度(high-precision)演算器(例えば、32ビット演算器)が階層構造に設計され、複数の低精度(low-precision)演算器(例えば、8ビット演算器)を含んでもよい。その場合、プロセッサ210は、高精度演算のための命令語及び低精度演算のためのSIMD(single instruction multiple data)命令語を支援することができる。ビット幅(bit-width)が低精度演算器の入力に合うように量子化(quantization)されるならば、プロセッサ210は、同一時間内に、ビット幅が広い演算を行う代わりに、ビット幅が狭い複数の演算を並列的に行うことにより、コンボリューション演算を加速させることができる。プロセッサ210は、所定の二進演算を介し、コンボリューションニューラルネットワーク上でコンボリューション演算を加速させることができる。
プロセッサ210は、入力イメージから、第1ビットで量子化された入力アクティベーションデータを獲得することができる。例えば、プロセッサ210は、第1ビットと同一距離を有する第1距離ベクトルに基づき、第1ビットで表現される二進数を、量子化されたデータにマッピングすることができる。例えば、第1ビットは、プロセッサ210で支援されない精度に対応するビットでもある。プロセッサ210で支援される精度に対応するビットが、32ビット、16ビット、8ビットである場合、第1ビットは、1ビットと8ビットとの間の任意のビットでもある。プロセッサ210は、マッピングされた結果、及びコンボリューション演算の単位に基づき、イメージから、第1ビットで量子化された入力アクティベーションデータを獲得することができる。
プロセッサ210は、第2ビットで量子化された加重値データを獲得することができる。ここで、該加重値データは、コンボリューションニューラルネットワークを介して学習されたパラメータの値を示すことができる。例えば、プロセッサ210は、第2ビットと同一距離を有する第2距離ベクトルに基づき、第2ビットで表現される二進数を、量子化されたデータにマッピングすることができる。例えば、第2ビットは、プロセッサ210で支援されない精度に対応するビットでもある。プロセッサ210で支援される精度に対応するビットが32ビット、16ビット、8ビットである場合、第2ビットは、1ビットと8ビットとの間の任意のビットでもある。プロセッサ210は、マッピングされた結果、及びコンボリューション演算の単位に基づき、コンボリューションニューラルネットワークを介して学習されたパラメータの値から、第2ビットで量子化された加重値データを獲得することができる。また、第1ビットは、第2ビットと同一ビットでもあり、異なるビットでもある。
プロセッサ210は、入力アクティベーションデータ及び加重値データそれぞれを二進化し、二進化入力アクティベーションベクトル及び二進化加重値ベクトルを獲得することができる。
例えば、プロセッサ210は、入力アクティベーションデータ内のコンポーネントを二進化し、二進化されたコンポーネントそれぞれにおいて、i番目ビットで構成された第i二進化入力アクティベーションベクトル(0≦i≦n-1、iは、整数であり、第1ビットは、nビットである)を獲得することができる。また、プロセッサ210は、加重値データ内のコンポーネントを二進化し、二進化されたコンポーネントそれぞれにおいて、j番目ビットで構成された第j二進化加重値ベクトル(0≦j≦m-1、jは、整数であり、第2ビットは、mビットである)を獲得することができる。
プロセッサ210は、二進化入力アクティベーションベクトルと二進化加重値ベクトルとの二進演算を行うことができる。プロセッサ210は、第1ビット及び第2ビットそれぞれと同一長を有する距離ベクトルを獲得することができる。プロセッサ210は、二進化入力アクティベーションベクトルと二進化加重値ベクトルとの二進演算及び距離ベクトルに基づき、入力アクティベーションデータと加重値データとの内積演算を行うことができる。
例えば、プロセッサ210は、第i二進化入力アクティベーションベクトルと第j二進化加重値ベクトルとの間でXNOR演算を行い、nxm個の第1演算ベクトルを獲得することができる。プロセッサ210は、nxm個の第1演算ベクトルに、popcount演算を行い、nxm個の第2演算値を獲得することができる。プロセッサ210は、nxm個の第2演算値、及びnxm個の第1演算ベクトルに対応する距離ベクトルに基づき、入力アクティベーションデータと加重値データとの内積演算を行うことができる。
具体的には、プロセッサ210は、nxm個の第2演算値それぞれに2を乗じ、入力アクティベーションデータの長さを差し引く演算を行い、nxm個の第3演算値を獲得することができる。プロセッサ210は、nxm個の第3演算値それぞれの獲得に基になった距離ベクトルの値を、nxm個の第3演算値と乗じ、nxm個の乗じられた値を合算することにより、入力アクティベーションデータと加重値データとの内積演算を行うことができる。
プロセッサ210は、入力イメージから獲得される所定個数の入力アクティベーションデータについて、内積演算を行うことにより、所定個数の出力アクティベーションデータを獲得することができる。
プロセッサ210は、コンボリューションニューラルネットワーク上の第1レイヤから出力された所定個数の出力アクティベーションデータを、コンボリューションニューラルネットワーク上の第2レイヤの入力アクティベーションデータとして適用することができる。
プロセッサ210は、内積演算によってなされた結果を、出力アクティベーションデータとしてメモリ220に保存することができる。
図3は、一実施形態により、コンボリューション演算を行う装置がコンボリューション演算を行う過程について説明するための図面である。
図3を参照すれば、プロセッサ210は、コンボリューションレイヤを介してコンボリューション演算を行うことができる。例えば、コンボリューションレイヤは、入力データとして、入力アクティベーションデータ及び加重値データを獲得することができる。該入力アクティベーションデータは、三次元データであるI[Ck][Wi][Hi]によっても表現される。該加重値データは、四次元データであるW[Co][Ck][Wk][Hk]によっても表現される。プロセッサ210は、コンボリューションレイヤを介し、入力アクティベーションデータと加重値データとのコンボリューション演算を行い、出力データとして出力アクティベーションデータを獲得することができる。出力アクティベーションデータは、O[Co][Wo][Ho]によっても表現される。
図3のイメージ310は、出力アクティベーション第1平面50上の最初ピクセル51に係わるコンボリューション演算値を計算する過程について説明するための図面である。プロセッサ210は、入力アクティベーションデータ30内の第1入力アクティベーションデータ31である三次元ブロック(WxHxC)と、第1加重値データ41である三次元ブロック(WxHxC)との内積を計算することにより、出力アクティベーション第1平面(WxH)50上の最初ピクセル51値を獲得することができる。ここで、ピクセル51値は、第1入力アクティベーションデータ31と第1加重値データ41とのコンボリューション値でもある。
図3のイメージ320は、出力アクティベーション第1平面50上の2番目ピクセル52に係わるコンボリューション演算値を計算する過程について説明するための図面である。プロセッサ210は、第1入力アクティベーションデータ31である三次元ブロック(WxHxC)を二次元平面(WxH)方向に所定歩幅(stride)ほど移動させ、入力アクティベーションデータ30内の第2入力アクティベーションデータ32である三次元ブロック(WxHxC)を獲得することができる。プロセッサ210は、第2入力アクティベーションデータ32である三次元ブロック(WxHxC)と、第1加重値データ41である三次元ブロック(WxHxC)との内積を計算することにより、出力アクティベーション第1平面(WxH)50上の2番目ピクセル52値を獲得することができる。
プロセッサ210は、出力アクティベーション第1平面50上の最初ピクセル51に係わるコンボリューション演算値、及び2番目ピクセル52に係わるコンボリューション演算値を獲得するための演算を並列的に行うことができる。また、プロセッサ210は、入力アクティベーションデータ30内において、三次元ブロック(WxHxC)を二次元平面(WxH)方向に所定歩幅ほど移動させて獲得された所定の入力アクティベーションデータと、第1加重値データ41である三次元ブロック(WxHxC)との内積演算を反復して行うことにより、出力アクティベーション第1平面(WxH)50上の全ピクセルに係わるピクセル値を獲得することができる。
また、プロセッサ210は、出力アクティベーション三次元座標(WxHxC)上の出力アクティベーション第2平面(WxH)60上の全ピクセルに係わるピクセル値も、出力アクティベーション第1平面(WxH)50上の全ピクセルに係わるピクセル値を獲得するための方法と同一方法で獲得することができる。
図3のイメージ330は、出力アクティベーション第2平面60上の最初ピクセル61に係わるコンボリューション演算値を計算する過程について説明するための図面である。プロセッサ210は、入力アクティベーションデータ30内の第1入力アクティベーションデータ31である三次元ブロック(WxHxC)と、第2加重値データ42である三次元ブロック(WxHxC)との内積を計算することにより、出力アクティベーション第2平面(WxH)60上の最初ピクセル61値を獲得することができる。
また、出力アクティベーション第2平面(WxH)60上の全ピクセルに係わるピクセル値、及び出力アクティベーション第1平面(WxH)50上の全ピクセルに係わるピクセル値を獲得するための演算は、並列的にも行われる。プロセッサ210は、全ての出力アクティベーション平面上のピクセル値を獲得することにより、出力アクティベーション三次元座標(WxHxC)上のピクセル値を獲得することができる。
図4は、一実施形態により、8ビットで量子化されたデータのコンボリューション演算を加速させる方法について説明するための図面である。
図4のイメージ410を参照すれば、プロセッサ210は、32ビット入力A,B,Cに対し、MAC(multiplication and accumulation)演算を行うことができる。プロセッサ210は、32ビット入力A,B,Cについて、AXB+C=Dを演算し、64ビット出力Dを生成することができる。ここで、プロセッサ210は、1回のMAC演算を行うことにより、1つの出力Dを獲得することができる。
図4のイメージ420を参照すれば、プロセッサ210は、入力A,B,Cを、8ビットデータ4個で構成された32ビットベクトルとして獲得することができる。プロセッサ210は、8ビットSIMD演算を行うことができる。プロセッサ210は、8ビットSIMD演算を行うことにより、8ビットデータ4個で構成された32ビットベクトルである入力A,B,Cについて、A[i]XB[i]+C[i]=D[i](ただし、i=0,1、2、3)を並列的に演算し、16ビットデータ4個で構成された64ビットベクトルDを獲得することができる。ここで、プロセッサ210は、32ビットデータを8ビットで量子化し、SIMD演算を行うことにより、MAC演算を行うときより、データ処理の速度を4倍向上させることができる。
図5は、一実施形態により、入力アクティベーションブロックと加重値ブロックとをチャネル方向に分割し、分割されたサブブロックを利用し、コンボリューション演算を行う方法について説明するための図面である。
図5は、プロセッサ210がSIMD MAC演算を利用し、コンボリューション演算を行う方法について説明するための図面である。
例えば、プロセッサ210は、入力アクティベーションブロック510内の第1入力アクティベーションブロック511(I∈R16x1x8)を獲得することができる。プロセッサ210は、第1入力アクティベーションブロック511(I∈R16x1x8)をチャネル方向に分割し、8個のサブブロックISB[0]~ISB[7]を獲得することができる。また、プロセッサ210は、第1加重値ブロック520(W∈R1x1x8)を獲得することができる。プロセッサ210は、第1加重値ブロック520(W∈R1x1x8)をチャネル方向に分割し、8個のサブブロックWSB[0]~WSB[7]を獲得することができる。プロセッサ210は、8個の入力アクティベーションサブブロックISB[0]~ISB[7]と、8個の加重値サブブロックWSB[0]~WSB[7]とのSIMD MAC演算を行うことにより、16個のピクセルの部分和(O=O+ISB[i]xWSBx16[i]、i=0,1、2、3、4、5、6、7)を獲得することができる。プロセッサ210は、全てのチャネルについて、SIMD MAC演算を反復して行うことにより、16個ピクセル531に係わるコンボリューション値を獲得することができる。また、プロセッサ210は、入力アクティベーションブロック510と第1加重値ブロック520とのコンボリューション演算を介し、出力アクティベーションデータ530に係わるコンボリューション値を獲得することができる。一方、プロセッサ210は、演算を行うにおいて、加重値ブロックWSBをn個複写し、ベクトルに生成されたWSBxnを利用することができる。
図6は、一実施形態により、プロセッサ210が、8ビットSIMD MAC動作を介してコンボリューション演算を行う方法について説明するための図面である。
例えば、プロセッサ210のパイプラインは、1回に128ビットの出力を処理することができると仮定する。プロセッサ210が、16ビットのデータについてロードまたは保存する演算を行うとき、プロセッサ210は、8個のデータを、1回にロードまたは保存することができる。一方、プロセッサ210は、8ビットSIMD MAC演算を行うにおいて、加重値ブロックWSBを8個複写し、ベクトルに生成されたWSBx8を利用することができる。
図6のコード610のライン2~3を参照すれば、プロセッサ210は、第1出力アクティベーションの16個ピクセル(O∈R16x1x1)をローディングすることができる。
コード610のライン4を参照すれば、プロセッサ210は、コンボリューション演算に利用される第1入力アクティベーションブロックのサブブロックISB[i][0]~ISB[i][15]をローディングすることができる。
コード610のライン5~6を参照すれば、プロセッサ210は、第1入力アクティベーションブロックのサブブロックISB[i]と加重値サブブロックWSB[i]との乗算を行い、第1出力アクティベーションブロックの16個ピクセルの部分和を加えるMAC演算(O=O+ISB[i]xWSBx16[i])を行うことができる。プロセッサ210は、MAC(ISB[i],WSBx16[i],O[i])を行い、遂行された結果値をO[i]に保存することができる。
コード610のライン7~8を参照すれば、プロセッサ210は、第1出力アクティベーションブロックの16個ピクセル(O∈R16x1x1)の部分和を保存することができる。
従って、ループ(loop)当たり7個の命令語(Instruction)を8回反復するので、総56サイクルが所要される。
図7は、一実施形態により、入力アクティベーションブロックが幅方向に分割されたサブブロックと、加重値ブロックが分割されたサブブロックとを利用し、コンボリューション演算を行う方法について説明するための図面である。
例えば、プロセッサ210は、入力アクティベーションブロック710内の第1入力アクティベーションブロック711(I∈R16x1x8)を獲得することができる。プロセッサ210は、第1入力アクティベーションブロック711(I∈R16x1x8)を幅方向に分割し、8ビットデータからなる16個の第1入力アクティベーションサブブロック711-0,711-2,...,711-15を獲得することができる。ISB2[0]711-0、ISB2[1]711-1、ISB2[2]711-2、...、ISB2[15]711-15は、それぞれ幅方向に分割され、8ビットからなる16個のサブブロックでもある。ISB2[0][i]~ISB2[15][i]は、各サブブロックのi番目ビットで構成されたデータでもある。
また、プロセッサ210は、第1加重値ブロック720(W∈R1x1x8)を獲得することができる。プロセッサ210は、第1加重値ブロック720(W∈R1x1x8)から1個の第1加重値サブブロックWSB2[0]を獲得することができる。WSB2[j]は、第1加重値サブブロックのデータのj番目ビットで構成されたサブブロックでもある。プロセッサ210は、16個の第1入力アクティベーションサブブロック711-0,711-2,...,711-15と、8個の第1加重値サブブロックとのコンボリューション演算を行うことにより、出力アクティベーション平面730上の16個のピクセル731のコンボリューション値を獲得することができる。入力アクティベーションブロックと加重値ブロックとのコンボリューション演算は、図8で説明する。
図8は、一実施形態により、プロセッサ210が所定の二進演算を介してコンボリューション演算を行う方法について説明するための図面である。
図8のコード810のライン1~2を参照すれば、プロセッサ210は、第1出力アクティベーションの16個ピクセル(O∈R16x1x1)の部分和をローディングすることができる。
コード810のライン5を参照すれば、プロセッサ210は、所定コンボリューション演算に利用されるi番目ビットからなる16個の入力アクティベーションベクトルISB2[0][i]~ISB2[15][i]をローディングすることができる。
コード810のライン6~7を参照すれば、プロセッサ210は、16個の入力アクティベーションベクトルISB2[0][i]~ISB2[15][i]と加重値ベクトルWSB2x8[j])との間でXNOR演算を行うことができる。一方、プロセッサ210は、所定コンボリューション演算を行うにおいて、加重値ブロックWSB2をn個複写し、ベクトルとして生成されたWSB2xnを利用することができる。プロセッサ210は、XNOR演算を行った結果M0,M1を獲得することができる。M0,M1それぞれは、64ビット(8x8)でもある。プロセッサ210で128ビット処理が可能である場合、プロセッサ210は、M0を獲得するためのXNOR演算と、M1を獲得するためのXNOR演算とを並列的に行うことができる。
コード810のライン8~9を参照すれば、プロセッサ210は、XNOR演算結果にpopcount演算を行うことができる。P0、P1それぞれは64ビット(8x8)でもある。プロセッサ210で128ビット処理ができた場合、プロセッサ210は、P0を獲得するためのpopcount演算とP1を獲得するためのpopcount演算を並列的に遂行することができる。
コード810のライン10~11を参照すれば、プロセッサ210は、popcount演算値と距離ベクトルとを利用し、MAC演算を行うことができる。距離ベクトル(D[i][j])は、図12のブロック1250に記載されているように、d[i]xd[j]が計算された値でもある。また、プロセッサ210は、D[i][j]を8個複写し、ベクトルとして生成されたDx8[i][j]を獲得し、popcount演算値とDx8[i][j]とを利用し、MAC演算を行うことができる。
コード810のライン12~13を参照すれば、プロセッサ210は、第1出力アクティベーションブロックの16個ピクセル(O∈R16x1x1)の部分和を保存することができる。
例えば、入力アクティベーションデータのビットが2ビットであり、加重値データのビットが1ビットである場合、ループ当たり5個の命令語(図8のコード810のライン5~11、ライン6~7の演算は、並列的に処理し、ライン8~9の演算は、並列的に処理する)を2回反復し、出力アクティベーションデータのロード及び保存に4個の命令語を遂行するので、総14(5x2+4=14)サイクルが所要される。従って、図8のコード810によるコンボリューション演算の性能が、図6のコード610によるコンボリューション演算の性能より4倍位向上することができる。
また、入力アクティベーションデータのビットが3ビットであり、加重値データのビットが1ビットである場合、総19(5x3+4=19)サイクルが所要される。その場合、コンボリューション演算の性能は、2.9倍位向上することができる。
また、入力アクティベーションデータのビットが2ビットであり、加重値データのビットが2ビットである場合、総24(5x2x2+4=24)サイクルが所要される。その場合、コンボリューション演算の性能は、2.3倍位向上することができる。
図9は、一実施形態により、データのビット数及び距離ベクトルに基づき、量子化されたデータを獲得する方法について説明するための図面である。
プロセッサ210は、データの所定ビットと同一距離を有する距離ベクトルに基づき、所定ビットで表現される二進数を、量子化されたデータにマッピングすることができる。例えば、ブロック910を参照すれば、データがnビットである場合、距離ベクトルは、[1,2,...,2n-1]でもある。データが2ビットである場合、距離ベクトルは、[1,2]でもある。また、データが1ビットである場合、距離ベクトルは、[1]でもある。
ブロック920を参照すれば、データが2ビットである場合、2ビットで表現される二進数は、00(2)、01(2)、10(2)、11(2)でもある。プロセッサ210は、距離ベクトルの各コンポーネントに、1または-1を乗じた値の和に基づき、2ビットで表現される二進数に対応する量子化されたデータを獲得することができる。例えば、2ビットで表現される二進数の第1コンポーネントの値が0である場合、第1コンポーネントに対応する距離ベクトルのコンポーネントの値に-1を乗じることができる。また、2ビットで表現される二進数の第2コンポーネントの値が1である場合、第2コンポーネントに対応する距離ベクトルのコンポーネントの値に1を乗じることができる。
従って、2ビットで表現される二進数が00(2)である場合、プロセッサ210は、最初ビットの値が0であるので、距離ベクトルの最初コンポーネント値である2に-1を乗じ、-2を獲得することができる。プロセッサ210は、0番目ビットの値が0であるので、距離ベクトルの0番目コンポーネント値である1に-1を乗じ、-1を獲得することができる。プロセッサ210は、-2と-1を合算し、-3を獲得することができる。二進数が00(2)であるならば、プロセッサ210は、量子化されたデータ-3を獲得することができる。
同じ方法で、二進数が01(2)であるならば、プロセッサ210は、量子化されたデータ-1を獲得することができる。二進数が10(2)であるならば、プロセッサ210は、量子化されたデータ1を獲得することができる。二進数が11(2)であるならば、プロセッサ210は、量子化されたデータ3を獲得することができる。
ブロック930を参照すれば、データが1ビットである場合、1ビットで表現される二進数は、0(2)、1(2)でもある。プロセッサ210は、距離ベクトルのコンポーネントに1または-1を乗じた値に基づき、2ビットで表現される二進数に対応する量子化されたデータを獲得することができる。
従って、二進数が0(2)であるならば、プロセッサ210は、量子化されたデータ-1を獲得することができる。二進数が1(2)であるならば、プロセッサ210は、量子化されたデータ1を獲得することができる。
図10は、一実施形態により、入力アクティベーションデータが1ビットであり、加重値データが1ビットである場合、内積演算値を獲得する過程について説明するための図面である。
ブロック1010を参照すれば、入力アクティベーションデータ及び加重値データが1ビットであるならば、入力アクティベーションデータ及び加重値データそれぞれに係わる距離ベクトルは、[1]でもある。
ブロック1020を参照すれば、プロセッサ210は、1ビットで量子化された入力アクティベーションデータ、及び1ビットで量子化された加重値データを獲得することができる。例えば、1ビットで量子化された入力アクティベーションデータ(Aoriginal)は、8個のベクトルで構成された[1,1,1,1,-1,-1,1,-1]でもある。1ビットで量子化された加重値データ(Woriginal)は、8個のベクトルで構成された[-1,1,-1,1,-1,1,-1,1]でもある。
ブロック1030を参照すれば、プロセッサ210は、入力アクティベーションデータ(Aoriginal)及び加重値データ(Woriginal)をそれぞれ二進化し、二進化入力アクティベーションデータベクトル(Abin)及び二進化加重値ベクトル(Wbin)を獲得することができる。
例えば、1ビットのデータが、距離ベクトル(d=[1])によって量子化された場合、プロセッサ210は、量子化されたデータである-1を0(2)に二進化することができ、量子化されたデータである1を1(2)に二進化することができる。
従って、プロセッサ210は、入力アクティベーションデータ(Aoriginal)である[1,1,1,1,-1,-1,1,-1]を二進化し、二進化入力アクティベーションデータベクトル(Abin)である[1,1,1,1,0,0,1,0]を獲得することができる。また、プロセッサ210は、加重値データ(Woriginal)である[-1,1,-1,1,-1,1,-1,1]を二進化し、二進化加重値ベクトル(Wbin)である[0,1,0,1,0,1,0,1]を獲得することができる。
ブロック1040を参照すれば、プロセッサ210は、二進化入力アクティベーションデータベクトル(Abin)と二進化加重値ベクトル(Wbin)との間でXNOR演算を行い、第1演算ベクトルを獲得することができる。第1演算ベクトルMは、[0,1,0,1,1,0,0、0]でもある。XNOR演算が行われた後、プロセッサ210は、第1演算ベクトルMにpopcount演算を行い、第2演算値Pを獲得することができる。ここで、第2演算値Pは、3である。
ブロック1050を参照すれば、プロセッサ210は、第2演算値P及び第1演算ベクトルMに対応する距離ベクトルに基づき、入力アクティベーションデータ(Aoriginal)と加重値データ(Woriginal)との内積演算を行うことができる。
具体的には、プロセッサ210は、第2演算値Pに2を乗じ、入力アクティベーションデータ(Aoriginal)の長さを差し引く演算を行い、第3演算値を獲得することができる。ここで、入力アクティベーションデータ(Aoriginal)の長さは、8であり、第3演算値は、-2である。プロセッサ210は、第3演算値に距離ベクトル(d[0]=1)を乗じ、入力アクティベーションデータ(Aoriginal)と加重値データ(Woriginal)との内積演算を行うことができる。内積演算値は、-2である。
ブロック1050で計算された前記内積演算値-2は、入力アクティベーションデータ(Aoriginal)と加重値データ(Woriginal)との内積演算の結果と同一であることが分かる。
図11は、一実施形態により、入力アクティベーションデータが2ビットであり、加重値データが1ビットである場合、内積演算値を獲得する過程について説明するための図面である。
ブロック1110を参照すれば、入力アクティベーションデータが2ビットであるならば、入力アクティベーションデータに係わる距離ベクトルdは、[1,2]でもある。加重値データが1ビットであるならば、加重値データに係わる距離ベクトルdは、[1]でもある。
ブロック1120を参照すれば、プロセッサ210は、2ビットで量子化された入力アクティベーションデータ、及び1ビットで量子化された加重値データを獲得することができる。例えば、2ビットで量子化された入力アクティベーションデータ(Aoriginal)は、8個のベクトルで構成された[1,3,3,1,-3、-1,1,-1]でもある。1ビットで量子化された加重値データ(Woriginal)は、8個のベクトルで構成された[-1,1,-1,1,-1,1,-1,1]でもある。
ブロック1130を参照すれば、プロセッサ210は、入力アクティベーションデータ(Aoriginal)及び加重値データ(Woriginal)をそれぞれ二進化し、二進化入力アクティベーションデータベクトル(Abin)及び二進化加重値ベクトル(Wbin)を獲得することができる。
例えば、1ビットのデータが距離ベクトル(d=[1])によって量子化された場合、プロセッサ210は、量子化されたデータである-1を0(2)に二進化することができ、量子化されたデータである1を1(2)に二進化することができる。また、2ビットのデータが距離ベクトル(d=[1,2])によって量子化された場合、プロセッサ210は、量子化されたデータである-3を00(2)に二進化することができ、量子化されたデータである-1を01(2)に二進化することができ、量子化されたデータである1を10(2)に二進化することができ、量子化されたデータである3を11(2)に二進化することができる。
従って、プロセッサ210は、入力アクティベーションデータ(Aoriginal)である[1,3,3,1,-3,-1,1,-1]を二進化し、二進化入力アクティベーションデータベクトル(Abin)である[10(2),11(2),11(2),10(2),00(2),01(2),10(2),01(2)]を獲得することができる。プロセッサ210は、二進化入力アクティベーションデータベクトル(Abin)において、i番目ビットで構成された第i二進化入力アクティベーションベクトル(0≦i≦1、iは、整数である)を獲得することができる。ここで、0番目ビットで構成された二進化入力アクティベーションベクトル(Abin[0])は、[0,1,1,0,0,1,0,1]である。また、最初ビットで構成された二進化入力アクティベーションベクトル(Abin[1])は、[1,1,1,1,0,0,1,0]である。また、プロセッサ210は、加重値データ(Woriginal)である[-1,1,-1,1,-1,1,-1,1]を二進化し、二進化加重値ベクトル(Wbin)である[0,1,0,1,0,1,0,1]を獲得することができる。
ブロック1140を参照すれば、プロセッサ210は、第i二進化入力アクティベーションデータベクトル(Abin[i]、i=0,1)と二進化加重値ベクトル(Wbin)との間でXNOR演算を行い、第1演算ベクトル(M[k]、k=0,1)を獲得することができる。第1演算ベクトル(M[k])の個数は、入力アクティベーションデータが量子化されたビット数と、加重値データが量子化されたビット数とを乗じた値である。ここで、第1演算ベクトル(M[k])の個数は、2x1=2である。プロセッサ210は、Abin[0]とWbinとの間でXNORを演算し、M[0]を獲得することができる。ここで、M[0]は、[1,1,0,0,1,1,1,1]である。また、プロセッサ210は、Abin[1]とWbinとの間でXNORを演算し、M[1]を獲得することができる。ここで、M[1]は、[0,1,0,1,1,0,0,0]である。XNOR演算が行われた後、プロセッサ210は、2個の第1演算ベクトル(M[k])それぞれにpopcount演算を行い、2個の第2演算値(P(k)、k=0,1)を獲得することができる。P(0)は、6であり、P(1)は、3である。
ブロック1150を参照すれば、プロセッサ210は、第2演算値P及び第1演算ベクトルMに対応する距離ベクトルに基づき、入力アクティベーションデータ(Aoriginal)と加重値データ(Woriginal)との内積演算を行うことができる。
具体的には、プロセッサ210は、第2演算値(P(k)、i=0,1)に2を乗じ、入力アクティベーションデータ(Aoriginal)の長さを差し引く演算を行い、2個の第3演算値を獲得することができる。プロセッサ210は、第3演算値それぞれに、第3演算値獲得に基になった距離ベクトル(d[i]、i=0,1)を乗じた値を合算することにより、入力アクティベーションデータ(Aoriginal)と加重値データ(Woriginal)との内積演算を行うことができる。ブロック1150を参照すれば、内積演算値は、0である。
ブロック1150で計算された前記内積演算値0は、入力アクティベーションデータ(Aoriginal)と加重値データ(Woriginal)との内積演算の結果と同一であることが分かる。
図12は、一実施形態により、入力アクティベーションデータが2ビットであり、加重値データが2ビットである場合、内積演算値を獲得する過程について説明するための図面である。
ブロック1210を参照すれば、入力アクティベーションデータ及び加重値データが2ビットであるならば、入力アクティベーションデータに係わる距離ベクトルdは、[1,2]であり、加重値データに係わる距離ベクトルdは、[1,2]でもある。
ブロック1220を参照すれば、プロセッサ210は、2ビットで量子化された入力アクティベーションデータ、及び2ビットで量子化された加重値データを獲得することができる。例えば、2ビットで量子化された入力アクティベーションデータ(Aoriginal)は、8個のベクトルで構成された[1,3,3,1,-3,-1,1,-1]でもある。2ビットで量子化された加重値データ(Woriginal)は、8個のベクトルで構成された[-1,1,-1,-3,3,1,3,1]でもある。
ブロック1230を参照すれば、プロセッサ210は、入力アクティベーションデータ(Aoriginal)及び加重値データ(Woriginal)をそれぞれ二進化し、二進化入力アクティベーションデータベクトル(Abin)及び二進化加重値ベクトル(Wbin)を獲得することができる。
例えば、図11で説明したように、2ビットのデータが、距離ベクトル(d=[1,2])によって量子化された場合、プロセッサ210は、量子化されたデータである-3を00(2)に二進化することができ、量子化されたデータである-1を01(2)に二進化することができ、量子化されたデータである1を10(2)に二進化することができ、量子化されたデータである3を11(2)に二進化することができる。
従って、プロセッサ210は、入力アクティベーションデータ(Aoriginal)である[1,3,3,1,-3,-1,1,-1]を二進化し、二進化入力アクティベーションデータベクトル(Abin)である[10(2),11(2),11(2),10(2),00(2),01(2),10(2),01(2)]を獲得することができる。プロセッサ210は、二進化入力アクティベーションデータベクトル(Abin)から、i番目ビットで構成された第i二進化入力アクティベーションベクトル(0≦i≦1、iは、整数である)を獲得することができる。ここで、0番目ビットで構成された二進化入力アクティベーションベクトル(Abin[0])は、[0,1,1,0,0,1,0,1]である。また、最初ビットで構成された二進化入力アクティベーションベクトル(Abin[1])は、[1,1,1,1,0,0,1,0]である。
同様に、プロセッサ210は、加重値データ(Woriginal)である[-1,1,-1,-3,3,1,3,1]を二進化し、二進化加重値ベクトル(Wbin)である[01(2),10(2),01(2),00(2),11(2),10(2),11(2),10(2)]を獲得することができる。プロセッサ210は、二進化加重値ベクトル(Wbin)から、j番目ビットで構成された第j二進化加重値ベクトル(0≦j≦1、jは、整数である)を獲得することができる。ここで、0番目ビットで構成された二進化加重値ベクトル(Wbin[0])は、[1,0,1,0,1,0,1,0]である。また、最初ビットで構成された二進化加重値ベクトル(Wbin[1])は、[0,1,0,0,1,1,1,1]である。
ブロック1240を参照すれば、プロセッサ210は、第i二進化入力アクティベーションデータベクトル(Abin[i]、i=0,1)と二進化加重値ベクトル(Wbin[j]、j=0,1)との間でXNOR演算を行い、第1演算ベクトル(M[k]、k=0,1,2,3)を獲得することができる。第1演算ベクトル(M[k])の個数は、入力アクティベーションデータが量子化されたビット数と、加重値データが量子化されたビット数とを乗じた値である。ここで、第1演算ベクトル(M[k])の個数は、2x2=4である。
プロセッサ210は、Abin[0]とWbin[0]との間でXNORを演算し、M[0]を獲得することができる。ここで、M[0]は、[0,0,1,1,0,0,0,0]である。プロセッサ210は、Abin[0]とWbin[1]との間でXNORを演算し、M[1]を獲得することができる。ここで、M[1]は、[1,1,0,1,0,1,0,1]である。プロセッサ210は、Abin[1]とWbin[0]との間でXNORを演算し、M[2]を獲得することができる。ここで、M[2]は、[1,0,1,0,0,1,1,1]である。プロセッサ210は、Abin[1]とWbin[1]との間でXNORを演算し、M[3]を獲得することができる。ここで、M[3]は、[0,1,0,0,0,0,1,0]である。
XNOR演算が行われた後、プロセッサ210は、4個の第1演算ベクトル(M[k]、k=0,1,2,3)それぞれにpopcount演算を行い、4個の第2演算値(P(k)、k=0,1,2,3)を獲得することができる。P(0)は、2であり、P(1)は、5であり、P(2)は、5であり、P(3)は、2である。
ブロック1250を参照すれば、プロセッサ210は、第2演算値P及び第1演算ベクトルMに対応する距離ベクトルに基づき、入力アクティベーションデータ(Aoriginal)と加重値データ(Woriginal)との内積演算を行うことができる。
具体的には、プロセッサ210は、第2演算値(P(k)、i=0,1,2,3)に2を乗じ、入力アクティベーションデータ(Aoriginal)の長さを差し引く演算を行い、4個の第3演算値を獲得することができる。プロセッサ210は、第3演算値それぞれに第3演算値獲得に基になった距離ベクトル(d[i]、i=0,1、d[j]、j=0,1)を乗じた値を合算することにより、入力アクティベーションデータ(Aoriginal)と加重値データ(Woriginal)との内積演算を行うことができる。ブロック1250を参照すれば、内積演算値は、-12である。
ブロック1250で計算された前記内積演算値-12は、入力アクティベーションデータ(Aoriginal)と加重値データ(Woriginal)との内積演算の結果と同一であるということが分かる。
図13は、一実施形態により、コンボリューション演算を行う方法について説明するためのフローチャートである。
図13を参照すれば、段階S1310において、コンボリューション演算を行う装置(以下、コンボリューション演算装置10)は、入力イメージから、第1ビットで量子化された入力アクティベーションデータを獲得することができる。
例えば、コンボリューション演算装置10は、第1ビットと同一距離を有する第1距離ベクトルに基づき、第1ビットで表現される二進数を、量子化されたデータにマッピングすることができる。コンボリューション演算装置10は、マッピングされた結果をメモリ220に保存することができる。コンボリューション演算装置10は、マッピングされた結果及びコンボリューション演算の単位に基づき、イメージから、第1ビットで量子化された入力アクティベーションデータを獲得することができる。
段階S1320において、コンボリューション演算装置10は、コンボリューションニューラルネットワークを介して学習されたパラメータの値を示す、第2ビットで量子化された加重値データを獲得することができる。
例えば、コンボリューション演算装置10は、第2ビットと同一距離を有する第2距離ベクトルに基づき、第2ビットで表現される二進数を、量子化されたデータにマッピングすることができる。コンボリューション演算装置10は、マッピングされた結果をメモリ220に保存することができる。コンボリューション演算装置10は、マッピングされた結果及びコンボリューション演算の単位に基づき、コンボリューションニューラルネットワークを介して学習されたパラメータの値から、第2ビットで量子化された加重値データを獲得することができる。
段階S1330において、コンボリューション演算装置10は、入力アクティベーションデータ及び加重値データそれぞれを二進化し、二進化入力アクティベーションベクトル及び二進化加重値ベクトルを獲得することができる。
コンボリューション演算装置10は、入力アクティベーションデータ内のコンポーネントを二進化し、二進化されたコンポーネントそれぞれにおいて、i番目ビットで構成された第i二進化入力アクティベーションベクトル(0≦i≦n-1、iは、整数であり、第1ビットは、nビットである)を獲得することができる。
また、コンボリューション演算装置10は、加重値データ内のコンポーネントを二進化し、二進化されたコンポーネントそれぞれにおいて、j番目ビットで構成された第j二進化加重値ベクトル(0≦j≦m-1、jは、整数であり、第2ビットは、mビットである)を獲得することができる。
段階S1340において、コンボリューション演算装置10は、二進化入力アクティベーションベクトルと二進化加重値ベクトルとの所定二進演算を行うことができる。コンボリューション演算装置10は、第1ビット及び第2ビットそれぞれと同一長を有する距離ベクトルを獲得することができる。コンボリューション演算装置10は、二進化入力アクティベーションベクトルと二進化加重値ベクトルとの所定の二進演算及び距離ベクトルに基づき、入力アクティベーションデータと加重値データとの内積演算を行うことができる。
コンボリューション演算装置10は、第i二進化入力アクティベーションベクトルと第j二進化加重値ベクトルとの間でXNOR演算を行い、nxm個の第1演算ベクトルを獲得することができる。コンボリューション演算装置10は、nxm個の第1演算ベクトルにpopcount演算を行い、nxm個の第2演算値を獲得することができる。コンボリューション演算装置10は、nxm個の第2演算値及びnxm個の第1演算ベクトルに対応する距離ベクトルに基づき、入力アクティベーションデータと加重値データとの内積演算を行うことができる。
具体的には、コンボリューション演算装置10は、nxm個の第2演算値それぞれにおいて2を乗じ、入力アクティベーションデータの長さを差し引く演算を行い、nxm個の第3演算値を獲得することができる。コンボリューション演算装置10は、nxm個の第3演算値それぞれの獲得に基になった距離ベクトルの値を、nxm個の第3演算値と乗じ、nxm個の乗じた値を合算することにより、入力アクティベーションデータと加重値データとの内積演算を行うことができる。
コンボリューション演算装置10は、入力イメージから獲得される所定個数の入力アクティベーションデータについて、内積演算を行うことにより、所定個数の出力アクティベーションデータを獲得することができる。
コンボリューション演算装置10は、コンボリューションニューラルネットワーク上の第1レイヤから出力された所定個数の出力アクティベーションデータを、コンボリューションニューラルネットワーク上の第2レイヤの入力アクティベーションデータとして適用することができる。
段階S1350において、コンボリューション演算装置10は、内積演算によってなされた結果を出力アクティベーションデータとして保存することができる。
なお、前述のコンボリューション演算を行う方法に係わる実施形態は、コンボリューション演算装置10において、コンボリューション演算を行う方法を遂行するように、コンピュータ可読記録媒体に保存されたコンピュータプログラム形態によっても提供される。コンピュータ可読記録媒体は、ROM(read only memory)、RAM(random access memory)、フラッシュメモリ、CD-ROMs、CD-Rs、CD+Rs、CD-RWs、CD+RWs、DVD-ROMs、DVD-Rs、DVD+Rs、DVD-RWs、DVD+RWs、DVD-RAMs、BD-ROMs、BD-Rs、BD-RLTHs、BD-REs、マグネチックテープ、フロッピーディスク、光磁気データ保存装置、光学データ保存装置、ハードディスク、SSD(solid state drive)、及び命令語またはソフトウェア、関連データ、データファイル、及びデータ構造を保存することができ、プロセッサやコンピュータが命令語を実行するように、プロセッサやコンピュータに、命令語またはソフトウェア、関連データ、データファイル、及びデータ構造を提供することができるいかなる装置でもよい。
以上のように、本実施形態が、たとえ限定された実施形態と図面とによって説明されたにしても、当該技術分野で当業者であるならば、前述のところから多様な修正及び変形が可能である。例えば、説明された技術が、説明された方法と異なる順序で遂行され、かつ/または説明されたシステム、構造、装置、回路のような構成要素が、説明された方法と異なる形態で結合されたり組み合わされたりし、他の構成要素または均等物によって代置されたり置換されたりされても、適切な結果が達成されるのである。
従って、本発明の範囲は、説明された実施形態に限って決められるものではなく、特許請求の範囲だけではなく、該特許請求の範囲と均等なものなどによっても定められるのである。
10 コンボリューション装置
210 プロセッサ
220 メモリ

Claims (13)

  1. コンボリューションニューラルネットワークでコンボリューション演算を行う方法において、
    第1ビット幅と同じ距離を有する第1距離ベクトルに基づいて、入力イメージに係わる前記第1ビットで量子化された入力アクティベーションデータを獲得する段階と、
    第2ビット幅と同じ距離を有する第2距離ベクトルに基づいて、前記コンボリューションニューラルネットワークを介して学習されたパラメータの値を示す、前記第2ビットで量子化された加重値データを獲得する段階と、
    前記入力アクティベーションデータ及び加重値データそれぞれを二進化し、二進化入力アクティベーションベクトル及び二進化加重値ベクトルを獲得する段階と、
    前記二進化入力アクティベーションベクトルと前記二進化加重値ベクトルとの二進演算に基づいて獲得された演算値それぞれに、前記演算値の算出に基となった前記第1距離ベクトルのコンポーネントと前記第2距離ベクトルのコンポーネントとを乗じ、乗算した結果値を合算することにより、前記入力アクティベーションデータと前記加重値データとの内積演算を行う段階と、
    前記内積演算によってなされた結果を出力アクティベーションデータとして保存する段階と、
    を含み、
    nビットのデータに係わる距離ベクトルのコンポーネントは、n個で構成され、前記nビットで量子化されたデータは、前記距離ベクトルのn個のコンポーネント値のそれぞれに、既設定の値のうち1つの値を乗じた値の和に基づいて算出され、
    前記入力アクティベーションデータ及び加重値データそれぞれを二進化し、二進化入力アクティベーションベクトル及び二進化加重値ベクトルを獲得する段階は、
    前記入力アクティベーションデータ内のコンポーネントを二進化し、前記二進化されたコンポーネントそれぞれにおいてi番目ビットで構成された第i二進化入力アクティベーションベクトル(0≦i≦n-1、iは、整数であり、前記第1ビット幅は、nビットである)を獲得する段階と、
    前記加重値データ内のコンポーネントを二進化し、前記二進化されたコンポーネントそれぞれにおいてj番目ビットで構成された第j二進化加重値ベクトル(0≦j≦m-1、jは、整数であり、前記第2ビット幅は、mビットである)を獲得する段階と、
    を含む、方法。
  2. 前記入力アクティベーションデータを獲得する段階は、
    記第1距離ベクトルに基づき、前記第1ビットで表現される二進数を、量子化されたデータにマッピングする段階と、
    前記マッピングされた結果、及び前記コンボリューション演算の単位に基づき、前記入力イメージから、前記第1ビットで量子化された入力アクティベーションデータを獲得する段階と、
    を含む、請求項1に記載の方法。
  3. 前記加重値データを獲得する段階は、
    記第2距離ベクトルに基づき、前記第2ビットで表現される二進数を、量子化されたデータにマッピングする段階と、
    前記マッピングされた結果、及び前記コンボリューション演算の単位に基づき、前記コンボリューションニューラルネットワークを介して学習されたパラメータの値から、前記第2ビットで量子化された加重値データを獲得する段階と、
    を含む、請求項1に記載の方法。
  4. 前記入力アクティベーションデータと加重値データとの内積演算を行う段階は、
    前記第i二進化入力アクティベーションベクトルと前記第j二進化加重値ベクトルとの間でXNOR演算を行い、nxm個の第1演算ベクトルを獲得する段階と、
    前記nxm個の第1演算ベクトルにpopcount演算を行い、nxm個の第2演算値を獲得する段階と、
    前記nxm個の第2演算値、及び前記nxm個の第1演算ベクトルに対応する距離ベクトルに基づき、前記入力アクティベーションデータと加重値データとの内積演算を行う段階と、
    を含む、請求項に記載の方法。
  5. 前記nxm個の第2演算値、及び前記nxm個の第1演算ベクトルに対応する距離ベクトルに基づき、前記入力アクティベーションデータと加重値データとの内積演算を行う段階は、
    前記nxm個の第2演算値それぞれで2を乗じ、前記入力アクティベーションデータの長さを差し引く演算を行い、nxm個の第3演算値を獲得する段階と、
    前記nxm個の第3演算値それぞれを獲得するのに基になった距離ベクトルの値を、前記nxm個の第3演算値と乗じ、nxm個の乗じた値を合算することにより、前記入力アクティベーションデータと加重値データとの内積演算を行う段階と、
    を含む、請求項に記載の方法。
  6. 前記入力イメージから獲得される所定個数の入力アクティベーションデータについて、前記内積演算を行うことにより、所定個数の出力アクティベーションデータを獲得する段階をさらに含む、
    請求項1に記載の方法。
  7. 前記コンボリューションニューラルネットワーク上の第1レイヤから出力された前記所定個数の出力アクティベーションデータを、前記コンボリューションニューラルネットワーク上の第2レイヤの入力アクティベーションデータとして適用する段階をさらに含む、
    請求項に記載の方法。
  8. コンボリューションニューラルネットワークでコンボリューション演算を行う装置において、
    少なくとも1つのプログラムが保存されたメモリと、
    前記少なくとも1つのプログラムが実行されることにより、コンボリューションニューラルネットワークでコンボリューション演算を行うプロセッサと、
    を含み、
    前記プロセッサは、
    第1ビット幅と同じ距離を有する第1距離ベクトルに基づいて、入力イメージに係わる前記第1ビットで量子化された入力アクティベーションデータを獲得し、
    第2ビット幅と同じ距離を有する第2距離ベクトルに基づいて、前記コンボリューションニューラルネットワークを介して学習されたパラメータの値を示す、前記第2ビットで量子化された加重値データを獲得し、
    前記入力アクティベーションデータ及び加重値データそれぞれを二進化し、二進化入力アクティベーションベクトル及び二進化加重値ベクトルを獲得し、
    前記二進化入力アクティベーションベクトルと前記二進化加重値ベクトルとの二進演算に基づいて獲得された演算値それぞれを、前記演算値の算出に基礎になった前記第1距離ベクトルのコンポーネントと前記第2距離ベクトルのコンポーネントを乗じ、乗算した結果値を合算することで、前記入力アクティベーションデータと前記加重値データとの内積演算を行い、
    前記内積演算によってなされた結果を、前記メモリに出力アクティベーションデータとして保存し、
    nビットのデータに係わる距離ベクトルのコンポーネントは、n個で構成され、前記nビットに量子化されたデータは、前記距離ベクトルのn個のコンポーネント値のそれぞれに、既設定の値のうち1つの値を乗じた値の和に基づいて算出され、
    前記プロセッサは、
    前記入力アクティベーションデータ内のコンポーネントを二進化し、前記二進化したコンポーネントそれぞれにおいてi番目ビットで構成された第i二進化入力アクティベーションベクトル(0≦i≦n-1、iは、整数であり、前記第1ビット幅は、nビットである)を獲得し、
    前記加重値データ内のコンポーネントを二進化し、前記二進化したコンポーネントそれぞれにおいてj番目ビットで構成された第j二進化加重値ベクトル(0≦j≦m-1、jは、整数であり、前記第2ビット幅は、mビットである)を獲得する、装置。
  9. 前記プロセッサは、
    記第1距離ベクトルに基づき、前記第1ビットで表現される二進数を、量子化されたデータにマッピングし、
    前記マッピングされた結果、及び前記コンボリューション演算の単位に基づき、前記入力イメージから、前記第1ビットで量子化された入力アクティベーションデータを獲得する、
    請求項に記載の装置。
  10. 前記プロセッサは、
    記第2距離ベクトルに基づき、前記第2ビットで表現される二進数を、量子化されたデータにマッピングし、
    前記マッピングされた結果、及び前記コンボリューション演算の単位に基づき、前記コンボリューションニューラルネットワークを介して学習されたパラメータの値から、前記第2ビットで量子化された加重値データを獲得する、
    請求項に記載の装置。
  11. 前記プロセッサは、
    前記第i二進化入力アクティベーションベクトルと前記第j二進化加重値ベクトルとの間でXNOR演算を行い、nxm個の第1演算ベクトルを獲得し、
    前記nxm個の第1演算ベクトルにpopcount演算を行い、nxm個の第2演算値を獲得し、
    前記nxm個の第2演算値、及び前記nxm個の第1演算ベクトルに対応する距離ベクトルに基づき、前記入力アクティベーションデータと加重値データとの内積演算を行う、
    請求項に記載の装置。
  12. 前記プロセッサは、
    前記nxm個の第2演算値それぞれで2を乗じ、前記入力アクティベーションデータの長さを差し引く演算を行い、nxm個の第3演算値を獲得し、
    前記nxm個の第3演算値それぞれを獲得するのに基になった距離ベクトルの値を、前記nxm個の第3演算値と乗じ、nxm個の乗じた値を合算することにより、前記入力アクティベーションデータと加重値データとの内積演算を行う、
    請求項11に記載の装置。
  13. 第1ビット幅と同じ距離を有する第1距離ベクトルに基づいて前記第1ビットで量子化された入力アクティベーションデータと、第2ビット幅と同じ距離を有する第2距離ベクトルに基づいて前記第2ビットで量子化された加重値データとの内積演算によってなされた結果を示す出力アクティベーションデータを保存するアドレスをローディングする段階と、
    前記入力アクティベーションデータ内のコンポーネントが二進化された二進化入力アクティベーションベクトルをローディングする段階と、
    前記二進化入力アクティベーションベクトルと、前記加重値データ内のコンポーネントが二進化された二進化加重値ベクトルとの二進演算に基づいて獲得された演算値それぞれを、前記演算値の算出に基礎になった前記第1距離ベクトルのコンポーネントと前記第2距離ベクトルのコンポーネントとを乗じ、乗算した結果値を合算することで、前記入力アクティベーションデータと前記加重値データとの内積演算を行う段階と、
    前記内積演算によってなされた結果を、前記ローディングされたアドレスに前記出力アクティベーションデータとして保存する段階と、
    を含み、
    nビットのデータに係わる距離ベクトルのコンポーネントは、n個で構成され、前記nビットで量子化されたデータは、前記距離ベクトルのn個のコンポーネント値のそれぞれに、既設定の値のうち1つの値を乗じた値の和に基づいて算出され、
    前記入力アクティベーションデータ及び加重値データそれぞれを二進化し、二進化入力アクティベーションベクトル及び二進化加重値ベクトルを獲得する段階は、
    前記入力アクティベーションデータ内のコンポーネントを二進化し、前記二進化したコンポーネントそれぞれにおいてi番目ビットで構成された第i二進化入力アクティベーションベクトル(0≦i≦n-1、iは、整数であり、前記第1ビット幅は、nビットである)を獲得する段階と、
    前記加重値データ内のコンポーネントを二進化し、前記二進化したコンポーネントそれぞれにおいてj番目ビットで構成された第j二進化加重値ベクトル(0≦j≦m-1、jは、整数であり、前記第2ビット幅は、mビットである)を獲得する段階と、
    を含む、コンボリューションニューラルネットワークでコンボリューション演算を行う方法をプロセッサと結合されて実行させるために媒体に保存されたコンピュータプログラム。
JP2020132496A 2019-08-29 2020-08-04 コンボリューションニューラルネットワークでコンボリューション演算を加速させるプロセッサ、及び該プロセッサの動作方法 Active JP7071451B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020190106638A KR102345409B1 (ko) 2019-08-29 2019-08-29 컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 가속하는 프로세서 및 프로세서의 동작 방법
KR10-2019-0106638 2019-08-29

Publications (2)

Publication Number Publication Date
JP2021034036A JP2021034036A (ja) 2021-03-01
JP7071451B2 true JP7071451B2 (ja) 2022-05-19

Family

ID=72290799

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020132496A Active JP7071451B2 (ja) 2019-08-29 2020-08-04 コンボリューションニューラルネットワークでコンボリューション演算を加速させるプロセッサ、及び該プロセッサの動作方法

Country Status (4)

Country Link
US (1) US11443134B2 (ja)
EP (1) EP3792834A1 (ja)
JP (1) JP7071451B2 (ja)
KR (1) KR102345409B1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11854536B2 (en) 2019-09-06 2023-12-26 Hyperconnect Inc. Keyword spotting apparatus, method, and computer-readable recording medium thereof
TWI737228B (zh) * 2020-03-20 2021-08-21 國立清華大學 基於記憶體內運算電路架構之量化方法及其系統
KR102507855B1 (ko) * 2021-05-12 2023-03-09 한국외국어대학교 연구산학협력단 고속 연산이 가능한 딥러닝 신경망 장치
US20230143430A1 (en) * 2021-11-05 2023-05-11 Adobe Inc. Image Localizability Classifier
KR20230173840A (ko) 2022-06-20 2023-12-27 동국대학교 산학협력단 효율적인 미분 계산을 이용한 이진 뉴럴 네트워크 학습 방법 및 장치
KR102596769B1 (ko) * 2022-07-12 2023-11-02 오픈엣지테크놀로지 주식회사 신경망 설계방법 및 이를 위한 장치

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180039886A1 (en) 2016-08-05 2018-02-08 Xilinx, Inc. Binary neural networks on progammable integrated circuits

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100911725B1 (ko) 2007-08-09 2009-08-10 한국과학기술원 언어청정로봇
US10762894B2 (en) 2015-03-27 2020-09-01 Google Llc Convolutional neural networks
US10311342B1 (en) * 2016-04-14 2019-06-04 XNOR.ai, Inc. System and methods for efficiently implementing a convolutional neural network incorporating binarized filter and convolution operation for performing image classification
US10224058B2 (en) 2016-09-07 2019-03-05 Google Llc Enhanced multi-channel acoustic models
CN107169563B (zh) * 2017-05-08 2018-11-30 中国科学院计算技术研究所 应用于二值权重卷积网络的处理系统及方法
KR102283972B1 (ko) 2017-07-14 2021-08-02 주식회사 하이퍼커넥트 통신 장치, 서버 및 동작 방법
US20210166106A1 (en) * 2017-12-12 2021-06-03 The Regents Of The University Of California Residual binary neural network
US11315570B2 (en) 2018-05-02 2022-04-26 Facebook Technologies, Llc Machine learning-based speech-to-text transcription cloud intermediary
US20200097818A1 (en) * 2018-09-26 2020-03-26 Xinlin LI Method and system for training binary quantized weight and activation function for deep neural networks
US20200210759A1 (en) * 2018-12-31 2020-07-02 Nanjing Iluvatar CoreX Technology Co., Ltd. (DBA "Iluvatar CoreX Inc. Nanjing") Methods and apparatus for similar data reuse in dataflow processing systems
US11669585B2 (en) * 2019-06-25 2023-06-06 Apple Inc. Optimizing binary convolutional neural networks
US11854536B2 (en) 2019-09-06 2023-12-26 Hyperconnect Inc. Keyword spotting apparatus, method, and computer-readable recording medium thereof

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180039886A1 (en) 2016-08-05 2018-02-08 Xilinx, Inc. Binary neural networks on progammable integrated circuits

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
COWAN, Meghan et. al.,Automating Generation of Low Precision Deep Learning Operators,arXiv.org,米国,Cornell University,2018年10月25日,pp.1-10,https://arxiv.org/pdf/1810.11066.pdf
LIANG, Shuang et. al.,FP-BNN: Binarized neural network on FPGA,Neurocomputing,NL,Elsevier,2018年01月31日,Vol. 275,pp.1072-1086,https://www.doc.ic.ac.uk/~wl/papers/17/neuro17sl0.pdf,https://doi.org/10.1016/j.neucom.2017.09.046
UMUROGLU, Yaman et. al.,Work-in-Progress: Towards Efficient Quantized Neural Network Inference on Mobile Devices,CASES'17: Proceedings of the 2017 International Conference on Compilers, Architectures and Synthesis for Embedded Systems Companion,米国,ACM,2017年10月15日,No.18,pp.1-2,https://dl.acm.org/doi/pdf/10.1145/3125501.3125528

Also Published As

Publication number Publication date
US11443134B2 (en) 2022-09-13
JP2021034036A (ja) 2021-03-01
US20210064920A1 (en) 2021-03-04
KR20210026191A (ko) 2021-03-10
KR102345409B1 (ko) 2021-12-30
EP3792834A1 (en) 2021-03-17

Similar Documents

Publication Publication Date Title
JP7071451B2 (ja) コンボリューションニューラルネットワークでコンボリューション演算を加速させるプロセッサ、及び該プロセッサの動作方法
JP7525237B2 (ja) 効率的パラメータ・アップデートのための削減された精度パラメータを有する機械学習ハードウェア
JP5957126B1 (ja) 秘密計算装置、秘密計算方法、およびプログラム
US10802956B2 (en) Accessing prologue and epilogue data
CN112292816A (zh) 处理核心数据压缩和存储系统
CN111352656B (zh) 使用按位运算的神经网络设备和方法
JP2020506454A (ja) ハードウェアにおける平均プーリングの実行
KR102075848B1 (ko) 다항식 연산 최적화 처리 장치, 다항식 연산 최적화 처리 방법 및 기록매체
Grigoras et al. Cask: Open-source custom architectures for sparse kernels
JP2024517596A (ja) 準同型暗号化システムにおけるインメモリ計算
US10230376B2 (en) Apparatus and method for performing division
JP4960894B2 (ja) 楕円曲線の点圧縮装置、楕円曲線の点展開装置、それらの方法及びプログラム
KR20060044980A (ko) 랜덤화된 신호 변환 및 적용을 제공하는 방법
JP7020555B2 (ja) 情報処理装置、情報処理方法、及びプログラム
JP6067890B2 (ja) 要素複製装置、要素複製方法、およびプログラム
TW202333041A (zh) 執行浮點運算的系統及方法
US20190377707A1 (en) Bit-serial linear algebra processor
Thomas The table-Hadamard GRNG: An area-efficient FPGA Gaussian random number generator
WO2019232159A1 (en) Modulus calculation that leverages computer architecture and/or operand clustering
CN114730295A (zh) 基于模式的高速缓存块压缩
JP2020052569A (ja) 情報処理装置、情報処理方法、及びプログラム
JP2009529171A (ja) ブロック演算のためのチップメモリ上におけるアドレス指定
US20240184533A1 (en) Apparatus and method with data processing
WO2021149104A1 (ja) 秘密計算装置、秘密計算方法、およびプログラム
JP6810437B1 (ja) 情報処理装置、プログラム、及び情報処理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200804

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210818

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210917

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211217

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220408

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220506

R150 Certificate of patent or registration of utility model

Ref document number: 7071451

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150