(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023120813
(43)【公開日】2023-08-30
(54)【発明の名称】データ圧縮システム及びデータ圧縮方法
(51)【国際特許分類】
H04N 19/12 20140101AFI20230823BHJP
H04N 19/172 20140101ALI20230823BHJP
H04N 19/146 20140101ALI20230823BHJP
H04N 19/103 20140101ALI20230823BHJP
【FI】
H04N19/12
H04N19/172
H04N19/146
H04N19/103
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2022023881
(22)【出願日】2022-02-18
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】成子 貴洋
(72)【発明者】
【氏名】圷 弘明
【テーマコード(参考)】
5C159
【Fターム(参考)】
5C159KK25
5C159MA04
5C159MA05
5C159ME01
5C159PP04
5C159RC12
5C159TA17
5C159TA21
5C159TB04
5C159TB08
5C159TC18
5C159UA02
5C159UA05
(57)【要約】 (修正有)
【課題】データ圧縮率を改善したデータ圧縮システム及びデータ圧縮方法を提供する。
【解決手段】データ生成源、クライアント、圧縮部、伸長部、蓄積・通信部、ストレージを含むシステムにおいて、データ圧縮プログラムは、第1の非可逆圧縮方法によって元データを圧縮して第1圧縮データを生成し、第1圧縮データを伸長して第1伸長データを生成し、元データと第1伸長データの差分情報を抽出し、差分情報を第1の非可逆圧縮方法と異なる第2の非可逆圧縮方法で圧縮して第2圧縮データを生成し、第1圧縮データ及び第2圧縮データを記憶装置に格納する。
【選択図】
図5
【特許請求の範囲】
【請求項1】
データ圧縮システムであって、
1以上のプロセッサと、
1以上の記憶装置と、を含み、
前記1以上のプロセッサは、
第1の非可逆圧縮方法によって元データを圧縮して第1圧縮データを生成し、
前記第1圧縮データを伸長して第1伸長データを生成し、
前記元データと前記第1伸長データとの差分情報を抽出し、
前記差分情報を前記第1の非可逆圧縮方法と異なる第2の非可逆圧縮方法で圧縮して、第2圧縮データを生成し、
前記第1圧縮データ及び前記第2圧縮データを前記1以上の記憶装置に格納する、データ圧縮システム。
【請求項2】
請求項1に記載のデータ圧縮システムであって、
前記第1圧縮データ及び前記第2圧縮データは、互いに関連付けられて、前記元データの圧縮済みデータとして前記1以上の記憶装置に格納されている、データ圧縮システム。
【請求項3】
請求項1に記載のデータ圧縮システムであって、
前記第1の非可逆圧縮方法または前記第2の非可逆圧縮方法の一方はニューラルネットワークを用いた圧縮を実行し、前記第1の非可逆圧縮方法または前記第2の非可逆圧縮方法の他方はニューラルネットワーク用いない圧縮を実行する、データ圧縮システム。
【請求項4】
請求項1に記載のデータ圧縮システムであって、
前記1以上のプロセッサは、前記第1の非可逆圧縮方法のビット消費量を削減し、前記第1の非可逆圧縮方法よりも前記第2の非可逆圧縮方法の圧縮率が良い部分において、前記第2の非可逆圧縮方法の消費ビットを多くして画質を改善する、データ圧縮システム。
【請求項5】
請求項4に記載のデータ圧縮システムであって、
前記1以上のプロセッサは、前記第1の非可逆圧縮方法が前記第2の非可逆圧縮方法よりも圧縮率が悪い部分において、前記第1の非可逆圧縮方法によるビット消費量を削減する、データ圧縮システム。
【請求項6】
請求項1に記載のデータ圧縮システムであって、
前記第2の非可逆圧縮方法はニューラルネットワークを使用し、
前記ニューラルネットワークは、前記第1の非可逆圧縮方法に対するビット消費量の削減率を大きくするように学習させられている、データ圧縮システム。
【請求項7】
請求項1に記載のデータ圧縮システムであって、
前記1以上のプロセッサは、前記差分情報を、ニューラルネットワークにより抽出する、データ圧縮システム。
【請求項8】
請求項1に記載のデータ圧縮システムであって、
前記元データは動画データである、請求項1に記載のデータ圧縮システム。
【請求項9】
請求項8に記載のデータ圧縮システムであって、
前記第2の非可逆圧縮方法は、ニューラルネットワークを用いて、フレーム内符号化及びフレーム間符号化の少なくとも一方を実行する、データ圧縮システム。
【請求項10】
データ圧縮システムによるデータ圧縮方法であって、
第1の非可逆圧縮方法によって元データを圧縮して第1圧縮データを生成し、
前記第1圧縮データを伸長して第1伸長データを生成し、
前記元データと前記第1伸長データとの差分情報を抽出し、
前記差分情報を前記第1の非可逆圧縮方法と異なる第2の非可逆圧縮方法で圧縮して、第2圧縮データを生成し、
前記第1圧縮データ及び前記第2圧縮データをストレージに格納する、データ圧縮方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ量の削減に関するものである。
【背景技術】
【0002】
データ量を削減するストレージシステムが知られている(例えば特許文献1)。その種のストレージシステムは、一般に、圧縮によりデータ量を削減する。既存の圧縮方法の1つとして、ランレングス法のように、所定のブロック単位内で出現頻度の高い文字列を辞書化し、より小さなサイズの符号に置換する方法が知られている。
【0003】
ランレングス法のような可逆圧縮よりも、データ量を削減する技術として、非可逆圧縮技術が知られている。例えば、動画データに対しては、標準化された圧縮技術である、High Efficiency Video Coding(HEVC)や、Versatile Video Coding(VVC)が知られている(以下、標準コーデック)。
【0004】
また、動画のデータ量を、Deep Neural Network(DNN)で構成された圧縮器と伸長器により削減する技術(DeepVideo Compression)として、例えば、非特許文献2がある。
【先行技術文献】
【特許文献】
【0005】
【非特許文献】
【0006】
【非特許文献1】Zhihao Hu, Guo Lu, Dong Xu, “FVC: A New Framework Towards Deep Video Compression in Feature Space”, CVPR 2021.
【発明の概要】
【発明が解決しようとする課題】
【0007】
データの蓄積や転送などに要するコストの削減の観点から、IoT(Internet-of-Things)機器などが生成する大規模なデータの蓄積や転送などには、圧縮率の高い非可逆圧縮が求められると考えられる。
【0008】
しかし、データの部分ごとに、最適な非可逆圧縮技術が異なるため、単一の圧縮技術のみを用いた場合には、圧縮率が最適ではないという課題がある。例えば、動画圧縮のフレーム内符号化においては、各フレームの空間領域ごとに、標準コーデックとDeep Video Compressionの、いずれの圧縮率が良いかが異なる場合がある。
【0009】
この課題は、動画データにおける標準コーデックとDeep Video Compressionに限られるものではなく、多様なデータの2種類以上の圧縮技術において起きうるものである。
【課題を解決するための手段】
【0010】
本発明の一態様のデータ圧縮システムは、1以上のプロセッサと、1以上の記憶装置と、を含む。前記1以上のプロセッサは、第1の非可逆圧縮方法によって元データを圧縮して第1圧縮データを生成し、前記第1圧縮データを伸長して第1伸長データを生成し、前記元データと前記第1伸長データとの差分情報を抽出し、前記差分情報を前記第1の非可逆圧縮方法と異なる第2の非可逆圧縮方法で圧縮して第2圧縮データを生成し、前記第1圧縮データ及び前記第2圧縮データを前記1以上の記憶装置に格納する。
【発明の効果】
【0011】
本発明の一態様によれば、データの部分ごとにより適切な圧縮技術を使い分けられるようになるため、単一の圧縮技術のみを用いる場合に比べ、圧縮率が改善する。
【図面の簡単な説明】
【0012】
【
図4】実施例1における圧縮済みデータ管理テーブル
【
図5】実施例1におけるデータ圧縮プログラムのフロー図
【
図6】実施例1におけるデータ伸長プログラムのフロー図
【
図7】実施例1におけるフレーム内符号化処理のブロック図
【
図8】実施例1におけるフレーム間符号化処理の第1例のブロック図
【
図9】実施例1におけるフレーム間符号化処理の第2例のブロック図
【発明を実施するための形態】
【0013】
次に、本明細書の実施例を図面に基づいて説明する。なお、本発明は、以下に説明する実施例に限定されるものではない。
【実施例0014】
(1-1)概要
まず、実施例1の概要について、
図1を用いて説明する。
図1はシステムの論理構成を示す。システムは、データ生成源100、クライアント101、圧縮部102、伸長部103、蓄積・通信部104、ストレージ105を含む。
【0015】
データ生成源100は、圧縮処理の対象となるデータを生成する主体であり、例えば、動画データを生成するイメージセンサである。本実施例では、データ生成源100が動画データを生成するイメージセンサである場合を例に説明する。ただし、データ生成源100とそれが生成するデータは、これに限定されるものではなく、例えば、静止画データを生成するイメージセンサ、1次元の時系列データを生成する振動センサなどであってもよい。
【0016】
また、データ生成源100は、センサに限られるものではなく、動画データや静止画データを生成する、Computer Graphics等のソフトウェアなどであってもよい。また、データ生成源100は、例えば、動画データの各フレームをSemantic Segmentationして得られるSegmentation Mapのように、センサやソフトウェア等が生成したデータを加工して得られるデータであってもよい。また、データ生成源100は複数あってもよい。
【0017】
圧縮部102は、データ生成源100が生成したデータを圧縮するモジュールである。圧縮部102は、圧縮対象となる動画データを受領すると、当該データのフレーム(以下、元フレーム)を第1の圧縮技術の圧縮器120(以下、圧縮器A)に入力し、その出力として得られる圧縮データであるMain stream121を得る。第1の圧縮技術は、非可逆圧縮技術である。このとき、第1の圧縮技術のみを用いて所望の画質となるように圧縮した場合よりも、少ないビット消費量となるようにMain streamを生成する。ビット消費量は圧縮後データのサイズを表し、その値が小さい程圧縮率が高いことを意味する。
【0018】
ビット消費量は、どのような方法で削減してもよい。例えば、フレーム全体で一律に量子化パラメタ(Quantization Parameter、以下QP)を増加させることでビット消費量を削減してもよいし、フレーム内の領域毎に第1の圧縮技術と第2の圧縮技術の圧縮率を比較し、第2の圧縮技術の圧縮率が良い領域において、QPを増加させることで、ビット消費量を削減してもよい。第2の圧縮技術は非可逆圧縮技術である。
【0019】
圧縮パラメタ設定器128は、圧縮部102において圧縮器A120、または、圧縮器B125、または、その両方のパラメタを決定するブロックである。圧縮パラメタ設定器128は、例えば、ユーザに指定させたQPに定数を加算したQPを圧縮器A120のパラメタとして設定することで、圧縮器A120によるビット消費量をフレーム全体で削減させることができる。
【0020】
もしくは、例えば、圧縮パラメタ設定器128は、元フレームをタイル状に分割した各パッチを、圧縮器A120と圧縮器B125で実際に圧縮させて測定した圧縮率をもとに、圧縮器B125の圧縮率が良い領域では、圧縮器A120のQPを増加させるように、圧縮器A120のパラメタを設定してもよい。もしくは、例えば、圧縮パラメタ設定器128は、予め測定したビット消費量と画質の関係を基に、ユーザに指定させた画質となるようなパラメタを出力してもよい。
【0021】
また、圧縮パラメタ設定器128は、例えば、後述の圧縮器B125が、圧縮器A120のパラメタ毎に学習された、ニューラルネットワークにより構成された圧縮器である場合、圧縮器A120のパラメタに対応する圧縮器B125のニューラルネットワークの学習済みパラメタを設定してもよい。
【0022】
ただし、圧縮パラメタ設定器128はこれらに限られるものではない。また、圧縮器A120及び圧縮器B125のパラメタが固定値である場合や、パラメタをユーザに指定させる場合には、圧縮パラメタ設定器128はなくてもよい。
【0023】
次に、圧縮部102は、Main stream121を、第1の圧縮技術の伸長器122(以下、伸長器A)に入力し、伸長フレーム(以下、第1伸長フレーム)を得る。次に、圧縮部102は、元フレームと第1伸長フレームを、第2圧縮ユニット123に入力し、その出力として得られる圧縮データであるSide stream126を得る。
【0024】
このとき、第1の圧縮技術に対して、第2の圧縮技術の圧縮率が良い領域の画質を改善するように、Side streamのビット消費量を制御する。制御方法はどのような方法であってもよいが、例えば、後述のように、Deep Neural Network(DNN)により制御することができる。または、上述のように、圧縮パラメタ設定器128により制御され得る。
【0025】
第2圧縮ユニット123は、画質改善情報抽出器124と、第2の圧縮技術の圧縮器125(以下、圧縮器B)を含む。画質改善情報抽出器124は、元フレームと第1伸長フレームを入力として、圧縮器B125が圧縮できる形式のデータを出力する。画質改善情報抽出器124は、例えば、元フレームから第1伸長フレームを要素毎に減算することで、両者の残差を表す新たなフレームを出力する。画質改善情報抽出器124の出力は、圧縮器B125によりSide streamに圧縮される。
【0026】
ただし、画質改善情報抽出器124はこれに限定されるものではなく、例えば、元フレームを第1伸長フレームで要素毎に除算して得られるフレームを出力するブロックであってもよいし、その他、任意の計算可能な処理で構成されるブロックであってもよい。また、第2圧縮ユニット123は、独立な画質改善情報抽出器124と圧縮器B125から構成される必要はなく、両者の機能を包含する1つの機能ブロックであってもよい。例えば、後述するように、第2圧縮ユニット123は、元フレームと第1伸長フレームを入力として、Side stream126を出力する、1セットのDNNであってもよい。
【0027】
また、第2圧縮ユニット123に含まれるブロックは、画質改善情報抽出器124と圧縮器B125に限られるものではなく、他の機能ブロックが含まれていてもよい。例えば、元フレームと第1伸長フレームから、圧縮器B125の設定情報を出力するブロックが含まれていてもよい。
【0028】
最後に、圧縮部102は、Main stream121とSide stream126を、圧縮済みデータ管理テーブル127により対応付ける。圧縮部102は、これを最終的な圧縮データとして、蓄積・通信部104に送信する。
【0029】
蓄積・通信部104は、圧縮部102から受領したデータをストレージ105に格納したり、伸長部103に転送したり、伸長部103からの要求に応じて、ストレージ105に格納された圧縮データを、伸長部103に応答するモジュールである。伸長部103は、クライアント101からの要求に応じて、蓄積・通信部104から取得した圧縮データを伸長して応答するモジュールである。
【0030】
クライアント101は、伸長部103を処理するコンピュータとは異なるコンピュータであってもよいし、伸長部103と同一のコンピュータ上で動作する、動画表示ソフトウェアや動画解析ソフトウェア等のソフトウェアであってもよいし、その他、伸長されたデータを消費する任意のハードウェア及びソフトウェアであってもよい。クライアント101は、伸長部103に対して、フレーム毎にデータを要求してもよいし、動画毎にデータを要求してもよいし、データ生成源100が生成したデータを随時送信するように要求してもよいし、その他任意の条件でデータを要求してもよい。
【0031】
伸長部103は、蓄積・通信部104から圧縮データを受領すると、当該データを構成する圧縮済みデータ管理テーブル136から、Main stream130とSide stream132を取得する。次に、Main streamを伸長器A122に入力して、第1伸長フレームを得る。次に、Side stream132と第1伸長フレームを第2伸長ユニット133に入力して、最終的な伸長フレーム(以下、最終伸長フレーム)を取得し、クライアント101に応答する。
【0032】
第2伸長ユニット133は、第2の圧縮技術の伸長器134(以下、伸長器B)と、フレーム生成器135を含む。フレーム生成器135は、圧縮器B134の出力と、第1伸長フレームを入力として、最終伸長フレームを得るブロックである。例えば、画質改善情報抽出器124が元フレームと第1伸長フレームの残差を出力する場合、それに対応するフレーム生成器135は、第1伸長フレームと伸長器B134の出力を加算する処理とすることができる。
【0033】
ただし、フレーム生成器135はこれに限定されるものではなく、任意の計算可能な処理で構成されるブロックであってもよい。また、フレーム生成器135は、画質改善情報抽出器124の逆変換処理に限定されるものではない。
【0034】
また、第2伸長ユニット133は、独立な伸長器B134とフレーム生成器135から構成される必要はなく、両者の機能を包含する1つの機能ブロックであってもよい。例えば、後述するように、第2伸長ユニット133は、第1伸長フレームとSide stream132を入力として、最終伸長フレームを出力する、1セットのDNNであってもよい。また、第2伸長ユニット133に含まれるブロックは、伸長器B134とフレーム生成器135に限られるものではなく、他の機能ブロックが含まれていてもよい。
【0035】
以上で説明した圧縮部102と伸長部103の処理は、動画のフレーム毎に実施してもよいし、複数のフレームをまとめた単位毎に実施してもよい。複数のフレームをまとめて処理する場合、第1の圧縮技術、または、第2の圧縮技術、または、その両方は、動画圧縮におけるフレーム間符号化のように、時間方向の冗長性を考慮した符号化を行ってもよい。
【0036】
(1-2)システム構成
実施例1のシステム構成について、
図2を用いて説明する。圧縮部102、伸長部103、及び、蓄積・通信部104は、例えば、プロセッサやメモリ、ネットワークインタフェースなどのハードウェア資源と、Operating System、ミドルウェア、データ圧縮プログラム、データ伸長プログラムなどのソフトウェア資源を備えたコンピュータである。スイッチ206は、圧縮部102、伸長部103、蓄積・通信部104を相互接続する。
【0037】
圧縮部102は、Front-end Interface220、プロセッサ221、RAM 223、Back-end Interface226、スイッチ222を含んで構成される。Front-end Interface 220は、圧縮部102と、データ生成源100を接続するためのインタフェースである。プロセッサ221は、スイッチ222を介して、RAM223に格納されたプログラム224、及び、管理情報(メタデータ)225を基に、圧縮部102全体を制御する。Back-end Interface226は、圧縮部102と、蓄積・通信部104を接続する。
【0038】
伸長部103は、Front-end Interface230、プロセッサ231、RAM233、Back-end Interface236、スイッチ232を含んで構成される。Front-end Interface230は、伸長部103と、クライアント101を接続するためのインタフェースである。プロセッサ231は、スイッチ232を介して、RAM233に格納されたプログラム234、及び、管理情報(メタデータ)235を基に、伸長部103全体を制御する。Back-end Interface236は、伸長部103と、蓄積・通信部104を接続する。
【0039】
図2において、蓄積・通信部104の詳細構成は省略されているが、例えば、圧縮部102や伸長部103と同様の構成を有することができる。
【0040】
プロセッサ221及び231は、CPU(Central Processing Unit)のような、汎用的な演算処理器のほかに、GPU(Graphical Processing Unit)やFPGA(Field Programmable Gate Array)のような、アクセラレータであってもよく、また、HEVC等の標準コーデックのハードウェアエンコーダ・デコーダであってもよく、また、それらの組み合わせであってもよい。
【0041】
ストレージ105は、Hard Disk Drive(HDD)やSolid State Drive(SSD)により構成されたブロックデバイスであってもよいし、ファイルストレージであってもよいし、コンテンツストレージであってもよいし、ストレージシステム上に構築されたボリュームであってもよいし、その他、1以上の記憶装置を使用してデータを蓄積する任意の方法で実現されてもよい。
【0042】
圧縮部102と伸長部103と蓄積・通信部104は、以上で説明した構成要素を実装した、IC(Integrated Circuit)等のハードウェアを相互に接続した構成であってもよいし、そのいくつかが、ASIC(Application Specific Integrated Circuit)や、FPGAとして、1つの半導体素子により実装される構成であってもよいし、これらをソフトウェア的に実装したVM(Virtual Machine)であってもよい。また、ここに示した以外の構成要素が追加されてもよい。
【0043】
また、データ生成源100、クライアント101、圧縮部102、伸長部103、及び、蓄積・通信部104は、異なるハードウェア装置あってもよいし、同一のコンピュータで動作する異なるVMであってもよいし、同一のOS(Operating System)上で動作する異なるコンテナであってもよいし、同一のOS上で動作する異なるアプリケーションであってもよいし、各々が複数のコンピュータから構成されていてもよいし、これらの組み合わせであってもよい。
【0044】
例えば、データ生成源100はイメージセンサであり、圧縮部102はイメージセンサに接続された、CPUとGPUにより構成されたエッジデバイスであり、クライアント101と伸長部103は同一のPC上で動作するプログラムであり、蓄積・通信部104はHyper Converged Infrastructure上で動作するプログラムであってもよい。
【0045】
(1-3)RAM構成
図3に、圧縮部102のRAM223と、伸長部103のRAM233が格納するデータの構成300を示す。RAMは、プロセッサが実行するプログラム310と、当該プログラムで用いる管理情報320を格納する。
【0046】
プログラム310は、データ圧縮プログラム311、データ伸長プログラム312、データ学習プログラム313を含む。管理情報320は、圧縮済みデータ132を含む。なお、圧縮部102のプログラム224には、データ伸長プログラム312が含まれていなくてもよいし、伸長部103のプログラム234には、データ圧縮プログラム311が含まれていなくてもよい。
【0047】
また、DNNの学習を
図2に示したシステムに含まれない第3のコンピュータで実行する場合、学習プログラム313は圧縮部102や伸長部103に含まれていなくてもよい。ただし、その場合、学習プログラム313は第3のコンピュータのRAM上に展開される。なお、RAMには、上述のプログラムと構成情報以外のデータが含まれていてもよい。
【0048】
データ圧縮プログラム311は、圧縮部102において、データを圧縮するプログラムである。データ伸長プログラム312は、伸長部103において、圧縮されたデータを伸長するプログラムである。学習プログラム313は、圧縮部102と伸長部103にDNNが含まれる場合に、その学習を実行するプログラムである。
【0049】
圧縮済みデータ321は、圧縮済みのデータを格納するメモリ領域であり、Main streamとSide streamを含むデータ構造である。
【0050】
(1-4)テーブル構成
図4に、圧縮済みデータ321を構成するデータ構造である、圧縮済みデータ管理テーブル400を示す。なお、圧縮済みデータ132の表現方法は、圧縮済みデータ管理テーブル400の形式に限られるものではなく、XML(Extensible Markup Language)、YAML(YAML Ain’t a Markup Language)、ハッシュテーブル、木構造など、テーブル以外のデータ構造によって表現されてもよい。
【0051】
圧縮済みデータ管理テーブル400のデータ名列401は、データ生成源100を表す識別子を格納するフィールドである。識別子は、データ生成源100に対してユーザに命名させた文字列であってもよいし、データ生成源100に割り当てられたMedia Access Control(MAC)アドレスやInternet Protocol(IP)アドレスであってもよいし、その他、データ生成源100を識別しうる任意の符号であってもよい。また、データ生成源100が自明である場合、データ名列401は存在しなくてもよい。
【0052】
Main stream列402は、圧縮器A120により、データ生成源100から受領したデータを圧縮して得られたMain stream121を格納するフィールドである。Side stream列403は、第2圧縮ユニット123の出力であるSide stream126を格納するフィールドである。
【0053】
モデルID列404は、例えば、第2の圧縮技術がDeep Video Compressionであり、かつ、ターゲットとする画質毎に複数のモデルが用意されている場合に、Side streamの生成に用いたモデルを識別する情報を格納するフィールドである。ただし、モデルID列404はオプションであり、圧縮済みデータ管理テーブル400に含まれていなくてもよい。また、第1の圧縮技術の設定情報や、タイムスタンプなど、以上で述べた以外のフィールドが圧縮済みデータ管理テーブル400に含まれていてもよい。
【0054】
(1-5)データ圧縮処理とデータ伸長処理
図5は、データ圧縮プログラム311のフロー図である。圧縮部102のプロセッサ221は、データ生成源100が生成した動画データの受領を契機に、データ圧縮プログラム311を開始する(S500)。
【0055】
S501は、圧縮部102がデータ生成源100から受領した動画の1つ以上のフレームを、プロセッサ221がFront-end Interface220から取得するステップである。
【0056】
S502は、プロセッサ221が、S501で取得したフレームを、圧縮器A120により圧縮して、Main stream121を生成するステップである。
【0057】
S503は、プロセッサ221が、S501で生成したMain stream121を伸長器A122に入力して、第1伸長フレームを生成するステップである。S504は、プロセッサ221が、S501で取得したフレームと、S502で生成した第1伸長フレームを、第2圧縮ユニット123の入力として、Side stream126を生成するステップである。
【0058】
S505は、S502で生成したMain stream121と、S504で生成したSide stream126を、圧縮済みデータ321内の、圧縮済みデータ管理テーブル400に格納するステップである。データ名401やモデルID404などの情報についても、必要であれば、このステップで設定する。
【0059】
S506は、S505で作成された圧縮済みデータ管理テーブル400の情報を、Back-end Interface226を通して、蓄積・通信部104に送信するステップである。その後、データ圧縮プログラム311は終了する(S507)。
【0060】
図6は、データ伸長プログラム312のフロー図である。伸長部103のプロセッサ231は、蓄積・通信部104から圧縮データの受領を契機に、データ伸長プログラム312を開始する(S600)。
【0061】
S601は、伸長部103が蓄積・通信部104から受領した圧縮データを、プロセッサ231が、Back-end Interface236から取得し、RAM233の圧縮済みデータ領域321に、圧縮済みデータ管理テーブル400の形式で格納するステップである。
【0062】
S602は、プロセッサ231が、圧縮済みデータ領域321内の圧縮済みデータ管理テーブル400から、Main stream130を取得するステップである。S603は、プロセッサ231が、S602で取得したMain stream130を、伸長器A122により、第1伸長フレームに伸長するステップである。
【0063】
S604は、プロセッサ231が、圧縮済みデータ管理テーブル400から、Side stream132を取得するステップである。
【0064】
S605は、プロセッサ231が、S603で生成した第1伸長フレームと、S604で取得したSide streamを、第2伸長ユニット133に入力し、最終伸長フレームを生成するステップである。
【0065】
S606は、S605で生成した最終伸長フレームを、Front-end Interface 230を通して、クライアント101に送信するステップである。その後、データ伸長プログラム312は終了する(S607)。
【0066】
以上、データ圧縮プログラム311とデータ伸長プログラム312のフローについて述べた。以下では、第1の圧縮技術が標準コーデックであり、第2の圧縮技術がDeep Video Compressionである場合について、フローのより具体的な例を3通り説明する。ただし、データ圧縮プログラム311とデータ伸長プログラム312は、以下に記載の例に限定されるものではない。
【0067】
また、以下に記載の例を2つ以上組み合わせて用いてもよい。例えば、一定の間隔でキーフレームをフレーム内符号化しつつ、その間のフレームをフレーム間符号化により符号化してもよい。フレーム内符号化を行う頻度は、例えば予め決めたフレームの枚数毎であるが、その他、可変の頻度で行うなど、どのような頻度であってもよい。
【0068】
また、全てのフレームをフレーム内符号化で符号化してもよい。また、フレーム間符号化は、時間的に1つ前のフレームをベースとするものに限定されるものではなく、例えば、時間的に2つ以上前のフレームをベースとしてもよいし、もしくは、時間的に後方であるが、既に伸長済みのフレームであってもよいし、これらの組み合わせであってもよい。また、第1の圧縮技術と第2の圧縮技術の間で、フレーム内符号化とフレーム間符号化を同期させてもよいし、各々が独立の方法で各フレームを符号化してもよい。
【0069】
図7に、動画のフレーム内符号化の例を示す。圧縮処理700は、フレーム内符号化の圧縮処理を表すブロック図である。データ生成源100が生成した元フレーム701は、標準コーデックの圧縮器である圧縮器A120に入力され、Main stream121に圧縮される。このとき、Main stream121のビット消費量を、標準コーデックのみを用いて所望の画質とするのに必要な量よりも少なくする。例えば、上述のように、標準コーデックのQPをフレーム全体で増やすことでビット消費量を削減してもよいし、標準コーデックの圧縮率がDeep Video Compressionの圧縮率よりも悪い領域において、選択的にビット消費量を削減してもよい。
【0070】
次に、Main stream121を、標準コーデックの伸長器である伸長器A122に入力し、第1伸長フレーム702を得る。その後、元フレーム701と第1伸長フレーム702を、DNNにより構成したエンコーダ703に入力する。
【0071】
エンコーダ703は、例えば、RGBフォーマットで表現された、サイズが3×Height×Widthの、元フレームのテンソルと、同サイズの第1伸長フレーム702のテンソルを、チャネル軸方向に連接した6×Height×Widthのテンソルを入力として、3次元のテンソルを出力する、畳み込み層やPooling層で構成されたDNNである。
【0072】
符号化器704は、エンコーダ703が出力したテンソルを、ビット列に符号化し、Side stream126を出力する。符号化器704は、エンコーダ703が出力したテンソルを表現する浮動小数点数のビット列を、単純にシリアライズするものであってもよいし、より圧縮率を改善するために、当該テンソルの各要素の値の発生確率を、DNNで構成されたAuto Regressive ModelやHyper Prior Network等のエントロピー推定器を用いて推定し、その結果に基づいて、Range Coder等のエントロピー符号化をするものであってもよいし、その他任意の手段が用いられていてもよい。
【0073】
なお、エンコーダ703と符号化器704に含まれるDNNは、Deep Video Compressionの圧縮率が標準コーデックの圧縮率よりもよい領域において、特にビットを多く割り当てるように学習されてもよい。学習処理の例については、後述する。エンコーダ703及び符号化器704は、第2圧縮ユニット123を構成する。画質改善情報抽出器124の機能はエンコーダ703に含まれ、符号化器704は圧縮機能を有する。
【0074】
伸長処理710は、フレーム内符号化の伸長処理を表すブロック図である。Main stream130は、標準コーデックの伸長器である伸長器A122に入力され、第1伸長フレーム711に伸長される。Side stream132は、復号化器712に入力され、ビット列からテンソル等の形式に復号される。なお、復号化器712は、例えば、符号化器704の逆変換となっており、符号化器704でエントロピー符号化を行う場合には、復号化器712は、符号化器704が用いるのと同じエントロピーモデルを使用して、復号化を行う。
【0075】
復号されたテンソルと、第1伸長フレーム711は、デコーダ713に入力され、最終伸長フレーム714が生成される。デコーダ713は、例えば、RGBフォーマットで表現された、サイズが3×Height×Widthの第1伸長フレーム711のテンソルと、復号化器712が出力したテンソルを入力として、サイズが3×Height×Widthの最終伸長フレーム714を出力する、Transpose畳み込み層などで構成されたDNNである。符号化器704及びデコーダ713は、第2伸長ユニット133を構成する。符号化器704は伸長機能を有する。フレーム生成器135の機能はデコーダ713に含まれる。
【0076】
図8は、動画のフレーム間符号化の、1つ目の例を示す。ブロックを接続する矢印線のうち、太線は伸長時に必要となる経路を表す。圧縮時には、細線と太線両方の経路が使用される。
【0077】
データ生成源100が生成した元フレーム801は、標準コーデックの圧縮器である圧縮器A120で圧縮され、Main stream121に変換されたのち、標準コーデックの伸長器である伸長器A122により、第1伸長フレーム802に変換される。この時、フレーム内符号化と同様に、Main stream121のビット消費量を抑制する。
【0078】
次に、元フレーム801と第1伸長フレーム802は、画質改善情報抽出器803により、テンソル等の形式で表現されるFeature804に変換される。画質改善情報抽出器803は、例えば、畳み込み層やPooling層などで構成されたDNNである。画質改善情報抽出器803は、例えば、RGBフォーマットで表現された、サイズが3×Height×Widthの元フレーム801のテンソルと、同サイズの第1伸長フレーム802のテンソルを、チャネル軸方向に連接した、サイズが6×Height×Widthのテンソルを入力として、3次元テンソルであるFeature804を出力する。
【0079】
次に、元フレーム801よりも時間的に1つ前のフレームの第1伸長フレーム805と、最終伸長フレーム806を、画質改善情報抽出器807に入力して、1つ前のフレームにおけるFeature808(以下、前方Feature)を抽出する。
【0080】
なお、この時に用いる画質改善情報抽出器807は、画質改善情報抽出器803と同一であってもよいし、異なるものであってもよい。また、画質改善情報抽出器803と807は、DNNを使用していなくてもよく、例えば、入力された2つのフレームの差を求める処理などであってもよい。
【0081】
また、第1伸長フレーム805と最終伸長フレーム806は、元フレーム801の時間的に1フレーム前方のフレームに限定されるものではなく、2フレーム以上前のフレームであってもよいし、時間的に後方であるが既に伸長済みのフレームであってもよい。これらフレームから、画質改善情報抽出器807により前方Featureが抽出され得る。
【0082】
次に、Feature804と前方Feature808を動き抽出809に入力し、後段の動き補償812において必要となる情報を抽出する。動き抽出809は、例えば、Optical Flowを推定する学習済みのDNNであってもよいし、
図8に含まれる他のDNNとともにEnd-to-endに学習されるDNNであってもよいし、標準コーデック等で用いられる動きベクトル予測器がであってもよいし、その他、任意の処理であってもよい。
【0083】
動き圧縮810は、動き抽出809の出力をビット列に圧縮する。動き圧縮810は、例えば、動き抽出809が出力したテンソルを、畳み込み層を含むDNNにより変換し、その結果得られたテンソルを、DNNにより構成されたAuto Regressiveモデル等のエントロピー推定器を用いて、Range Coder等で符号化する。なお、動き圧縮810の方法はこれに限定されるものではない。
【0084】
動き圧縮810の出力は、動き伸長811により伸長されたのち、前方Feature808とともに動き補償812に入力される。動き補償812は、前方Feature808を、動き伸長811が出力した情報を基にして、補正する処理である。動き補償812は、例えば、3次元テンソルである前方Feature808を、動き伸長811が出力した、幅と高さが前方Feature808と同一で、チャネル数が2のオフセット情報により、ワープ処理するブロックであるが、これに限定されるものではない。
【0085】
次に、残差抽出器813は、Feature804から、動き補償812の結果として得られたテンソルを、要素毎に減算して、残差情報を出力する。ただし、残差抽出器813は、これに限定されるものではなく、DNNなどであってもよい。差分情報は、残差圧縮814によりビット列に圧縮される。残差圧縮814は、動き圧縮810と同様の技術を用いていてもよいし、その他どのような圧縮技術が用いられていてもよい。
【0086】
Side stream126には、動き圧縮810が生成したビット列と、残差圧縮814が生成したビット列を含むデータ構造となる。残差圧縮814が生成したビット列は、残差伸長815により伸長されたのち、動き補償812の出力とともに、残差補償器816に入力される。残差補償器816は、例えば、残差伸長815の出力を動き補償812の出力を要素毎に加算したテンソル817(以下、伸長Feature)を出力する処理であるが、これに限定されるものではない。
【0087】
最後に、第1伸長フレーム802と伸長Feature817をフレーム生成器818に入力して、最終伸長フレーム819を得る。フレーム生成器818は、Transposed畳み込み層などで構成されたDNNであるが、これに限定されるものではない。
【0088】
なお、以上では、伸長済みの第1伸長フレーム805と最終伸長フレーム806を用いて動き抽出809及び動き補償812を行う例を示したが、これに限定されるものではなく、例えば、伸長済みの伸長Feature817をバッファリングしておき、それを前方Feature808として用いてもよい。
【0089】
図9は、フレーム間符号化の、2つ目の例を示す。まず、圧縮処理について説明する。複数のフレームからなる元フレーム901を、標準コーデックの圧縮器である圧縮器A120に入力し、Main stream902を得たのち、その伸長器A122により、複数のフレームからなる第1伸長フレーム903を得る。
【0090】
次に、元フレーム901と第1伸長フレーム903を、複数フレーム分同時にエンコーダ904に入力する。エンコーダ904は、例えば、RGBフォーマットで表現された、サイズが3×Height×Widthの、Nフレーム分の、元フレーム901と第1伸長フレームをチャネル軸方向に連接した、6N×Height×Widthのテンソルを入力として、3次元テンソルを出力する、2次元畳み込み層などで構成されたDNNである。
【0091】
また、エンコーダ904は、RGBフォーマットで表現された、サイズが3×Height×Widthの、Nフレーム分の元フレーム901と第1伸長フレームを、チャネル軸方向とフレーム軸方向に連接した、6×N×Height×Widthのテンソルを入力として、3次元畳み込み層などで構成したDNNにより、テンソルに変換する処理であってもよいし、その他、任意の処理であってもよい。
【0092】
符号化器905は、エンコーダ904が生成したテンソル等のデータを、ビット列に変換して、Side stream906を生成する。符号化器905は、例えば、エンコーダ904が出力したテンソルを、DNNにより構成されたAuto Regressiveモデルのエントロピー推定器を用いて、Range Coder等で符号化する処理であるが、これに限定されるものではない。
【0093】
次に、伸長処理について説明する。伸長器A122は、Main stream902から第1伸長フレーム903を出力する。また、復号化器907は、Side stream906を、テンソル等のデータに復号する。最後に、第1伸長フレーム903と、復号化器907の出力を、デコーダ908に入力して、複数フレーム分の最終伸長フレーム909を得る。
【0094】
デコーダ908は、例えば、サイズが3N×Height×Widthのテンソルを出力することで、Nフレーム分の最終伸長フレーム909を出力する、2次元Transposed畳み込み層などで構成されたDNNである。また、デコーダ908は、複数の3次元テンソルを入力として、サイズが3×Height×Widthのテンソルを複数個出力する、3次元畳み込み層で構成されたDNNであってもよいし、その他、任意の処理であってもよい。
【0095】
(1-6)DNN学習処理
図10に、DNNの学習プログラム313の概要を示す。以下では、
図7に示したフレーム内符号化を例に学習の概要を示すが、
図8と
図9に示したフレーム間符号化に対しても、同様の方法でDNNを学習させることができる。なお、DNNの学習方法は、以下で説明するものに限定されるものではなく、如何なる学習データ、Optimizer、Loss関数などを用いたものであってもよい。
【0096】
学習データセット1000は、DNNの学習に用いるデータである。元フレーム1001は、圧縮前の動画のフレームからなるデータである。第1伸長フレーム1002は、元フレーム1001を標準コーデックのフレーム内符号化により圧縮伸長して得られるフレームである。
【0097】
DNNの学習フローを説明する。まず、学習データセット1000から、学習に用いるバッチサイズ分の元フレーム1001と、それに対応する第1伸長フレーム1002を取得する。次に、元フレーム1001と、第1伸長フレーム1002を、エンコーダ703に入力し、テンソル等のFeature1010を出力させる。
【0098】
エンコーダ703の出力において、Feature1010の値を整数などに量子化する処理が含まれる場合、逆誤差伝播法が可能となるように、学習時には量子化の代わりに、テンソルにノイズを加算するなどの変更がなされてもよい。その他、一般に知られる、逆誤差伝播法を可能とする量子化の近似手法が用いられてもよい。次に、Feature1010と第1伸長フレーム1002をデコーダ713に入力し、最終伸長フレーム1011を取得する。
【0099】
次に、取得した最終伸長フレーム1011と元フレーム1001との間の画質を、Mean Squared Error (MSE)1014等で定量化する。なお、画質の指標は、MSEに限定されるものではなく、L1ノルム、Multi-scale Structural Similarityなど、任意の指標でもよい。Feature1010をエントロピー符号化するような符号化器704が用いられる場合、Feature1010の各要素の値の発生確率を、DNNで構成されたAuto Regressive Modelなどの、エントロピー推定器1012により推定する。
【0100】
次に、エントロピー推定器1012の推定結果をもとに、Feature1010の符号化後のビット消費量を、bit-per-pixel(bpp)計算器1013により算出する。なお、bppは、ピクセル当たりのビット消費量を表す指標である。1013で算出したbppと、1014で計算したMSEはLoss関数1015に入力され、学習のLoss値が計算される。
【0101】
その後、Loss関数の値を基に、逆誤差伝播法などを用いて、エンコーダ703、デコーダ713、エントロピー推定器1012などに含まれるDNNの学習パラメタを更新する。なお、Loss関数1015の入力は、算出したbppとMSEに限られるものではなく、DNNの学習パラメタを入力として、Weight Decay等の正則化を学習に反映させてもよい。また、エントロピー推定器1012がHyper Prior Networkである場合は、Hyper Priorのbppを同様に推定し、Loss関数1015の入力としてもよい。
【0102】
Loss関数1015は、例えば、bppとMSEを、ハイパーパラメタaにより、1次結合する関数(L=MSE+a×bpp)である。ハイパーパラメタaは、Side stream126のビット消費量を調整するパラメタである。
【0103】
また、Loss関数1015として、下記式(1)を用いてもよい。
【0104】
【0105】
式(1)を用いることで、ハイパーパラメタaを調整することなく、標準コーデックに対する、本実施例のビット消費量の削減率を最大化するように、DNNを学習させることができる。式(1)は、最終伸長フレーム1011の画質において、標準コーデックのビット消費量に対するビット消費量の割合を、100分率で表した式である。
【0106】
図11を用いて、式(1)を説明する。曲線1100は、学習バッチxにおける、標準コーデックのレート歪み曲線を表す。関数rate_x(mse)は、曲線1100を表す関数であり、学習バッチxの画質がmseとなるように標準コーデックで圧縮伸長したときの、Main stream126のビット消費量を返す関数である。この関数は、複数のQPで学習バッチxの元フレーム1001を圧縮したときの、画質とビット消費量の実測値から、4次関数などで補間して求めることができるが、これに限られるものではない。
【0107】
また、補間処理で必要となるQP毎の画質とビット消費量の実測値は、学習データセット1000に含まれていてもよい。点1101は、元フレーム1001を、標準コーデックにより、第1伸長フレーム1002に圧縮伸長したときの点であり、そのbppをbpp_mainとする。点1102は、元フレーム1001を本実施例により圧縮伸長したときの点であり、その画質をmse_xhatとする。
【0108】
Side stream126のビット消費量をbpp_sideとすると、本実施例のビット消費量は、bpp_main+bpp_sideとなり、式(1)の分子に相当する。標準コーデックにより、元フレーム1001を圧縮伸長して、画質をmse_xhatとするときのビット消費量は、rate_x(mse_xhat)と推定でき、式(1)の分母に相当する。
【0109】
つまり、式(1)をLoss関数1015として用いることで、画質を同等としたときに、標準コーデックに対して本実施例のビット消費量の割合が最小となるような、Side stream126のビット消費量となるように、DNNを学習させることができる。なお、Loss関数1015は、以上で説明した関数に限られるものではなく、他の関数であってもよい。
【0110】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【0111】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード等の記録媒体に置くことができる。
【0112】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。