(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-30
(45)【発行日】2023-12-08
(54)【発明の名称】ブロック分割を伴うニューラルネットワークを復号する方法、装置及びプログラム
(51)【国際特許分類】
G06N 3/02 20060101AFI20231201BHJP
H04N 19/70 20140101ALI20231201BHJP
H04N 19/96 20140101ALI20231201BHJP
H03M 7/30 20060101ALI20231201BHJP
【FI】
G06N3/02
H04N19/70
H04N19/96
H03M7/30
(21)【出願番号】P 2022521704
(86)(22)【出願日】2021-04-19
(86)【国際出願番号】 US2021027926
(87)【国際公開番号】W WO2021216429
(87)【国際公開日】2021-10-28
【審査請求日】2022-04-11
(32)【優先日】2020-04-24
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-06-22
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-09-16
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-09-17
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2021-04-15
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】520353802
【氏名又は名称】テンセント・アメリカ・エルエルシー
(74)【代理人】
【識別番号】100110364
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100150197
【氏名又は名称】松尾 直樹
(72)【発明者】
【氏名】ウェイ・ワン
(72)【発明者】
【氏名】ウェイ・ジアン
(72)【発明者】
【氏名】シャン・リュウ
【審査官】円子 英紀
(56)【参考文献】
【文献】特開2019-201332(JP,A)
【文献】米国特許出願公開第2019/0394477(US,A1)
【文献】峯澤 彰,「ニューラルネットワークモデル圧縮の国際標準NNR」,映像情報メディア学会誌,日本,一般社団法人 映像情報メディア学会,Vol.75, No.2,第246-250頁,ISSN:1342-6907
【文献】"Working Draft 4 of Compression of neural networks for multimedia content description and analysis",No. N19225,[online], ISO/IEC JTC 1/SC 29/WG 11,2020年05月15日,Pages 1-48,[令和5年3月23日検索], インターネット,<URL: https://mpeg.chiariglione.org/standards/mpeg-7/compression-neural-networks-multimedia-content-description-and-analysis/working> and <URL: https://mpeg.chiariglione.org/sites/default/files/files/standards/parts/docs/w19225_NN_compression_WD4.zip> and <URL: https://mpeg.chiariglione.org/meetings/130>
【文献】"Use cases and requirements for neural network compression for multimedia content description and an,No. N18731,[online], ISO/IEC JTC 1/SC 29/WG 11,2019年07月12日,Pages 1-38,[令和5年3月23日検索], インターネット,<URL: https://mpeg.chiariglione.org/standards/mpeg-7/compression-neural-networks-multimedia-content-description-and-analysis/use-cases> and <URL: https://mpeg.chiariglione.org/sites/default/files/files/standards/parts/docs/w18731.zip> and <URL: https://mpeg.chiariglione.org/meetings/127>
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
G06F 18/00-18/40
H04N 7/12
H04N 19/00-19/98
H03M 3/00- 9/00
(57)【特許請求の範囲】
【請求項1】
デコーダが実行するニューラルネットワークを復号する方法であって、
ニューラルネットワークの圧縮ニューラルネットワーク表現のビットストリームから、圧縮ニューラルネットワーク表現(NNR)集約ユニットのNNR集約ユニットヘッダ内の第1のシンタックス要素を受信するステップであって、前記第1のシンタックス要素は、前記NNR集約ユニット内のテンソルを処理するための符号化ツリーユニット(CTU)走査順序を示す、ステップと、
前記第1のシンタックス要素によって示される前記CTU走査順序に基づいて前記NNR集約ユニット内の前記テンソルを再構築するステップと、
を含む、方法。
【請求項2】
前記第1のシンタックス要素の第1の値は、前記CTU走査順序が水平方向の第1のラスタ走査順序であることを示し、前記第1のシンタックス要素の第2の値は、前記CTU走査順序が垂直方向の第2のラスタ走査順序であることを示す、請求項1に記載の方法。
【請求項3】
前記ビットストリームから前記NNR集約ユニットの前記NNR集約ユニットヘッダ内の第2のシンタックス要素を受信するステップであって、前記第2のシンタックス要素は、前記NNR集約ユニット内の前記テンソルに対する量子化係数の最大ビット深度を示す、ステップ
をさらに含む、請求項1に記載の方法。
【請求項4】
前記NNR集約ユニット内の前記テンソルに対してCTUブロック分割が有効にされているかどうかを示す第3のシンタックス要素を受信するステップ
をさらに含む、請求項1に記載の方法。
【請求項5】
前記第3のシンタックス要素は、前記CTUブロック分割が前記ニューラルネットワークの層に対して有効にされているかどうかを指定するモデルごとのシンタックス要素、または前記CTUブロック分割が前記NNR集約ユニット内の前記テンソルに対して有効にされているかどうかを指定するテンソルごとのシンタックス要素である、請求項4に記載の方法。
【請求項6】
前記NNR集約ユニット内の前記テンソルについてのCTU次元を示すモデルごと、またはテンソルごとの第4のシンタックス要素を受信するステップ
をさらに含む、請求項1に記載の方法。
【請求項7】
任意のNNR集約ユニットを受信する前にNNRユニットを受信するステップであって、前記NNRユニットは、CTU分割が有効にされているかどうかを示す第5のシンタックス要素を含む、ステップ
をさらに含む、請求項1に記載の方法。
【請求項8】
請求項1から
7のいずれか一項に記載の方法を行うように構成された装置。
【請求項9】
コンピュータに、請求項1から
7のいずれか一項に記載の方法を実行させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本開示は、2021年4月15日に出願された米国特許出願第17/232,069号、「Neural Network Model Compression with Block Partitioning」、2020年4月24日に出願された米国仮出願第63/015,213号、「Block Definition and Usage for Neural Network Model Compression」、2020年6月22日に出願された米国仮出願第63/042,303号、「3D Pyramid Coding Method for Neural Network Model Compression」、2020年9月16日に出願された米国仮特許出願第63/079,310号、「Unification Based Coding Method for Neural Network Model Compression」、および2020年9月17日に出願された米国仮特許出願第63/079,706号、「Unification based Coding Method for Neural Network Model Compression」に対する優先権を主張するものである。先行出願の開示は、その全体が参照により本明細書に組み込まれる。
【0002】
本開示は、ニューラルネットワークモデルの圧縮/解凍に概ね関する実施形態を説明する。
【背景技術】
【0003】
本明細書で提供される背景技術の説明は、本発明の背景を一般的に提示することを目的としている。本発明者らの研究は、出願時に別の形で先行技術としての資格を有しない明細書の態様と同様に、背景技術に記載される範囲で、明示または黙示を問わず、本開示に対する先行技術として認めるものではない。
【0004】
コンピュータビジョン、画像認識、および音声認識の分野における様々な用途は、性能改善を達成するためにニューラルネットワークに依存している。ニューラルネットワークは、生物学的脳内のニューロンを大まかにモデル化する接続されたノード(ニューロンとも呼ばれる)の集合に基づいている。ニューロンは、複数の層に編成することができる。1つの層のニューロンは、直前および直後の層のニューロンに接続することができる。
【0005】
生物学的脳内のシナプスのような2つのニューロン間の接続は、一方のニューロンから他方のニューロンに信号を伝送することができる。信号を受信するニューロンは次いで、信号を処理し、他の接続されたニューロンに信号を送ることができる。いくつかの例では、ニューロンの出力を見つけるために、ニューロンへの入力は、入力からニューロンへの接続の重みによって重み付けされ、重み付けされた入力が合計されて重み付き和を生成する。重み付き和にバイアスが加えられてもよい。さらに、重み付き和はその後、活性化関数に通されて出力を生成する。
【発明の概要】
【課題を解決するための手段】
【0006】
本開示の態様は、ニューラルネットワークモデル圧縮/解凍の方法および装置を提供する。いくつかの例では、ニューラルネットワークモデル解凍の装置は処理回路を含む。処理回路は、NNR集約ユニットの圧縮ニューラルネットワーク表現(NNR)集約ユニットヘッダ内の第1のシンタックス要素を、ニューラルネットワークの圧縮ニューラルネットワーク表現のビットストリームから受信するように構成することができる。第1のシンタックス要素は、NNR集約ユニット内のテンソルを処理するための符号化ツリーユニット(CTU)走査順序を示すことができる。NNR集約ユニット内のテンソルは、第1のシンタックス要素によって示されるCTU走査順序に基づいて再構築することができる。
【0007】
一実施形態では、第1のシンタックス要素の第1の値は、CTU走査順序が水平方向の第1のラスタ走査順序であることを示すことができ、第1のシンタックス要素の第2の値は、CTU走査順序が垂直方向の第2のラスタ走査順序であることを示す。一実施形態では、NNR集約ユニットのNNR集約ユニットヘッダ内の第2のシンタックス要素をビットストリームから受信することができる。第2のシンタックス要素は、NNR集約ユニット内のテンソルの量子化係数の最大ビット深度を示すことができる。
【0008】
一実施形態では、NNR集約ユニット内のテンソルに対してCTUブロック分割が有効にされているかどうかを示す第3のシンタックス要素を受信することができる。第3のシンタックス要素は、CTUブロック分割がニューラルネットワークの層に対して有効にされているかどうかを指定するモデルごとのシンタックス要素、またはCTUブロック分割がNNR集約ユニット内のテンソルに対して有効にされているかどうかを指定するテンソルごとのシンタックス要素とすることができる。
【0009】
一実施形態では、NNR集約ユニット内のテンソルについてのCTU次元を示すモデルごと、またはテンソルごとの第4のシンタックス要素を受信することができる。一実施形態では、NNRユニットは、任意のNNR集約ユニットを受信する前に受信され得る。NNRユニットは、CTU分割が有効にされているかどうかを示す第5のシンタックス要素を含むことができる。
【0010】
いくつかの例では、ニューラルネットワークモデル解凍の別の装置は処理回路を含む。処理回路は、圧縮ニューラルネットワーク表現のビットストリームから、第1の3次元符号化ツリーユニット(CTU3D)から分割された3次元符号化ユニット(CU3D)に関連付けられた1つまたは複数の第1のシンタックス要素を受信するように構成することができる。第1のCTU3Dは、ニューラルネットワーク内のテンソルから分割することができる。1つまたは複数の第1のシンタックス要素は、CU3Dが、複数の深さを含む3Dピラミッド構造に基づいて分割されていることを示すことができる。各深さは、1つまたは複数のノードに対応する。各ノードはノード値を有する。3Dピラミッド構造内のノードのノード値に対応する第2のシンタックス要素は、3Dピラミッド構造内のノードを走査するための幅優先走査順序でビットストリームから受信することができる。テンソルのモデルパラメータは、3Dピラミッド構造内のノードのノード値に対応する受信した第2のシンタックス要素に基づいて再構築することができる。様々な実施形態において、3Dピラミッド構造は、オクトツリー構造、ユニツリー構造、タグツリー構造、またはユニタグツリー構造のうちの1つである。
【0011】
一実施形態では、第2のシンタックス要素の受信は、3Dピラミッド構造の深さの開始の深さから開始する。開始の深さは、ビットストリーム内で示すことができる、またはデコーダにおいて推測することができる。一実施形態では、3Dピラミッド構造におけるノードのノード値を示す第2のシンタックス要素を受信するための開始の深さを示す第3のシンタックス要素を受信することができる。開始の深さが3Dピラミッド構造の最後の深さであるとき、テンソルのモデルパラメータは、非3Dピラミッドツリーベースの復号方法を使用してビットストリームから復号することができる。
【0012】
一実施形態では、3Dピラミッド構造におけるノードのノード値を示す第2のシンタックス要素を受信するための開始の深さを示す第3のシンタックス要素を受信することができる。開始の深さが3Dピラミッド構造の最後の深さである場合、第2のシンタックス要素の受信は、3Dピラミッド構造の深さの最後から2番目の深さから開始する。
【0013】
別の実施形態では、3Dピラミッド構造におけるノードのノード値を示す第2のシンタックス要素を受信するための開始の深さを示す第3のシンタックス要素を受信することができる。開始の深さが3Dピラミッド構造の最後の深さであり、かつ3Dピラミッド構造がユニツリー部エンコードおよびタグツリー部エンコードに関連付けられたユニタグツリー構造である場合、ユニツリー部エンコードについて、第2のシンタックス要素の受信は、3Dピラミッド構造の深さの最後から2番目の深さから開始し、および、タグツリー部エンコードの場合、第2のシンタックス要素の受信は、3Dピラミッド構造の深さの最後の深さから開始する。
【0014】
一実施形態では、1つまたは複数の第1のシンタックス要素が、CU3Dが3Dピラミッド構造に基づいて分割されていることを示す場合、依存量子化は無効にされる。一実施形態では、1つまたは複数の第1のシンタックス要素が、CU3Dが3Dピラミッド構造に基づいて分割されていることを示す場合、依存量子化構築プロセスを実行することができる。3Dピラミッド構造に基づくエンコードプロセス中にスキップされるテンソルのモデルパラメータは、依存量子化構築プロセスから除外される。
【0015】
一実施形態では、CU3Dのすべてのモデルパラメータが統一化されているかどうかを示すCU3Dに関連付けられた第4のシンタックス要素を受信することができる。一実施形態では、テンソルのカーネル内の第1の係数の前隣接係数の値としての0値は、カーネル内の第1の係数をエントロピー復号するためのコンテキストモデルを決定するために使用することができる。一実施形態では、ビットストリーム内のテンソルの第2のCTU3Dの幅または高さを示す1つまたは複数の第5のシンタックス要素を受信することができる。幅、高さ、または幅と高さの両方が1モデルパラメータである場合、ベースライン符号化方法に基づいて第2のCTU3Dのモデルパラメータを復号することを決定することができる。
【0016】
いくつかの例では、ニューラルネットワークモデル解凍の別の装置は処理回路を含む。処理回路は、ニューラルネットワークの圧縮ニューラルネットワーク表現のビットストリーム内のニューラルネットワークの層内のテンソルから分割されたCTU3Dに関連付けられた第1のシンタックス要素を受信するように構成することができる。第1のシンタックス要素は、CTU3Dに関連付けられたピラミッドツリー構造の最下部の深さにおけるすべての子ノードが統一化されているかどうかを示すことができる。CTU3Dは、第1のシンタックス要素が、CTU3Dに関連付けられたピラミッドツリー構造の最下部の深さにおけるすべての子ノードが統一化されていることを示す場合、3次元ユニツリー(3Dユニツリー)符号化方法に基づいて復号することができる。
【0017】
一実施形態では、ニューラルネットワークの層に関連付けられた第2のシンタックス要素をビットストリーム内で受信することができる。第2のシンタックス要素は、層がピラミッドツリー構造ベースの符号化方法を使用してエンコードされるかどうかを示すことができる。一実施形態では、同じ親ノードを共有しない最下部の深さにおける子ノードは、異なる統一化値を有する。
【0018】
一実施形態では、3Dユニツリー符号化方法の開始の深さは、ピラミッドツリー構造の最下部の深さであると推測することができる。一実施形態では、ピラミッドツリー構造の最下部の深さにおけるノードの統一化フラグはビットストリーム内でエンコードされない。一実施形態では、同じ親ノードを共有する最下部の深さにおけるすべての子ノードについてビットストリーム内でエンコードされた統一化値を受信することができる。同じ親ノードを共有する最下部の深さにおけるすべての子ノードの符号ビットを受信することができる。符号ビットは、ビットストリーム内の統一化値に続く。
【0019】
一実施形態では、同じ親ノードを共有する最下部の深さにおける子ノードの各グループの統一化値をビットストリームから受信することができる。同じ親ノードを共有する最下部の深さにおける子ノードの各グループ内の子ノードの符号ビットを受信することができる。
【0020】
一実施形態において、第1のシンタックス要素が、CTU3Dに関連付けられたピラミッドツリー構造の最下部の深さにおける子ノードのすべてが統一化されているわけではないことを示すことに応答して、CTU3Dは、3次元タグツリー(3Dタグツリー)符号化方法に基づいて復号することができる。一実施形態では、3Dタグツリー符号化方法の開始の深さは、ピラミッドツリー構造の最下部の深さであると推測することができる。
【0021】
一実施形態では、ピラミッドツリー構造の最下部の深さにおけるノードの値は、所定の走査順序に基づいてビットストリーム内でそれぞれエンコードされたピラミッドツリー構造の最下部の深さにおけるノードの値を受信すること、所定の走査順序に基づいてビットストリーム内のピラミッドツリー構造の最下部の深さにおけるノードの各々について、絶対値が非ゼロである場合に符号が続く絶対値を受信すること、または所定の走査順序に基づいてビットストリーム内のピラミッドツリー構造の最下部の深さにおけるノードの各々について絶対値を受信し、その後に、所定の走査順序に基づいてビットストリーム内のピラミッドツリー構造の最下部の深さにおいて、ノードが非ゼロ値を有する場合に、ノードの各々について符号を受信することのうちの1つに従って復号することができる。
【0022】
本開示の態様はまた、ニューラルネットワークモデル解凍のためにコンピュータによって実行されると、コンピュータにニューラルネットワークモデル解凍の方法を実行させる命令を格納する非一時的コンピュータ可読媒体を提供する。
【0023】
開示される主題のさらなる特徴、性質、および様々な利点は、以下の詳細な説明および添付の図面からより明らかになるであろう。
【図面の簡単な説明】
【0024】
【
図1】本開示の一実施形態による電子デバイス(130)のブロック図を示す図である。
【
図2】例示的な圧縮ニューラルネットワーク表現(NNR)ユニット(200)を示す図である。
【
図3】例示的な集約NNRユニット(300)を示す図である。
【
図4】例示的なNNRビットストリーム(400)を示す図である。
【
図5】例示的なNNRユニットシンタックスを示す図である。
【
図6】例示的なNNRユニットヘッダシンタックスを示す図である。
【
図7】例示的なNNR集約ユニットヘッダシンタックスを示す図である。
【
図8】例示的なNNRユニットペイロードシンタックスを示す図である。
【
図9】例示的なNNRモデルパラメータセットペイロードシンタックスを示す図である。
【
図10】モデルパラメータセットの例示的なシンタックスを示す図である。
【
図11】1つまたは複数の重みテンソルについての符号化ツリーユニット(CTU)走査順序のシグナリングを含む集約ユニットヘッダの例示的なシンタックスを示す図である。
【
図12】重みテンソルにおける走査重み係数のシンタックス例を示す図である。
【
図13】本開示のいくつかの実施形態による量子化重み係数の絶対値を復号するための一例を示す図である。
【
図14】垂直方向におけるラスタ走査を使用する適応型3次元CTU(CTU3D)/3次元符号化ユニット(CU3D)分割の2つの例を示す図である。
【
図15】3Dピラミッド構造に基づく例示的な分割プロセスを示す図である。
【
図16】本開示の実施形態による2つのスカラ量子化器を示す図である。
【
図17】本開示の一実施形態によるCTU分割の復号プロセス(1700)を示す図である。
【
図18】本開示の一実施形態による3Dピラミッド符号化の復号プロセス(1800)を示す図である。
【
図19】本開示の一実施形態による統一化ベースの符号化の復号プロセス(1900)を示す図である。
【
図20】本開示の一実施形態によるコンピュータシステムの概略図である。
【発明を実施するための形態】
【0025】
本開示の態様は、ニューラルネットワークモデルの圧縮/解凍のための様々な技術を提供する。これらの技術は、符号化ツリーユニット(CTU)ブロック分割、3Dピラミッド構造ベースの符号化、および統一化ベースの符号化に関する。
【0026】
人工ニューラルネットワークは、マルチメディア分析および処理、メディア符号化、データ分析、ならびに他の多くの分野における広範囲のタスクに採用することができる。人工ニューラルネットワークの使用の成功は、過去におけるものより、はるかに大きく複雑なニューラルネットワーク(深層ニューラルネットワーク、DNN)の処理の実現可能性、および大規模な訓練データセットの利用可能性に基づいている。結果として、訓練されたニューラルネットワークは、多数のモデルパラメータを含むことができ、非常に大きなサイズ(例えば、数百MB)をもたらす。モデルパラメータは、重み、バイアス、スケーリング係数、バッチ正規化(バッチノーム)パラメータなどの訓練されたニューラルネットワークの係数を含むことができる。これらのモデルパラメータは、モデルパラメータテンソルに編成することができる。モデルパラメータテンソルは、ニューラルネットワークの関連するモデルパラメータを一緒にグループ化する多次元構造(例えば、アレイまたは行列)を指すために使用される。例えば、ニューラルネットワーク内の層の係数は、利用可能な場合、重みテンソル、バイアステンソル、スケーリング係数テンソル、バッチノームテンソルなどにグループ化することができる。
【0027】
多くのアプリケーションは、特定の訓練されたネットワークインスタンスを潜在的により多くのデバイスに展開することを必要とし、これは処理能力およびメモリ(例えば、モバイルデバイスまたはスマートカメラ)の観点で、ならびに通信帯域幅の観点でも制限を有する可能性がある。これらのアプリケーションは、本明細書に開示されるニューラルネットワーク圧縮/解凍技術から利益を得ることができる。
【0028】
I.ニューラルネットワークベースのデバイスおよびアプリケーション
図1は、本開示の一実施形態による電子デバイス(130)のブロック図を示す。電子デバイス(130)は、ニューラルネットワークベースのアプリケーションを実行するように構成することができる。いくつかの実施形態では、電子デバイス(130)は、圧縮された(エンコードされた)ニューラルネットワークモデル(例えば、ビットストリームの形態のニューラルネットワークの圧縮表現)を受信し記憶する。電子デバイス(130)は、圧縮ニューラルネットワークモデルを解凍(または復号)してニューラルネットワークモデルを復元することができ、ニューラルネットワークモデルに基づくアプリケーションを実行することができる。いくつかの実施形態では、圧縮ニューラルネットワークモデルは、アプリケーションサーバ(110)などのサーバから提供される。
【0029】
図1の例では、アプリケーションサーバ(110)は、互いに結合された処理回路(120)、メモリ(115)、およびインターフェース回路(111)を含む。いくつかの例では、ニューラルネットワークは、適切に生成される、訓練される、または更新される。ニューラルネットワークは、ソースニューラルネットワークモデルとしてメモリ(115)に記憶することができる。処理回路(120)は、ニューラルネットワークモデルコーデック(121)を含む。ニューラルネットワークモデルコーデック(121)は、ソースニューラルネットワークモデルを圧縮し、圧縮ニューラルネットワークモデル(ニューラルネットワークの圧縮表現)を生成することができるエンコーダを含む。いくつかの例では、圧縮ニューラルネットワークモデルはビットストリームの形態である。圧縮ニューラルネットワークモデルは、メモリ(115)に記憶することができる。アプリケーションサーバ(110)は、圧縮ニューラルネットワークモデルをビットストリームの形態で、インターフェース回路(111)を介して電子デバイス(130)などの他のデバイスに提供することができる。
【0030】
電子デバイス(130)は、スマートフォン、カメラ、タブレットコンピュータ、ラップトップコンピュータ、デスクトップコンピュータ、ゲームヘッドセットなどの任意の適切なデバイスとすることができることに留意されたい。
【0031】
図1の例では、電子デバイス(130)は、互いに結合された処理回路(140)、キャッシュメモリ(150)、メインメモリ(160)、およびインターフェース回路(131)を含む。いくつかの例では、圧縮ニューラルネットワークモデルは、例えばビットストリームの形態でインターフェース回路(131)を介して電子デバイス(130)によって受信される。圧縮ニューラルネットワークモデルは、メインメモリ(160)に記憶される。
【0032】
処理回路(140)は、中央処理装置(CPU)、グラフィック処理装置(GPU)などの任意の適切な処理ハードウェアを含む。処理回路(140)は、ニューラルネットワークに基づいてアプリケーションを実行するための適切な構成要素を含み、ニューラルネットワークモデルコーデック(141)として構成された適切な構成要素を含む。ニューラルネットワークモデルコーデック(141)は、例えば、アプリケーションサーバ(110)から受信した圧縮ニューラルネットワークモデルを復号することができるデコーダを含む。一例では、処理回路(140)は、単一チップ(例えば、集積回路)を含み、単一チップ上には1つまたは複数のプロセッサが配置されている。別の例では、処理回路(140)は複数のチップを含み、各チップは1つまたは複数のプロセッサを含むことができる。
【0033】
いくつかの実施形態では、メインメモリ(160)は、比較的大きな記憶空間を有し、ソフトウェアコード、メディアデータ(例えば、ビデオ、オーディオ、画像など)、圧縮ニューラルネットワークモデルなどの様々な情報を記憶することができる。キャッシュメモリ(150)は、比較的小さい記憶空間を有するが、メインメモリ(160)と比較してはるかに速いアクセス速度を有する。いくつかの例では、メインメモリ(160)は、ハードディスクドライブ、ソリッドステートドライブなどを含むことができ、キャッシュメモリ(150)は、スタティックランダムアクセスメモリ(SRAM)などを含むことができる。一例では、キャッシュメモリ(150)は、例えばプロセッサチップ上に配置されたオンチップメモリとすることができる。別の例では、キャッシュメモリ(150)は、プロセッサチップとは別個の1つまたは複数のメモリチップ上に配置されたオフチップメモリとすることができる。一般に、オンチップメモリはオフチップメモリよりもアクセス速度が速い。
【0034】
いくつかの実施形態では、処理回路(140)がニューラルネットワークモデルを使用するアプリケーションを実行するとき、ニューラルネットワークモデルコーデック(141)は、圧縮ニューラルネットワークモデルを解凍してニューラルネットワークモデルを復元することができる。いくつかの例では、キャッシュメモリ(150)は十分に大きく、したがって、復元されたニューラルネットワークモデルをキャッシュメモリ(150)にバッファリングすることができる。次いで、処理回路(140)は、アプリケーションにおいて復元されたニューラルネットワークモデルを使用するためにキャッシュメモリ(150)にアクセスすることができる。別の例では、キャッシュメモリ(150)は、限られたメモリ空間(例えば、オンチップメモリ)を有し、圧縮ニューラルネットワークモデルは層ごとまたはブロックごとに解凍することができ、キャッシュメモリ(150)は、復元されたニューラルネットワークモデル層を層ごとまたはブロックごとにバッファリングすることができる。
【0035】
ニューラルネットワークモデルコーデック(121)およびニューラルネットワークモデルコーデック(141)は、任意の適切な技術によって実装することができることに留意されたい。いくつかの実施形態では、エンコーダおよび/またはデコーダは集積回路によって実装することができる。いくつかの実施形態では、エンコーダおよびデコーダは、非一時的コンピュータ可読媒体に格納されたプログラムを実行する1つまたは複数のプロセッサとして実装される場合がある。ニューラルネットワークモデルコーデック(121)およびニューラルネットワークモデルコーデック(141)は、以下に記載するエンコード機能および復号機能に従って実装することができる。
【0036】
本開示は、記憶および計算の両方を節約するために、ディープニューラルネットワーク(DNN)モデルなどのニューラルネットワークモデルをエンコードおよび復号するために使用することができる圧縮ニューラルネットワーク表現(NNR)のための技術を提供する。ディープニューラルネットワーク(DNN)は、セマンティック分類、ターゲット検出/認識、ターゲット追跡、ビデオ品質強化などの広範囲のビデオアプリケーションにおいて使用することができる。
【0037】
ニューラルネットワーク(または人工ニューラルネットワーク)は、一般に、入力層と出力層との間に複数の層を含む。いくつかの例では、ニューラルネットワーク内の層は、層の入力を層の出力に変える数学的操作に対応する。数学的操作は、線形関係または非線形関係であり得る。ニューラルネットワークは、層を通って移動して各出力の確率を計算することができる。このような各数学的操作は層と見なされ、複雑なDNNは多くの層を有することができる。いくつかの例では、層の数学的操作は、1つまたは複数のテンソル(例えば、重みテンソル、バイアステンソル、スケーリング係数テンソルバッチノームテンソルなど)によって表すことができる。
【0038】
II.ニューラルネットワークモデル圧縮のためのブロック定義および使用
1.高レベルシンタックス
いくつかの実施形態では、圧縮表現または符号化表現でニューラルネットワーク(モデル)を搬送するビットストリームのための高レベルシンタックスは、NNRユニットの概念に基づいて定義することができる。NNRユニットは、ニューラルネットワークデータおよび関連するメタデータを搬送するためのデータ構造である。NNRユニットは、ニューラルネットワークメタデータ、トポロジ情報、完全または部分層データ、フィルタ、カーネル、バイアス、量子化重み、テンソルなどに関する圧縮情報または非圧縮情報を搬送する。
【0039】
図2は、例示的なNNRユニット(200)を示す。示されるように、NNRユニット(200)は、以下のデータ要素を含むことができる。
-NNRユニットサイズ:このデータ要素は、NNRユニットサイズ自体を含む、NNRユニットの合計バイトサイズをシグナリングする。
-NNRユニットヘッダ:このデータ要素は、NNRユニットタイプおよび関連するメタデータに関する情報を含む。
NNRユニットペイロード:このデータ要素は、ニューラルネットワークに関連する圧縮データまたは非圧縮データを含む。
【0040】
図3は、例示的な集約NNRユニット(300)を示す。集約NNRユニット(300)は、そのペイロードにおいて複数のNNRユニットを搬送することができるNNRユニットである。集約NNRユニットは、互いに関連し、単一のNNRユニットの下での集約から利益を得るいくつかのNNRユニットのためのグループ化機構を提供する。
図4は、例示的なNNRビットストリーム(400)を示す。NNRビットストリーム(400)は、一連のNNRユニットを含むことができる。NNRビットストリーム内の最初のNNRユニットは、NNR開始ユニット(すなわち、タイプNNR_STRのNNRユニット)であり得る。
【0041】
図5は、例示的なNNRユニットシンタックスを示す。
図6は、例示的なNNRユニットヘッダシンタックスを示す。
図7は、例示的なNNR集約ユニットヘッダシンタックスを示す。
図8は、例示的なNNRユニットペイロードシンタックスを示す。
図9は、例示的なNNRモデルパラメータセットペイロードシンタックスを示す。
【0042】
2.再成形および走査順序
いくつかの例では、重みテンソルの次元は3以上(畳み込み層では4など)であり、重みテンソルは2次元(2D)テンソルに再成形することができる。一例では、重みテンソルの次元が2以下である場合(完全接続層またはバイアス層など)、再成形は実行されない。重みテンソルをエンコードするために、重みテンソル内の重み係数が特定の順序に従って走査される。いくつかの例では、重みテンソル内の重み係数は、例えば、各行について左から右へ、および最上行から最下行へ、行優先で走査することができる。
【0043】
3.ブロック分割フラグ
いくつかの実施形態では、重みテンソルは、続いて符号化ツリーユニット(CTU)と呼ばれるブロックに分割される2Dテンソルに再成形することができる。次に、2Dテンソルの係数は、結果として得られるCTUブロックに基づいてエンコードすることができる。例えば、これらのCTUブロックに基づいて走査順序を定義することができ、走査順序に従ってエンコードを実行することができる。いくつかの他の実施形態では、重みテンソルは、例えば、それぞれ第1の次元および第2の次元としての入力チャネルおよび出力チャネルの数、ならびに第3の次元としてのカーネル(フィルタ)内の要素の数を有する3Dテンソルに再成形することができる。次に、ブロック分割を第1の次元および第2の次元の平面に沿って実行することができ、CTU3Dと呼ばれる3Dブロックが得られる。したがって、テンソルのエンコードは、それらのCTU3Dの走査順序に基づいて実行することができる。いくつかの例では、CTUブロックまたはCTU3Dブロックは、等しいサイズのブロックであり得る。
【0044】
いくつかの実施形態では、モデルごとのシンタックス要素ctu_partition_flagは、ニューラルネットワークの各層の重みテンソルに対してブロック分割(CTU分割)が有効にされているかどうかを指定するために使用される。例えば、シンタックス要素の第1の値(例えば、値0)はブロック分割が無効であることを示し、シンタックス要素の第2の値(例えば、値1)はブロック分割が有効にされていることを示す。一実施形態では、シンタックス要素は1ビットフラグである。別の実施形態では、シンタックス要素は複数のビットによって表されてもよい。シンタックス要素の1つの値は、ブロック分割が実行されるかどうかを示す。例えば、値0は、分割が実行されないことを示すことができる。シンタックス要素の他の値を使用して、CTUまたはCTU3Dブロックのサイズを示すことができる。
【0045】
図10は、モデルパラメータセットの例示的なシンタックスを示す図である。モデルパラメータセットは、ctu_partition_flagを含む。ctu_parition_flagは、モデルパラメータセットによって制御されるニューラルネットワークモデルのブロック分割をオンまたはオフにするために使用することができる。
【0046】
いくつかの実施形態では、テンソルごとのシンタックス要素ctu_partition_flagは、ニューラルネットワークの1つまたは複数の個別の重みテンソルに対してブロック分割(CTU分割)が有効にされているかどうかを指定するために使用される。例えば、シンタックス要素の第1の値(例えば、値0)は、それぞれの1つまたは複数のテンソルに対してブロック分割が無効であることを示し、シンタックス要素の第2の値(例えば、値1)は、それぞれの1つまたは複数のテンソルに対してブロック分割が有効にされていることを示す。一実施形態では、シンタックス要素は1ビットフラグである。別の実施形態では、シンタックス要素は複数のビットによって表されてもよい。シンタックス要素の1つの値は、それぞれの1つまたは複数のテンソルに対してブロック分割が実行されるかどうかを示す。例えば、値0は、それぞれの1つまたは複数のテンソルに対して分割が実行されないことを示すことができる。シンタックス要素の他の値を使用して、それぞれの1つまたは複数のテンソルから分割されたCTUまたはCTU3Dブロックのサイズを示すことができる。
【0047】
一例では、テンソルごとのシンタックス要素ctu_partition_flagは、圧縮データユニットヘッダに含まれる。一例では、テンソルごとのシンタックス要素ctu_partition_flagは、集約ユニットヘッダに含まれる。
【0048】
4.CTU次元のシグナリング
一実施形態では、モデルごとのフラグctu_partition_flagがブロック分割が有効にされていることを示す値を有する場合、モデルごとの2ビットmax_ctu_dim_flagを使用して、ニューラルネットワークの重みテンソルに対してモデルごとの最大CTU次元(gctu_dimと表記)を指定することができる。例えば、gctuは、以下に従って決定することができる。
gctu_dim=(64>>max_ctu_dim_flag).
例えば、0、1、2、または3の値を有するmax_ctu_dim_flagに対応して、gctu_dimは64、32、16、および8の値を有することができる。
【0049】
一実施形態では、2D再成形テンソルについて、テンソルごとの最大CTU幅は、以下のように各畳み込みテンソルのカーネルサイズによってスケーリングすることができ、
max_ctu_height=gctu_dim、
max_ctu_width=gctu_dim*kernel_sizeである。
【0050】
右/下部CTUの高さ/幅は、max_ctu_height/max_ctu_width未満であり得る。max_ctu_dim_flagのビット数は、他の値(例えば、2ビットを超える)に変更することができることに留意されたい。gctu_dimは、max_ctu_dim_flagに対する他のマッピング関数を用いて計算することができる。max_ctu_widthは、(例えば、CTU3Dブロックの分割のために)kernel_sizeによってスケーリングされなくてもよい。あるいは、max_ctu_widthを任意の値でスケーリングして、様々なサイズの適切な2Dブロックまたは3Dブロックを形成することができる。
【0051】
別の実施形態では、モデルごとまたはテンソルごとのフラグctu_partition_flagがブロック分割が有効にされていることを示す値を有する場合、テンソルごとの2ビットmax_ctu_dim_flagを使用して、以下に従ってニューラルネットワークのそれぞれの重みテンソルに対するテンソルごとの最大CTU次元を指定することができる。
gctu_dim=(64>>max_ctu_dim_flag).
【0052】
一実施形態では、テンソルごとの最大CTU幅は、以下のように各畳み込みテンソルのカーネルサイズによってスケーリングすることができ、
max_ctu_height=gctu_dim、
max_ctu_width=gctu_dim*kernel_sizeである。
【0053】
同様に、右/下部CTUの高さ/幅は、max_ctu_height/max_ctu_widthより小さくてもよい。テンソルごとのmax_ctu_dim_flagのビット数は、他の値(例えば、2ビットを超える)に変更することができる。gctu_dimは、テンソルごとのmax_ctu_dim_flagに対して、他のマッピング関数を用いて計算することができる。max_ctu_widthは、(例えば、CTU3Dブロックの分割のために)kernel_sizeによってスケーリングされなくてもよい。max_ctu_widthは、様々なサイズの適切な2Dまたは3Dブロックを形成するために、任意の値によってスケーリングすることができる。
【0054】
5.CTU走査順序
いくつかの実施形態では、テンソルごとのシンタックス要素ctu_scan_orderは、それぞれの1つまたは複数のテンソルに対するCTUごとの(またはCTU3D)走査順序を指定するために使用される。例えば、テンソルごとのシンタックス要素ctu_scan_orderの第1の値(例えば、値0)は、CTUごとの走査順序が水平方向のラスタ走査順序であることを示す。テンソルごとのシンタックス要素ctu_scan_orderの第2の値(例えば、値1)は、CTUごとの走査順序が垂直方向のラスタ走査順序であることを示す。一例では、テンソルごとのシンタックス要素ctu_scan_orderは、圧縮データユニットヘッダに含まれる。一例では、テンソルごとのシンタックス要素ctu_scan_orderは、集約ユニットヘッダに含まれる。
【0055】
一実施形態では、テンソルごとのシンタックス要素ctu_scan_orderは、モデルごとのシンタックス要素フラグctu_partition_flagがブロック(CTU)分割が有効にされていることを示す値を有するときにシンタックステーブルに含まれる。
【0056】
図11は、1つまたは複数の重みテンソルに対するCTU走査順序のシグナリングを含む集約ユニットヘッダの例示的なシンタックスを示す。行(1101)において、FORループが複数のNNRユニットに対して実行される。複数のNNRユニットの各々は、例えば重みテンソルを含むことができる。複数のNNRユニットのそれぞれについて、ctu_partition_flagがCTU分割が有効にされていることを示す値を有する場合(行(1102))、ctu_scan_order[i]を受信することができ、この場合、iは複数のNNRユニットの各々のインデックスとすることができる。ctu_partition_flagは、モデルごとのシンタックス要素とすることができる。
【0057】
さらに、行(1102)において、シンタックス要素quant_bitdepth[i]を、1つまたは複数のNNRユニットの各々について受信することができる。quant_bitdepth[i]は、NNR集約ユニット内の各テンソルに対して量子化係数の最大ビット深度を指定することができる。
【0058】
別の実施形態では、テンソルごとのシンタックス要素フラグctu_partition_flagが、それぞれの1つまたは複数のテンソルに対してブロック(CTU)分割が有効にされていることを示す値を有するとき、テンソルごとのシンタックス要素ctu_scan_orderはシンタックステーブルに含まれる。
【0059】
6.フラグの依存関係
一例では、ctu_partition_flagは、モデルワイズフラグとして定義される。nnr_aggregate_unit_headerセクション(例えば、
図11の例における)には、ctu_scan_orderフラグが配置される。ctu_partition_flagは、nnr_aggregate_unit内のnnr_model_parameter_set_payloadセクションに配置される。nnr_aggregate_unit_headerは、nnr_model_parameter_set_payloadの前に連続させることができるため、ctu_scan_orderを復号することができない。
【0060】
この問題を解決するために、一例では、モデルごとのnnr_unitを、任意のnnr_aggregate_unitsの前に連続して配置することができる。このnnr_unitには、ctu_partition_flagと、max_ctu_dim_flagとを含めることができる。したがって、nnr_unitに続くNNR集約ユニットは、nnr_unitにおいて定義された任意の情報を使用することができる。
【0061】
III.ニューラルネットワークモデル圧縮のための3Dピラミッド符号化
1.走査順序
図12は、重みテンソルにおける走査重み係数のシンタックス例を示す。例えば、重みテンソルの次元は3以上(畳み込み層では4など)であり、重みテンソルは2次元テンソルに再成形することができる。一例では、重みテンソルの次元が2以下である場合(完全接続層またはバイアス層など)、再成形は実行されない。重みテンソルをエンコードするために、重みテンソル内の重み係数が特定の順序に従って走査される。いくつかの例では、重みテンソル内の重み係数は、例えば、各行について左から右へ、および最上行から最下行へ、行優先で走査することができる。
【0062】
図12の例では、2D整数アレイStateTransTab[][]は、依存スカラ量子化のための状態遷移表を指定し、以下のように構成することができる。
StateTransTab[][]={{0,2}、{7、5}、{1、3}、{6,4}、{2,0}、{5,7}、{3,1}、{4,6}}。
【0063】
2.量子化
様々な実施形態において、3つのタイプの量子化方法、すなわち、ベースライン量子化方法、コードブックベースの量子化方法、および依存スカラ量子化方法を使用することができる。
【0064】
ベースライン量子化方法では、固定ステップサイズを使用して、モデルパラメータテンソル(またはパラメータテンソル)に一様量子化を適用することができる。一例では、固定ステップサイズは、パラメータqpDensityおよびqpによって表すことができる。dq_flagとして表示されるフラグを使用して、一様量子化(例えば、dq_flagは0に等しい)を可能にすることができる。復号されたテンソル内の再構築された値は、ステップサイズの整数倍とすることができる。
【0065】
コードブックベースの方法では、モデルパラメータテンソルは、コードブックおよびインデックスのテンソルとして表すことができ、後者は元のテンソルと同じ形状を有する。コードブックのサイズは、エンコーダにおいて選択することができ、メタデータパラメータとして伝送することができる。インデックスは整数値を有し、さらにエントロピー符号化することができる。一例では、コードブックは、浮動小数点32ビット値で構成される。復号されたテンソル内の再構築された値は、それらのインデックス値によって参照されるコードブック要素の値である。
【0066】
依存スカラ量子化方法では、例えば、qpDensityおよびqpのパラメータで表される固定ステップサイズと、サイズ8の状態遷移表とを用いて、パラメータテンソルに対して依存スカラ量子化を適用することができる。1に等しいdq_flagとして示されるフラグを使用して、依存スカラ量子化を可能にすることができる。復号されたテンソル内の再構築された値は、ステップサイズの整数倍である。
【0067】
3.エントロピー符号化
量子化重み係数をエンコードするために、エントロピー符号化技術を使用することができる。いくつかの実施形態では、量子化重み係数の絶対値は、固定長シーケンスが後続し得る単項シーケンスを含むシーケンスにおいて符号化される。
【0068】
いくつかの例では、層内の重み係数の分布は一般にガウス分布に従っており、値が大きい重み係数の割合は非常に小さいが、重み係数の最大値は非常に大きくなり得る。いくつかの実施形態では、単項符号化を使用して非常に小さい値を符号化することができ、ゴロム符号化に基づいてより大きい値を符号化することができる。例えば、ゴロム符号化を用いない場合の最大数を示すためにmaxNumNoRemと呼ばれる整数パラメータが使用される。量子化重み係数がmaxNumNoRemを超えない(例えば、これ以下である)場合、量子化重み係数を単項符号化によって符号化することができる。量子化重み係数がmaxNumNoRemより大きい場合、量子化重み係数のmaxNumNoRemに等しい部分は、単項符号化によって符号化され、量子化重み係数の残りの部分は、ゴロム符号化によって符号化される。したがって、単項シーケンスは、単項符号化の第1の部分と、指数ゴロム剰余ビットを符号化するためのビットの第2の部分とを含む。
【0069】
いくつかの実施形態では、量子化重み係数は、以下の2つのステップによって符号化することができる。
【0070】
第1のステップでは、バイナリシンタックス要素sig_flagが量子化重み係数のためにエンコードされる。バイナリシンタックス要素sig_flagは、量子化重み係数が0に等しいかどうかを指定する。sig_flagが1に等しい(量子化重み係数が0に等しくないことを示す)場合、バイナリシンタックス要素sign_flagはさらにエンコードされる。バイナリシンタックス要素sign_flagは、量子化重み係数が正であるか負であるかを示す。
【0071】
第2のステップでは、量子化重み係数の絶対値は、固定長シーケンスが後続し得る単項シーケンスを含むシーケンスに符号化することができる。量子化重み係数の絶対値がmaxNumNoRem以下である場合、シーケンスは、量子化重み係数の絶対値の単項符号化を含む。量子化重み係数の絶対値がmaxNumNoRemより大きい場合、単項シーケンスは、単項符号化を使用してmaxNumNoRemを符号化するための第1の部分と、指数ゴロム剰余ビットを符号化するための第2の部分とを含むことができ、固定長シーケンスは固定長剰余を符号化するためのものである。
【0072】
いくつかの例では、最初に単項符号化が適用される。例えば、jなどの変数は0で初期化され、別の変数Xはj+1に設定される。シンタックス要素abs_level_greater_Xがエンコードされる。一例では、量子化重みレベルの絶対値が変数Xより大きい場合、abs_level_greater_Xは1に設定され、単項符号化は継続し、そうでない場合、abs_level_greater_Xは0に設定され、単項符号化が行われる。abs_level_greater_Xが1に等しく、変数jがmaxNumNoRemより小さい場合、変数jは1だけ増加し、変数Xも1だけ増加する。次に、さらなるシンタックス要素abs_level_greater_Xがエンコードされる。プロセスは、abs_level_greater_Xが0に等しくなるか、または変数jがmaxNumNoRemに等しくなるまで継続する。変数jがmaxNumNoRemに等しい場合、エンコードされたビットは単項シーケンスの第1の部分である。
【0073】
abs_level_greater_Xが1に等しく、jがmaxNumNoRemに等しい場合、符号化はゴロム符号化で継続する。具体的には、変数jは0にリセットされ、Xは1<<jに設定される。量子化重み係数減算maxNumNoRemの絶対値として、単項符号化剰余を算出することができる。シンタックス要素abs_level_greater_than Xがエンコードされる。一例では、単項符号化剰余が変数Xより大きい場合、abs_level_greater_Xは1に設定され、そうでない場合、abs_level_greater_Xは0に設定される。abs_level_greater_Xが1に等しい場合、変数jは1だけ増加し、1<<jがXに追加され、さらなるabs_level_greater_Xがエンコードされる。この手順は、abs_level_greater_Xが0に等しくなるまで続けられ、したがって、単項シーケンスの第2の部分がエンコードされる。abs_level_greater_Xが0に等しいとき、単項符号化剰余は値(X,X-1,...X-(1<<j)+1)のうちの1つとすることができる。長さjのコードは、(X,X-1,...X-(1<<j)+1)内の1つの値を指すインデックスを符号化するために使用することができ、コードは固定長剰余と呼ぶことができる。
【0074】
図13は、本開示のいくつかの実施形態による量子化重み係数の絶対値を復号するための一例を示す。
図13の例では、QuantWeight[i]は、アレイ内のi番目の位置での量子化重み係数を表し、sig_flagは、量子化重み係数QuantWeight[i]が非ゼロ(例えば、sig_flagが0であることは、QuantWeight[i]が0であることを示す)であるかどうかを指定し、sign_flagは、量子化重み係数QuantWeight[i]が正であるか負であるかを指定し(例えば、sign_flagが1であることは、QuantWeight[i]が負であることを示す)、abs_level_greater_x[j]は、QuantWeight[i]の絶対レベルがj+1より大きいかどうかを示し(例えば、単項シーケンスの第1の部分)、abs_level_greater_x2[j]は、指数ゴロム剰余(例えば、単項シーケンスの第2の部分)の単項部を含み、abs_remainderは固定長剰余を示す。
【0075】
本開示の一態様によれば、コンテキストモデリング手法を、3つのフラグsig_flag、sign_flag、およびabs_level_greater_Xの符号化に使用することができる。したがって、類似の統計的挙動を有するフラグを同じコンテキストモデルに関連付けることができ、その結果、確率推定器(コンテキストモデルの内部)は基礎となる統計に適応することができる。
【0076】
一例では、コンテキストモデリング手法は、左に隣接する量子化重み係数が0であるか、0より小さいか、または0より大きいかに応じて、sig_flagに対して3つのコンテキストモデルを使用する。
【0077】
別の例では、コンテキストモデル手法は、左に隣接する量子化重み係数が0であるか、0より小さいか、または0より大きいかに応じて、sign_flagに対して3つの他のコンテキストモデルを使用する。
【0078】
別の例では、abs_level_greater_Xフラグの各々について、コンテキストモデリング手法は、1つまたは2つの別々のコンテキストモデルのいずれかを使用する。一例では、X<=maxNumNoRemの場合、sign_flagに応じて2つのコンテキストモデルが使用される。X>maxNumNoRemの場合、一例では1つのコンテキストモデルのみが使用される。
【0079】
4.CTU3Dおよび再帰的CU3Dブロック分割
いくつかの実施形態では、モデルパラメータテンソルは、各々が3D符号化ユニット(CU3D)ブロックにさらに分割されるCTU3Dブロックに分割することができる。CU3Dは、ピラミッド構造に基づいて分割および符号化することができる。例えば、ピラミッド構造は、3Dオクトツリー構造、3Dユニツリー構造、3Dタグツリー構造、または3Dユニタグツリー構造とすることができる。重み係数は、特定の訓練/再訓練演算後にローカル構造を有することができる。3Dオクトツリー、3Dユニツリー、3Dタグツリー、および/または3Dユニタグツリー構造を利用する符号化方法は、CTU3D/CU3Dブロックの局所的な分布を利用することによって、より効率的な表現を生成することができる。これらのピラミッド構造に基づく方法は、ベースライン方法(すなわち、非ピラミッド構造ベースの符号化方法)と調和させることができる。
【0080】
典型的には、重みテンソル(またはモデルパラメータテンソル)の次元は、[R][S][C][K]のレイアウトを有する畳み込み層の場合4とすることができ、[C][K]のレイアウトを有する完全接続層の場合は2、バイアスおよびバッチ通常層の場合は1とすることができる。RおよびSは畳み込みカーネルサイズ(幅および高さ)を表し、Cは入力特徴サイズを表し、Kは出力特徴サイズを表す。
【0081】
一実施形態では、畳み込み層の場合、4Dテンソル[R][S][C][K]が3Dテンソル[RS][C][K]に再成形されるように、2D[R][S]次元を1D[RS]次元に再成形することができる。完全接続層は、R=S=1の3Dテンソルの特殊なケースとして扱われる。
【0082】
一実施形態では、3Dテンソル[RS][C][K]は、重なり合わないより小さいブロック(CTU3D)で[C][K]平面に沿って分割することができる。各CTU3Dは、[RS][ctu3d_height][ctu3d_width]の形状を有し、ここで、一例では、ctu3d_height=max_ctu3d_heightおよびctu3d_width=max_ctu3d_widthである。CTU3Dがテンソルの右および/または下に位置する場合、そのctu3d_heightはC/max_ctu3d_heightの剰余であり、そのctu3d_widthはK/max_ctu3d_widthの剰余である。
【0083】
一実施形態では、max_ctu3d_heightおよびmax_ctu3d_widthの値は、ビットストリーム内で明示的にシグナリングすることができる、または明示的に推測することができる。一例では、max_ctu3d_height=Cおよびmax_ctu3d_width=Kの場合、ブロック分割は無効化される。
【0084】
一実施形態では、CTU3D/CU3Dがより小さいCU3Dに再帰的に分割される単純化されたブロッキング構造は、最大再帰深度に達するまでクワッドツリー構造を使用して再帰的に実行することができる。CTU3Dノードから開始して、CU3Dブロックのこのクワッドツリーは、深さ優先クワッドツリー走査順序を使用して走査および処理することができる。同じ親ノードの下にある子ノードは、水平方向または垂直方向のいずれかでラスタ走査順序を使用して走査および処理される。
【0085】
図14は、垂直方向におけるラスタ走査を使用する適応型CTU3D/CU3D分割の2つの例を示す。
【0086】
一実施形態では、所与のクワッドツリー深さのCU3Dについて、これらのCU3Dのmax_CU3D_height/max_CU3D_widthは、以下の式を使用して計算される。
max_cu3d_height=max_ctu3d_height>>depth
max_cu3d_width=max_ctu3d_width>>depth
【0087】
max_CU3D_heightおよびmax_CU3D_widthの両方が所定の閾値以下である場合、最大再帰深度に達する。この閾値は、明示的にビットストリームに含めることができるか、またはデコーダによって暗黙的に推測することができる所定の数(8など)とすることができる。この再帰的分割は、所定の閾値がCTU3Dのサイズである場合に無効にされる。
【0088】
一実施形態では、親CU3Dを複数のより小さい子CU3Dに分離するかどうかを決定するためのレート歪み(RD)ベースのエンコードアルゴリズムが使用される。これらのより小さい子CU3Dの合成されたRDが親CU3DからのRDよりも小さい場合、親CU3Dは複数のより小さい子CU3Dに分離される。そうでなければ、この親CU3Dはそれ以上分離されない。分離フラグは、それぞれの分離決定を記録するように定義される。このフラグは、CU分割の最後の深さではスキップすることができる。
【0089】
一実施形態では、再帰的CU3Dブロック分割演算は、CTU3DをCU3Dブロックに分割するためにクワッドツリー構造に基づいて実行され、分離フラグは、クワッドツリー構造内のノードにおいて各分離決定を記録するように定義される。
【0090】
別の実施形態では、再帰的CU3Dブロック分割演算はCTU3Dブロック内で実行されず、分離決定を記録するための分離フラグは定義されない。この場合、CU3Dブロックは、CTU3Dブロックと同一である。
【0091】
5.3Dピラミッド構造
様々な実施形態において、ピラミッド構造(または3Dピラミッド構造)は、各内部ノードが8つの子を有することができるツリーデータ構造とすることができる。3Dピラミッド構造を使用して、z軸、y軸、およびx軸に沿って3Dテンソル(またはCTU3DもしくはCU3Dなどのサブブロック)を8つのオクタントに再帰的に細分化することによって3Dテンソルを分割することができる。
【0092】
図15は、3Dピラミッド構造に基づく例示的な分割プロセスを示す。
図15に示すように、3Dオクトツリー(1505)は、各内部ノード(1510)が正確に8つの子ノード(1515)を有するツリーデータ構造である。3Dオクトツリー(1505)は、3次元テンソル(1520)をz軸、y軸、およびx軸に沿って8つのオクタント(1525)に再帰的に細分化することによってそれを分割するために使用される。3Dオクトツリー(1505)の最後の深さのノードは、2x2x2係数のサイズを有するブロックとすることができる。
【0093】
様々な実施形態では、エンコーダ側またはデコーダ側においてCU3D内の係数を表すために3Dピラミッド構造を構築するために異なる方法を採用することができる。
【0094】
一実施形態では、CU3Dの3Dオクトツリーは以下のように構築することができる。最後の深さにおける3Dオクトツリー位置のノード値1は、対応するノード内のコードブックインデックス(コードブック符号化方法が使用される場合)または係数(直接量子化符号化方法が使用される場合)が非ゼロであることを示す。最下部の深さの3Dオクトツリー位置のノード値0は、対応するノード内のコードブックインデックスまたは係数が0であることを示す。他の深さにおける3Dオクトツリー位置のノード値は、その8つの子ノードの最大値として定義される。
【0095】
一実施形態では、CU3Dについての3Dユニツリーは、以下のように構築することができる。最後の深さ以外の深さの3Dユニツリー位置のノード値1は、その子ノード(およびそれらの子ノード(最後の深さにおけるノードを含む)が統一化されていない(異なる)値を有することを示し、最後の深さ以外の深さにおける3Dユニツリー位置のノード値0は、そのすべての子ノード(および最後の深さのノードを含むそれらの子ノード)が統一化された(同一の)絶対値を有することを示す。
【0096】
一実施形態では、CU3Dについての3Dタグツリーは、以下のように構築することができる。最後の深さにおける3Dタグツリー位置のノード値は、対応するCU3D内のコードブックインデックスの絶対値(コードブック符号化方法が使用される場合)または絶対係数(直接量子化符号化方法が使用される場合)が非ゼロであることを示す。他の深さにおける3Dタグツリー位置のノード値は、その8つの子ノードの最大値として定義される。別の実施形態では、他の深さにおける3Dタグツリー位置のノード値は、その8つの子ノードの最大値として定義することができる。
【0097】
一実施形態では、CU3Dについての3Dユニタグツリーは、3Dタグツリーと3Dユニツリーとを組み合わせることによって構築される。
【0098】
異なる深さ/異なる高さ/異なる幅を有するいくつかのCU3Dブロックについては、すべての親ノードが利用可能な8つすべての子ノードを有する完全な3Dピラミッドを構築するのに十分ではない係数が存在し得ることに留意されたい。親ノードが8つすべての子ノードを持たない場合、これらの存在しない子ノードの走査およびエンコードはスキップすることができる。
【0099】
6.3Dピラミッド走査順序
3Dピラミッドが構築された後、エンコーダ側でノード値をエンコードするか、またはデコーダ側でノード値を復号するために、所定の走査順序を使用してすべてのノードをウォークスルーすることができる。
【0100】
一実施形態では、トップノードから開始して、深さ優先探索走査順序を使用して、すべてのノードをウォークスルーすることができる。同じ親ノードを共有する子ノードに対する走査順序は、(0,0,0)→(0,0,1)→(0,1,0)→(0,1,1)→(1,0,0)→(1,0,1)→(1,1,0)→(1,1,1)など、任意に定義可能である。
【0101】
別の実施形態では、トップノードから開始して、幅優先探索を利用してすべてのノードをウォークスルーすることができる。各ピラミッド深さは3D形状であるため、各深さにおける走査順序は任意に定義することができる。一実施形態では、走査順序は、ピラミッド符号化方法と整列させるために以下の擬似コードを使用して定義される。
for(int d=start_depth;d<total_depth;++d)
for(int by=0;by<height[d];by+=2)
for(int bx=0;bx<width[d];bx+=2)
for(int bz=0;bz<length[d];bz+=2)
for(int y=by;y<by+min(2,height[d]-by);++y)
for(int x=bx;x<bx+min(2,width[d]-bx);++x)
for(int z=bz;z<bz+min(2,length[d]-bz);++z)
process node[d][z][y][x]......
【0102】
別の実施形態では、エンコードプロセスまたは復号プロセスに関与する第1の深さを示すために、encoding_start_depthシンタックス要素を使用することができる。所定の走査順序を使用してすべてのノードをウォークするとき、このノードの深さがencoding_start_depthを上回る場合、現在のノード値のエンコードはスキップされる。複数のCU3D、CTU3D、層またはモデルは、1つのencoding_start_depthを共有することができる。このシンタックス要素は、ビットストリーム内で明示的にシグナリングすることができるか、または事前定義されて明示的に推論される場合もある。
【0103】
一実施形態では、encoding_start_depthはビットストリームにおいて明示的にシグナリングされる。別の実施形態では、encoding_start_depthは事前定義され、明示的に推論される。別の実施形態では、encoding_start_depthは、3Dピラミッド構造の最後の深さに設定され、明示的に推論される。
【0104】
7.3Dピラミッド符号化方法
デコーダ側では、3Dピラミッド構造が構築された後、対応する符号化方法を実行して、すべてのノードをウォークスルーし、異なる3Dツリーによって表される係数をエンコードすることができる。デコーダ側では、異なる符号化方法に対応して、エンコードされた係数をそれに応じて復号することができる。
【0105】
3Dオクトツリーの場合、親ノードの値が0である場合、その子ノード(およびそれらの子ノード)の走査およびエンコードは、それらの値が常に0であるべきであるためスキップされる。親ノードの値が1であり、最後以外のすべての子ノードの値がすべて0である場合、最後の子ノードを走査することができるが、その値のエンコードは常に1であるべきであるためスキップされる。現在の深さがピラミッドの最後の深さであり、現在のノード値が1である場合、コードブック方法が使用されないときにマップ値の符号がエンコードされ、続いてマップ値(量子化値)自体がエンコードされる。
【0106】
3Dユニツリーの場合、一実施形態では、所与のノードの値をエンコードすることができる。ノード値が0である場合、対応する統一化値をエンコードすることができ、その子ノード(およびそれらの子ノード)のエンコードは、それらの絶対値が常に統一化値に等しくなければならないのでスキップすることができる。最下部の深さに達するまで子ノードを走査することができ、ノード値が非ゼロである場合、各子ノードの符号ビットをエンコードすることができる。
【0107】
3Dユニツリーの場合、別の実施形態では、所与のノードの値をエンコードすることができる。ノード値が0である場合、その対応する統一化値をエンコードすることができ、その子ノード(およびそれらの子ノード)の走査およびエンコードは、それらの絶対値が常に統一化値に等しくなければならないため、スキップすることができる。そして、このCU3D内のすべてのノードが処理された後、ピラミッド構造を再び走査することができ、ノード値が非ゼロである場合、最下部の深さの各子ノードの符号ビットをエンコードすることができる。
【0108】
3Dタグツリーの場合、ノードが親ノードを有さないトップノードである場合、その値をエンコードすることができる。任意の子ノードについて、親ノードとこの子ノードとの間の差をエンコードすることができる。親ノードの値がXであり、最後の子ノード以外のすべての値がXより大きい場合、最後の子ノードを走査することはできるが、その値のエンコードは常にXであるはずなのでスキップされる。
【0109】
3D_ユニタグツリーの場合、最初にユニツリーからの所与のノードの値をエンコードすることができる。その後、ノードが親ノードを有さないトップノードである場合のタグツリー値、または親ノードとこの子ノードとの間のタグツリー値の差のいずれかをエンコードするために、タグツリー符号化方法を使用することができる。また、タグツリー符号化セクションにおいて導入されノードスキップ方法も採用されている。ユニツリーノード値が0である場合、その子ノード(およびその子ノード)の走査およびエンコードは、それらの値が常に統一化値に等しくなければならないため、スキップすることができる。
【0110】
一実施形態では、encoding_start_depthが最後の深さである場合、本明細書に記載のこれらの係数スキップ方法は、すべての係数がエンコードされるように無効化することができる。一例では、シンタックス要素は、3Dピラミッド構造の開始の深さを示すデコーダ側のビットストリーム内で受信することができる。開始の深さが3Dピラミッド構造の最後の深さであるとき、モデルパラメータテンソルのモデルパラメータは、非3Dピラミッドツリーベースの復号方法を使用してビットストリームから復号することができる。
【0111】
別の実施形態では、encoding_start_depthが最後の深さであるとき、本明細書に記載のこれらの係数スキップ方法を利用するために、開始の深さが最後から2番目の深さになるように開始の深さを調整することによって3Dピラミッドツリーをエンコードすることができる。一例では、3Dピラミッド構造における開始の深さを示すシンタックス要素は、デコーダにおいてビットストリームで受信することができる。開始の深さが3Dピラミッド構造の最後の深さであるとき、復号プロセスは、デコーダにおいて3Dピラミッド構造の深さの最後から2番目の深さから開始することができる。
【0112】
別の実施形態では、encoding_start_depthが最後の深さである場合、3Dユニタグツリーの場合、encoding_start_depthが最後から2番目の深さになるようにencoding_start_depthを調整することによって3Dピラミッドツリーのユニツリー部をエンコードすることができる。3Dピラミッドツリーのタグツリー部は、encoding_start_depthを調整せずにエンコードされ得る。一例では、3Dピラミッド構造における開始の深さを示すシンタックス要素は、デコーダにおいてビットストリームで受信することができる。開始の深さが3Dピラミッド構造の最後の深さであり、かつ3Dピラミッド構造がユニツリー部エンコードおよびタグツリー部エンコードに関連付けられたユニタグツリー構造である場合、デコーダにおいて以下のように復号プロセスを実行することができる。ユニツリー部エンコードの場合、復号プロセスの受信は、3Dピラミッド構造の深さの最後から2番目の深さから開始することができる。タグツリー部エンコードの場合、復号プロセスは、3Dピラミッド構造の深さの最後の深さから開始することができる。
【0113】
8.依存量子化
いくつかの実施形態では、依存スカラ量子化方法がニューラルネットワークパラメータ近似に使用される。関連するエントロピー符号化方法を使用して、量子化方法と協働することができる。この方法は、量子化されたパラメータ値間の依存性を導入し、パラメータ近似の歪みを低減する。追加として、エントロピー符号化段階で依存性を利用することができる。
【0114】
依存量子化では、ニューラルネットワークパラメータ(例えば、重みパラメータ)の許容可能な再構成値は、再構成順序における先行するニューラルネットワークパラメータの選択された量子化インデックスに依存する。この手法の主な効果は、従来のスカラ量子化と比較して、許容可能な再構成ベクトル(層のすべての再構成されたニューラルネットワークパラメータによって与えられる)がN次元(Nは層内のパラメータの数を表す)ベクトル空間でより高密度にパックされることである。すなわち、N次元単位体積当たりの許容可能な再構成ベクトルの所与の平均数に対して、入力ベクトルと最も近い再構成ベクトルとの間の平均距離(例えば、平均二乗誤差(MSE)または平均絶対誤差(MAE)歪み)が(入力ベクトルの典型的な分布に対して)低減される。
【0115】
依存量子化プロセスでは、パラメータは、再構成された値の間の依存性のために、走査順(エントロピー復号されるのと同じ順序)で再構成することができる。次に、依存スカラ量子化の方法は、異なる再構成レベルを有する2つのスカラ量子化器を定義し、2つのスカラ量子化器を切り替えるためのプロセスを定義することによって実現することができる。したがって、各パラメータに対して、
図16に示すように、利用可能なスカラ量子化器が2つ存在し得る。
【0116】
図16は、本開示の実施形態に従って使用される2つのスカラ量子化器を示す。第1の量子化器Q0は、ニューラルネットワークパラメータレベル(点の下の-4から4までの数)を量子化ステップサイズΔの偶数倍にマッピングする。第2の量子化器Q1は、ニューラルネットワークパラメータレベル(-5から5までの数)を量子化ステップサイズΔの奇数倍または0にマッピングする。
【0117】
量子化器Q0およびQ1の両方について、利用可能な再構築レベルの位置は、量子化ステップサイズΔによって一意に指定される。2つのスカラ量子化器Q0およびQ1は、以下のように特徴付けられる。
【0118】
Q0:第1の量子化器Q0の再構築レベルは、量子化ステップサイズΔの偶数倍によって与えられる。この量子化器が使用される場合、再構築されたニューラルネットワークパラメータt’は、以下に従って計算され、
t’=2・k・Δ、
ここで、kは、関連するパラメータレベル(送信された量子化インデックス)を表す。
【0119】
Q1:第2の量子化器Q1の再構築レベルは、量子化ステップサイズΔの奇数倍と、0に等しい再構築レベルとによって与えられる。ニューラルネットワークのパラメータレベルkの再構築されたパラメータt’へのマッピングは、以下によって指定され、
t’=(2・k-sgn(k))・Δ、
ここで、sgn(・)は、signum関数を表す。
【数1】
【0120】
現在の重みパラメータに対して使用される量子化器(Q0またはQ1)をビットストリーム内で明示的にシグナリングする代わりに、それは、符号化順序/再構築順序において現在の重みパラメータに先行する重みパラメータレベルのパリティによって決定される。量子化器間の切り替えは、表1によって表されるステートマシンを介して実現される。状態は8つの可能な値(0,1,2,3,4,5,6,7)を有し、符号化順序/再構築順序において現在の重みパラメータに先行する重みパラメータレベルのパリティによって一意に決定される。各層について、状態変数は最初に0に設定される。重みパラメータが再構築されると、状態は表1に従ってその後更新され、ここで、kは変換係数レベルの値を表す。次の状態は、現在の状態および現在の重みパラメータレベルkのパリティ(k&1)に依存する。したがって、状態の更新は、以下によって取得することができ、
state=sttab[state][k&1]
ここで、sttabは表1を表す。
【0121】
表1は、ニューラルネットワークパラメータに使用されるスカラ量子化器を決定するための状態遷移表を示し、ここで、kはニューラルネットワークパラメータの値を表す。
【0122】
【0123】
状態は、使用されるスカラ量子化器を一意に指定する。現在の重みパラメータの状態値が偶数である場合(0,2,4,6)、スカラ量子化器Q0が使用される。そうではなく、状態値が奇数である場合(1,3,5,7)、スカラ量子化器Q1が使用される。
【0124】
いくつかの実施形態では、ベースライン符号化方法(3Dピラミッド構造ベースのエンコード方法/復号方法が使用されない)を利用することができる。ベースライン符号化方法では、モデルパラメータテンソルのすべての係数を走査し、走査順に従ってエントロピー符号化することができる。ベースライン符号化方法と組み合わせて使用される依存量子化プロセスの場合、係数は走査順に(エントロピー復号されるのと同じ順序で)再構築することができる。
【0125】
本明細書に記載される3Dピラミッド符号化方法の性質により、モデルパラメータテンソル内の特定の係数は、エントロピー符号化プロセスからスキップすることができる。したがって、一実施形態では、3Dピラミッド符号化方法が使用される場合、(モデルパラメータテンソル内のすべての係数に対して作用する)依存量子化プロセスを無効にすることができる。
【0126】
別の実施形態では、3Dピラミッド符号化方法が使用される場合、依存量子化プロセスを有効にすることができる。例えば、依存量子化構築プロセスは、これらの係数がエントロピー符号化プロセスからスキップされる場合、これらの係数を依存量子化係数の構築から除外することができるように修正することができる。一例では、CU3Dが3Dピラミッド構造に基づいて分割されていることを1つまたは複数のシンタックス要素が示す場合、CU3Dに対して依存量子化構築プロセスを実行することができる。3Dピラミッド構造に基づくエンコードプロセス中にスキップされるCU3Dのモデルパラメータは、依存量子化構築プロセスから除外される。
【0127】
別の実施形態では、係数の絶対値が依存量子化において使用される。
【0128】
9.エントロピー符号化のためのコンテキスト
いくつかの実施形態では、依存量子化が使用されない場合、コンテキストモデリングを以下のように実行することができる。
【0129】
3Dオクトツリーベースの符号化方法においてOct_flagで表されるオクトツリーノード値、およびsignで表される符号について、ctxで表されるコンテキストモデルインデックスは、以下に従って決定することができ、
Oct_flag:
int p0=(z>=1)?oct[d][z-1][y][x]:0;
int p1=(z>=2)?oct[d][z-2][y][x]:0;
int ctx=(p0==p1)?!!p0:2;
sign:
int p0=(z>=1)?map[z-1][y][x]:0;
int ctx=(p0==0)?0:(p0<0)?1:2である。
上記の計算において、oct[d][z][y][x]は、dの深さにおける[z][y][x]の位置におけるノード値を表し、map[z][y][x]は、[z][y][x]の位置の量子化値を表す。
【0130】
3Dユニツリーベースの符号化方法において、nz_flagで表される非ゼロフラグ、および signで表される符号について、ctxで表されるコンテキストモデルインデックスは、以下に従って決定することができ、
nz_flag:
int p0=(last_depth&&map_z>=1)?std::abs(map[map_z-1][map_y][map_x]):0;
int ctx=(p0==0)?0:1;
sign:
int p0=(z >=1)? map[z-1][y][x]:0;
int ctx=(p0==0)?0:(p0<0)?1:2である。
【0131】
3Dタグツリーベースの符号化方法の場合、nz_flagで表される非ゼロフラグ、およびsignで表される符号の、ctxで表されるコンテキストモデルインデックスは、以下に従って決定することができ、
nz_flag:
int p0=(z>=1)?tgt[d][z-1][y][x]:0;
int p1=(z>=2)?tgt[d][z-2][y][x]:0;
int ctx=(p0==p1)?!!p0:2;
sign:
int p0=(z>=1)?tgt[d][z-1][y][x]:0;
int ctx=(p0==0)?0:(p0<0)?1:2であり、
ここで、tgt[d][z][y][x]は、dの深さにおける[z][y][x]の位置におけるノード値である。
【0132】
3D_ユニタグツリーの場合、nz_flagで表される非ゼロフラグおよびsignで表される符号の、ctxで示されるコンテキストモデルインデックスは、以下に従って決定することができ、
nz_flag:
int p0=(z>=1)?tgt[d][z-1][y][x]:0;
int p1=(z>=2)?tgt[d][z-2][y][x]:0;
int ctx=(p0==p1)?!!!p0:2;
sign:
int p0=(z>=1)?map[z-1][y][x]:0;
int ctx=(p0==0)?0:(p0<0)?1:2である。
【0133】
一例では、依存量子化が使用される場合、nz_flagについてのコンテキストモデリングは、ctx=ctx+3*state_idとなるように調整することができる。
【0134】
10.シンタックスクリーンアップ
CU3D内のすべての係数が統一化されることが可能である。一実施形態では、CU3D内のすべての係数が統一化されているかどうかを示すために、uaflagをCU3Dヘッダ内に定義することができる。一例では、uaflag=1の値は、このCU3D内のすべての係数が統一化されていることを示す。
【0135】
一実施形態では、CTU3D内のすべてのCU3Dブロックが同じmap_modeを共有するかどうかを示すために、ctu3d_map_mode_flagを定義することができる。map_modeは、ctu3d_map_mode_flag=1である場合にシグナリングされる。このフラグは、間接的に(0として)推測することもできることに留意されたい。
【0136】
一実施形態では、enable_start_depthは、cu3dエンコードが最下部の深さ以外の深さから開始できるかどうかを示すように定義することができる。enable_start_depth=1である場合、start_depth(またはencoding_start_depth)は、シグナリングされる。このフラグは、間接的に(1として)推測することもできることに留意されたい。
【0137】
一実施形態では、enable_zdep_reorderフラグは、zdep_arrayの並べ替えが可能であるかどうかを示すように定義することができる。このフラグは、間接的に(0として)推測することもできることに留意されたい。
【0138】
11.ベースライン符号化方法とピラミッド符号化方法の調和
ベースライン方法では、重みテンソルは、[output_channel][input_channel*kernel size]の形状を有する2D行列に再成形することができる。同じカーネル内の係数は、連続するメモリ位置に格納される。sig_flagとsign_flagのコンテキストを計算する際、近傍係数は、現在の係数の前に処理される最後の係数として定義される。例えば、1つのカーネルにおける第1の係数の近傍係数は、前のカーネルにおける最後の係数である。
【0139】
一実施形態では、コンテキストモデルインデックスを計算するために、1つのカーネルにおける第1の係数について、その近傍係数の値は、前のカーネルにおける最後の係数の値の代わりに0に設定される。
【0140】
一実施形態では、3Dピラミッド符号化プロセス中に、量子化モードがコードブックモードではなく、かつstart_depthが最後のピラミッド深さである場合、ベースライン符号化方法が選択され、そのRDが計算され、他のモード(例えば、3Dピラミッド構造ベースの符号化方法)と比較される。
【0141】
一実施形態では、ctu3d_widthおよび/またはctu3d_heightが1である場合、ベースライン符号化方法が自動的に選択される。
【0142】
12.3Dピラミッド符号化のシンタックステーブル
本開示の付記Bでは、本明細書に開示される3Dピラミッド構造ベースの符号化手法の一例として、シンタックステーブル表の表2~表17が列挙されている。列挙されたシンタックス表に採用されたシンタックス要素は、それぞれのシンタックス表の最後に定義される。
【0143】
13.ニューラルネットワークモデル圧縮のための統一化ベースの符号化方法
いくつかの実施形態では、統一化ベースの符号化方法を利用することができる。この層が3Dピラミッド構造ベースの符号化方法を使用してエンコードされるかどうかを示すために、畳み込み層および完全接続層に対してlayer_uniform_flagフラグを定義することができる。一例では、layer_uniform_flagフラグが第1の値(例えば、0)に等しい場合、この層はベースライン方法を用いてエンコードされる。
【0144】
layer_uniform_flagが第2の値(例えば、1)に等しい場合、3Dピラミッド構造ベースの符号化方法を使用することができる。例えば、層をCTU3Dレイアウトに再成形することができる。CTU3Dごとに、ctu3d_uniform_flagフラグを定義して、同じ親ノードを共有する最下部の深さにおけるすべての子ノードが統一化されている場合(同じ親ノードを共有しないノードは異なる統一化値を有し得る)を示すことができる。
【0145】
ctu3d_uniform_flagフラグが第1の値(例えば、1)に等しい場合、このCTU3Dについて、同じ親ノードを共有する最下部の深さにおけるすべての子ノードが統一化され(同じ親ノードを共有しないノードは異なる統一化値を有し得る)、一実施形態では、3Dユニツリー符号化方法は、このCTU3Dをエンコードすることができる。encoding_start_depthは、3Dピラミッド構造の最後の深さ(例えば、CU3DまたはCTU3Dに関連付けられた)に設定され、明示的に推論される。ノードの統一化値のエンコードは、それらが常に0であるべきであるため、スキップすることができる。
【0146】
一実施形態では、同じ親ノードを共有する最下部の深さにおけるすべての子ノードに対して1つの統一化値をエンコードすることができ、ノード値が非ゼロである場合、これらの子ノードの符号ビットが続く。別の実施形態では、同じ親ノードを共有する最下部の深さにおけるすべての子ノードに対して1つの統一化値をエンコードすることができる。そして、このCU3D内のすべてのノードが処理された後、ノード値が非ゼロである場合、ピラミッド(ピラミッド構造)を再び走査して、最下部の深さにおける各子ノードの符号ビットをエンコードすることができる。
【0147】
ctu3d_uniform_flagフラグが第2の値(例えば、0)に等しい場合、一実施形態では、3Dタグツリー符号化方法を使用してこのCTU3Dをエンコードすることができる。encoding_start_depthは、3Dピラミッド構造の最後の深さ(例えば、CU3DまたはCTU3Dに関連付けられた)に設定され、明示的に推論される。
【0148】
一実施形態では、各子ノードの値は、所定の走査順序に基づいてエンコードすることができる。別の実施形態では、各子ノードの絶対値がエンコードされ得るのに続いて、所定の走査順序に基づいてその符号ビットをエンコードすることができる。別の実施形態では、絶対値は、所定の走査順序に基づいて、すべての子ノードに対してエンコードすることができる。そして、このCU3D内のすべてのノードが処理された後、ノード値が非ゼロである場合、すべての子ノードの符号ビットをエンコードすることができる。
【0149】
14.統一化ベースの符号化のシンタックステーブル
本開示の付記Cでは、本明細書で開示される統一化ベースの符号化方法の一例として、シンタックステーブル表の表18~表21が列挙されている。列挙されたシンタックス表に採用されたシンタックス要素は、それぞれのシンタックス表の最後に定義される。
【0150】
IV.符号化プロセスの例
図17は、本開示の一実施形態によるCTU分割の復号プロセス(1700)を示す。プロセス(1700)は、(S1701)から開始して(S1710)に進むことができる。
【0151】
(S1710)において、第1のシンタックス要素をビットストリームからNNR集約ユニットのNNR集約ユニットヘッダ内で受信することができる。第1のシンタックス要素は、NNR集約ユニット内で伝送されるモデルパラメータテンソルを処理するためのCTU走査順序を示すことができる。例えば、第1のシンタックス要素の第1の値は、CTU走査順序が水平方向の第1のラスタ走査順序であることを示すことができる。第1のシンタックス要素の第2の値は、CTU走査順序が垂直方向の第2のラスタ走査順序であることを示すことができる。
【0152】
一例では、NNR集約ユニット内のテンソルに対してCTUブロック分割が有効にされているかどうかを制御するために、さらなるシンタックス要素を事前に受信することができる。例えば、さらなるシンタックス要素は、CTUブロック分割がニューラルネットワークの層に対して有効にされているかどうかを指定するモデルごとのシンタックス要素、またはCTUブロック分割がNNR集約ユニット内のテンソルに対して有効にされているかどうかを指定するテンソルごとのシンタックス要素とすることができる。
【0153】
(S1720)において、NNR集約ユニット内のテンソルは、CTU走査順序に基づいて再構築することができる。CTUブロック分割がNNR集約ユニット内のテンソルに対して有効にされているとき、エンコーダ側で、テンソルをCTUに分割することができる。CTUは、第1のシンタックス要素によって示される走査順序に従って走査およびエンコードすることができる。デコーダ側では、示された走査順序に基づいて、デコーダはCTUがエンコードされる順序を理解し、それに応じて、復号されたCTUをテンソルに編成することができる。プロセス(1700)は、(S1799)に進み、(S1799)において終了することができる。
【0154】
図18は、本開示の一実施形態による3Dピラミッド符号化の復号プロセス(1800)を示す図である。プロセス(1800)は、(S1801)から開始して(S1810)に進むことができる。
【0155】
(S1810)において、圧縮ニューラルネットワーク表現のビットストリームから1つまたは複数の第1のシンタックス要素を受信することができる。1つまたは複数の第1のシンタックス要素は、CTU3Dから分割されたCU3Dに関連付けることができる。CTU3Dは、ニューラルネットワーク内のテンソルから分割することができる。1つまたは複数の第1のシンタックス要素は、CU3Dが3Dピラミッド構造に対応する符号化モードに基づいて分割されていることを示すことができる。3Dピラミッド構造は、複数の深さを含むことができる。各深さは、1つまたは複数のノードに対応する。各ノードはノード値を有する。様々な実施形態において、3Dピラミッド構造は、オクトツリー構造、ユニツリー構造、タグツリー構造、またはユニタグツリー構造のうちの1つである。
【0156】
(S1820)において、3Dピラミッド構造におけるノードのノード値に対応する第2のシンタックス要素のシーケンスは、3Dピラミッド構造におけるノードを走査するための幅優先走査順序でビットストリームから受信することができる。したがって、デコーダ側では、深さ優先走査順序に基づいて(シンタックス要素によって表される)ノード値を受信することができる。他の実施形態(プロセス(1800)を実施しない)では、エンコーダ側で深さ優先走査順序に従って3Dピラミッド構造を走査することができる。
【0157】
(S1830)において、テンソルのモデルパラメータは、3Dピラミッド構造におけるノードのノード値に対応する受信した第2のシンタックス要素に基づいて再構築することができる。上述したように、オクトツリー構造、ユニツリー構造、タグツリー構造、またはユニタグツリー構造に対応するデコーダでは、3Dピラミッド符号化方法を使用して、3Dピラミッド構造のノード値、および3Dピラミッド構造を使用して分割されたCU3Dの係数値をエンコードすることができる。デコーダでは、使用される3Dピラミッド符号化方法に対応して、それに応じてノード値および係数値を再構築することができる。プロセスは(S1899)に進み、(S1899)において終了することができる。
【0158】
図19は、本開示の一実施形態による統一化ベースの符号化の復号プロセス(1900)を示す。プロセス(1900)は、(S1901)から開始して(S1910)に進むことができる。
【0159】
(S1910)において、CTU3Dに関連付けられたシンタックス要素を受信することができる。CTU3Dは、ニューラルネットワークの圧縮ニューラルネットワーク表現のビットストリーム内のニューラルネットワークの層内のテンソルから分割することができる。シンタックス要素は、CTU3Dに関連付けられたピラミッドツリー構造の最下部の深さにおけるすべての子ノードが統一化されているかどうかを示すことができる。同じ親ノードを共有しない最下部の深さにおける子ノードは、異なる統一化値を有し得る。
【0160】
(S1920)において、シンタックス要素が、CTU3Dに関連付けられたピラミッドツリー構造の最下部の深さにおけるすべての子ノードが統一化されていることを示すことに応答して、CTU3Dは、3Dユニツリー符号化方法に基づいて復号することができる。一例では、3Dユニツリー符号化方法の開始の深さは、ピラミッドツリー構造の最下部の深さであると推測することができる。一実施形態では、ピラミッドツリー構造の最下部の深さにおけるノードの統一化フラグはビットストリーム内でエンコードされない。
【0161】
一実施形態では、同じ親ノードを共有する、最下部の深さにおけるすべての子ノードについてビットストリーム内でエンコードされた統一化値を受信することができる。同じ親ノードを共有する最下部の深さにおけるすべての子ノードの符号ビットを受信することができる。符号ビットが、ビットストリーム内の統一化値に続く。
【0162】
一実施形態では、同じ親ノードを共有する、最下部の深さにおける子ノードの各グループについての統一化値を受信することができる。次いで、同じ親ノードを共有する最下部の深さにおける子ノードの各グループ内の子ノードの符号ビットを受信することができる。
【0163】
(S1930)において、シンタックス要素が、CTU3Dに関連付けられたピラミッドツリー構造の最下部の深さにおける子ノードのすべてが統一化されているわけではないことを示すことに応答して、CTU3Dは、3Dタグツリー符号化方法に基づいて復号することができる。一例では、3Dタグツリー符号化方法の開始の深さは、ピラミッドツリー構造の最下部の深さであると推測することができる。
様々な実施形態において、ピラミッドツリー構造の最下部の深さのノードの値は、以下の方法のうちの1つに従って復号することができる。第1の方法では、所定の走査順序に基づいてビットストリーム内でそれぞれエンコードされたピラミッドツリー構造の最下部の深さにおけるノードの値を受信することができる。
第2の方法では、所定の走査順序に基づいたビットストリーム内のピラミッドツリー構造の最下部の深さにおけるノードの各々について絶対値を受信し、(絶対値が非ゼロの場合)続いて符号を受信することができる。第3の方法では、所定の走査順序に基づいたビットストリーム内のピラミッドツリー構造の最下部の深さにおけるノードの各々について絶対値を受信し、続いて所定の走査順序に基づいたビットストリーム内のピラミッドツリー構造の最下部の深さにおけるノード(ノードが非ゼロ値を有する場合)の各々について符号を受信することができる。プロセス(1900)は、(S1999)に進み、(S1999)において終了することができる。
【0164】
V.コンピュータシステム
上述した技術は、コンピュータ可読命令を使用し、1つまたは複数のコンピュータ可読メディアに物理的に記憶されたコンピュータソフトウェアとして実装することができる。例えば、
図20は、開示された主題のいくつかの実施形態を実装するのに適したコンピュータシステム(2000)を示す。
【0165】
コンピュータソフトウェアは、アセンブリ、コンパイル、リンクなどのメカニズムを受けることができる任意の適切な機械コードまたはコンピュータ言語を使用してコード化され得、1つまたは複数のコンピュータ中央処理装置(CPU)、グラフィック処理装置(GPU)などによって直接、または解釈、マイクロコード実行などを介して、実行することができる命令を含むコードが作成され得る。
【0166】
命令は、例えば、パーソナルコンピュータ、タブレットコンピュータ、サーバ、スマートフォン、ゲームデバイス、IoTデバイスなどを含む様々な種類のコンピュータまたはその構成要素上で、実行され得る。
【0167】
コンピュータシステム(2000)について
図20に示される構成要素は、本質的に例示的なものであり、本開示の実施形態を実施するコンピュータソフトウェアの使用範囲または機能に関する制限を示唆することを意図するものではない。構成要素の構成は、コンピュータシステム(2000)の例示的な実施形態に示された構成要素のいずれか1つまたは組合せに関するいかなる依存性または要件も有すると解釈されるべきでない。
【0168】
コンピュータシステム(2000)は、特定のヒューマンインターフェース入力デバイスを含んでよい。そのようなヒューマンインターフェース入力デバイスは、例えば、触覚入力(例えば、キーストローク、スワイプ、データグローブの動き)、音声入力(例えば、声、拍手)、視覚入力(例えば、ジェスチャ)、嗅覚入力(図示せず)を介した、1人または複数の人間のユーザによる入力に応答し得る。ヒューマンインターフェースデバイスは、オーディオ(例えば、音声、音楽、周囲音)、画像(例えば、走査画像、静止画像カメラから取得された写真画像)、ビデオ(2D映像、立体映像を含む3D映像など)など、必ずしも人間による意識的な入力に直接関連しない特定の媒体を取り込むために使用され得る。
【0169】
入力ヒューマンインターフェースデバイスには、キーボード(2001)、マウス(2002)、トラックパッド(2003)、タッチスクリーン(2010)、データグローブ(図示せず)、ジョイスティック(2005)、マイクロフォン(2006)、スキャナ(2007)、カメラ(2008)のうちの1つまたは複数が含まれてよい(各々の1つのみが描写されている)。
【0170】
コンピュータシステム(2000)は、特定のヒューマンインターフェース出力デバイスも含んでよい。そのようなヒューマンインターフェース出力デバイスは、例えば、触覚出力、音、光、および匂い/味によって1人または複数の人間ユーザの感覚を刺激し得る。このようなヒューマンインターフェース出力デバイスは、触覚出力装置(例えば、タッチスクリーン(2010)、データグローブ(図示せず)、またはジョイスティック(2005)による触覚フィードバックが含まれることがあるが、入力装置として機能しない触覚フィードバック装置もあり得る)、オーディオ出力装置(スピーカ(2009)、ヘッドホン(図示せず)など)、視覚出力装置(それぞれがタッチスクリーン入力機能の有無にかかわらず、それぞれが触覚フィードバック機能の有無にかかわらず、CRTスクリーン、LCDスクリーン、プラズマスクリーン、OLEDスクリーンを含むスクリーン(2010)など、それらの一部は、ステレオグラフィック出力、仮想現実ガラス(図示せず)、ホログラフィックディスプレイおよびスモークタンク(図示せず)などの手段を通じて2D視覚出力または3D以上の出力が可能であり得る)およびプリンタ(図示せず)を含み得る。
【0171】
コンピュータシステム(2000)は、CD/DVDまたは同様の媒体(2021)を有するCD/DVD ROM/RW(2020)を含む光学媒体、サムドライブ(2022)、リムーバブルハードドライブまたはソリッドステートドライブ(2023)、テープおよびフロッピーディスクなどのレガシー磁気媒体(描写せず)、セキュリティドングルなどの特殊なROM/ASIC/PLDベースのデバイス(描写せず)などの、人間がアクセス可能なストレージデバイスおよびそれらに関連する媒体を含むこともできる。
【0172】
当業者はまた、本開示内容に関連して使用される「コンピュータ可読媒体」という用語が、伝送媒体、搬送波、または他の一時的信号を包含しないことを理解すべきである。
【0173】
コンピュータシステム(2000)は、1つまたは複数の通信ネットワークへのインターフェースを含むこともできる。ネットワークは、例えば、ワイヤレス、有線、光であり得る。ネットワークはさらに、ローカル、広域、メトロポリタン、車両および産業、リアルタイム、遅延耐性などにすることができる。ネットワークの例には、イーサネット、ワイヤレスLANなどのローカルエリアネットワーク、GSM、3G、4G、5G、LTEなどを含むセルラーネットワーク、ケーブルTV、衛星TV、および地上波ブロードキャストTVを含むTVの有線またはワイヤレスの広域デジタルネットワーク、CANBusを含む車両および産業用などが含まれる。特定のネットワークは、通常、(例えば、コンピュータシステム(2000)のUSBポートなどの)特定の汎用データポートまたは周辺バス(2049)に取り付けられたれた外部ネットワークインターフェースアダプタを必要とし、他のネットワークは、通常、以下に記載されるシステムバスに取り付けることによってコンピュータシステム(2000)のコアに統一される(例えば、PCコンピュータシステムへのイーサネットインターフェースまたはスマートフォンコンピュータシステムへのセルラーネットワークインターフェース)。これらのネットワークのいずれかを使用して、コンピュータシステム(2000)は他のエンティティと通信することができる。そのような通信は、単方向受信のみ(例えば、ブロードキャストTV)、単方向送信のみ(例えば、特定のCANbusデバイスへのCANbus)、または、例えば、ローカルもしくは広域のデジタルネットワークを使用する他のコンピュータシステムとの双方向であり得る。特定のプロトコルおよびプロトコルスタックは、上述したように、それらのネットワークおよびネットワークインターフェースのそれぞれで使用し得る。
【0174】
前述のヒューマンインターフェースデバイス、人間がアクセス可能なストレージデバイス、およびネットワークインターフェースは、コンピュータシステム(2000)のコア(2040)に取り付けることができる。
【0175】
コア(2040)は、1つまたは複数の中央処理装置(CPU)(2041)、グラフィックス処理装置(GPU)(2042)、フィールドプログラマブルゲートエリア(FPGA)(2043)、特定のタスク用のハードウェアアクセラレータ(2044)などの形態の特殊なプログラマブル処理装置を含むことができる。これらのデバイスは、読取り専用メモリ(ROM)(2045)、ランダムアクセスメモリ(2046)、内部のユーザがアクセスできないハードドライブ、SSDなどの内部大容量ストレージ(2047)とともに、システムバス(2048)を介して接続されてよい。いくつかのコンピュータシステムでは、システムバス(2048)は、追加のCPU、GPUなどによる拡張を可能にするために、1つまたは複数の物理プラグの形でアクセス可能であり得る。周辺機器は、コアのシステムバス(2048)に直接取り付けることも、周辺バス(2049)を介して取り付けることもできる。周辺バスのアーキテクチャには、PCI、USBなどが含まれる。
【0176】
CPU(2041)、GPU(2042)、FPGA(2043)、およびアクセラレータ(2044)は、組み合わせて、前述のコンピュータコードを構成することができる特定の命令を実行することができる。そのコンピュータコードは、ROM(2045)またはRAM(2046)に記憶することができる。移行データもRAM(2046)に記憶することができるが、永続データは、例えば、内部大容量ストレージ(2047)に記憶することができる。1つまたは複数のCPU(2041)、GPU(2042)、大容量ストレージ(2047)、ROM(2045)、RAM(2046)などと密接に関連付けることができるキャッシュメモリを使用することにより、メモリデバイスのいずれかへの高速記憶および高速取り出しを可能にすることできる。
【0177】
コンピュータ可読媒体は、様々なコンピュータ実装動作を実行するためのコンピュータコードを有し得る。媒体およびコンピュータコードは、本開示の目的のために特別に設計および構築されたものであってもよく、またはコンピュータソフトウェア技術の当業者に、良く知られた利用可能な種類のものであってもよい。
【0178】
一例として、限定としてではなく、アーキテクチャを有するコンピュータシステム(2000)、具体的にはコア(2040)は、1つまたは複数の有形のコンピュータ可読媒体に組み込まれたソフトウェアを(CPU、GPU、FPGA、アクセラレータなどを含む)プロセッサが実行する結果として、機能を提供することができる。そのようなコンピュータ可読媒体は、上記で紹介されたユーザアクセス可能大容量ストレージ、ならびにコア内部大容量ストレージ(2047)またはROM(2045)などの非一時的な性質のコア(2040)の特定のストレージに関連付けられた媒体であり得る。本開示の様々な実施形態を実装するソフトウェアは、そのようなデバイスに記憶され、コア(2040)によって実行することができる。コンピュータ可読媒体は、特定のニーズに応じて、1つまたは複数のメモリデバイスまたはチップを含むことができる。ソフトウェアは、コア(2040)、および具体的にはその中の(CPU、GPU、FPGAなどを含む)プロセッサに、RAM(2046)に記憶されたデータ構造を定義すること、およびソフトウェアによって定義されたプロセスに従ってそのようなデータ構造を修正することを含む、本明細書に記載された特定のプロセスまたは特定のプロセスの特定の部分を実行させることができる。加えて、または代替として、コンピュータシステムは、ハードワイヤードまたは他の方法で回路(例えば、アクセラレータ(2044))に具現化された論理回路の結果として、機能を提供することができ、ソフトウェアの代わりに、またはソフトウェアとともに動作して、本明細書に記載の特定プロセスまたは特定プロセスの特定部分を実行し得る。ソフトウェアへの参照は、論理回路を包含することができ、適切な場合には逆もまた同様である。コンピュータ可読媒体への参照は、適切な場合には、実行のためにソフトウェアを格納する回路(集積回路(IC)など)、実行のための論理回路を具現化する回路、またはその両方を包含することができる。本開示は、ハードウェアとソフトウェアの任意の適切な組合せを包含する。
【0179】
本開示はいくつかの例示的な実施形態を説明してきたが、本開示の範囲内に入る修正、置換、および様々な代替等価物がある。したがって、当業者は、本明細書に明示的に示されていないまたは記載されていないが、本開示の原理を具体化し、したがってその精神および範囲内にある、多数のシステムおよび方法を考案し得ることが理解されよう。
付記A、略語
DNN:ディープニューラルネットワーク
NNR:圧縮ニューラルネットワーク表現、ニューラルネットワークの符号化表現
CTU:符号化ツリーユニット
CTU3D:3次元符号化ツリーユニット
CU:符号化ユニット
CU3D:3次元符号化ユニット
RD:レート歪み
【0180】
【0181】
【0182】
total_layer全層の数(モデル構造が利用可能であれば除去可能)
enable_escape_reorder0はエスケープ並べ替えが許容されないことを示し、1はエスケープ並べ替えが許容されることを示す
enable_max_ctu3d_size0は、ctu3d_height/ctu3d_widthがカーネルサイズに関係なく変更されない状態が維持されることを示し、1は、ctu3d_height/ctu3d_widthがカーネルサイズに基づいてスケーリングされることを示す。
max_ctu3d_idx max_ctu3d_size=(max_ctu3d_idx==0)?64:(max_ctu3d_idx==1)?32:(max_ctu3d_idx==2)?16:8
【0183】
【0184】
total_layer_minus_one total_layer=1+total_layer_minus_one
stepsizeサブ層のステップサイズ
bitdepthサブ層の量子化係数のビット深度0max
dim_minus_one1第1のサブ層 dim=1+dim_minus_one1
ly_shape1第1のサブ層の形状
include_bias0は、この層にバイアステンソルが存在しないことを示し、1は、この層にバイアステンソルが存在することを示す。
include_scaling0は、この層にスケーリングテンソルが存在しないことを示し、1は、この層にスケーリングテンソルが存在することを示す。
dim_minus_one2サブ層 dim=1+dim_minus_one2
ly_shape2サブ層の形状
scan_order0は水平方向のラスタ走査順序、1は垂直方向のラスタ走査順序を示す
【0185】
【0186】
nzflag量子化係数の非ゼロフラグ
sign量子化係数の符号ビット
【0187】
【0188】
【0189】
split_flag:親CU3Dを4つのより小さな子CU3Dに分離するか否かを示すフラグ
start_depth_delta start_depth=total_depth-1-start_depth_delta
cbook_esc_mode0はエスケープが並べ替えられていないことを示し、1はエスケープが並べ替えられていることを示す。
map_mode0はオクトツリー3d/ユニツリー3d方法が選択されていることを示し、1はタグツリー3d/ユニタグツリー3d方法が選択されていることを示す。
uni_mode0は、ユニツリー3d方法が選択されていないことを示し、1は、ユニツリー3d方法が選択されていることを示す。
tgt_mode0は、タグツリー3d方法が選択されていないことを示し、1は、タグツリー3d方法が選択されていることを示す。
uaflag0は、すべての係数が統一化されているわけではないことを示し、1は、すべての係数が統一化されていることを示す。
【0190】
【0191】
sign sign bit of predicted_size-prev_predicted_size
predicted_flag0は、位置nが予測されたエントリでないことを示し、1は、位置nが予測されたエントリであることを示す。
【0192】
【0193】
signalled_size signalled codebook size
nzflag_delta non-zero flag of delta
sign_delta sign bit of delta
sign sign bit of codebook entry
【0194】
【0195】
nzflag量子化係数の非ゼロフラグ
sign量子化係数の符号ビット
【0196】
【0197】
uni_flagユニツリーノード値
nzflag量子化係数の非ゼロフラグ
sign量子化係数の符号ビット
【0198】
【0199】
oct_flagオクトツリーノード値
sign量子化係数の符号ビット
【0200】
【0201】
nz_flagノード値の非ゼロフラグ
sign量子化係数の符号ビット
【0202】
【0203】
uni_flagユニツリーノード値
nz_flagノード値の非ゼロフラグ
sign量子化係数の符号ビット
【0204】
【0205】
nz_flagノード値の非ゼロフラグ
sign量子化係数の符号ビット
【0206】
【0207】
nz_flag非ゼロフラグ
nzflag非ゼロフラグ
uiBit_pre指数ゴロム剰余の単項部
uiBit EGkのビット
【0208】
【0209】
nzflag非ゼロフラグ
uiBit指数ゴロム剰余の単項部
uiBits固定長剰余
【0210】
【0211】
Ndim(arrayName[])は、arrayName[]の次元の数に戻る。
scan_orderは、以下の表に従って、2つ以上の次元を有するパラメータのブロック走査順を指定する。
0:ブロック走査なし
1:8×8ブロック
2:16×16ブロック
3:32×32ブロック
4:64×64ブロック
layer_uniform_flagは、量子化重みQuantParam[]が統一された方法を使用してエンコードされるかどうかを指定するlayer_uniform_flagが1であることは、QuantParam[]が統一された方法を使用してエンコードされることを示す。
【0212】
【0213】
2D整数アレイStateTransTab[][]は依存スカラ量子化のための状態遷移表を指定し、以下の通りである。
StateTransTab[][]={{0,2},{7,5},{1,3},{6,4},{2,0},{5,7},{3,1},{4,6}}
【0214】
【0215】
ctu3d_uniform_flagは、量子化されたCTU3D重みQuantParam[]が一様な方法を使用してエンコードされるかどうか指定する。ctu3d_uniform_flagが1であることは、QuantParam[]が一様な方法を使用してエンコードされることを示す。
sign_flagは、量子化された重みQuantParam[]が正であるか、負あるかを指定する。sign_flagが1であることは、QuantParam[i]が負であることを示す。
【0216】
【0217】
sig_flagは、量子化重みQuantParam[i]が非ゼロであるかどうかを指定する。sig_flagが0であることは、QuantParam[i]が0であることを示す。
sign_flagは、量子化された重みQuantParam[]が正であるか、負あるかを指定する。sign_flagが1であることは、QuantParam[i]が負であることを示す。
abs_level_greater_x[j]は、QuantParam[i]の絶対レベルがj+1より大きいかどうかを示す。
abs_level_greater_x2[j]は、指数ゴロム剰余の単項部を含む。
abs_remainderは、固定長剰余を示す。
【符号の説明】
【0218】
110 アプリケーションサーバ
111 インターフェース回路
115 メモリ
120 処理回路
121 ニューラルネットワークモデルコーデック
130 電子デバイス
131 インターフェース回路
140 処理回路
141 ニューラルネットワークモデルコーデック
150 キャッシュメモリ
160 メインメモリ
200 圧縮ニューラルネットワーク表現NNRユニット
300 集約NNRユニット
400 NNRビットストリーム
1101 行
1102 行
1505 3Dオクトツリー
1510 内部ノード
1515 子ノード
1520 3次元テンソル
1525 オクタント
1700 復号プロセス
1800 復号プロセス
1900 復号プロセス
2000 コンピュータシステム
2001 キーボード
2002 マウス
2003 トラックパッド
2005 ジョイスティック
2006 マイクロフォン
2007 スキャナ
2008 カメラ
2009 スピーカ
2010 タッチスクリーン
2020 CD/DVD ROM/RW
2021 媒体
2022 サムドライブ
2023 リムーバブルハードドライブまたはソリッドステートドライブ
2040 コア
2041 CPU
2042 GPU
2043 FPGA
2044 ハードウェアアクセラレータ
2045 ROM
2046 RAM
2047 コア内部大容量ストレージ
2048 システムバス
2049 周辺バス