(57)【要約】【課題】画像に対する畳み込み演算の際に保持するデータのデータ量を削減する。【解決手段】演算部１２は、画像データ１３からフーリエ変換を用いて、異なる周波数に対応する複数の第１の係数を算出し、大きさが閾値未満の第１の係数が除外された周波数領域データ１５を記憶部１１に格納する。演算部１２は、カーネルデータ１４からフーリエ変換を用いて、周波数領域データ１５が示す第１の係数に対応する周波数の第２の係数を算出し、周波数領域データ１６を記憶部１１に格納する。演算部１２は、周波数領域データ１５，１６と逆フーリエ変換とを用いて、画像データ１３にカーネルデータ１４を適用した結果を示す特徴マップ１７を生成する。【選択図】図１
2019128806.tif 000002
【特許請求の範囲】
【請求項１】
画像データと前記画像データに適用されるカーネルデータとを記憶する記憶部と、
前記画像データからフーリエ変換を用いて、異なる周波数に対応する複数の第１の係数を算出し、前記複数の第１の係数のサブセットを示しており大きさが閾値未満の第１の係数が除外された第１の周波数領域データを前記記憶部に格納し、前記カーネルデータからフーリエ変換を用いて、前記第１の周波数領域データが示す第１の係数に対応する周波数の第２の係数を算出し、前記算出した第２の係数を示す第２の周波数領域データを前記記憶部に格納し、前記第１の周波数領域データと前記第２の周波数領域データと逆フーリエ変換とを用いて、前記画像データに前記カーネルデータを適用した結果を示す特徴マップを生成する演算部と、
を有するデータ圧縮装置。
【請求項２】
前記第２の周波数領域データの格納では、前記演算部は、前記第１の周波数領域データから除外された第１の係数に対応する周波数の第２の係数を算出することを抑止する、
請求項１記載のデータ圧縮装置。
【請求項３】
前記特徴マップの生成では、前記演算部は、前記第１の周波数領域データと前記第２の周波数領域データとから、前記第１の周波数領域データが示す第１の係数に対応する周波数の第３の係数を算出し、前記算出した第３の係数を示す第３の周波数領域データを前記記憶部に格納し、前記第３の周波数領域データから逆フーリエ変換を用いて前記特徴マップを生成する、
請求項１記載のデータ圧縮装置。
【請求項４】
前記第３の周波数領域データの格納では、前記演算部は、前記第１の周波数領域データから除外された第１の係数に対応する周波数の第３の係数を算出することを抑止する、
請求項３記載のデータ圧縮装置。
【請求項５】
前記特徴マップの生成では、前記演算部は、前記第１の周波数領域データから除外された第１の係数を、大きさが前記閾値未満の所定値とみなして逆フーリエ変換を行う、
請求項１記載のデータ圧縮装置。
【請求項６】
コンピュータが実行するデータ圧縮方法であって、
画像データからフーリエ変換を用いて、異なる周波数に対応する複数の第１の係数を算出し、前記複数の第１の係数のサブセットを示しており大きさが閾値未満の第１の係数が除外された第１の周波数領域データを、前記コンピュータが有する記憶部に格納し、
前記画像データに対して適用されるカーネルデータからフーリエ変換を用いて、前記第１の周波数領域データが示す第１の係数に対応する周波数の第２の係数を算出し、前記算出した第２の係数を示す第２の周波数領域データを前記記憶部に格納し、
前記第１の周波数領域データと前記第２の周波数領域データと逆フーリエ変換とを用いて、前記画像データに前記カーネルデータを適用した結果を示す特徴マップを生成する、
データ圧縮方法。
【請求項７】
コンピュータに、
画像データからフーリエ変換を用いて、異なる周波数に対応する複数の第１の係数を算出し、前記複数の第１の係数のサブセットを示しており大きさが閾値未満の第１の係数が除外された第１の周波数領域データを、前記コンピュータが有する記憶部に格納し、
前記画像データに対して適用されるカーネルデータからフーリエ変換を用いて、前記第１の周波数領域データが示す第１の係数に対応する周波数の第２の係数を算出し、前記算出した第２の係数を示す第２の周波数領域データを前記記憶部に格納し、
前記第１の周波数領域データと前記第２の周波数領域データと逆フーリエ変換とを用いて、前記画像データに前記カーネルデータを適用した結果を示す特徴マップを生成する、
処理を実行させるデータ圧縮プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ圧縮装置、データ圧縮方法およびデータ圧縮プログラムに関する。
【背景技術】
【０００２】
画像認識や画像分類や画像検索などの画像処理では、対象画像の特徴を抽出する際に畳み込み（コンボリューション）が行われることがある。畳み込みは、抽出したい特徴に応じたカーネルを、対象画像上で平行移動しながら重ねて足し合わせる積和演算である。畳み込みでは、対象画像とカーネルから特徴マップが生成される。特徴マップの１つの要素は、対象画像の１つの要素を中心とする部分領域にカーネルを重ね合わせ、部分領域とカーネルの間で対応する要素同士を乗算して合計することで算出できる。
【０００３】
ただし、畳み込みでは上記の原則的な演算方法に代えて、フーリエ変換を用いた代替の演算方法を利用することがある。代替の演算方法は、フーリエ変換により対象画像とカーネルをそれぞれ周波数領域データに変換し、対象画像の周波数領域データとカーネルの周波数領域データの間で対応する要素同士を乗算する。そして、逆フーリエ変換により乗算結果を空間領域データに変換する。畳み込み定理によれば、代替の演算方法で出力される空間領域データは、原則的な演算方法で出力される特徴マップに一致する。代替の演算方法は、原則的な演算方法よりも高速に実行し得る。
【０００４】
なお、圧縮された画像データの中から所望の画像を検索する画像検索装置が提案されている。提案の画像検索装置は、離散コサイン変換（ＤＣＴ：Discrete Cosine Transform）により圧縮された画像データから各ブロックの直流成分を分離する。画像検索装置は、分離した直流成分に基づいて、入力された検索条件を満たすブロックを抽出し、抽出したブロックから逆離散コサイン変換（ＩＤＣＴ：Inverse Discrete Cosine Transform）によりビットマップ画像を復元する。画像検索装置は、復元されたビットマップ画像が検索条件を満たす場合、当該画像を検索結果として出力する。
【０００５】
また、圧縮された画像データから部品形状を認識する部品形状認識方法が提案されている。提案の部品形状認識方法は、部品のエッジまたはコーナを写した部分画像を抽出し、抽出した部分画像に対して離散コサイン変換を行い、更に高周波成分の係数を除去して圧縮データを生成する。予め教師付き学習により学習されたニューラルネットワークに圧縮データを入力して、エッジ形状またはコーナ形状を認識する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平９−４４５１９号公報
【特許文献２】特開平１０−１８７９７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記のフーリエ変換を用いた畳み込みでは、対象画像とカーネルから特徴マップを生成する過程で、対象画像に対応する周波数領域データとカーネルに対応する周波数領域データが生成され、両者の乗算結果が生成される。このため、畳み込み演算の際に保持するデータのデータ量が大きくなり、多層のニューラルネットワークにおいては、メモリ使用量が増加するという問題がある。
【０００８】
１つの側面では、本発明は、画像に対する畳み込み演算の際に保持するデータのデータ量を削減できるデータ圧縮装置、データ圧縮方法およびデータ圧縮プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、記憶部と演算部とを有するデータ圧縮装置が提供される。記憶部は、画像データと画像データに適用されるカーネルデータとを記憶する。演算部は、画像データからフーリエ変換を用いて、異なる周波数に対応する複数の第１の係数を算出し、複数の第１の係数のサブセットを示しており大きさが閾値未満の第１の係数が除外された第１の周波数領域データを記憶部に格納する。演算部は、カーネルデータからフーリエ変換を用いて、第１の周波数領域データが示す第１の係数に対応する周波数の第２の係数を算出し、算出した第２の係数を示す第２の周波数領域データを記憶部に格納する。演算部は、第１の周波数領域データと第２の周波数領域データと逆フーリエ変換とを用いて、画像データにカーネルデータを適用した結果を示す特徴マップを生成する。
【００１０】
また、１つの態様では、コンピュータが実行するデータ圧縮方法が提供される。また、１つの態様では、コンピュータに実行させるデータ圧縮プログラムが提供される。
【発明の効果】
【００１１】
１つの側面では、画像に対する畳み込み演算の際に保持するデータのデータ量を削減できる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態のデータ圧縮装置を説明する図である。
【図２】第２の実施の形態の画像処理装置の例を示すブロック図である。
【図３】畳み込みニューラルネットワークの例を示す図である。
【図４】第１の畳み込み方法の例を示す図である。
【図５】第２の畳み込み方法の例を示す図である。
【図６】アプリケーションプログラムの機能例を示すブロック図である。
【図７】データ構造例を示す第１の図である。
【図８】データ構造例を示す第２の図である。
【図９】畳み込み処理の手順例を示すフローチャートである。
【図１０】畳み込み処理の手順例を示すフローチャート（続き１）である。
【図１１】畳み込み処理の手順例を示すフローチャート（続き２）である。
【図１２】畳み込み処理の手順例を示すフローチャート（続き３）である。
【図１３】データの読み出しおよび書き込みの例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１４】
図１は、第１の実施の形態のデータ圧縮装置を説明する図である。
第１の実施の形態のデータ圧縮装置１０は、画像データに対する畳み込み演算を行う。データ圧縮装置１０は、クライアントコンピュータやサーバコンピュータなどの汎用コンピュータでもよいし、組み込みシステムでもよいし、専用ハードウェアであってもよい。
【００１５】
データ圧縮装置１０は、記憶部１１および演算部１２を有する。記憶部１１は、例えば、ＲＡＭ（Random Access Memory）などの半導体メモリである。演算部１２は、プロセッサ、プロセッサのコア、複数のプロセッサまたは複数のコアの集合（マルチプロセッサ）などである。ただし、演算部１２がＦＰＧＡ（Field-Programmable Gate Array）やＡＳＩＣ（Application Specific Integrated Circuit）などの半導体装置を含んでもよい。
【００１６】
記憶部１１は、画像データ１３とカーネルデータ１４を記憶する。画像データ１３は、例えば、撮像装置によって撮像された画像を示す。画像データ１３は、例えば、二次元座標によって位置を特定できる複数の要素（画素など）を含む。カーネルデータ１４は、畳み込みにおいて画像データ１３に対して適用されるデータである。カーネルデータ１４は、エッジなど画像データ１３から抽出したい特徴に対応して予め用意されている。カーネルデータ１４は、例えば、二次元座標によって位置を特定できる複数の要素を含む。
【００１７】
演算部１２は、記憶部１１に記憶された画像データ１３とカーネルデータ１４の間の畳み込み演算を行う。演算部１２は、画像データ１３からフーリエ変換を用いて周波数領域データ１５を生成し、周波数領域データ１５を記憶部１１に格納する。周波数領域データ１５は、フーリエ変換により算出される異なる周波数に対応する複数の第１の係数のサブセットを示している。周波数領域データ１５では、大きさが閾値未満である第１の係数が除外されている。例えば、周波数領域データ１５は、フーリエ変換により算出される第１の係数のうち大きさが閾値以上である第１の係数のみを含む。大きさが閾値未満である第１の係数は、例えば、０などの所定値とみなされる。大きさが閾値未満である第１の係数を所定値に近似している（例えば、０に丸めている）と言うことができる。
【００１８】
また、演算部１２は、カーネルデータ１４からフーリエ変換を用いて周波数領域データ１６を生成し、周波数領域データ１６を記憶部１１に格納する。周波数領域データ１６は、フーリエ変換により算出される異なる周波数に対応する複数の第２の係数の少なくとも一部を示している。周波数領域データ１６は、少なくとも周波数領域データ１５が示す第１の係数に対応する周波数の第２の係数を含む。周波数領域データ１５で除外されている第１の係数に対応する周波数の第２の係数は、周波数領域データ１６に含まれなくてもよい。演算部１２は、周波数領域データ１６から除外すべき第２の係数についてはカーネルデータ１４から算出することを抑止してもよい。
【００１９】
そして、演算部１２は、記憶部１１に記憶された周波数領域データ１５，１６と逆フーリエ変換とを用いて、画像データ１３とカーネルデータ１４の間の畳み込みの結果を示す特徴マップ１７を生成して記憶部１１に格納する。このとき、周波数領域データ１５に含まれていない第１の係数は０などの所定値とみなすことが考えられる。特徴マップ１７は、カーネルデータ１４に従って画像データ１３から抽出された特徴を表している。特徴マップ１７は、例えば、二次元座標によって位置を特定できる複数の要素を含む。
【００２０】
周波数領域データ１５，１６から特徴マップ１７を生成するにあたり、例えば、演算部１２は、周波数領域データ１５，１６から他の周波数領域データを生成する。他の周波数領域データは、例えば、周波数領域データ１５と周波数領域データ１６の間で対応する係数同士を乗算することで生成される。このとき、周波数領域データ１５に含まれていない第１の係数に関する演算は省略することができる。演算部１２は、生成した他の周波数領域データから逆フーリエ変換を用いて特徴マップ１７を生成する。
【００２１】
第１の実施の形態のデータ圧縮装置１０によれば、画像データ１３からフーリエ変換により生成される周波数領域データ１５において、大きさが閾値未満である第１の係数が省略されて記憶部１１に格納される。カーネルデータ１４からフーリエ変換により生成される周波数領域データ１６においても、周波数領域データ１５で省略された第１の係数に対応する第２の係数を省略して記憶部１１に格納することが可能である。よって、畳み込みで生成されるデータを効率的に圧縮でき、記憶部１１の記憶領域の使用量を削減できる。
【００２２】
なお、データ圧縮装置１０のデータ圧縮方法は、特徴マップ１７を用いて画像認識など画像データ１３の特徴の推論を行う場合に好適である。例えば、データ圧縮装置１０のデータ圧縮方法は、畳み込みニューラルネットワークの畳み込み層で使用できる。特徴マップ１７を用いた推論では、畳み込み結果に厳密な正確性は求められず、畳み込みの過程で小さい係数を破棄して所定値に近似しても推論結果への影響は小さいためである。
【００２３】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
第２の実施の形態の画像処理装置１００は、ディープニューラルネットワーク（ＤＮＮ：Deep Neural Network）の一種である畳み込みニューラルネットワーク（ＣＮＮ：Convolutional Neural Network）を用いて画像認識を行う。例えば、画像処理装置１００は、画像に人間が写っているか否かや、猫などの動物が写っているか否かを判定する。ただし、第２の実施の形態の画像処理方法は、画像検索や画像分類など他の用途に用いることもできる。画像処理装置１００は、汎用コンピュータでもよいし組み込みシステムであってもよい。また、画像処理装置１００は、ＦＰＧＡまたは専用回路を有していてもよい。
【００２４】
図２は、第２の実施の形態の画像処理装置の例を示すブロック図である。
画像処理装置１００は、命令制御コア１０１、ロードストア制御部１０２、演算コア１０３、レジスタファイル１０４、キャッシュメモリ１０５、ＲＡＭ１０６および不揮発性ストレージ１０７を有する。画像処理装置１００は更に、画像信号処理部１１１、入力信号処理部１１２、媒体リーダ１１３および通信インタフェース１１４を有してもよい。
【００２５】
命令制御コア１０１は、アプリケーションプログラムの命令を実行するプロセッサコアである。命令制御コア１０１は、不揮発性ストレージ１０７に記憶されたアプリケーションプログラムを起動し、アプリケーションプログラムの命令に従って、ロードストア制御部１０２を制御すると共に演算コア１０３に演算を実行させる。
【００２６】
ロードストア制御部１０２は、命令制御コア１０１からの指示に従って、レジスタファイル１０４、キャッシュメモリ１０５およびＲＡＭ１０６の間のデータ転送を制御する。データ転送には、ＲＡＭ１０６からキャッシュメモリ１０５への読み出しと、キャッシュメモリ１０５からＲＡＭ１０６への書き込みが含まれる。また、データ転送には、キャッシュメモリ１０５からレジスタファイル１０４への読み出しと、レジスタファイル１０４からキャッシュメモリ１０５への書き込みが含まれる。
【００２７】
演算コア１０３は、命令制御コア１０１からの指示に応じて演算を行うプロセッサコアである。演算コア１０３は各種の演算器を有する。例えば、演算コア１０３は、ＦＭＡ（Fused Multiple Adder）部１０３ａ、比較部１０３ｂおよび乗算部１０３ｃを有する。ＦＭＡ部１０３ａは、乗算と加算を組み合わせた複合演算を実行する演算器である。ＦＭＡ部１０３ａは、単精度浮動小数点積和演算を行うことができる。ＦＭＡ部１０３ａは、第１のオペランドの値と第２のオペランドの値を乗算し、乗算結果に第３のオペランドの値を加算する。ＦＭＡ部１０３ａは、高速フーリエ変換（ＦＦＴ：Fast Fourier Transform）や逆高速フーリエ変換（ＩＦＦＴ：Inverse Fast Fourier Transform）に用いることができる。比較部１０３ｂは、比較演算を実行する演算器であり、第１のオペランドの値が第２のオペランドの値以上であるか判定する。乗算部１０３ｃは、乗算を実行する演算器であり、第１のオペランドの値と第２のオペランドの値の積を算出する。演算コア１０３は、演算に使用するデータをレジスタファイル１０４から読み出し、演算結果をレジスタファイル１０４に書き込む。
【００２８】
レジスタファイル１０４は、データを格納する揮発性半導体メモリである複数のレジスタを含む。レジスタファイル１０４は、ロードストア制御部１０２からの指示に応じて、キャッシュメモリ１０５からレジスタにデータを読み出し、レジスタからキャッシュメモリ１０５にデータを書き込む。また、演算コア１０３によってレジスタからデータが読み出され、演算コア１０３によってレジスタにデータが書き込まれる。
【００２９】
キャッシュメモリ１０５は、データを格納する揮発性半導体メモリであり、レジスタファイル１０４とＲＡＭ１０６の中間に位置する。キャッシュメモリ１０５は、ＲＡＭ１０６よりもデータ転送が高速であり、レジスタファイル１０４よりもデータ転送が低速である。キャッシュメモリ１０５は、ロードストア制御部１０２からの指示に応じて、ＲＡＭ１０６からデータを読み出し、ＲＡＭ１０６にデータを書き込む。
【００３０】
なお、命令制御コア１０１、ロードストア制御部１０２、演算コア１０３、レジスタファイル１０４およびキャッシュメモリ１０５は、同一のプロセッサパッケージに含まれていてもよい。第２の実施の形態では、アプリケーションプログラムの命令を実行する命令制御コア１０１と画像処理を行う演算コア１０３とを分離しているが、両者を一体としてもよい。各プロセッサコアを「プロセッサ」と言うこともあるし、複数のプロセッサまたは複数のプロセッサコアの集合を「プロセッサ」と言うこともある。
【００３１】
ＲＡＭ１０６は、演算コア１０３が演算に使用する各種のデータを記憶する揮発性半導体メモリである。ＲＡＭ１０６は、命令制御コア１０１が実行するアプリケーションプログラムを更に記憶してもよい。ＲＡＭ１０６は、演算コア１０３から見て「外部メモリ」と言うこともある。キャッシュメモリ１０５によってＲＡＭ１０６からデータが読み出され、キャッシュメモリ１０５によってＲＡＭ１０６にデータが書き込まれる。
【００３２】
不揮発性ストレージ１０７は、命令制御コア１０１が実行するアプリケーションプログラムを記憶する。不揮発性ストレージ１０７として、ＲＯＭ（Read Only Memory）、フラッシュメモリ、ＨＤＤ（Hard Disk Drive）など各種の記憶装置を使用できる。不揮発性ストレージ１０７は、ＲＡＭ１０６にロードされるデータを更に記憶してもよい。
【００３３】
画像信号処理部１１１は、画像処理装置１００にディスプレイ１１５が接続されている場合に、ディスプレイ１１５に画面を表示させる。ただし、ディスプレイ１１５が画像処理装置１００と一体に形成されていてもよい。ディスプレイ１１５として、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなど各種のディスプレイを使用することができる。
【００３４】
入力信号処理部１１２は、画像処理装置１００に入力デバイス１１６が接続されている場合に、入力デバイス１１６から入力信号を取得する。ただし、入力デバイス１１６が画像処理装置１００と一体に形成されてもよい。入力デバイス１１６として、マウス、タッチパネル、タッチパッド、トラックボール、キーボード、リモートコントローラ、ボタンスイッチなど各種の入力デバイスを使用することができる。
【００３５】
媒体リーダ１１３は、記録媒体１１７に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１７として、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなど各種の記録媒体を使用することができる。媒体リーダ１１３は、例えば、記録媒体１１７から読み取ったプログラムやデータをＲＡＭ１０６などにコピーする。
【００３６】
通信インタフェース１１４は、ネットワーク１１８に接続され、ネットワーク１１８を介して他の装置と通信を行うインタフェースである。通信インタフェース１１４は、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、基地局と無線リンクで接続される無線通信インタフェースでもよい。
【００３７】
次に、畳み込みニューラルネットワークについて説明する。
図３は、畳み込みニューラルネットワークの例を示す図である。
画像処理で使用される畳み込みニューラルネットワークは、畳み込み層やプーリング層や全結合層などの複数の処理レイヤを直列に並べたネットワークであり、人間の視覚に対応する効果をもつ。ある処理レイヤは、前段の処理レイヤの処理結果を入力として受け付け、当該処理レイヤの処理結果を次段の処理レイヤに出力する。ただし、最初の処理レイヤの入力は当初の画像データであり、最後の処理レイヤの出力は判定値である。第２の実施の形態の画像処理装置１００は、車載カメラなどの撮像装置によって生成された画像を畳み込みニューラルネットワークに入力し、人間や猫などの特定の種類の物体が画像に写っている可能性を示す判定値を取得する。例えば、ある手順で算出された判定値が大きいほど、取得した画像に人間が写っている可能性が高いと判定される。画像処理装置１００は、画像に写った物体の種類を判定値に基づいて判定することができる。
【００３８】
畳み込みニューラルネットワークに入力される画像データは、サイズがＮ×Ｎの正方形の画像を示している。例えば、画像データのサイズは２４４×２４４である。画像データの各要素はｘ座標とｙ座標の組で特定される。画像データの各要素は、２５６階調のレベルを単精度浮動小数点で表した数値である。画像データがグレースケールデータである場合、１回に入力される画像データの枚数（入力チャネル数）は１である。画像データがＲＧＢ（Red Green Blue）カラーデータである場合、入力チャネル数は３である。
【００３９】
畳み込み層では、画像から抽出したい特徴に応じて予め用意されたカーネルを、入力データに対して適用して特徴マップを生成する。畳み込みは、カーネルを用いたフィルタリングと言うこともできる。例えば、エッジ抽出用のカーネルを用いることで、画像データからエッジが検出される。その場合、エッジである可能性が高い位置に対応する要素が大きい値をもつ特徴マップが生成される。第２の実施の形態では、カーネルサイズは入力データサイズよりも小さく、特徴マップサイズは入力データサイズと同じである。カーネルおよび特徴マップの各要素はｘ座標とｙ座標の組で特定される。
【００４０】
抽出したい特徴が複数存在する場合、複数のカーネルが用意される。畳み込み層では、１つの入力データに対して独立に複数のカーネルが適用され、複数の特徴マップが生成されることがある。例えば、１００枚程度のカーネルが用意されることもある。よって、入力データの枚数と比べて特徴マップの枚数が非常に大きくなることがある。画像データとカーネルを用いた畳み込み演算の詳細については後述する。
【００４１】
プーリング層では、畳み込み層などの処理レイヤが生成した出力データのサイズを、大まかな特徴が失われないように縮小する。例えば、畳み込み層が生成した特徴マップの中の隣接する所定個の要素（例えば、２×２または３×３の要素）をグループとみなし、１グループの要素群を１要素に変換する。変換後の要素として、例えば、要素群の最大値を用いる方法や要素群の平均値を用いる方法などが考えられる。全結合層では、畳み込み層やプーリング層を繰り返すことで十分に縮小された出力データを一次元のデータ列とみなし、データ列から所定の計算方法によりスカラ値である判定値を算出する。
【００４２】
一例として図３の畳み込みニューラルネットワークは、畳み込み層４１，４３、プーリング層４２および全結合層４４を含む。畳み込み層４１は、画像データ３１を取得する。畳み込み層４１は、画像データ３１に対して異なるカーネルを適用して中間データ３２ａ，３２ｂ，３２ｃを生成する。畳み込み層４１から見て、中間データ３２ａ，３２ｂ，３２ｃは特徴マップに相当する。プーリング層４２は、中間データ３２ａ，３２ｂ，３２ｃを取得する。プーリング層４２は、中間データ３２ａをサイズの小さい中間データ３３ａに変換し、中間データ３２ｂをサイズの小さい中間データ３３ｂに変換し、中間データ３２ｃをサイズの小さい中間データ３３ｃに変換する。
【００４３】
畳み込み層４３は、中間データ３３ａ，３３ｂ，３３ｃを取得する。畳み込み層４３は、中間データ３３ａに対して異なるカーネルを適用して中間データ３４ａ，３４ｂを生成する。同様に、畳み込み層４３は、中間データ３３ｂに対して異なるカーネルを適用して中間データ３４ｃ，３４ｄを生成し、中間データ３３ｃに対して異なるカーネルを適用して中間データ３４ｅ，３４ｆを生成する。畳み込み層４３から見て、中間データ３３ａ，３３ｂ，３３ｃは画像データに相当し、中間データ３４ａ，３４ｂ，３４ｃ，３４ｄ，３４ｅ，３４ｆは特徴マップに相当する。以降、畳み込み層やプーリング層などを繰り返すことで、中間データ３５ａ，３５ｂ，３５ｃ，３５ｄ，３５ｅ，３５ｆが生成される。
【００４４】
全結合層４４は、中間データ３５ａ，３５ｂ，３５ｃ，３５ｄ，３５ｅ，３５ｆを取得し、一次元のデータ列とみなす。全結合層４４は、中間データ３５ａ，３５ｂ，３５ｃ，３５ｄ，３５ｅ，３５ｆに対して加減算などの所定の演算を行い、判定値３６ａを算出する。また、全結合層４４は、中間データ３５ａ，３５ｂ，３５ｃ，３５ｄ，３５ｅ，３５ｆに対して判定値３６ａとは異なる所定の演算を行い、判定値３６ｂを算出する。
【００４５】
次に、畳み込み層の処理について説明する。
図４は、第１の畳み込み方法の例を示す図である。
第１の畳み込み方法は、畳み込みの定義に基づく原則的な演算方法である。畳み込み層において画像データ５１に対してカーネルデータ５２を適用し、特徴マップ５３を生成することを考える。図４では説明を簡単にするため、画像データ５１および特徴マップのサイズを６×６とし、カーネルデータ５２のサイズを３×３としている。画像データ５１は要素ｄ００〜ｄ５５を含み、カーネルデータ５２は要素ｋ００〜ｋ２２を含み、特徴マップ５３は要素ｃ００〜ｃ５５を含む。画像データ５１の左上が原点、画像データ５１の原点から下方向がｘ軸、画像データ５１の原点から右方向がｙ軸である。
【００４６】
第１の畳み込み方法では、画像データ５１の要素を１つ選択し、画像データ５１の当該要素を中心としてカーネルデータ５２と同じサイズの領域を抽出する。そして、抽出した領域とカーネルデータ５２の間で同じ位置の要素同士を乗算し、乗算結果を合計するという積和演算を行う。積和演算によって算出された数値が、画像データ５１から選択した中心の要素と同じ座標をもつ特徴マップ５３の要素の値となる。
【００４７】
例えば、画像データ５１の要素ｄ１３を選択すると、画像データ５１から要素ｄ０２，ｄ０３，ｄ０４，ｄ１２，ｄ１３，ｄ１４，ｄ２２，ｄ２３，ｄ２４が抽出される。要素ｄ１３に対応する特徴マップ５３の要素ｃ１３は、ｄ０２×ｋ００＋ｄ０３×ｋ０１＋ｄ０４×ｋ０２＋ｄ１２×ｋ１０＋ｄ１３×ｋ１１＋ｄ１４×ｋ１２＋ｄ２２×ｋ２０＋ｄ２３×ｋ２１＋ｄ２４×ｋ２２と算出される。なお、特徴マップ５３の端の要素は、画像データ５１の周囲に０を補って算出する。
【００４８】
図５は、第２の畳み込み方法の例を示す図である。
第２の畳み込み方法は、フーリエ変換を用いた代替的な演算方法である。図４と同様に、畳み込み層において画像データ５１に対してカーネルデータ５２を適用し、特徴マップ５３を生成することを考える。第２の畳み込み方法を厳密に実行すれば、畳み込み定理により、第１の畳み込み方法と同じ特徴マップ５３を生成することができる。
【００４９】
第２の畳み込み方法では、空間領域の画像データ５１に対してＦＦＴを行うことで、周波数領域の画像ＦＦＴデータ５４を生成する。第２の実施の形態では、画像ＦＦＴデータ５４のサイズは画像データ５１と同じである。また、空間領域のカーネルデータ５２に対してＦＦＴを行うことで、周波数領域のカーネルＦＦＴデータ５５を生成する。ただし、ＦＦＴの前に、カーネルデータ５２のサイズを画像データ５１と同じＮ×Ｎに拡張しておく。サイズ拡張では、ｘ座標やｙ座標の大きい方に値が０の要素を追加する。第２の実施の形態では、カーネルＦＦＴデータ５５のサイズは画像データ５１と同じである。
【００５０】
画像ＦＦＴデータ５４およびカーネルＦＦＴデータ５５の各要素は、ｕ座標とｖ座標の組で特定される。左上が原点であり、原点から下方向がｕ軸であり、原点から右方向がｖ軸である。画像ＦＦＴデータ５４およびカーネルＦＦＴデータ５５の各要素は、周波数成分の係数を表す複素数である。原点に近い要素ほど低い周波数の周波数成分を表しており、原点から遠い要素ほど高い周波数の周波数成分を表している。
【００５１】
周波数領域において、画像ＦＦＴデータ５４とカーネルＦＦＴデータ５５の間で対応する要素同士を乗算することで、畳み込みデータ５６を生成する。畳み込みデータ５６のサイズは画像データ５１と同じである。第１の畳み込み方法と異なり、一定範囲の乗算結果を合計する積和演算は不要である。画像ＦＦＴデータ５４は要素Ｆｄ００〜Ｆｄ５５を含み、カーネルＦＦＴデータ５５は要素Ｆｋ００〜Ｆｋ５５を含み、畳み込みデータ５６は要素Ｆｃ００〜Ｆｃ５５を含む。Ｆｃ００＝Ｆｄ００×Ｆｋ００，Ｆｃ０１＝Ｆｄ０１×Ｆｋ０１，Ｆｃ０２＝Ｆｄ０２×Ｆｋ０２，…と算出される。周波数領域の畳み込みデータ５６に対してＩＦＦＴを行うことで、空間領域の特徴マップ５３を生成する。
【００５２】
画像データ５１から画像ＦＦＴデータ５４へのフーリエ変換は、数式（１）のように定義される。ｄ（ｘ，ｙ）は画像データ５１の要素であり、Ｆｄ（ｕ，ｖ）は画像ＦＦＴデータ５４の要素（係数）である。カーネルデータ５２からカーネルＦＦＴデータ５５へのフーリエ変換は、数式（２）のように定義される。ｋ（ｘ，ｙ）はカーネルデータ５２の要素であり、Ｆｋ（ｕ，ｖ）はカーネルＦＦＴデータ５５の要素（係数）である。畳み込みデータ５６は、数式（３）のように定義される。Ｆｃ（ｕ，ｖ）は畳み込みデータ５６の要素（係数）である。畳み込みデータ５６から特徴マップ５３への逆フーリエ変換は、数式（４）のように定義される。ｃ（ｘ，ｙ）は特徴マップ５３の要素である。
【００５３】
【数１】
2019128806.tif 000003
【００５４】
【数２】
2019128806.tif 000004
【００５５】
【数３】
2019128806.tif 000005
【００５６】
【数４】
2019128806.tif 000006
【００５７】
フーリエ変換としてＦＦＴを利用することで、計算量をＯ（Ｎ２）からＯ（Ｎ×ｌｏｇＮ）に低減できる。ＦＦＴでは数式（５）のようなバタフライ演算が繰り返し実行される。関数Ｗ（ａ，Ｎ）は数式（６）のように定義される。引数Ｎは画像データ５１のサイズによって決まる。引数ａは数式（１）や数式（２）のｕｘやｖｙに対応する。様々なａ，Ｎについて関数Ｗ（ａ，Ｎ）の値をパラメータとして予め用意しておけば、ＦＦＴを効率的に実行できる。また、逆フーリエ変換としてＩＦＦＴを利用することで計算量を低減できる。ＩＦＦＴではＦＦＴと同様にバタフライ演算が繰り返し実行される。ただし、関数Ｗ（ａ，Ｎ）に代えて数式（７）のような関数Ｗ−１（ａ，Ｎ）が使用される。引数ａは数式（４）のｕｘやｖｙに対応する。様々なａ，Ｎについて関数Ｗ−１（ａ，Ｎ）の値をパラメータとして予め用意しておけば、ＩＦＦＴを効率的に実行できる。
【００５８】
【数５】
2019128806.tif 000007
【００５９】
【数６】
2019128806.tif 000008
【００６０】
【数７】
2019128806.tif 000009
【００６１】
ここで、第２の畳み込み方法の問題点について説明する。第２の畳み込み方法では、畳み込み層の途中のみで使用される画像ＦＦＴデータ５４、カーネルＦＦＴデータ５５および畳み込みデータ５６が生成される。また、カーネルデータ５２を画像データ５１のサイズと同じＮ×Ｎに拡張している。また、畳み込みニューラルネットワークの畳み込み層は、入力チャネル数や出力チャネル数が著しく多くなることがある。このため、メモリ消費量が大きくなり、メモリ容量がボトルネックになって処理効率が低下するおそれがある。特に、メモリ容量の少ない組み込みシステムでは大きな問題となる。
【００６２】
そこで、第２の実施の形態の画像処理装置１００は、画像ＦＦＴデータ５４、カーネルＦＦＴデータ５５および畳み込みデータ５６のデータ量を削減する。画像処理装置１００は、画像ＦＦＴデータ５４の要素のうち絶対値の小さい要素を０に近似し、値が０の要素をメモリに保存しないようにする。高周波数側の要素の絶対値は十分に小さいことが多いため、０に近似されることが多い。また、画像処理装置１００は、カーネルＦＦＴデータ５５および畳み込みデータ５６の要素のうち、値を０に近似した画像ＦＦＴデータ５４の要素に対応するものをメモリに保存しないようにする。カーネルＦＦＴデータ５５および畳み込みデータ５６の生成では、当該要素の演算自体を省略することができる。
【００６３】
上記のようなデータ量の削減を行った場合、生成される特徴マップは原則的な方法で生成した場合の解と一致しなくなる。しかし、畳み込みニューラルネットワークでは、畳み込み層の後にプーリング層が配置されるなど、画像の特徴を認識すること（推論）を目的としている。このため、畳み込み層において厳密な解を生成せずに近似解を生成しても、畳み込みニューラルネットワーク全体の精度への影響は小さい。そこで、画像処理装置１００は、ＦＦＴの際に近似処理を行うことで効率的にメモリ使用量を抑制する。
【００６４】
次に、画像処理装置１００の機能およびデータ構造について説明する。
図６は、アプリケーションプログラムの機能例を示すブロック図である。
画像処理装置１００は、画像ＦＦＴ制御部１２１、カーネルＦＦＴ制御部１２２、乗算制御部１２３およびＩＦＦＴ制御部１２４を有する。画像ＦＦＴ制御部１２１、カーネルＦＦＴ制御部１２２、乗算制御部１２３およびＩＦＦＴ制御部１２４は、命令制御コア１０１がアプリケーションプログラムの命令を実行することで実現される。
【００６５】
画像ＦＦＴ制御部１２１は、ＦＦＴにより画像データを画像ＦＦＴデータに変換することを制御する。画像ＦＦＴ制御部１２１は、ロードストア制御部１０２を用いて、ＲＡＭ１０６に記憶された画像データをキャッシュメモリ１０５に転送させ、更にキャッシュメモリ１０５からレジスタファイル１０４に転送させる。画像ＦＦＴ制御部１２１は、演算コア１０３のＦＭＡ部１０３ａを用いて、画像データへのＦＦＴを実行させる。
【００６６】
次に、画像ＦＦＴ制御部１２１は、演算コア１０３の比較部１０３ｂを用いて、ＦＦＴ後の各係数の絶対値が閾値以上であるか判定させる。閾値はＲＡＭ１０６に記憶されていてもよい。画像ＦＦＴ制御部１２１は、ロードストア制御部１０２を用いて、絶対値が閾値以上である係数をレジスタファイル１０４からキャッシュメモリ１０５に転送させ、更にキャッシュメモリ１０５からＲＡＭ１０６に転送させる。一方、画像ＦＦＴ制御部１２１は、絶対値が閾値未満である係数はＲＡＭ１０６に転送しないようにする。これにより、一部の係数が省略された画像ＦＦＴデータがＲＡＭ１０６に保存される。
【００６７】
カーネルＦＦＴ制御部１２２は、ＦＦＴによりカーネルデータをカーネルＦＦＴデータに変換することを制御する。画像ＦＦＴ制御部１２１は、ロードストア制御部１０２を用いて、ＲＡＭ１０６に記憶されたカーネルデータをキャッシュメモリ１０５に転送させ、更にキャッシュメモリ１０５からレジスタファイル１０４に転送させる。カーネルＦＦＴ制御部１２２は、ＦＭＡ部１０３ａを用いてカーネルデータへのＦＦＴを実行させる。
【００６８】
ただし、カーネルＦＦＴ制御部１２２は、ＲＡＭ１０６に保存されなかった画像ＦＦＴデータの係数に対応するカーネルＦＦＴデータの係数の算出を抑制する。省略された画像ＦＦＴデータの係数は０とみなされるため、乗算結果は常に０になるためである。カーネルＦＦＴ制御部１２２は、ＲＡＭ１０６に記憶されたカーネルデータの中から、算出すべきカーネルＦＦＴデータの係数に関係する要素のみを読み出させてもよい。カーネルＦＦＴ制御部１２２は、省略されていない画像ＦＦＴデータの係数に対応するカーネルＦＦＴデータの係数のみを、レジスタファイル１０４からキャッシュメモリ１０５に転送させ、更にキャッシュメモリ１０５からＲＡＭ１０６に転送させる。これにより、一部の係数が省略されたカーネルＦＦＴデータがＲＡＭ１０６に保存される。
【００６９】
乗算制御部１２３は、ＲＡＭ１０６に記憶された画像ＦＦＴデータとカーネルＦＦＴデータを単純乗算して畳み込みデータを生成することを制御する。乗算制御部１２３は、ロードストア制御部１０２を用いて、ＲＡＭ１０６に記憶された画像ＦＦＴデータとカーネルＦＦＴデータをキャッシュメモリ１０５に転送させ、更にキャッシュメモリ１０５からレジスタファイル１０４に転送させる。乗算制御部１２３は、演算コア１０３の乗算部１０３ｃを用いて、対応する係数同士を乗算させる。
【００７０】
読み出される画像ＦＦＴデータには絶対値の小さい係数が省略されており、読み出されるカーネルＦＦＴデータには省略された画像ＦＦＴデータの係数に対応するものが省略されている。よって、畳み込みデータの係数のうち、省略された画像ＦＦＴデータの係数に対応するものは算出されない。乗算制御部１２３は、ロードストア制御部１０２を用いて、算出された畳み込みデータの係数をレジスタファイル１０４からキャッシュメモリ１０５に転送させ、更にキャッシュメモリ１０５からＲＡＭ１０６に転送させる。これにより、一部の係数が省略された畳み込みデータがＲＡＭ１０６に保存される。
【００７１】
ＩＦＦＴ制御部１２４は、ＩＦＦＴにより畳み込みデータを特徴マップに変換することを制御する。ＩＦＦＴ制御部１２４は、ロードストア制御部１０２を用いて、ＲＡＭ１０６に記憶された畳み込みデータをキャッシュメモリ１０５に転送させ、更にキャッシュメモリ１０５からレジスタファイル１０４に転送させる。ＩＦＦＴ制御部１２４は、ＦＭＡ部１０３ａを用いて、畳み込みデータへのＩＦＦＴを実行させる。このとき、畳み込みデータに省略されている係数は０として取り扱う。ＩＦＦＴ制御部１２４は、ロードストア制御部１０２を用いて、特徴マップの要素をレジスタファイル１０４からキャッシュメモリ１０５に転送させ、更にキャッシュメモリ１０５からＲＡＭ１０６に転送させる。これにより、特徴マップの近似解がＲＡＭ１０６に保存される。
【００７２】
図７は、データ構造例を示す第１の図である。
ＲＡＭ１０６には、インデックスデータ１３５、画像ＦＦＴデータ１３６、カーネルＦＦＴデータ１３７および畳み込みデータ１３８が記憶される。
【００７３】
インデックスデータ１３５は、長さと１以上のインデックスを含む。長さは、インデックスデータ１３５に含まれるインデックスの数を示す。例えば、長さは１６ビットで表現される。インデックスは、係数が省略されていない周波数領域の座標（ｕ，ｖ）を示す。例えば、各インデックスは１６ビットで表現される。インデックスの１６ビットのうち、ｕ座標部分は８ビットでありｖ座標部分は８ビットである。なお、特徴マップが生成された後は、ＲＡＭ１０６からインデックスデータ１３５を消去してもよい。
【００７４】
画像ＦＦＴデータ１３６は、インデックスデータ１３５の１以上のインデックスに対応付けて１以上の係数を含む。各係数は、絶対値が閾値以上の係数である。例えば、各係数は６４ビットで表現される単精度浮動小数点型の複素数である。係数の６４ビットのうち、実部は３２ビットであり虚部は３２ビットである。なお、畳み込みデータ１３８が生成された後は、ＲＡＭ１０６から画像ＦＦＴデータ１３６を消去してもよい。
【００７５】
カーネルＦＦＴデータ１３７は、インデックスデータ１３５の１以上のインデックスに対応付けて１以上の係数を含む。各係数は、絶対値が閾値以上である画像ＦＦＴデータ１３６の係数と同じ座標をもつ。例えば、各係数は画像ＦＦＴデータ１３６と同様に、６４ビットで表現される単精度浮動小数点型の複素数である。なお、畳み込みデータ１３８が生成された後は、ＲＡＭ１０６からカーネルＦＦＴデータ１３７を消去してもよい。
【００７６】
畳み込みデータ１３８は、インデックスデータ１３５の１以上のインデックスに対応付けて１以上の係数を含む。各係数は、絶対値が閾値以上である画像ＦＦＴデータ１３６の係数と同じ座標をもつ。例えば、各係数は画像ＦＦＴデータ１３６と同様に、６４ビットで表現される単精度浮動小数点型の複素数である。なお、特徴マップが生成された後は、ＲＡＭ１０６から畳み込みデータ１３８を消去してもよい。
【００７７】
図８は、データ構造例を示す第２の図である。
ＲＡＭ１０６には、ＦＦＴパラメータ１３３が記憶される。ＦＦＴパラメータ１３３は、ＦＦＴのバタフライ演算で使用されるパラメータであり予め用意されている。ＦＦＴパラメータ１３３は、引数ａ，Ｎと数式（６）の関数Ｗ（ａ，Ｎ）の値とを対応付ける。関数Ｗ（ａ，Ｎ）の値は単精度浮動小数点型の複素数である。
【００７８】
また、ＲＡＭ１０６には、ＩＦＦＴパラメータ１３４が記憶される。ＩＦＦＴパラメータ１３４は、ＩＦＦＴのバタフライ演算で使用されるパラメータであり予め用意されている。ＩＦＦＴパラメータ１３４は、引数ａ，Ｎと数式（７）の関数Ｗ−１（ａ，Ｎ）の値とを対応付ける。関数Ｗ−１（ａ，Ｎ）の値は単精度浮動小数点型の複素数である。
【００７９】
次に、画像処理装置１００の畳み込み処理の手順について説明する。
図９は、畳み込み処理の手順例を示すフローチャートである。
（Ｓ１０）命令制御コア１０１は、ＲＡＭ１０６からレジスタファイル１０４に画像データｄとＦＦＴパラメータ１３３を読み出させる。ただし、以下のステップＳ１５の過程で、使用するデータ部分を適宜読み出すようにしてもよい。
【００８０】
（Ｓ１１）命令制御コア１０１は、ｕ＝０，ｖ＝０に初期化する。
（Ｓ１２）命令制御コア１０１は、現在着目しているｕ座標と画像データｄの一辺の長さＮを比較する。ｕがＮ未満（ｕ＜Ｎ）の場合はステップＳ１３に処理が進み、ｕがＮ以上（ｕ≧Ｎ）の場合はステップＳ２０に処理が進む。
【００８１】
（Ｓ１３）命令制御コア１０１は、現在着目しているｖ座標と画像データｄの一辺の長さＮを比較する。ｖがＮ未満（ｖ＜Ｎ）の場合はステップＳ１５に処理が進み、ｖがＮ以上（ｖ≧Ｎ）の場合はステップＳ１４に処理が進む。
【００８２】
（Ｓ１４）命令制御コア１０１は、ｕ＝ｕ＋１に更新すると共にｖ＝０に初期化する。そして、次のｕ座標についてステップＳ１２に処理が進む。
（Ｓ１５）ＦＭＡ部１０３ａは、画像データｄとＦＦＴパラメータ１３３を用いて、ＦＦＴのバタフライ演算により係数Ｆｄ（ｕ，ｖ）を算出する。ＦＭＡ部１０３ａは、算出した係数Ｆｄ（ｕ，ｖ）をレジスタファイル１０４に書き込む。また、ＦＭＡ部１０３ａは、インデックス（ｕ，ｖ）をレジスタファイル１０４に書き込む。
【００８３】
（Ｓ１６）ＦＭＡ部１０３ａは、係数Ｆｄ（ｕ，ｖ）の絶対値Ａを算出する。絶対値Ａは複素数の大きさを表す尺度であればよく、長さや距離やノルムなどと言うこともある。例えば、実部の二乗と虚部の二乗の和を絶対値Ａとして用いる。ただし、実部の二乗と虚部の二乗の和の平方根を絶対値Ａとして用いてもよい。また、演算コア１０３が有するＦＭＡ部１０３ａ以外の演算器が絶対値Ａを算出してもよい。
【００８４】
（Ｓ１７）比較部１０３ｂは、絶対値Ａと閾値αを比較する。閾値αは、例えば、様々なサンプル画像について畳み込み処理を試行することで予め調整されている。閾値αは、不揮発性ストレージ１０７に保存されていてもよい。また、閾値αはＲＡＭ１０６にロードされてもよく、命令制御コア１０１はＲＡＭ１０６からレジスタファイル１０４に閾値αを読み出させてもよい。絶対値Ａが閾値α以上（Ａ≧α）の場合はステップＳ１８に処理が進み、絶対値Ａが閾値α未満（Ａ＜α）の場合はステップＳ１９に処理が進む。
【００８５】
（Ｓ１８）命令制御コア１０１は、レジスタファイル１０４からＲＡＭ１０６にインデックス（ｕ，ｖ）と係数Ｆｄ（ｕ，ｖ）を保存させる。インデックス（ｕ，ｖ）はインデックスデータ１３５の末尾に追加され、係数Ｆｄ（ｕ，ｖ）は画像ＦＦＴデータ１３６の末尾に追加される。インデックスデータ１３５に記載された長さは１増加する。ただし、レジスタファイル１０４からＲＡＭ１０６への保存は、レジスタファイル１０４やキャッシュメモリ１０５の使用状況に応じて非同期に行ってもよい。
【００８６】
（Ｓ１９）命令制御コア１０１は、ｖ＝ｖ＋１に更新する。そして、次のｖ座標についてステップＳ１３に処理が進む。
図１０は、畳み込み処理の手順例を示すフローチャート（続き１）である。
【００８７】
（Ｓ２０）命令制御コア１０１は、ＲＡＭ１０６からレジスタファイル１０４にカーネルデータｋとＦＦＴパラメータ１３３を読み出させる。ただし、以下のステップＳ２７の過程で、使用するデータ部分を適宜読み出すようにしてもよい。
【００８８】
（Ｓ２１）演算コア１０３は、カーネルデータｋを画像データｄと同じサイズＮ×Ｎに拡張する。サイズ拡張では、ｘ座標やｙ座標が大きい方に値が０の要素を追加する。
（Ｓ２２）命令制御コア１０１は、ｕ＝０，ｖ＝０に初期化する。
【００８９】
（Ｓ２３）命令制御コア１０１は、現在着目しているｕ座標と画像データｄの一辺の長さＮを比較する。ｕがＮ未満（ｕ＜Ｎ）の場合はステップＳ２４に処理が進み、ｕがＮ以上（ｕ≧Ｎ）の場合はステップＳ３０に処理が進む。
【００９０】
（Ｓ２４）命令制御コア１０１は、現在着目しているｖ座標と画像データｄの一辺の長さＮを比較する。ｖがＮ未満（ｖ＜Ｎ）の場合はステップＳ２６に処理が進み、ｖがＮ以上（ｖ≧Ｎ）の場合はステップＳ２５に処理が進む。
【００９１】
（Ｓ２５）命令制御コア１０１は、ｕ＝ｕ＋１に更新すると共にｖ＝０に初期化する。そして、次のｕ座標についてステップＳ２３に処理が進む。
（Ｓ２６）命令制御コア１０１は、インデックス（ｕ，ｖ）がインデックスデータ１３５の中に保存されているか判断する。例えば、命令制御コア１０１は、演算コア１０３にインデックス（ｕ，ｖ）の保存の有無を確認させる。保存されている場合はステップＳ２７に処理が進み、保存されていない場合はステップＳ２９に処理が進む。
【００９２】
（Ｓ２７）ＦＭＡ部１０３ａは、カーネルデータｋとＦＦＴパラメータ１３３を用いて、ＦＦＴのバタフライ演算により係数Ｆｋ（ｕ，ｖ）を算出する。ＦＭＡ部１０３ａは、算出した係数Ｆｋ（ｕ，ｖ）をレジスタファイル１０４に書き込む。
【００９３】
（Ｓ２８）命令制御コア１０１は、レジスタファイル１０４からＲＡＭ１０６に係数Ｆｋ（ｕ，ｖ）を保存させる。係数Ｆｋ（ｕ，ｖ）はカーネルＦＦＴデータ１３７の末尾に追加される。ただし、レジスタファイル１０４からＲＡＭ１０６への保存は、レジスタファイル１０４やキャッシュメモリ１０５の使用状況に応じて非同期に行ってもよい。
【００９４】
（Ｓ２９）命令制御コア１０１は、ｖ＝ｖ＋１に更新する。そして、次のｖ座標についてステップＳ２４に処理が進む。
図１１は、畳み込み処理の手順例を示すフローチャート（続き２）である。
【００９５】
（Ｓ３０）命令制御コア１０１は、ｕ＝０，ｖ＝０に初期化する。
（Ｓ３１）命令制御コア１０１は、現在着目しているｕ座標と画像データｄの一辺の長さＮを比較する。ｕがＮ未満（ｕ＜Ｎ）の場合はステップＳ３２に処理が進み、ｕがＮ以上（ｕ≧Ｎ）の場合はステップＳ３９に処理が進む。
【００９６】
（Ｓ３２）命令制御コア１０１は、現在着目しているｖ座標と画像データｄの一辺の長さＮを比較する。ｖがＮ未満（ｖ＜Ｎ）の場合はステップＳ３４に処理が進み、ｖがＮ以上（ｖ≧Ｎ）の場合はステップＳ３３に処理が進む。
【００９７】
（Ｓ３３）命令制御コア１０１は、ｕ＝ｕ＋１に更新すると共にｖ＝０に初期化する。そして、次のｕ座標についてステップＳ３１に処理が進む。
（Ｓ３４）命令制御コア１０１は、インデックス（ｕ，ｖ）がインデックスデータ１３５の中に保存されているか判断する。例えば、命令制御コア１０１は、演算コア１０３にインデックス（ｕ，ｖ）の保存の有無を確認させる。保存されている場合はステップＳ３５に処理が進み、保存されていない場合はステップＳ３８に処理が進む。
【００９８】
（Ｓ３５）命令制御コア１０１は、ＲＡＭ１０６からレジスタファイル１０４に、画像ＦＦＴデータ１３６に含まれる係数Ｆｄ（ｕ，ｖ）とカーネルＦＦＴデータ１３７に含まれる係数Ｆｋ（ｕ，ｖ）を読み出させる。係数Ｆｄ（ｕ，ｖ），Ｆｋ（ｕ，ｖ）の位置は、インデックスデータ１３５の中のインデックス（ｕ，ｖ）の位置から特定できる。
【００９９】
（Ｓ３６）乗算部１０３ｃは、係数Ｆｄ（ｕ，ｖ）と係数Ｆｋ（ｕ，ｖ）の積を係数Ｆｃ（ｕ，ｖ）として算出し、係数Ｆｃ（ｕ，ｖ）をレジスタファイル１０４に書き込む。
（Ｓ３７）命令制御コア１０１は、レジスタファイル１０４からＲＡＭ１０６に係数Ｆｃ（ｕ，ｖ）を保存させる。係数Ｆｃ（ｕ，ｖ）は畳み込みデータ１３８の末尾に追加される。ただし、レジスタファイル１０４からＲＡＭ１０６への保存は、レジスタファイル１０４やキャッシュメモリ１０５の使用状況に応じて非同期に行ってもよい。
【０１００】
（Ｓ３８）命令制御コア１０１は、ｖ＝ｖ＋１に更新する。そして、次のｖ座標についてステップＳ３２に処理が進む。
図１２は、畳み込み処理の手順例を示すフローチャート（続き３）である。
【０１０１】
（Ｓ３９）命令制御コア１０１は、ＲＡＭ１０６からレジスタファイル１０４に畳み込みデータ１３８とＩＦＦＴパラメータ１３４を読み出させる。ただし、以下のステップＳ４４の過程で、使用するデータ部分を適宜読み出すようにしてもよい。
【０１０２】
（Ｓ４０）命令制御コア１０１は、ｘ＝０，ｙ＝０に初期化する。
（Ｓ４１）命令制御コア１０１は、現在着目しているｘ座標と画像データｄの一辺の長さＮを比較する。ｘがＮ未満（ｘ＜Ｎ）の場合はステップＳ４２に処理が進み、ｘがＮ以上（ｕ≧Ｎ）の場合は畳み込み処理が終了する。
【０１０３】
（Ｓ４２）命令制御コア１０１は、現在着目しているｙ座標と画像データｄの一辺の長さＮを比較する。ｙがＮ未満（ｙ＜Ｎ）の場合はステップＳ４４に処理が進み、ｙがＮ以上（ｙ≧Ｎ）の場合はステップＳ４３に処理が進む。
【０１０４】
（Ｓ４３）命令制御コア１０１は、ｘ＝ｘ＋１に更新すると共にｙ＝０に初期化する。そして、次のｘ座標についてステップＳ４１に処理が進む。
（Ｓ４４）ＦＭＡ部１０３ａは、畳み込みデータ１３８とＩＦＦＴパラメータ１３４を用いて、ＩＦＦＴのバタフライ演算により特徴マップｃの要素ｃ（ｘ，ｙ）を算出する。このとき、畳み込みデータ１３８に明記されていない係数は０とみなされる。ＦＭＡ部１０３ａは、算出した要素ｃ（ｘ，ｙ）をレジスタファイル１０４に書き込む。
【０１０５】
（Ｓ４５）命令制御コア１０１は、レジスタファイル１０４からＲＡＭ１０６に要素ｃ（ｘ，ｙ）を保存させる。レジスタファイル１０４からＲＡＭ１０６への保存は、レジスタファイル１０４やキャッシュメモリ１０５の使用状況に応じて非同期に行ってもよい。
【０１０６】
（Ｓ４６）命令制御コア１０１は、ｙ＝ｙ＋１に更新する。そして、次のｙ座標についてステップＳ４２に処理が進む。
図１３は、データの読み出しおよび書き込みの例を示す図である。
【０１０７】
畳み込み層では、画像データ１３１（ｄ）、カーネルデータ１３２（ｋ）、ＦＦＴパラメータ１３３（Ｐ）およびＩＦＦＴパラメータ１３４（Ｐｉ）がＲＡＭ１０６にロードされる。また、インデックスデータ１３５（Ｉ）、画像ＦＦＴデータ１３６（Ｆｄ）、カーネルＦＦＴデータ１３７（Ｆｋ）、畳み込みデータ１３８（Ｆｃ）および特徴マップ１３９（ｃ）が生成されてＲＡＭ１０６に保存される。
【０１０８】
ＲＡＭ１０６からキャッシュメモリ１０５およびレジスタファイル１０４を介して演算コア１０３に、画像データ１３１とＦＦＴパラメータ１３３が読み出される。演算コア１０３ではＦＦＴが実行され、ＦＦＴによって算出された係数と閾値が比較される。演算コア１０３からレジスタファイル１０４およびキャッシュメモリ１０５を介してＲＡＭ１０６に、インデックスデータ１３５と画像ＦＦＴデータ１３６が書き込まれる。画像ＦＦＴデータ１３６では絶対値の小さい一部の係数が省略されている。
【０１０９】
次に、ＲＡＭ１０６からキャッシュメモリ１０５およびレジスタファイル１０４を介して演算コア１０３に、カーネルデータ１３２とＦＦＴパラメータ１３３が読み出される。演算コア１０３ではＦＦＴが実行される。演算コア１０３からレジスタファイル１０４およびキャッシュメモリ１０５を介してＲＡＭ１０６に、カーネルＦＦＴデータ１３７が書き込まれる。カーネルＦＦＴデータ１３７では一部の係数が省略されている。
【０１１０】
次に、ＲＡＭ１０６からキャッシュメモリ１０５およびレジスタファイル１０４を介して演算コア１０３に、画像ＦＦＴデータ１３６とカーネルＦＦＴデータ１３７が読み出される。演算コア１０３では、同じ座標をもつ係数同士の積が算出される。演算コア１０３からレジスタファイル１０４およびキャッシュメモリ１０５を介してＲＡＭ１０６に、畳み込みデータ１３８が書き込まれる。畳み込みデータ１３８では一部の係数が省略されている。省略された畳み込みデータ１３８の係数は０とみなされる。
【０１１１】
次に、ＲＡＭ１０６からキャッシュメモリ１０５およびレジスタファイル１０４を介して演算コア１０３に、畳み込みデータ１３８とＩＦＦＴパラメータ１３４が読み出される。演算コア１０３ではＩＦＦＴが実行される。畳み込みデータ１３８で省略されている係数は０として取り扱う。演算コア１０３からレジスタファイル１０４およびキャッシュメモリ１０５を介してＲＡＭ１０６に、特徴マップ１３９が書き込まれる。特徴マップ１３９は、画像データ１３１に対応する畳み込み層の出力データである。
【０１１２】
第２の実施の形態の画像処理装置１００によれば、画像データとカーネルデータに対してフーリエ変換を行うことで、空間領域における積和演算が周波数領域における単純乗算に置き換えられる。よって、画像データとカーネルデータの間の畳み込みを高速に実行できる。また、画像ＦＦＴデータに含まれる係数のうち絶対値が閾値未満である係数が０に近似され、０に近似された係数が画像ＦＦＴデータから省略される。カーネルＦＦＴデータと畳み込みデータについても、０に近似された画像ＦＦＴデータの係数に対応する係数が省略される。これにより、周波数領域データである画像ＦＦＴデータ、カーネルＦＦＴデータおよび畳み込みデータのデータ量を削減できる。よって、畳み込み層を実行する際のＲＡＭ１０６の使用量を削減することができる。
【０１１３】
また、ＦＦＴにより画像データを画像ＦＦＴデータに変換する過程で画像ＦＦＴデータが圧縮され、ＦＦＴによりカーネルデータをカーネルＦＦＴデータに変換する過程でカーネルＦＦＴデータが圧縮される。よって、データ圧縮を効率的に行うことができる。また、カーネルデータをカーネルＦＦＴデータに変換するにあたり、カーネルＦＦＴデータから省略すべき係数の演算自体を省略することができる。同様に、畳み込みデータを生成するにあたり、畳み込みデータから省略すべき係数の演算自体を省略することができる。よって、周波数領域における計算量を削減することができる。
【符号の説明】
【０１１４】
１０  データ圧縮装置
１１  記憶部
１２  演算部
１３  画像データ
１４  カーネルデータ
１５，１６  周波数領域データ
１７  特徴マップ
【図１】
2019128806.tif 000010
【図２】
2019128806.tif 000011
【図３】
2019128806.tif 000012
【図４】
2019128806.tif 000013
【図５】
2019128806.tif 000014
【図６】
2019128806.tif 000015
【図７】
2019128806.tif 000016
【図８】
2019128806.tif 000017
【図９】
2019128806.tif 000018
【図１０】
2019128806.tif 000019
【図１１】
2019128806.tif 000020
【図１２】
2019128806.tif 000021
【図１３】
2019128806.tif 000022