(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025143995
(43)【公開日】2025-10-02
(54)【発明の名称】情報処理装置、組込み機器、推論方法、及びプログラム
(51)【国際特許分類】
G06N 3/0464 20230101AFI20250925BHJP
【FI】
G06N3/0464
【審査請求】未請求
【請求項の数】19
【出願形態】OL
(21)【出願番号】P 2024043543
(22)【出願日】2024-03-19
(71)【出願人】
【識別番号】000001007
【氏名又は名称】キヤノン株式会社
(74)【代理人】
【識別番号】110001243
【氏名又は名称】弁理士法人谷・阿部特許事務所
(72)【発明者】
【氏名】溝口 慶範
(72)【発明者】
【氏名】中村 隆
(72)【発明者】
【氏名】山田 貴之
(72)【発明者】
【氏名】近藤 和史
(72)【発明者】
【氏名】山田 顕季
(72)【発明者】
【氏名】石川 尚
(57)【要約】
【課題】演算結果の信頼性の低下を抑制しつつ、畳み込みニューラルネットワークの畳み込み演算に必要な記憶容量を削減する。
【解決手段】畳み込みニューラルネットワークを用いた推論を実行する情報処理装置であって、情報処理装置に入力された推論用データから対象データを取得する取得手段と、取得手段が取得した対象データと、所定サイズの演算結果データを得るために必要な、対象データとは別のデータであるマージンデータとを含む演算データを用いて畳み込み演算を実行し、演算結果データを出力する演算手段と、を備え、取得手段は、マージンデータのうちの一部のデータである第1データを、推論用データにおいて対象データの周囲に対象データとは別に存在するデータ群から取得し、マージンデータのうちの第1データを除く第2データを、前記データ群から取得しない。
【選択図】
図10
【特許請求の範囲】
【請求項1】
畳み込みニューラルネットワークを用いた推論を実行する情報処理装置であって、
前記情報処理装置に入力された推論用データから対象データを取得する取得手段と、
前記取得手段が取得した前記対象データと、所定サイズの演算結果データを得るために必要な、前記対象データとは別のデータであるマージンデータとを含む演算データを用いて畳み込み演算を実行し、前記演算結果データを出力する演算手段と、を備え、
前記取得手段は、前記マージンデータのうちの一部のデータである第1データを、前記推論用データにおいて前記対象データの周囲に前記対象データとは別に存在するデータ群から取得し、前記マージンデータのうちの前記第1データを除く第2データを、前記データ群から取得しないことを特徴とする情報処理装置。
【請求項2】
前記マージンデータのうち、前記第1データを除くデータである第2データをパディングするパディング手段を更に備えることを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記第1データは前記対象データとともに記憶領域に保持され、前記第2データは前記記憶領域に保持されないことを特徴とする請求項2に記載の情報処理装置。
【請求項4】
前記パディング手段は、前記第2データを前記演算手段が演算に使用するレジスタに直接書き込むことを特徴とする請求項2に記載の情報処理装置。
【請求項5】
前記パディング手段は、前記第2データを任意の固定値でパディングすることを特徴とする請求項2に記載の情報処理装置。
【請求項6】
前記パディング手段は、前記第2データを前記対象データに基づくデータでパディングすることを特徴とする請求項2に記載の情報処理装置。
【請求項7】
前記取得手段は、前記対象データに対し、前記畳み込み演算の演算範囲のスライド方向と同一方向に存在する前記データ群から前記第1データを取得することを特徴とする請求項1に記載の情報処理装置。
【請求項8】
前記取得手段は、前記対象データに対し、前記畳み込み演算の演算範囲のスライド方向と直交する方向に存在する前記データ群から前記第1データを取得することを特徴とする請求項1に記載の情報処理装置。
【請求項9】
前記取得手段は、前記第1データを前記データ群から離散的に取得することを特徴とする請求項1に記載の情報処理装置。
【請求項10】
前記取得手段は、前記第1データを前記データ群から所定のデータ間隔で取得することを特徴とする請求項9に記載の情報処理装置。
【請求項11】
前記対象データが2次元データであり、前記マージンデータの範囲が複数のラインにわたる場合、前記取得手段は、前記第1データが前記複数のラインのすべてに分散するように、前記第1データを前記データ群から取得することを特徴とする請求項1に記載の情報処理装置。
【請求項12】
前記畳み込みニューラルネットワークを構成する少なくとも1つの層において、前記取得手段は、前記マージンデータの一部を、前記データ群から前記第1データとして取得することを特徴とする請求項1に記載の情報処理装置。
【請求項13】
前記取得手段が前記マージンデータの一部を、前記データ群から前記第1データとして取得する層は、前記畳み込みニューラルネットワークのエンコーダ部の最終層であることを特徴とする請求項1に記載の情報処理装置。
【請求項14】
前記対象データは、前記推論用データが所定単位サイズに分割された分割データであることを特徴とする請求項1記載の情報処理装置。
【請求項15】
前記対象データが前記分割データである場合、
前記取得手段は、前記第1データを取得する前記データ群の位置を、前記対象データごとに変更することを特徴とする請求項14に記載の情報処理装置。
【請求項16】
前記対象データは画像データであることを特徴とする請求項1に記載の情報処理装置。
【請求項17】
請求項1に記載の情報処理装置を有する組込み機器。
【請求項18】
畳み込みニューラルネットワークを用いた推論方法であって、
入力された推論用データから対象データを取得する取得ステップと、
前記取得ステップにおいて取得された前記対象データと、所定サイズの演算結果データを得るために必要な、前記対象データとは別のデータであるマージンデータとを含む演算データを用いて畳み込み演算を実行し、前記演算結果データを出力する演算ステップと、を含み、
前記取得ステップにおいて、前記マージンデータのうちの一部のデータである第1データは、前記推論用データにおける前記対象データの周囲に前記対象データとは別に存在するデータ群から取得され、前記マージンデータのうちの前記第1データを除く第2データは、前記データ群から取得されない推論方法。
【請求項19】
畳み込みニューラルネットワークを用いた推論方法をコンピュータに実行させるためのプログラムであって、
入力された推論用データから対象データを取得する取得ステップと、
前記取得ステップにおいて取得された前記対象データと、所定サイズの演算結果データを得るために必要な、前記対象データとは別のデータであるマージンデータとを含む演算データを用いて畳み込み演算を実行し、前記演算結果データを出力する演算ステップと、を含み、
前記取得ステップにおいて、前記マージンデータのうちの一部のデータである第1データは、前記推論用データにおける前記対象データの周囲に前記対象データとは別に存在するデータ群から取得され、前記マージンデータのうちの前記第1データを除く第2データは、前記データ群から取得されないプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、畳み込みニューラルネットワークを用いた推論に関する。
【背景技術】
【0002】
パターン認識に好適な方法の1つとして、畳み込みニューラルネットワーク(Convolutional Neural Network;CNN)がある。CNNを用いた推論では、特定の特徴を抽出するために多段に構成されたフィルタを用いて、膨大な畳み込み演算が繰り返し実行される。よって、演算量に見合ったハードウェア資源が必要とされる。一方、製品においては、小型化やコスト低減が要求されるため、十分なハードウェア資源を具備できるとは限らない。特に、CNNのフィルタとして使用されるSRAMは集積回路の面積を増大させるため高コストとなる傾向があり、容量の削減が課題とされている。
【0003】
この課題に対し特許文献1には、機械学習モデルの重み行列(フィルタ)を所定幅を持つ複数の行列に分解することで、なるべく推論精度を保ちながら、任意サイズの機械学習モデルに変更する技術が開示されている。また、SRAM容量を低減させる技術としては、ゼロパディングという方法も知られている。画像の畳み込みでは、正方形のフィルタを走査させながら入力画像の局所的な積和を行い、フィルタ中心の画素に値を集約させる。しかしフィルタが入力画像の端部付近にある場合は、画像領域外にフィルタの一部がはみ出してしまう。ゼロパディングは、そのはみ出した周辺の画素を入力画像から取得せず、「0」で埋める処理である。即ち、ゼロパディングを行うことで、入力画像の周辺領域のデータをSRAMに保持する必要がなくなり、SRAMの容量が低減される。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、SRAM容量の低減のためにゼロパディングを行うと、畳み込み演算に用いるデータに真の値ではないデータが含まれることになり、演算結果の信頼性が下がってしまうという問題がある。つまり、製品にCNNを実装するにあたり、演算結果の信頼性を上げようとするとハードウェア資源の制約により実現が困難になり、実現可能な方法を選ぶと演算結果の信頼性が下がるという課題がある。
【0006】
本開示の目的は、演算結果の信頼性の低下を抑制しつつ、CNNの畳み込み演算に必要な記憶容量を削減することである。
【課題を解決するための手段】
【0007】
本開示は、畳み込みニューラルネットワークを用いた推論を実行する情報処理装置であって、前記情報処理装置に入力された推論用データから対象データを取得する取得手段と、前記取得手段が取得した前記対象データと、所定サイズの演算結果データを得るために必要な、前記対象データとは別のデータであるマージンデータとを含む演算データを用いて畳み込み演算を実行し、前記演算結果データを出力する演算手段と、を備え、前記取得手段は、前記マージンデータのうちの一部のデータである第1データを、前記推論用データにおいて前記対象データの周囲に前記対象データとは別に存在するデータ群から取得し、前記マージンデータのうちの前記第1データを除く第2データを、前記データ群から取得しない。
【発明の効果】
【0008】
本開示によれば、演算結果の信頼性の低下を抑制しつつ、CNNの畳み込み演算に必要な記憶容量を削減することが可能となる。
【図面の簡単な説明】
【0009】
【
図1】情報処理装置の一例であるプリンタのハードウェア構成を示すブロック図である。
【
図2】推論部を構成するCNNのモデル構造の一例を示す概念図である。
【
図4】推論部の機能構成及びデータの処理過程を示す図である。
【
図5】推論用画像データの分割及び分割画像ブロックのマージンデータを説明する図である。
【
図6】推論の流れを説明するフローチャートである。
【
図7】比較例としてのデータ取得方法を示す図である。
【
図8】
図7の場合の畳み込み演算処理の流れを説明するフローチャートである。
【
図9】
図7の場合の畳み込み演算の計算手順を説明する図である。
【
図10】本開示の第1の実施形態に係るデータ取得方法を示す図である。
【
図11】
図10の場合の畳み込み演算処理の流れを説明するフローチャートである。
【
図12】
図10の場合の畳み込み演算の計算手順を説明する図である。
【
図13】DRAMへのアクセス方法について説明する図である。
【
図14】第1の実施形態の変形例1に係るデータ取得方法を示す図である。
【
図15】
図14の場合の畳み込み演算の計算手順を説明する図である。
【
図16】変形例2に係るデータ取得方法を示す図である。
【
図17】複数ラインに渡るマージンデータの例を示す図である。
【
図18】変形例3に係るデータ取得方法を示す図である。
【
図19】推論装置としてのプリンタと学習装置との関係を示す図である。
【
図20】学習装置のハードウェア構成の例を示す図である。
【
図21】学習装置の機能構成及びデータの処理過程を示す図である。
【
図22】典型的なCNNモデルの入力部近傍を示す模式図である。
【
図23】処理層における処理部の概要を示す模式図である。
【
図25】学習装置が実行する学習処理の全体の流れを説明するフローチャートである。
【
図26】モデル構造及びモデル条件を設定するためのUI画面の例を示す図である。
【
図27】学習処理の流れを説明するフローチャートである。
【
図28】学習データの分割及び水増しについて説明する図である。
【
図29】第3の実施形態における学習処理の全体の流れを説明するフローチャートである。
【
図30】第3の実施形態の情報処理システムのシステム構成及び機能構成を示す図である。
【
図31】ユースケース設定の例として印刷設定のUI画面を示す図である。
【
図32】第3の実施形態に変形例におけるシステム構成及び機能構成を示す図である。
【発明を実施するための形態】
【0010】
以下、添付の図面を参照しながら、本開示の好適な実施の形態を詳細に説明する。なお、以下の実施形態で示す構成は一例に過ぎず、また本開示は図示された構成に限定されるものではない。まず、本明細書で使用される用語について説明する。
【0011】
<用語定義>
ニューロン:
ニューロンは、フィルタと活性化関数からなる処理単位である。当該フィルタの係数は、「フィルタ係数」、「重み」、「ニューロンの重み」などと称される。ニューロンは、フィルタが実行する演算処理の対象となるデータ(以下、「演算データ」という)を用いて畳み込み演算を実行し、「演算結果データ」を得る。
「演算データ」は、「対象データ」と、「マージンデータ」とを含む。
「対象データ」は本明細書では、外部から入力された推論用画像データまたは学習データ(例えば、ページ単位の画像データ)を所定サイズに分割した画像ブロックのデータとする。対象データの取得元となるページ単位の画像データを「元画像」ともいう。元画像の単位はページ単位に限定されず、任意である。
「マージンデータ」は、対象データに対する畳み込み演算においてフィルタからはみ出す、対象データの外周に存在するデータである。マージンデータの幅はフィルタサイズ及び層構造を含むモデル構造により決定される。例えば3×3フィルタを用いる場合、対象データと、対象データの周囲の上下左右1ライン(行及び列)ずつのマージンデータとを含むデータが演算データとなる。また、例えば5×5フィルタを用いる場合、対象データと、対象データの周囲の上下左右2ライン(行及び列)ずつのマージンデータとを含むデータが演算データとなる。いずれの場合も演算結果データのサイズは対象データと同サイズとなる。
「参照データ」(第1データ)は、マージンデータのうち推論部が元画像から取得するデータである。参照データは、元画像における対象データ(画像ブロック)の周囲に存在するデータ群から取得される実データである。なお、フィルタサイズ及びデータサイズは説明のための一例であり、これらに限定されず、任意の値としてよい。なお詳細は後述するが、本開示において、マージンデータのうちの参照データを除くデータ(第2データ)は、上記データ群から取得されない。
「入力データ」は、「対象データ」と「参照データ」とを含むデータ群であり、元画像から取得され、推論部のSRAMに保持される。
【0012】
活性化関数:
活性化関数は、非線形な応答特性を持つ関数である。シグモイド関数やReLU関数などがよく使われる。その理由は、入力と出力の関係が非線形な応答特性を持つことが期待されるからである。
【0013】
層:
層は、複数のニューロンからなる処理単位である。各々のニューロンには原則として共通の演算データが入力される。ただし各々のニューロンのフィルタ係数(重み)には、取得したい特徴に応じて異なる重みが設定されてもよい。層が複数のニューロンから構成される理由は、演算データを多面的に分析するためである。
【0014】
特徴量:
1つのニューロンからの出力を特徴量と呼ぶ。異なるニューロンは異なる特徴量の強度を出力する。
【0015】
特徴量ベクトル:
1つの層から出力される特徴量からなるベクトルである。ベクトルの次数を、以下では「チャネル」とも記す。文脈によって「次元」と「チャネル」を使い分ける。それは慣習によりどちらの用語が文脈に適するかが変わるからである。
【0016】
以下の実施形態は、本開示に係る情報処理装置及び組込み機器の一実施形態として、プリンタを例に説明する。なお、本開示はプリンタに限定されず、MFP(Multifunction Peripheral)等の画像形成装置の他、撮像機器、映像機器等の各種の画像処理装置、PC、スマートフォン等の一般的な情報処理装置に適用可能である。また以下の説明では、例として画像データを扱うが、本開示の処理対象とするデータは画像データに代表される2次元データに限定されず、音声データ等の時系列の1次元データにも適用可能である。その場合、組込み機器としては音響機器、照明機器等にも本開示を適用できる。
【0017】
<第1の実施形態>
第1の実施形態では、CNN(畳み込みニューラルネットワーク)を利用した推論を実行する情報処理装置の一例として、プリンタについて説明する。
【0018】
(ハードウェア構成)
図1は、本実施形態に係る情報処理装置の一例であるプリンタのハードウェア構成を示すブロック図である。
図1に示すように、プリンタ100は、CPU101、ROM102、RAM103、推論部104、データ転送I/F105、操作パネル106、及び印刷部107を備える。ROM102、RAM103、推論部104、データ転送I/F105、操作パネル106、及び印刷部107はデータバス108を介して、CPU101に接続されている。
【0019】
データ転送I/F105は、不図示の外部機器との間でデータの入出力を行うインターフェースである。データ転送I/F105における接続方式は、特に限定するものではないが、例えばUSB、IEEE1394等を用いることができる。また有線、無線を問わない。外部機器は、例えばパーソナルコンピュータ、携帯情報端末、スマートフォン等であり、推論の対象となる画像データを生成し、保持し、プリンタ100へデータ転送することが可能な機器である。データ転送I/F105は、外部機器から入力された推論用画像データを、データバス108を介してCPU101に転送する。
【0020】
データバス108は、データ転送I/F105から受け取った推論用画像データをCPU101に入力し、CPU101から出力されるデータをプリンタ100内の各部へ転送するデータ伝送路である。
RAM103は、データ転送I/F105から受け取ったデータを一時的に記憶する記憶領域であり、例えばDRAM(Dynamic Random Access Memory)等の揮発性メモリにより構成される。またRAM103は、CPU101が実行する処理のワークメモリとして利用される。
【0021】
CPU101は、ROM102に保持されるプログラムを呼び出しRAM103に展開し、RAM103をワークメモリとして用いながらプログラムに従って処理を実行する。例えばCPU101は、RAM103に保持された推論用画像データをデータバス108を介して推論部104に転送する。またCPU101は、推論部104に対し推論用画像データの分割条件、参照データ取得条件、パディング条件、及びフィルタ係数等、推論に必要な情報を設定する。これらの情報はパラメータとしてROM102に予め保持されてもよいし、プログラムにより設定されてもよい。
【0022】
推論部104は、CPU101から入力されたフィルタ係数をフィルタに設定する。また推論部104は、DRAM103に保持された所定の単位サイズの推論用画像データから、分割条件、参照データ取得条件、及びパディング条件に基づき演算データを取得する。推論部104は、取得した演算データを用いてフィルタ係数を用いた畳み込み演算を実行し、演算結果データを得る。このような複数のフィルタ処理を繰り返し実行することで、推論部104は、推論の結果として特徴量ベクトルを出力し、CPU101に転送する。推論部104の構成及び処理の詳細については後述する。
【0023】
ROM102は不揮発性メモリであり、本実施形態に係るプログラムやOS(Operating System)、処理に必要なデータを保持する。プログラムは、CPU101が推論部104にCNNによる推論を実行させるための処理プログラムを含む。またROM102は、推論用画像データの分割条件、参照データ取得条件、パディング条件、及びフィルタ係数等、推論に必要な情報を保持する。推論及びこれらの情報については後述する。なお、本実施形態では、フィルタ係数は予めプリンタ100とは別の学習装置により予め学習済みの値が、ROM102に記憶されているものとする。
【0024】
印刷部107は、CPU101からの指示に基づき、印刷動作を行う。印刷部107の印刷方式は特に限定するものでは無く、例えば、インクジェット方式であってもよいし、電子写真方式であってもよい。
【0025】
なお、上述のプリンタ100の構成は一例であり、本開示はこれに限定されない。例えばROM102の代わりに任意の記憶媒体を用いてもよい。任意の記憶媒体とは、例えばHDDやUSBインターフェースを介した外部メモリなどでも構わない。また本実施形態では推論部104において推論を実施する。しかしながら推論部104が実行する処理と同等の処理を実現するためのファームウェアを記憶媒体に記憶しておき、CPU101がファームウェアを実行することで推論部104の処理を実行してもよい。また、機能拡張の一環として、推論部104が取得する対象データのブロックサイズ(分割サイズ)は、ユーザが設定可能なパラメータとしてよい。
【0026】
操作パネル106は、プリンタ100に対する操作をユーザが入力するための入力部、及びプリンタ100の状態やプリンタ100への設定情報等の各種情報を表示する表示部を含む。入力部は例えば、タッチパネル、ハードキー等により構成され、入力された情報をCPU101に入力する。表示部は、LCD等のディスプレイ及び表示制御回路を有し、CPU101から入力された情報をディスプレイに表示する。
【0027】
(推論部)
図2は、推論部104を構成するCNN(畳み込みニューラルネットワーク)のモデル構造の一例を示す概念図である。推論部104は、CNNを用いた推論を実行するために、エンコード部201及びデコード部202を有する。エンコード部201は、後述するいくつかの処理層の集合体である。エンコード部201全体を通して、処理対象となるデータの特徴をエンコードする。デコード部202は、エンコード部201で得られた処理結果をデコードし、特徴量ベクトルを抽出する。
【0028】
エンコード部201の入力層203は、処理対象となるデータを処理する最初の処理層である。処理層は複数のフィルタから構成されるが、必ずしもハードウェアとして複数のフィルタが必要なわけではない。ハードウェアとして用意された1つのフィルタを繰り返し使用することで複数のフィルタを実現してもよい。即ち、SRAM、演算回路、及びレジスタを含むハードウェアとしてのフィルタは1つであるが、フィルタ係数を漸次更新し、あるフィルタにおける演算結果を次のフィルタの入力データとして用いることで、連続した2つのフィルタ処理を実現する。そのような層の一例として、入力層203を図示している。入力層203に続く中間の処理層204は、入力層203の演算結果を受けて、その後の処理を実現する層である。中間の処理層204も、入力層203と同様に複数のフィルタから構成される。このように複数のフィルタ処理を実施することで、エンコード部201は処理対象とする画像データをエンコードする。
【0029】
エンコード部201と同様に、複数のフィルタ処理を行うための複数の処理層205がデコード部202側にも設けられる。デコード部202の処理層205からの最終的な出力は、デコード部202の最終層206における活性化関数によって一意に決定される。このようにして、処理対象である画像データについて注目画素の属性の確率が定まる。このように、CNNにはニューロンを複数組み合わせていくつかの層が構成され、構成された複数の層が組み合わされてエンコードとデコードが行われる。これらの処理を通して特徴量ベクトルが得られる。
【0030】
(フィルタの構成)
図3は、
図2に示した推論部104を構成するフィルタの内部構成を示す概念図である。フィルタ300は、入力データ、出力データ、及びフィルタ係数群が展開されるSRAM310と、畳み込み演算に使用されるフィルタ係数が設定される係数レジスタ322、及び演算範囲(演算窓)のデータが展開される演算用レジスタ321を有する。上述したように、推論部104は、1または複数の特徴を抽出するために1または複数のフィルタ300を有する。なお、複数のフィルタを実現するために、推論部104はハードウェアとしてのフィルタ300を複数備えてもよいし、1つのフィルタ300をフィルタ係数を変更しながら繰り返し使用してもよい。いずれにしても推論部104は、
図2に示すCNNを構成・実施するために必要なフィルタを具備すればよい。
【0031】
以下の説明において、SRAM310は、入力データ領域311と、フィルタ係数を保持するフィルタ係数領域312と、畳み込み演算の処理結果を保持する出力データ領域313と、を有する。本実施形態において、入力データ領域311には、DRAM103に保持されている画像データから切り出された対象データと、対象データの畳み込み演算に必要なマージンデータのうちの一部のデータである参照データとが展開される。この対象データ及び参照データを入力データと呼ぶ。対象データは、DRAM103に保持されている画像データ(推論用画像データ)から切り出された分割データとするが、必ずしも分割データでなくてもよい。DRAM103に保持されている画像データは、例えばページサイズを1単位とする画像データとする。
【0032】
対象データは、1ページ分の画像データ推論用画像データが複数ブロックに分割された1ブロック分の画像データであり、分割サイズは任意である。例えば、1ページのデータをタイル状に縦横方向に分割してもよいし、縦あるいは横の片方向のみに短冊状に分割してもよい。以下の説明では、分割後の画像ブロックを対象データという。推論部104は、DRAM103に保持された画像データを複数の画像ブロックに分割してフィルタ300のSRAM310に展開することで、SRAM310の容量を削減できる。
図3の例では、8画素×9画素分の画像ブロックがSRAM310の入力データ領域311に展開されている。
【0033】
なお、分割サイズはSRAM310の容量に応じて決定されることが好ましい。処理単位に応じて必要な量のデータがDRAM103から読み込まれ、SRAM310に展開される。
図3では8画素×9画素分の画像ブロックとしているが、実際にはより大きなサイズのデータが入力データ領域311に展開されることが多い。また本開示において、推論部104における処理単位は必ずしも分割された画像ブロックに限定されず、DRAM103に保持されたページ単位の画像データとしてもよい。
【0034】
SRAM310のフィルタ係数領域312には、フィルタ係数が保持される。フィルタ係数はROM102から取得され、SRAM310に保持される。
図3は、フィルタ係数のサイズ(以下、フィルタサイズ)が3×3の場合を示している。
図3では1つのフィルタ係数が保持された例を示しているが、フィルタ係数領域312には、CNNを構成する複数のフィルタのそれぞれで使用される複数のフィルタ係数が保持される。畳み込み演算の実行中は、フィルタ係数領域312に保持されている複数のフィルタ係数の中から実行中の畳み込み演算に使用される1つのフィルタ係数が係数レジスタ322に設定される。なお、SRAM310内のフィルタ係数の保持の仕方はこの例に限定されず、1つのSRAM310につき1つのフィルタ係数を保持してもよい。
【0035】
演算用レジスタ321には、まずSRAM310の入力データ領域311に展開された入力データのうちフィルタサイズの演算範囲のデータが設定される。係数レジスタ322には、SRAM310のフィルタ係数領域312に保持されたフィルタ係数のうち畳み込み演算に使用される1つのフィルタ係数が設定される。畳み込み演算において、演算用レジスタ321に保持されたデータは、係数レジスタ322に保持された係数と乗算され、乗算結果の値に更新される。演算用レジスタ321に保持された全ての乗算結果の値の和が演算範囲の中心画素に集約され、畳み込み演算結果として出力される。この畳み込み演算結果(出力データ)は、SRAM310の出力データ領域313の該当する画素位置に保持される。このような演算処理が、演算範囲を所定のスライド方向にスライドしながら繰り返される。以上の処理を、演算データのフィルタ処理という。フィルタ処理については後述する。
【0036】
なお、
図3に示すデータの保持の仕方は一例であり、その他の態様でデータが保持されてもよい。例えば
図3では、演算範囲のデータ及び乗算結果のデータが同じ演算用レジスタ321に保持される例を説明したが、これに限定されず、演算範囲のデータ及び乗算結果のデータはそれぞれ別のレジスタに保持されてもよい。また、畳み込み演算の結果は入力データが保持されるSRAM310と同じSRAM310内の出力データ領域313に保持されるものとしたが、これに限定されず、入力データ領域311とは別のメモリ(SRAMまたはDRAM103等)に保持されてもよい。
【0037】
(データ処理過程)
図4は、推論部104の機能構成及びデータの処理過程を示すブロック図である。
図4に示すように、推論部104は、取得部410、畳み込み演算部430、パディング部440、出力部450等を有する。取得部410はデータ分割部411を有する。これらの機能部は、例えば、CPU101がROM102に保持されたプログラムを実行することで実現される。
【0038】
ROM102には、予め、推論部104が取得する対象データの分割条件、参照データ取得条件、パディング条件、及びフィルタ係数が保持されている。分割条件は、
図4に示す分割位置401及び分割サイズ402である。参照データ取得条件は、
図4に示す参照データ位置403である。パディング条件は、
図4に示すパディング方法405及びパディング位置406である。フィルタ係数404は、推論部104のすべての層で使用される複数のフィルタ係数を含み、外部の学習装置によって学習済みのフィルタ係数である。
【0039】
分割位置401は、元画像を画像ブロックに分割する際の元画像における画像ブロックの位置を示す情報である。画像データであれば、例えば元画像における座標で指定される。
分割サイズ402は、画像ブロックのサイズを示す情報である。画像データであれば、縦サイズ及び横サイズが指定される。分割サイズ402は任意であるが、推論部104が備えるメモリ(SRAM310)の容量に応じて決定されることが好ましい。また、分割サイズ402の最小サイズは、推論部104に構築されるCNNの構造に依存して決定される。CNNの構造を決定する要因は、層のフィルタサイズ、段数、縮小及び拡大の回数等である。
【0040】
参照データ位置403は、取得部410が元画像のどの位置(画素)から参照データを取得するかを特定するための情報であり、対象データ421に対する位置とデータ取得範囲が定められる。具体的には、例えば、左右の1ライン、上下の1ライン、上下左右の1ラインのデータを1画素おきに、といった情報が設定されているものとする。
【0041】
パディング方法405は、演算データに不足するデータを埋める方法を指定する情報であり、例えば、固定値パディング、鏡像パディング、平均値パディング等のように設定されている。固定値パディングとは、「0」やその他の任意の実数値でパディングする方法である。鏡像パディングとは、画像ブロックの端部を境界線として線対称に、画像ブロック内のデータを反転配置する方法である。平均値パディングは、周囲の画素値の平均値でパディングする方法である。なお、パディング方法は、上述の例に限定されず他の方法でもよい。以下の説明において、パディング部440が付与するデータをパディングデータという。
【0042】
パディング位置406は、パディング部440がデータをパディングする位置を特定するための情報であり、例えば対象データ421に対する位置と範囲が定められる。本実施形態においては、対象データ421の畳み込み演算に必要なマージンデータのうちの一部のデータである参照データを除くデータがパディングされる。よってパディング位置406の情報は、対象データ421に対するマージンデータから参照データを除いたデータとなる。具体的には、例えばマージンデータが上下左右の1ラインの範囲である場合、参照データ位置403として「左右の1ライン」が設定されている場合には、パディング位置406の情報は「上下の1ライン」となる。また参照データ位置403として「上下の1ライン」が設定されている場合には、パディング位置406の情報は「左右の1ライン」となる。また参照データ位置403として「上下左右の1ラインのデータを1画素おきに(参照データ取得)」が設定されている場合には、パディング位置406の情報は「上下左右の1ラインのデータであって、参照データが配置されない画素」となる。
なお、分割条件、参照データ取得条件、及びパディング条件を示す上述の情報は一例であり、その他の内容としてもよい。また、ROM102に保持された分割条件、参照データ取得条件、及びパディング条件をCPU101が読出して推論部104に設定する例を示しているが、この方法に限定されず、プログラムによって上記条件を満たすようにデータの取得及びパディングを行ってもよい。
【0043】
DRAM103に保持されたページ単位の画像データ(元画像)は、取得部410によって推論部104内に読み込まれる。取得部410は、DRAM103に保持された画像データをデータ分割部411によって所定サイズの画像ブロックに分割して読み込むことが好ましい。画像ブロックの元の画像データにおける分割位置の情報、及び分割サイズの情報は、ROM102に分割位置401及び分割サイズ402として予め設定されている。なお、
図4では、推論部104がDRAM103から画像データを読みこむ際に、画像データを分割することを想定した図としているが、これに限定されず、前処理により予め分割された画像ブロックのデータがDRAM103に保持されていてもよい。また、その画像ブロックに参照データが付加された状態でDRAM103に保持されていてもよい。
【0044】
図5は、推論用データ及び分割画像ブロックの周囲に存在するデータ群を説明する図である。
図5に示す例では、推論用データである1ページ分の画像データが縦及び横にそれぞれ4分割され、計16ブロックに分割される例を示している。以下の説明において、分割前の画像データを元画像501、分割後の1ブロック分の画像データを画像ブロック502、504という。
【0045】
取得部410は、データ分割部411により分割された画像ブロックを対象データ421として処理順に順次読み込み、SRAM310の入力データ領域311に展開する。このとき取得部410は、分割位置401の情報も取得する。これは、分割位置に応じて参照データの取得位置が変更される場合があるからである。本実施形態において、入力データ領域311には分割された1画像ブロック分の対象データ421が展開される。また、取得部410は取得した画像ブロック(対象データ421)の周囲に対象データ421とは別に存在する画素群から参照データ422を取得し、SRAM310の入力データ領域311に展開する。
【0046】
参照データ422とは、畳み込み演算部430が実行する畳み込み演算において所定サイズの演算結果データを得るために必要なマージンデータである。本実施形態では、マージンデータの一部が参照データ422として取得される(
図10参照)。取得部410は、ROM102に設定されている参照データ位置403の情報と、取得した対象データ421の分割位置401及び分割サイズ402の情報に基づき、元画像のどの位置から参照データを取得するかを特定できる。取得部410は、取得した対象データ421の周囲に存在するデータ群、すなわちDRAM103に保持されている元画像501から参照データ422を取得し、入力データ領域311に展開する。マージンデータのうち、参照データ422を除く他のデータについては、例えば、パディングによって埋める。
【0047】
畳み込み演算に必要なマージンデータのサイズは、推論部104に構築されたCNNモデルの構造に依存して決定される。例えば、3×3フィルタであれば、対象データ421の周囲の上下左右の1ライン(1列または1行)ずつの範囲がマージンデータとして演算に使用される。5×5フィルタであれば、対象データ421の周囲の上下左右の2ライン(2列または2行)ずつの範囲がマージンデータとして演算に使用される。
【0048】
図5に示すように、画像ブロック502の周囲に位置するグレーで示す範囲のデータ群が畳み込み演算に必要なマージンデータ503である。画像ブロック502のマージンデータ503は、隣接する画像ブロックと重複(オーバーラップ)したデータである。本実施形態においては、SRAM容量の削減と演算結果の信頼性低下の抑制のために、取得部410は、マージンデータ503の一部、例えば、マージンデータ503のうち対象データの左右にあるデータのみを参照データ422としてDRAM103から取得する。マージンデータ503のうち参照データ422を除くその他のデータについては、例えば、パディング部440が「0」等の固定値をパディングする。
【0049】
また、
図5の画像ブロック504のように、元画像501の端部に位置する画像ブロック504のマージンデータは、隣接する画像ブロックと重複するデータ505だけでは不足する。その場合も、不足する部分506のデータについては、パディング部440がパディングすればよい。
【0050】
取得部410は、フィルタ係数404をROM102から取得する。例えば、処理層がn段のフィルタで構成されている場合、取得部410はn段分のフィルタ係数を取得し、SRAM310のフィルタ係数領域312に保持する。
【0051】
畳み込み演算部430は、取得部410が取得した画像ブロック(対象データ421)及びその周囲の参照データ422を含むマージンデータを用いて畳み込み演算を実行する。以下の説明において、取得部410がDRAM103から取得した対象データ421及び参照データ422を入力データ420と呼ぶ。この入力データ420は、SRAM310の入力データ領域311に展開される。入力データ420にパディングデータを含めたデータが畳み込み演算で処理される演算データとなる。
【0052】
畳み込み演算部430は、処理対象段のフィルタ係数をSRAM310のフィルタ係数領域312から読出し、レジスタ320の係数レジスタ322に設定する。また畳み込み演算部430は、入力データ420及びパディングデータを含む演算データから所定の演算範囲のデータを演算用レジスタ321に設定し、係数レジスタ322に設定されているフィルタ係数との積和演算を実行する。畳み込み演算部430は、演算範囲をスライドさせながら演算データの全画素について演算を実行し、演算結果をSRAM310の出力データ領域313に書き込む。畳み込み演算の詳細については後述する。
【0053】
畳み込み演算部430による畳み込み演算に必要な全てのマージンデータが入力データ領域311に展開されていない場合(取得部410が取得していない場合)、パディング部440は、不足するデータをパディングする。例えば、参照データ位置403として対象データ421の左右の1ラインのデータを取得する情報が設定されている場合、取得部410は、DRAM103から対象データ421の左右の1ラインのデータのみを参照データ422として取得する。パディング部440は、ROM102に予め設定されているパディング方法405及びパディング位置406の情報に基づいてマージンデータのうち参照データ422を除く部分のデータをパディングする。
【0054】
また、
図5の画像ブロック504のように、元画像マージンデータとなる画素が存在しない対象データ421については、取得部410はマージンデータの一部を取得できない。この場合も、パディング部440は、演算に不足するデータをパディングする。
【0055】
パディング部440は、上述したように、畳み込み演算部430が処理する演算データが不足する場合に、不足するデータ位置にパディングデータを付与する。本実施形態においては、主にSRAM310の容量を削減することを目的として、DRAM103から取得可能なマージンデータについても、その一部は取得せずパディングする。即ち、マージンデータの一部についてはDRAM103に保持された元画像の実データが参照され、その他の部分についてはパディングデータが付与される。このように演算データに含まれるマージンデータの一部実データを用いることで、CNNの演算結果の正確度の低下が抑制され、信頼性の低下が抑制される。またマージンデータの一部にパディングデータを用いることでSRAM310に保持するデータ量が削減され、必要なSRAM容量も削減される。よって本実施形態に示すプリンタ100のように、ハードウェア資源に制約がある組込み機器であっても、CNNモデルを用いた推論を信頼性の低下を抑制しつつ実施可能となる。
【0056】
なお、上述したようなマージンデータを部分的に取得する層は、CNNを構成する全ての層としてもよいし、少なくとも1つの層としてもよい。また、全ての層においてそれぞれ少なくとも1つ含むようにしてもよい。例えば、CNNの入力層(エンコード部201)の最終層において、マージンデータを部分的に取得するように構成すると好適である。
【0057】
また、対象データ421が分割データである場合は、マージンデータにおける参照データの位置(パディング部440がパディングデータを付与する位置)は、対象データ421(画像ブロック)の位置ごとに変更されることが好ましい。具体的には、画像ブロック間でパディング位置に周期性が表れないように、例えばランダムにパディング位置が設定されることが好ましい。これにより、畳み込み演算の結果得られる出力画像に信頼性が低下する部分が周期的に表れ、目立ってしまう現象を防ぐことができる。
【0058】
出力部450は、畳み込み演算部430による演算結果をSRAM310の出力データ領域313に保持する。出力部450は、全てのフィルタ処理の結果から特徴量ベクトル460を決定し、推論部104の推論結果として出力する。
【0059】
(推論)
次に、推論の流れを説明する。
図6は、本実施形態における推論の流れを示すフローチャートである。本フローチャートに示す処理は、ROM102に保持されたプログラムに記述される。プログラムはCPU101により呼び出され、RAM103のワークエリアに展開され、CPU101によって実行される。データ転送I/F105を介して処理対象とする元画像がDRAM103に転送されると、CPU101は
図6に示す処理を開始する。以下の説明において記号「S」はステップを意味する。
【0060】
S601において、取得部410はROM102にあらかじめ保持されている分割条件、参照データ取得条件に従ってDRAM103から入力データ420を取得する。分割条件は、分割位置401、分割サイズ402である。参照データ取得条件は、参照データ位置403である。パディング条件は、パディング方法405、パディング位置406である。上述したように、入力データ420は、1画像ブロック分の対象データ421と、当該対象データ421の畳み込み演算に必要なマージンデータの一部である参照データ422とを含む。また、取得部410はROM102にあらかじめ保持されているフィルタ係数を取得する。フィルタ300で処理される段が複数ある場合は、複数のフィルタ係数を取得する。取得部410は、受け取った1または複数のフィルタ係数をSRAM310のフィルタ係数領域312に展開する。
【0061】
S602において取得部410は、取得した入力データ420をフィルタ300のSRAM310の入力データ領域311に展開する。
【0062】
S603において取得部410は、SRAM310に展開された1または複数のフィルタ係数のうち、対象段のフィルタ係数を係数レジスタ322に設定する。まず第1段フィルタのフィルタ係数が係数レジスタ322に設定される。
【0063】
S604において畳み込み演算部430は、係数レジスタ322に設定されたフィルタ係数を用いて入力データ領域311に展開された入力データ420に対する畳み込み演算を実行する。畳み込み演算の詳細については後述する(
図8)。
【0064】
S605において推論部104は、次の段の処理が残っているかを判断する。次の段の処理が残っている場合はS603に戻り、次に第2段フィルタのフィルタ係数をSRAM310から取得して係数レジスタ322に設定し、入力データ領域311に展開された入力データ420に対して第2段フィルタの畳み込み演算を実行する。このように、第1段フィルタから第n段フィルタまでの全ての畳み込み演算を実行し、S605において次の段が残っていないと判断された場合は、本フローチャートの処理を終了する。
【0065】
(マージンデータの取得例;比較例)
次に、マージンデータの取得方法について説明する。まず、本実施形態との比較例となるマージンデータの取得方法について説明する。
図7は比較例としてのデータ取得方法を示す図である。
図7では、全てのマージンデータがDRAM103の元画像501から取得された例を示している。
【0066】
図7において、SRAM310内の入力データ領域701の実線で示す領域702は、取得部410がDRAM103に保持される元画像から取得した対象データ421(分割後の画像ブロック)が展開された領域である。また実線で示す領域702の周囲に存在する破線で示す範囲703は、畳み込み演算に必要なマージンデータの範囲を意味する。
図7に示す例では、対象データ421の外周1ラインの範囲全てがマージンデータ(図中グレーで示すデータ)としてDRAM103の元画像から取得されSRAM310に保持される。
【0067】
このように対象データ421のマージンデータを全て実データで構成する場合は、SRAM310の使用量は、対象データ421のみならず全てのマージンデータを含む量となる。よって多くの容量が必要となる。その代わりに、実データが演算に用いられることになるため、推論の結果得られる特徴量ベクトルの確度は高くなる。
図7の例では、マージンデータの範囲は上下左右1ラインずつであるが、これは畳み込み演算に使用するフィルタサイズが3×3だからである。フィルタサイズが大きくなれば必要なマージンデータの範囲703も大きくなる。フィルタサイズが5×5サイズの場合は、マージンデータの範囲703は上下左右2ラインずつである。
【0068】
(畳み込み演算処理;比較例)
畳み込み演算処理の詳細について
図8及び
図9を参照して説明する。
図8は、
図7の場合における畳み込み演算処理の流れを説明するフローチャートである。本フローチャートに示す処理は、
図6のS604において実行される。
図8に示すフローチャートを開始する前に、
図6のS601~S603の処理により、
図7に示すようにSRAM310に入力データ420が展開され、フィルタ係数が係数レジスタ322に設定されているものとする。
図9は、
図7に示すように全てのマージンデータを元画像から取得する場合の畳み込み演算の例を説明する図である。
【0069】
S801において畳み込み演算部430は、SRAM310に展開されている入力データから演算範囲のデータを1範囲ずつ取得し、演算用レジスタ321に設定する。演算範囲のデータは、フィルタ係数の要素数(3×3)分のデータである。例えば
図9(a)に示すように、出力画像(出力データ領域313)の画素D1の値を得るためには、SRAM310の入力データ領域701に展開されたデータのうち、図中グレーで示される演算範囲900のデータが必要である。
図9(a)の演算範囲900は、о1、о2、о3、о5、d1、d2、о6、d4、d5の9画素を含む。この演算範囲900のうち、d1、d2、d4、d5のデータはDRAM103から読み込まれた画像ブロック(対象データ421)のデータであり、o1~o6のデータはマージンデータ(参照データ422)としてDRAM103から読み込まれた実データである。
【0070】
S802において畳み込み演算部430は、取得した演算範囲900のデータとフィルタ係数との積和演算を実行する。畳み込み演算部430は、演算範囲900の各画素о1、о2、о3、о5、d1、d2、о6、d4、d5の値とフィルタの対応する要素c1~c9の値とを乗算し、乗算結果を演算用レジスタ321の各画素r1~r9に書き込む。その後、畳み込み演算部430は、演算用レジスタ321に保持されたフィルタ要素数分の乗算結果r1~r9を集めて加算し、その結果を画素r5に集約する。
【0071】
演算範囲900における画素r5は、出力データ領域313(出力画像)の画素D1に対応する。よって画素D1の値は、
D1=o1×c1+o2×c2+o3×c3
+o5×c4+d1×c5+d2×c6
+o6×c7+d4×c8+d5×c9
により決定される。
【0072】
S803において畳み込み演算部430は、積和演算の結果の値を、SRAM310の出力データ領域313の該当する画素位置に格納する。
図9(a)の例であれば、出力データ領域313の画素D1に、積和演算の結果の値が保持される。
【0073】
S804において畳み込み演算部430は、SRAM310の入力データ領域311に保持されている対象データ421及びそのマージンデータを含む演算データを全て処理したかを判断する。未処理の演算データがある場合は、S801へ戻り、畳み込み演算部430は次の演算範囲について積和演算を実行する。具体的には
図9(b)に示すように、畳み込み演算部430は演算範囲900を1ライン分横にスライドする。即ち、SRAM310から取得済みの演算データのうち、о1、о5、о6の値を捨て、代わりにо4、d3、d6の値を演算用レジスタ321に取り込み、上述の積和演算を実行する。
【0074】
出力データ領域313(出力画像)の画素D2の値は、
D2=o2×c1+o3×c2+o4×c3
+d1×c4+d2×c5+d3×c6
+d4×c7+d5×c8+d6×c9
により決定される。決定された値は出力データ領域313の画素D2に書き込まれる。
【0075】
このように畳み込み演算部430は、演算範囲を順にスライドしながらフィルタ係数との積和演算を繰り返し実行し、SRAM310に保持されている対象データ421とそのマージンデータを含む演算データを全て処理すると、本フローチャートの処理を終了する。
図8の処理を終了すると、対象段のフィルタ処理後の演算結果データがSRAM310の出力データ領域313に保持される。
【0076】
なお、
図7~
図9の例では、3×3のフィルタ係数による畳み込み演算が行われるため、演算範囲900は3×3の範囲である。畳み込み演算の結果は、以下の式(1)に示すように演算範囲の中央の画素に集約される。式(1)において、jは出力画像Dの画素位置を示す番号であり、ciはフィルタ係数の各要素の値であり、diは、演算範囲に含まれる演算データの値である。iは、フィルタ係数または演算範囲内の画素位置を示す識別子である。式(1)の演算結果Djは、演算範囲900の中心に位置する画素の値となる。
【0077】
【0078】
上述したように、畳み込み演算では、フィルタサイズに応じた範囲のマージンデータが必要となる。そしてフィルタの段数に応じて、より大きな範囲のマージンデータが必要となる。換言すると、ある所定のサイズの出力画像を最終的に得るために必要なマージンデータの範囲は、少なくともフィルタサイズ及びフィルタ段数(畳み込み層の数)を含むCNNの構造によって決定される。
【0079】
(本実施形態に係るマージンデータの取得方法と畳み込み演算処理)
次に、
図10~
図12を参照して本実施形態におけるマージンデータの取得方法と畳み込み演算処理について説明する。
図10は、本実施形態に係る周辺のデータ取得方法を示す図である。
図11は、
図10の場合における畳み込み演算処理の流れを説明するフローチャートである。
図12は、
図10の場合における畳み込み演算の計算手順を説明する図である。
【0080】
図10において、SRAM310内の入力データ領域1001の実線で示す領域1002は、取得部410がDRAM103に保持される元画像から取得した対象データ421(分割画像ブロック)が展開された領域である。また領域1002の左右に存在する破線で示す領域1003、1004(図中グレーで示す領域)は、参照データ422が保持される領域を意味する。即ち、
図10に示す例では、畳み込み演算に必要なマージンデータのうち、対象データ421の左右の領域のデータのみが参照データ422としてDRAM103から取り込まれてSRAM310に展開される。対象データ421の上下の領域のデータは取り込まれない。或いは、取り込んだ後に削除される。このように本実施形態の推論部104は、畳み込み演算に必要なマージンデータを部分的にDRAM103から取得し、SRAM310に展開する。
図10の場合は
図7の場合と比較して、上下1ラインずつSRAM310の使用量が削減される。
【0081】
3×3の1段フィルタの場合、畳み込み演算に必要なマージンデータは上下左右1ラインずつであるが、
図10に示す本実施形態のデータ取得方法によれば、上下1ラインずつのマージンデータはSRAM310に展開されない。その場合に不足するマージンデータはパディングにより補間される。フィルタサイズが大きくなれば必要なマージンデータの幅(範囲)も大きくなり、更に多段に構成する場合には、更に大きな幅のマージンデータが必要となる。よって、フィルタサイズ及び層数が増大すると、より大きなメモリ削減効果が発揮される。
【0082】
図10に示す方法で取得されたデータを用いた畳み込み演算処理について、
図11及び
図12を参照して具体的に説明する。本フローチャートに示す処理は、
図6のS604において実行される。
図11に示すフローチャートを開始する前に
図6のS601~S603の処理により、SRAM310には
図10に示すように入力データが保持され、フィルタ係数が係数レジスタ322に設定されているものとする。入力データは、分割された画像ブロック(対象データ421)と、その左右の領域の参照データ422が取り込まれている。なお、
図10では、画素を識別する識別子d1~d9、o5~o7が一部の画素のみに示されているが、これは
図12で演算範囲を説明するためである。実際には入力データ領域1001の全ての画素にデータが取り込まれている。
【0083】
S1101において畳み込み演算部430は、SRAM310に展開されている入力データから演算範囲のデータを1範囲ずつ取得し、演算用レジスタ321に設定する。演算範囲のデータは、フィルタ係数の要素数(3×3)分のデータである。例えば
図12(a)に示すように、出力画像(出力データ領域313)の画素D1の値を得るためには、SRAM310の入力データ領域1001に展開された演算データのうち、
図12中グレーで示される演算範囲1200のデータが必要である。しかし
図10に示す方法でデータが取り込まれた場合は、演算範囲1200のうちо5、d1、d2、о6、d4、d5のデータはSRAM310に保持され、о5、d1、d2の上の3画素分のデータはSRAM310に保持されていない。なお、演算範囲1200のうち、d1、d2、d4、d5のデータはDRAM103から読み込まれた画像ブロックのデータであり、o5、o6のデータは参照データ422としてDRAM103から読み込まれた実データである。
【0084】
S1102においてパディング部440は、データが不足しているо5、d1、d2の上の3画素について、パディングデータを演算用レジスタ321に付与する。このようにパディング部440は、積和演算の前に演算用レジスタ321の該当する画素位置に直接パディングデータを書き込む。または、パディング部440は、積和演算の後に演算用レジスタ321の該当する画素位置に直接パディングデータを書き込んでもよい。パディングデータは、パディング方法405によって設定されている値とする。例えば「0」のような任意の固定値、画像ブロック内のデータの鏡像データ、該当する画素の周囲の実データの平均値等とすればよい。
【0085】
パディングデータは、SRAM310に展開せず、演算用レジスタ321に直接を書き込むようにすれば、レジスタ320内の処理だけでパディング処理を終えることができる。
図12(a)に示す例では、演算範囲1200のうちо5、d1、d2の上に位置する3画素分のデータが不足しているため、パディング部440は演算用レジスタ321の対応する位置r1、r2、r3にパディングデータPdを直接書き込む。
【0086】
S1103において畳み込み演算部430は、S1101で取得した演算範囲1200のデータとフィルタ係数との積和演算を実行する。即ち、畳み込み演算部430は、演算範囲1200の各画素о5、d1、d2、о6、d4、d5の値とフィルタの対応する要素c4~c9の値とを乗算し、演算用レジスタ321のr4~r9に書き込む。その後、畳み込み演算部430は、レジスタr1~r9に保持されたフィルタ要素数分の乗算結果及びパディングデータを集めて加算し、その結果を画素D1の値として決定する。
【0087】
出力画像のD1の値は、
D1=Pd+Pd+Pd
+o5×c4+d1×c5+d2×c6
+o6×c7+d4×c8+d5×c9
と計算される。D1の値は出力データ領域313に書き込まれる。なお、この計算例は、パディングデータPdが積和演算後の値として演算用レジスタ321のr1、r2、r3に書き込まれた場合を示している。積和演算前にパディングデータが付与される場合には、出力画像のD1の値は、以下のように計算される。
【0088】
D1=Pd×c1+Pd×c2+Pd×c3
+o5×c4+d1×c5+d2×c6
+o6×c7+d4×c8+d5×c9
【0089】
S1104において畳み込み演算部430は、積和演算の結果を、SRAM310の出力データ領域313の該当する画素位置に保持する。
図12(a)の例であれば、出力データ領域313の画素D1に、積和演算の結果の値が保持される。
【0090】
S1105において畳み込み演算部430は、SRAM310の入力データ領域311に保持されている演算データを全て処理したかを判断する。演算データに未処理のデータがある場合は、S1101へ戻り、畳み込み演算部430は次の演算範囲について積和演算を実行する。具体的には
図12(b)に示すように、演算範囲1200を1ライン分横に移動する。即ち、SRAM310から取得済みの演算データのうち、о5、о6の値を捨て、代わりにd3、d6の値を演算用レジスタ321に取り込み、上述の積和演算を実行する。
【0091】
演算範囲1200のうちd1、d2、d3の上の3画素分のデータが不足しているため、演算用レジスタ321の対応する位置r1、r2、r3にパディングデータPdを付与する。
【0092】
出力画像の画素D2の値は、
D2=Pd+Pd+Pd
+d1×c4+d2×c5+d3×c6
+d4×c7+d5×c8+d6×c9
の計算により決定される。画素D2の値は出力データ領域313に書き込まれる。なお、この計算例は、パディングデータPdが積和演算後の値として演算用レジスタ321のr1、r2、r3に書き込まれた場合を示している。積和演算前にパディングデータが付与される場合には、出力画像のD1の値は、以下のように計算される。
【0093】
D1=Pd×c1+Pd×c2+Pd×c3
+d1×c4+d2×c5+d3×c6
+d4×c7+d5×c8+d6×c9
【0094】
このように畳み込み演算部430は、演算範囲をスライドし、かつ、不足するデータをパディングしながら、畳み込み演算を繰り返す。SRAM310に保持されている対象データ421及びマージンデータを含む演算データを全て処理すると、本フローチャートの処理を終了する。
図11の処理を終了した段階で、対象段のフィルタ処理後の出力画像がSRAM310の出力データ領域313に保持される。
【0095】
本実施形態に示すように、マージンデータの削減部分を画像ブロックの上下のラインとする場合は、演算範囲のスライド方向を左右方向とするとより好適である。同様に、マージンデータの削減部分を画像ブロックの左右のラインとする場合は、演算範囲のスライド方向を上下方向とするとより好適である。すなわち、対象データに対し、畳み込み演算の演算範囲のスライド方向と同一方向に存在するデータ群から参照データを取得することが好適である。なぜなら、データが不足する画素位置が、演算範囲の移動前後で同一であるため、パディングを実施する回数を削減できるからである。ただし、対象データに対し、畳み込み演算の演算範囲のスライド方向と直交する方向に存在するデータ群から参照データを取得することを妨げるものではない。即ち、マージンデータの削減部分を画像ブロックの上下のラインとする場合に、演算範囲のスライド方向を上下方向としても構わない。また、マージンデータの削減部分を画像ブロックの左右のラインとする場合に、演算範囲のスライド方向を左右方向としても構わない。
【0096】
また、DRAM103のデータの並び方向が左右方向である場合に、マージンデータの削減部分を画像ブロックの上下のラインとすると好適である。なぜなら、取得部410がDRAM103からデータを読み込む際に、DRAM103へのアクセス頻度を低減できるからである。ただし、DRAM103のデータの並び方向は上下方向であっても構わない。取得部410がDRAM103からデータを読み込む際のDRAM103へのアクセス頻度について、以下説明する。
【0097】
図13は、DRAM103からSRAM310にデータを取り込む際のDRAMへのアクセス方法について説明する図である。DRAM103に保持されている画像データが示されている。取得部410は、太線枠で示す横10×縦11の画像ブロックをDRAM103から取得し、SRAM310に転送するものとする。DRAM103内の画像の並びは左から右に続いているものとする。取得部410は、DRAM103からSRAM310へデータを転送する際、枠内に示す矢印1本分ずつデータを転送する。
図13(a)の例では、11回DRAM103にアクセスし、データを転送する。
【0098】
一方、本実施形態のように上下のマージンデータが削減される場合は、
図13(b)に示すように横10×縦9の画像ブロックがDRAM103から転送される。よって太線枠に示すように、上下2回分DRAM103へのアクセス回数が減り、9回のアクセスとなる。
図13(a)の場合と比較してアクセス回数が減少する。このように、DRAM103上のデータ並びとパディングの位置(マージンデータを削減する位置)との関係によって、DRAM103のアクセス頻度を低下できる。
【0099】
なお、DRAM103は特性上、データ並び毎にまとまった量がリードされるように作られている。
図13の例では、1アクセスごとに連続10画素のデータがリードされる。従って、仮に左右のマージンデータが削減される場合は、連続8画素のリードを行えば十分であるが、DRAM103からは10画素分がリードされる仕組みとなっている。よってDRAM103へのデータアクセス回数はマージンデータを全て取得する場合と変わらず、11回(
図13(a)の矢印11本分)となる。この場合、リードした余分のデータは取得後削除すればよい。
【0100】
以上説明したように、本実施形態のプリンタ100の推論部104は、畳み込み演算に必要なマージンデータの一部のデータを参照データとして元画像から取り込み、マージンデータのうち参照データを除く他のデータをパディングによって補間する。このため、マージンデータを全て取り込む場合と比較してフィルタ処理に必要なメモリ容量を削減できる。またマージンデータを全てパディングする場合と比較して、実データを演算に使用できるため、フィルタ処理の結果得られる特徴量ベクトルの確度低下を抑制できる。従って、演算結果の信頼性の低下を抑制しつつ、CNNの畳み込み演算に必要な記憶容量を削減することが可能となる。
【0101】
なお、上述の例では、対象データのマージンデータのうち、上下領域を取得せず、左右領域を参照データとして取得する例を示したが、本開示はこの例に限定されない。上または下のいずれかのラインのみ、或いは左または右のいずれかのラインのみ、マージンデータを削減してもよい。また、畳み込み演算に必要なマージンデータ全体の量に対する参照データの割合は任意である。以下、第1の実施形態の変形例について説明する。
【0102】
<変形例1>
図14は、本実施形態の変形例1に係るデータ取得方法を示す図である。
図14に示す例では、DRAM103からSRAM310に取り込むマージンデータが
図7の場合と比較して削減されている。
図10に示す第1の実施形態と異なる点は、畳み込み演算に必要なマージンデータのうち上下1ラインずつ参照データを取得し、左右のマージンデータを取得しない点である。
図14のグレーで示す領域1403、1404が、DRAM103から取り込まれる参照データが保持される領域を示している。
【0103】
図14において、SRAM310内の入力データ領域1401の実線で示す領域1402は、DRAM103から取得した画像ブロック(対象データ421)が展開された領域である。また実線で示す領域1402の上下に存在する破線で示す領域1403、1404は、DRAM103から取り込まれた参照データ422が保持される領域を意味する。
図14に示す例では、畳み込み演算に必要なマージンデータのうち、画像ブロックの上下の領域のデータのみがDRAM103から取り込まれてSRAM310に展開される。左右の領域のデータは取り込まれない。或いは、取り込まれた後に削除される。
図14に示す例でも、畳み込み演算に必要なマージンデータが部分的にDRAM103から取得され、SRAM310に展開されるため、
図7と比較して、SRAM310の使用量が削減される。
【0104】
図14の場合も、畳み込み演算に必要なマージンデータのうち不足するデータについてはパディング部440がパディングする。パディング部440は、演算用レジスタ321の該当するデータ領域に直接パディングデータを書き込んでもよい。パディングデータは、上述したように、例えば「0」のような任意の固定値、画像ブロック内のデータの鏡像データ、該当する画素の周囲のデータの平均値等とすればよい。畳み込み演算の処理手順については、上述の実施形態と同様である。
【0105】
図14に示すように、左右のデータをパディングする場合には、演算範囲のスライド方向を縦方向とすると好適である。また、DRAM103へのアクセス頻度の効率化の観点からは、DRAM103上のデータ並びが縦方向である場合に好適である。
【0106】
図15は、
図14に示す方法でSRAM102に取り込まれた演算データを用いた畳み込み演算の計算手順を説明する図である。演算範囲1500のスライド方向を縦方向とする場合についての例を示している。
図15(a)に示すように、出力データ領域313(出力画像)における画素D1の値を得るためには、SRAM310の入力データ領域1401に展開された入力データのうち、図中グレーで示される演算範囲1500のデータが必要である。演算範囲1500のうちo2、o3、d1、d2、d4、d5のデータはSRAM310に保持されているが、о2、d1、d4の左の3画素分のデータはSRAM310に保持されていない。なお、演算範囲1500のうち、d1、d2、d4、d5のデータはDRAM103から読み込まれた画像ブロックのデータであり、o2、o3のデータは参照データとしてDRAM103から読み込まれたデータである。
【0107】
パディング部440は、データが不足している画素位置にパディングデータを付与する。パディング部440は、演算用レジスタ321の該当するデータ領域に直接パディングデータを書き込んでもよい。パディングデータは、上述したように、例えば「0」のような任意の固定値、画像ブロック内のデータの鏡像データ、該当する画素の周囲のデータの平均値等とすればよい。
図15(a)に示す例では、演算範囲1500のうちо2、d1、d4の左に位置する3画素分のデータが不足しているため、パディング部440は演算用レジスタ321の対応する位置r1、r4、r7にパディングデータPdを直接書き込む。
【0108】
畳み込み演算部430は、演算範囲1500のデータとフィルタ係数との積和演算を実行する。即ち、畳み込み演算部430は、演算範囲1500の各画素о2、o3、d1、d2、d4、d5の値とフィルタの対応する要素c2、c3、c5、c6、c8、c9の値とを乗算し、演算用レジスタ321のr2、r3、r5、r6、r8、r9に書き込む。その後、畳み込み演算部430は、レジスタr1~r9に保持されたフィルタ要素数分の乗算結果及びパディングデータを集めて加算し、その結果を画素D1の値として決定する。
【0109】
出力画像のD1の値は、
D1=Pd+o2×c2+o3×c3
+Pd+d1×c5+d2×c6
+Pd+d4×c8+d5×c9
と計算される。D1の値は出力データ領域313に書き込まれる。なお、この計算例は、パディングデータPdが積和演算後の値として演算用レジスタ321のr1、r4、r7に書き込まれた場合を示している。積和演算前にパディングデータが付与される場合には、出力画像のD1の値は、以下のように計算される。
【0110】
D1=Pd×c1+o2×c2+o3×c3
+Pd×c4+d1×c5+d2×c6
+Pd×c7+d4×c8+d5×c9
【0111】
次に
図15(b)に示すように、畳み込み演算部430は、演算範囲1500を1ライン分下(縦方向)にスライドする。即ち、SRAM310から取得済みの演算データのうち、о2、о3の値を捨て、代わりにd7、d8の値を取り込む。演算範囲1500のうちd1、d4、d7の左に位置する3画素分のデータが不足しているため、レジスタの対応する位置r1、r4、r7にパディングデータPdを付与する。なお、このパディングデータは既に書き込まれている。この場合、パディングデータPdの再書き込みは不要である。
【0112】
畳み込み演算部430は、取得した演算範囲1500のデータとフィルタ係数との積和演算を実行し、画素D4の値を決定する。
【0113】
出力画像のD4の値は、
D4=Pd+d1×c2+d2×c3
+Pd+d4×c5+d5×c6
+Pd+d7×c8+d8×c9
と計算される。D1の値は出力データ領域313に書き込まれる。なお、この計算例は、パディングデータPdが積和演算後の値として演算用レジスタ321のr1、r4、r7に書き込まれた場合を示している。積和演算前にパディングデータが付与される場合には、出力画像のD1の値は、以下のように計算される。
【0114】
D4=Pd×c1+d1×c2+d2×c3
+Pd×c4+d4×c5+d5×c6
+Pd×c7+d7×c8+d8×c9
【0115】
変形例1に示すように、マージンデータの削減部分を画像ブロックの左右の領域とする場合は、演算範囲のスライド方向を上下方向とすると好適である。なぜなら、データが不足する画素位置が演算範囲の移動前後で同一であるため、パディングデータを付与する回数を削減できるからである。また、DRAM103のデータの並び方向が上下方向である場合に変形例1のようにマージンデータの削減部分を画像ブロックの左右の領域とすれば、DRAM103へのアクセス頻度を抑制でき、効率的である。なお、上述の例は、演算範囲のスライド方向は左右方向でも構わない。また、DRAM103のデータの並び方向は左右方向でも構わない。また、上のラインのみ、或いは下のラインのみを参照データとして取得しても構わない。
【0116】
以上説明したように、変形例1によれば、畳み込み演算に必要なマージンデータの一部である上下のデータを参照データとして元画像から取り込み、マージンデータのうち参照データを除く他のデータをパディングによって補間する。このため、マージンデータを全て取り込む場合と比較してフィルタ処理に必要なメモリ容量を削減できる。またマージンデータを全てパディングする場合と比較して、実データを演算に使用できるため、フィルタ処理の結果得られる特徴量ベクトルの確度低下を抑制可能となる。従って、演算結果の信頼性の低下を抑制しつつ、CNNの畳み込み演算に必要な記憶容量を削減する可能となる。
【0117】
<変形例2>
図16は、本実施形態の変形例2に係るデータ取得方法を示す図である。
図16に示す例では、DRAM103からSRAM310に取り込むマージンデータが
図7の場合と比較して削減されている。第1の実施形態(
図10)と異なる点は、畳み込み演算に必要なマージンデータである上下左右の領域において、離散的に参照データを取得している点である。
図16のグレーで示す複数の画素1603が、DRAM103から取り込まれる参照データが保持される領域を示している。
【0118】
図16において、SRAM310内の入力データ領域1601の実線で示す領域1602は、DRAM103から取得した画像ブロックが展開された領域である。また領域1602の上下左右に存在する破線で示す複数の領域1603(グレーで示す領域)は、参照データが保持され領域を示している。即ち、
図16に示す例では、画像ブロックと、その画像ブロックの周辺にある画素のデータが1画素おきにDRAM103から取り込まれ、SRAM310に展開される。
図16の場合も畳み込み演算に必要なマージンデータが部分的にDRAM103から取得され、SRAM310に展開されるため、
図7と比較して、SRAM310の使用量が削減される。
【0119】
図16の場合も、畳み込み演算に必要なマージンデータのうち不足するデータについてはパディング部440がパディングする。パディング部440は、演算用レジスタ321の該当するデータ領域に直接パディングデータを書き込んでもよい。パディングデータは、上述したように、例えば「0」のような任意の固定値、画像ブロック内のデータの鏡像データ、該当する画素の周囲のデータの平均値等とすればよい。畳み込み演算の処理手順については、上述の実施形態及び変形例と同様である。
【0120】
以上説明したように、変形例2によれば、畳み込み演算に必要なマージンデータの一部のデータを参照データとして元画像から取り込み、マージンデータのうち参照データを除く他のデータをパディングによって補間する。このため、マージンデータを全て取り込む場合と比較してフィルタ処理に必要なメモリ容量を削減することができる。またマージンデータを全てパディングする場合と比較して、実データを演算に使用できるため、フィルタ処理の結果得られる特徴量ベクトルの確度低下を抑制可能となる。
【0121】
また、変形例2によれば、
図10及び
図14の場合と比較して更にフィルタ処理の結果得られる特徴量ベクトルの確度の向上が期待できる。間引かれているとはいえ、局所的にパディングデータが集中することがなく、元画像の真の値が畳み込み演算に使用されるからである。
【0122】
なお
図16の例では、1画素おきに参照データを取り込む例を示したが、この例に限定されず、2画素おき、3画素おきのように、任意の画素数をスキップした配置でもよい。また離散的な配置であればよく、任意の位置にランダムに参照データが配置されてよい。更に、
図10、
図14に示すように、マージンデータのうち上、下、左、右の少なくともいずれかの1つのラインの参照データを取り込む場合に、そのラインにおいて離散的に参照データを取得してもよい。
【0123】
<変形例3>
上述の第1の実施形態及び変形例1、2では、マージンデータの幅が上下左右に1ラインの場合について説明したが、本開示はマージンデータが複数ラインに渡る場合にも適用できる。例えば、5×5フィルタを使用する場合、マージンデータの幅は上下左右に2ラインずつ必要となる。
【0124】
図17は、複数ラインに渡るマージンデータの例を示す図である。
図17において、SRAM310内の入力データ領域1701の実線で示す領域1702は、DRAM103から取得した画像ブロックが展開された領域である。また実線の上下左右に存在する破線で示す領域1703は、畳み込み演算に必要なマージンデータの範囲を示している。5×5フィルタの場合、画像ブロックの周囲2ライン(2行及び2列)の範囲のマージンデータが必要であることを示している。そして、
図17のグレーで示す領域1704に、DRAM103から取得した参照データo1~o7が保持された状態を示している。
【0125】
図17の例では、マージンデータ(領域1703)の2ラインのうち1ラインの一部に、DRAM103から取得したо1~о7のデータが集中して保持されている。それ以外のマージンデータは、パディングされる。この場合、部分的に参照データが使用されるため、上述の各実施形態及び変形例と同様に、SRAMの使用量を削減できる。しかし、参照データが局所的に集中して保持されており、パディング領域と分離している。このような方法で参照データを取り込むと、部分的に実データの情報が欠落することになる。
【0126】
図18は、変形例3に係るデータ取得方法を示す図である。
図18に示す方法は
図17と比較して好適なデータ取得方法である。
図18の例も、畳み込み演算に必要なマージンデータの範囲が複数ラインにわたる場合を示している。
図18のグレーで示す複数の領域1803が、DRAM103から取り込まれる参照データが保持される領域である。DRAM103から取得した参照データo1~o7が、局所的に集中しないように離散的に配置されている。具体的には、参照データo1~o7が千鳥状にSRAM310に配置されている。
【0127】
このように、畳み込み演算に必要なマージンデータが複数ラインにわたる場合には、DRAM103から取得するマージンデータが1つのラインに集中しないよう分散配置されることが好ましい。これにより、あるラインにおいて元の画像データの情報の欠落を防ぐことができる。その結果、パディングを用いた畳み込み演算において、処理結果の確度低下を抑制することができる。
【0128】
なお
図18の例では、1画素おきに参照データを配置する千鳥配置の例を示したが、この例に限定されず、2画素おき、3画素おきのように、任意の画素数をスキップした配置でもよい。また離散的な配置であればよく、任意の位置にランダムに参照データが配置されてよい。また、本変形例3は、畳み込み演算に必要なマージンデータが複数ラインにわたる場合に、
図10に示すように上下のラインのみ、または
図14に示すように左右ラインのみに実データを取り込むことを妨げるものではない。
【0129】
いずれにしても、本実施形態において推論部104がDRAM103から取得しSRAM310に展開する参照データは、畳み込み演算に必要な全てのマージンデータより少なく、かつ全てのマージンデータをパディングする場合よりは多くなるようにする。これにより、推論部104のフィルタ処理に必要なSRAM310の容量を削減しつつ、処理結果の確度の低下を抑制することが可能となる。
【0130】
なお、推論部104が用いるCNNの構造により、複数層にわたってフィルタ処理が行われる場合、全ての層において本実施形態のマージンデータの削減を行う必要はなく、いずれか1つ以上の層を選択して、本実施形態のマージンデータの削減を行ってもよい。その場合、データの削減効果が高い層で使用されるフィルタについて、本実施形態のようにマージンデータを削減してもよい。削減効果が高い層は、例えば、エンコード部201の最後の層である。この層は解像度が低いためパディング量が少なく、またその後の層でアップサンプリングされて解像度が高められるため好適である。
【0131】
また、DRAM103から取り込まれる対象データ421(画像ブロック)の元画像における位置に応じて、パディング位置(マージンデータを削減する位置)を変更してもよい。例えば、元画像における上端部の画像ブロックをDRAM103から取得する場合、DRAM103内の元画像データの上端部の外側には画素がないため、パディング位置を上のラインとする。或いは、
図10に示すように上下のラインとする。また、元画像における左端部の画像ブロックをDRAM103から取得する場合には、DRAM103内の元画像データの左端部の外側には画素がないため、パディング位置を左のラインのみとする。或いは、
図14に示すように左右のラインとする等である。
【0132】
また、DRAM103から取り込まれる画像ブロック毎にパディング位置を変更してもよい。この場合、特定の周期性を持たないようにランダムにパディング位置が変更されることが好ましい。例えば、全ての画像ブロックについて常に同じ位置でパディングする場合、周期的な確度劣化が表れてしまう。画像ブロック間で可能な限りパディング位置を分散させることで、周期的な確度劣化を防ぐことができる。
【0133】
なお、どの画像ブロックをどの位置でパディングするかを決定するためのプログラムを予めプリンタ100のROM102に格納しておき、CPU101がプログラムを実行することによって、画像ブロックごとにパディング位置を決定すればよい。また、CPU101は、ROM102に予め設定されている分割位置、及びパディング位置の情報に基づき、どの画像ブロックをどの位置でパディングするかを決定してもよい。
【0134】
以上、第1の実施形態のプリンタ100における推論部104の構成と推論の例を説明した。本実施形態では、畳み込み演算に必要なマージンデータの一部を参照データとして取得し、その他の部分をパディングする。これにより、推論の確度の低下を抑制しつつ、計算資源の乏しい組込み機器においてCNNモデルを用いた推論を実行することが可能となる。
【0135】
<第2の実施形態>
第2の実施形態では、第1の実施形態に示すプリンタ100において、推論において使用されるフィルタ係数を得るための学習条件を、推論部104における推論条件と共通とする。これにより、推論の結果の確度を向上する。
【0136】
推論の結果として最終的に得られる属性確率の確度は、推論に用いる画像特性と、学習において想定された画像特性との近さに依存する。学習は、膨大な学習データを用いてCNNによりフィルタ係数を最適化し、特徴量の抽出に適したフィルタ係数を決定する処理である。そこで第2の実施形態では、第1の実施形態で説明したように、プリンタ100におけるハードウェア資源の制約が考慮された推論条件を、学習にも反映する。そして、学習により決定された学習済みフィルタ係数をプリンタ100に設定する。
【0137】
特に、本実施形態では、推論及び学習において用いられる演算データの分割条件、参照データ取得条件、及びパディング条件を共通とする。また、処理層の数、フィルタサイズ、縮小、及び拡大の数といったCNNモデルの構造を決定する条件(以下、CNN条件という)についても推論と学習とで共通とする。
【0138】
(システム構成)
次に、第2の実施形態の情報処理システム1900のシステム構成について説明する。
図19は、推論装置としてのプリンタ100と学習装置1901との関係を示す図である。
【0139】
図19(a)に示すように、第2の実施形態では、学習装置1901とプリンタ100とが別の装置で構成される情報処理システム1900の例を説明する。なお、情報処理システム1900の構成はこの例に限定されず、例えば、プリンタ100内に推論部と学習部とを共に備える構成としてもよい。また、プリンタ100は第1の実施形態と同様に、製品としての推論装置の一例であり、プリンタ100に限定されず、その他の組込み機器であってもよい。
【0140】
以下の説明において、プリンタ100は、第1の実施形態において示したプリンタ100であり、ハードウェア構成及び機能構成は第1の実施形態と同様とし、同一の各部は同一の符号を付すものとする。
【0141】
学習装置1901は、プリンタ100の推論部104が実行する推論において使用されるフィルタ係数を生成する装置であり、例えば、パーソナルコンピュータ(PC)等の情報処理装置により構成される。学習装置1901のハードウェア資源はプリンタ100と比較して演算速度及び記憶容量において高性能であることを想定している。
【0142】
第2の実施形態において、学習装置1901がフィルタ係数を生成する際の学習条件は、プリンタ100における推論条件が反映される。具体的には、学習装置1901における学習データの取得条件には、プリンタ100の推論部104における演算データの取得条件が反映される。また、学習装置1901におけるCNNモデルの構造は、プリンタ100の推論部104のCNNモデルの構造と同一とする。
図19(a)に示す矢印は、必ずしも学習装置1901とプリンタ100とが通信接続されることを意味するものではない。プリンタ100に設定されている推論条件を学習装置1901に反映すること、及び学習装置1901が生成した学習済みフィルタ係数をプリンタ100に反映し、推論に用いることを示す。条件やフィルタ係数の反映は、ユーザが手動設定してもよい。
【0143】
図19(b)は、学習装置1901に反映される条件1920の例を示す図である。学習装置1901に反映される条件1920は、学習に使用されるデータ(学習データ)の分割条件、参照データ取得条件、パディング条件、及びCNN条件を含む。分割条件は、分割位置1921及び分割サイズ1922である。参照データ取得条件は、参照データ位置1923である。パディング条件は、パディング方法1924、及びパディング位置1925である。これらは、
図4のプリンタ100のROM102に設定されている分割位置401、分割サイズ402、参照データ位置403、パディング方法405、パディング位置406と同様の内容である。CNN条件1926は、CNNモデルの構造に関する条件であり、例えば、処理層の数、フィルタサイズ、縮小、拡大の数等である。CNN条件1926も、
図4に示すプリンタ100の推論部104のCNNモデルの条件と同一の内容が、学習装置1901に反映される。
【0144】
学習装置1901が学習を実行する場合、学習データは、分割位置1921及び分割サイズ1922に基づき分割されて取得され、参照データ位置1923に基づき特定される参照データが取得され、学習装置1901の学習部2000のメモリ(RAM2130)に保持される。また、畳み込み演算に必要なマージンデータのうち不足するデータはパディング方法405及びパディング位置406に基づきパディングデータが付加される。
【0145】
(学習装置の構成)
図20は、学習装置1901のハードウェア構成の一例を示す図である。学習装置1901は、例えば、CPU2001、学習部2000、ROM2002、RAM2003、通信部2004、入力部2005、表示部2006、記憶部2007、データ転送I/F等を備える。これらの各部はデータバス2009を介してCPU2001に接続されている。なお、学習装置1901の構成は
図20の例に限定されず、適宜様々な構成を取り得る。
【0146】
CPU2001は、ROM2002または記憶部2007に保持されるプログラムに従ってRAM2003をワークエリアとして用いて各種処理を実行する。RAM2003は、揮発性の記憶領域であり、ワークメモリ等として利用される。ROM2002は、不揮発性の記憶領域であり、本実施形態に係るプログラムやOS(Operating System)等が保持される。記憶部2007は、HDD、SSD等の不揮発性の記憶装置であり、プログラムやプログラム実行に必要なデータ、及び学習に用いられる画像データ等、各種データを保持する。
【0147】
通信部2004は、LAN、WAN、インターネット等のネットワークとの通信を行うためのインターフェースである。表示部2006はディスプレイ及び表示制御回路を含み、CPU2001から入力されたデータを表示する。入力部2005は、キーボードやマウスなどのポインティングデバイス等の入力機器を含み、入力機器を介してユーザにより入力されたデータをCPU2001に送信する。データ転送I/F2008、外部装置とのデータの送受信を行うためのインターフェースである。例えば、データ転送I/F312における接続方式は、特に限定するものではないが、例えば、USB、IEEE1394等を用いることができる。また有線、無線を問わない。
【0148】
学習部2000は、CNNによる学習を実行するためのフィルタ(演算回路、RAM及びレジスタ等のメモリ)を備え、設定された条件1920に従って学習を実行する。
【0149】
図21は、学習装置1901の機能構成及びデータの処理過程を示す図である。
図21に示すように、学習装置1901は、条件入力部2101、設定部2102、学習部2000を有する。学習部2000は、取得部2110、RAM2130、畳み込み演算部2150、出力部2160、比較部2170、更新部2180等を有する。これらの機能部は、例えば、CPU2001がROM102に保持されたプログラムを実行することで実現される。
【0150】
RAM2003には、複数の学習データである画像データ群2106が記憶されている。画像データ群2106は、学習装置1901の外部装置から通信部2004を介して、または可搬型の記憶媒体からデータ転送I/F2008を介して入力され、RAM2003に保持される。なお、
図20では、学習部2000がRAM2003から学習データを読みこむ際に、学習データを分割することを想定した図としているが、これに限定されず、前処理により予め分割された画像ブロックのデータがRAM2003に保持されていてもよい。また、その画像ブロックに参照データ2122が予め付加された状態でRAM2003に保持されていてもよい。
【0151】
条件入力部2101は、学習部2000が実行する学習における各種条件の入力を受け付ける。入力される条件は、上述の
図19(b)に示す条件1920を含む。具体的には、学習データの分割に関する条件(分割位置1921、分割サイズ1922)、参照データ取得条件(参照データ位置1923)、パディング条件(パディング方法1924、パディング位置1925)、及びCNN条件1926を含む。
【0152】
また条件入力部2101は、教師画像2103、更新回数2104、フィルタ係数2105の入力を受け付ける。教師画像2103は、正解を示す画像データであり、比較部2170において畳み込み演算の結果得られる出力画像と比較される。更新回数2104は、更新部2180においてフィルタ係数の更新が繰り返される回数の上限値である。フィルタ係数2105は、初期値として任意の値が設定される。例えば、初期値としてランダムな値がフィルタ係数2105に設定され、学習を繰り返すことで値が徐々に更新され、最適化される。条件入力部2101への情報の入力は、第2の実施形態において、ユーザが手動で行うものとする。条件入力部2101は、受け付けた情報を設定部2102に転送する。
【0153】
設定部2102は、条件入力部2101が受け付けた学習データの分割条件、参照データ取得条件、パディング条件、CNN条件1926、教師画像2103、更新回数2104、フィルタ係数2105を受取り、学習部2000に設定する。分割条件は、分割位置1921、分割サイズ1922である。参照データ取得条件は、参照データ位置1923である。パディング条件は、パディング方法1924、パディング位置1925である。
【0154】
具体的には、設定部2102は、CNN条件1926を学習部2000に設定する。学習部2000は、CNN条件1926に従ったCNNモデルを構築する。また設定部2102は、分割位置1921及び分割サイズ1922をデータ分割部2111に設定する。また設定部2102は、参照データ位置1923を取得部2110に設定する。また設定部2102は、パディング方法1924及びパディング位置1925をパディング部2140に設定する。また設定部2102は、教師画像(正解)を比較部2170に設定し、更新回数を更新部2180に設定する。
【0155】
学習部2000の取得部2110、データ分割部2111、パディング部2140、及び畳み込み演算部2150は、
図4の推論部104の取得部410、データ分割部411、パディング部440、及び畳み込み演算部430と同様である。RAM2130は、例えば、
図10、
図14、
図16~
図18に示す第1の実施形態及びその変形例に示すSRAMと同様に、入力データ領域、フィルタ係数記憶領域、及び出力データ記憶領域を有する。
【0156】
取得部2110は、設定部2102により設定された条件1920に基づき、RAM2003に保持されているページ単位の画像データ群2106から学習データを取得する。取得部2110は、データ分割部2111によって学習データを所定サイズの画像ブロックに分割しながら対象データ2121として処理順に順次読み込み、学習部2000のRAM2130の入力データ領域に展開する。このとき取得部2110は、分割位置の情報も取得してもよい。これは、分割位置に応じて参照データの取得方法を変更する場合があるからである。第2の実施形態において、入力データ領域には分割された1画像ブロック分の対象データ2121が展開される。また、取得部2110は取得した画像ブロック(対象データ2121)の元画像(学習データ)における周囲に存在する画素群から参照データ2122を取得し、SRAM310の入力データ領域に展開する。
【0157】
取得部2110は、設定部2102に設定されている参照データ位置1923の情報と、分割位置1921及び分割サイズ1922の情報に基づき、元画像のどの位置から参照データを取得するかを特定できる。取得部2110は、取得した対象データ2121の周囲に存在するデータ群、すなわちRAM2003に保持されている元画像501から参照データ2122を取得し、入力データ領域に展開する。マージンデータのうち、参照データ2122を除く他のデータについては、例えば、パディングによって埋める。
【0158】
パディング部2140は、設定部2102により設定されたパディング方法1924及びパディング位置1925に基づき、畳み込み演算に不足するデータをパディングする。
【0159】
上述したように、学習装置1901の設定部1920に設定された条件1920は、第1の実施形態に示す推論部104に設定された分割位置、分割サイズ、参照データ位置、パディング方法、及びパディング位置と同一である。従って、学習部2000のRAM2130に展開される入力データ2120は、プリンタ100の推論部104における入力データと同様のサイズ及び参照データ取得方法で取得される。パディングデータもプリンタ100の推論部104におけるパディングデータと同様に付与される。例えば
図10に示す推論部104の入力データと同様に、マージンデータの一部が削減された状態で、RAM2130に保持される。
【0160】
フィルタ係数2105は任意の初期値が設定される。例えば、処理層がn段のフィルタで構成されている場合、取得部2110はn段分のフィルタ係数についてそれぞれ初期値を設定し、RAM2130のフィルタ係数領域に保持する。
【0161】
畳み込み演算部2150は、処理対象段のフィルタ係数をRAM2130のフィルタ係数領域から読出し、係数レジスタに設定する。また畳み込み演算部2150は、RAM2130に保持されている入力データ2120及びパディングデータを含む演算データから所定の演算範囲のデータを演算用レジスタに設定し、係数レジスタに設定されているフィルタ係数との積和演算を実行する。畳み込み演算部2150は、演算範囲をスライドさせながら演算データの全画素について演算を実行し、演算結果である出力画像(特徴量)をRAM2130の出力データ領域に書き込む。次の層がある場合は、その出力画像を入力として畳み込み演算を繰り返し行う。全ての処理層について畳み込み演算が終了すると、出力部2160は特徴量ベクトルを得る。
【0162】
比較部2170は、出力部2160から出力された特徴量ベクトルと正解である教師画像2103とを比較し、誤差を算出する。
【0163】
更新部2180は、比較部2170が算出した誤差を出力層側から入力層側に向かって伝播させ、この誤差から勾配を算出することで、各ニューロンにおけるフィルタ係数を更新する。次の入力画像については、更新されたフィルタ係数を用いて学習が行われる。設定部2102によって設定された更新回数の上限値に達すると、学習部2000は学習を終了する。学習部2000は、学習の結果として学習済みフィルタ係数2190を出力する。
【0164】
(フィルタ係数の生成方法)
ここで学習装置1901におけるフィルタ係数の生成処理(学習処理)についてより詳細に説明する。
【0165】
(生成環境)
図22は、典型的なCNNモデルの入力部近傍の模式図である。本実施形態では、
図19に示す学習装置1901を用いてフィルタ係数を生成する場合について説明する。データ2201は学習装置1901に入力されるデータである。例えば入力データが画像データである場合、座標ごとにR、G、Bの3チャネル分用意される。ニューロン2211~2216は、入力データ2201の処理層を構成する部分である。ニューロン2211~2216は、入力データ2201を畳み込むためのフィルタであり、それぞれ異なるフィルタ係数を保持している。これは、1つのフィルタは1つの特性を抽出するからであり、複数の異なる特徴を抽出するためには、複数のフィルタ処理を行わなくてはならない。各フィルタ(ニューロン2211~2216)に保持されているフィルタ係数は、R、G、Bの3チャネル分あるとする。後述するように、初期状態ではフィルタ係数の値は生成対象としての変数である。例えばニューロン2211は、入力データ2201を畳み込むための3×3のフィルタ係数をR、G、Bの3チャネル分保持している。
【0166】
図22の例では、6つの処理層が設けられている。この結果第1段の処理を終えると、6つの特徴が抽出される。ニューロン2221~2224は、2段目の処理層である。2段目の処理層では1段目のニューロン2211~2216の結果を入力として受け取り、4つの処理層(ニューロン2221~2224)によって同様の畳み込み演算を行う。次に活性化関数について説明する。
【0167】
図23は、処理層における処理部の概要を示す模式図である。処理層では入力されたデータを、畳み込み演算部2311によって畳み込み、その結果を活性化関数部2312に入力する。活性化関数部2312は非線形な特性を持つ関数である。具体的にはシグモイド関数やReLU関数等が用いられる。活性化関数部2312は、畳み込み演算部2311による演算結果を入力とし、関数演算を実行し、その結果を出力する。畳み込み演算部2311からの入力によっては活性化関数部2312からの出力が微弱になることもある。つまり、畳み込み演算部2311に保持された係数に依存して、活性化関数部2312から次の層に情報が伝達されるかどうかが決定される。このような処理を次の段へと繰り返し実施し、CNNモデルの最終段(不図示)まで実施することによって特徴量を生成する。
【0168】
(誤差の取得)
図24は、典型的なCNNモデルの出力部近傍を示す模式図である。
図22での入力を経て最終段に到達すると、活性化関数2401を通して特徴量が出力される。このようにして入力された画像の特徴が得られる。以上のように、CNNモデルは、膨大なフィルタ計算と活性化関数を用いて、入力データから特徴量を得る。
【0169】
入力画像の特徴を示す真の特徴量は、学習とは別の方法で用意することができる。例えば目視による人の判断で値を決めることができる。以下ではこの値(真の特徴量)を「正解」または教師データという。CNNモデルから得られた特徴量と正解との差をとると、入力データの誤差が得られる。
【0170】
(誤差伝搬)
各層の出力と、正解との誤差を出力層側から入力層側に向かって伝播させ、この誤差から勾配を算出することで、各ニューロンにおけるフィルタ係数が更新される。これを誤差逆伝播法という。誤差逆伝播法は公知の技術であり、例えば、特開平6-96046号公報に記載されている。このようにして誤差伝搬した結果、CNN全層でのフィルタ係数が更新される。なお、誤差逆伝播法は一例であり、その他の方法を用いてフィルタ係数を更新してもよい。
【0171】
(学習処理の全体の流れ)
次に、学習装置1901が実行する学習処理の全体の流れを説明する。
図25は、学習装置1901が実行する学習処理の全体の流れを説明するフローチャートである。本フローチャートに示す処理を実行するためのプログラムは、学習装置1901の記憶部2007またはROM2002に記憶される。CPU2001は、このプログラムを呼び出してRAM2003をワークエリアとして用いながら本フローチャートの処理を実行する。例えば、入力部2005を介してユーザが学習の開始を指示すると、CPU2001は本フローチャートを開始する。
【0172】
S2501において、CPU2001(条件入力部2101)はユーザによる学習用のCNNモデルの構造の設計を受け付ける。CPU2001はモデル構造に関するパラメータの入力を受け付ける。モデル構造に関するパラメータは、畳み込み層(フィルタ)の層数、フィルタサイズ、縮小、拡大の回数等を含み、上述した条件1920のうちCNN条件1926に相当する。なお、パラメータに代えて、既存のモデルを利用してもよい。
【0173】
S2502において、CPU2001(条件入力部2101)はモデル条件の設定を受け付ける。モデル条件は、上述した条件1920のうち、分割位置1921、分割サイズ1922、参照データ位置1923、パディング方法1924、及びパディング位置1925を含む。また、CPU2001は教師画像2103、及び更新回数2104も受け付ける。
【0174】
S2501及びS2502において、ユーザは、プリンタ100の推論部104と同様のモデル構造(CNN条件)及びモデル条件を学習装置1901に設定する。このとき、学習装置1901の条件入力部2101(CPU2001)は、ユーザがモデル構造及びモデル条件を設定するためのUI(ユーザインターフェース)画面を表示してもよい。
【0175】
図26は、ユーザがモデル構造及びモデル条件を設定するためのUI画面2600の一例である。UI画面2600には、モデル構造設定領域2601、学習開始ボタン2602、モード選択ボタン2603、及び層選択ボタン2604が設けられる。
【0176】
モデル構造設定領域2601において、ユーザは、畳み込み層の数、フィルタサイズ、縮小及び拡大の回数等のモデル構造に関するパラメータを設定する。モデル構造設定領域2601には、設定されたパラメータに応じたモデル構造図が表示される。第2の実施形態では、ユーザはプリンタ100のCNNモデル構造と同一のモデル構造(少なくとも、層の数、フィルタサイズ、縮小及び拡大の回数)を設定する。なお、ここで設定したモデル構造に基づき、各フィルタにおいて畳み込み演算に必要なマージンデータの範囲が決定される。
【0177】
モード選択ボタン2603は、マージンデータのうち取得する参照データを自動で設定する自動モードか、ユーザが手動で設定する手動モードかの選択操作を行うための操作部である。ユーザにより自動モードが選択された場合、CPU2001は、モデル全体について参照データ位置を自動的に設定する。なお、自動モードにおいてCPU2001は、ユーザがマージンデータに対する参照データの割合を設定可能としてもよい。そのための設定画面2607をポップアップ表示してもよい。マージンデータに対する参照データの割合は、0%から100%までの間の任意の値が設定可能である。100%が設定された場合は、マージンデータの全ての画素が参照データ(実データ)で構成され、0%が設定された場合は、マージンデータの全ての画素がパディングされる。ユーザは、プリンタ100の推論部104におけるマージンデータに対する参照データの割合と同じ割合を、設定画面2607に設定すればよい。
【0178】
設定画面2607において設定された割合は、自動モードにおいてモデル全体に一律に設定されることとする。CPU2001は、ユーザが設定した割合に基づいて、各層の参照データ位置を決定する。自動モードにおけるCPU2001の処理については、第3の実施形態で説明する。
【0179】
ユーザにより手動モードが選択された場合、CPU2001は、層の選択と、選択された層における参照データ位置の詳細設定の入力を受け付ける。層の選択は、層選択ボタン2604が押下された状態でモデル構造設定領域2601に表示されているモデル構造のいずれかの層がユーザにより指示されると行われる。選択された層について、CPU2001はユーザ操作により、「実データ参照」とするか、「パディング」とするかの選択を受け付ける。ラジオボタン2605がONにセットされた場合は「実データ参照」が選択され、ラジオボタン2606がONにセットされた場合は「パディング」が選択される。
【0180】
「実データ参照」が選択された場合は、選択された層について、マージンデータはすべて実データ(元画像のデータ)が取得される設定となる。
「パディング」が選択された場合は、CPU2001は、更に間引き位置2608及びパディング値2609の設定を受け付ける。
【0181】
間引き位置2608は、上、下、左、右のいずれか1つ以上が選択可能である。例えば、上及び下がユーザにより選択された場合は、
図10に示すように、畳み込み演算に必要なマージンデータのうち上及び下の領域の実データは取り込まれず、パディングされる。つまり、マージンデータのうち左及び右の領域は参照データとして実データが取り込まれ、上及び下の領域にパディングデータが付与される。間引き位置2608において右及び左がユーザにより選択された場合は、
図14に示すように、畳み込み演算に必要なマージンデータのうち右及び左の領域には実データは取り込まれず、パディングされる。つまり、マージンデータのうち上及び下の領域は参照データとして実データが取り込まれ、右及び左の領域にパディングデータが付与される。なお間引き位置は、上のみ、下のみ、左のみ、及び右のみのいずれかが選択されてもよい。
【0182】
パディング値2609は、
図26の例では、画素値または鏡像反転のいずれかが選択可能である。画素値がユーザにより選択された場合、CPU2001は入力欄2610への任意の実数値の入力を受け付ける。この場合、CPU2001は、入力された値をパディングデータとして、データが不足する画素を埋める。
図26の例では、入力欄2610に「0」が入力された状態を示している。鏡像反転がユーザにより選択された場合、CPU2001は学習部2000に入力された入力データの一部を鏡像反転して、データが不足する画素を埋める。なお、パディング値2609は、
図26の例では画素値及び鏡像反転を選択可能としているが、これらに限定されずその他のパディング方法を選択できるようにしてもよい。例えば、パディング位置の周囲に存在する複数画素の画素値の平均値としてもよい。
【0183】
UI画面2600の間引き位置2608により設定された間引き位置が、パディング位置1925として設定部2102に設定される。畳み込み演算に必要なマージンデータのうち、間引き位置2608により設定された位置を除く画素が参照データ位置1923として設定部2102に設定される。またUI画面2600に設定されたパディング値2609が、パディング方法1924として設定部2102に設定される。
【0184】
第2の実施形態では、ユーザはUI画面2600において手動モードを選択し、プリンタ100のマージンデータの条件と同じになるように間引き位置2608及びパディング値2609を設定する。これにより、学習装置1901において設定が必要なモデル条件のうち、参照データ位置1923、パディング方法1924、及びパディング位置1925が設定される。
【0185】
なお、
図26のUI画面2600の例では、間引き位置2608の選択肢として離散的な配置や千鳥配置が含まれないが、これらを選択肢に含めてもよい。更に、パディング値はチャネルごと、処理層ごとに異なる値を設定可能としてもよい。また、モデル条件のうち、分割位置1921及び分割サイズ1922の設定についても、UI画面2600に含めてもよい。本実施形態では、ユーザはプリンタ100の画像データの分割条件と同一となるように、画像の分割位置1921及び分割サイズ1922を設定する。また、同じデータ分割用のプログラムをプリンタ100と学習装置1901とでそれぞれ実施してもよい。これにより、学習装置1901において設定が必要な条件のうち、分割位置1921及び分割サイズ1922が設定される。
【0186】
UI画面2600を用いた条件設定は一例であり、その他の方法で条件設定を行ってもよい。例えば、プログラムコードに対し、ユーザが直接モデル構造(CNN条件)、パディング方法、パディング位置、分割位置、分割サイズ、参照データ位置等を指定してもよい。また、モデル構造の設定(CNN条件1926の設定)に関しては、学習装置1901は、Webに公開されている共有可能なCNNモデルを通信部2004を介して取得し、プログラムコードに反映してもよい。
【0187】
以上のように、モデル設計及びモデル条件設定が完了し、ユーザによりUI画面2600の学習開始ボタン2602が操作されると、S2503へ進む。
【0188】
S2503においてCPU2001は、フィルタ係数を初期化する。CPU2001は、S2501において設定されたフィルタサイズのフィルタ係数に任意の値に設定する。CPU2001は、例えばランダム値を設定する。
【0189】
S2504においてCPU2001は、S2501~S2503で設定されたCNNモデル、モデル条件、及びフィルタ係数を学習部2000に設定し、学習を開始する。学習については後述する。学習が完了するとS2505へ進む。
【0190】
S2505において、CPU2001は学習結果である学習済みフィルタ係数を出力する。以上の処理により、本フローチャートを終了する。
【0191】
(学習処理)
S2504で実行される学習処理について説明する。
図27は、学習処理の流れを示すフローチャートである。
図28は、学習データの分割及び水増しについて説明する図である。学習装置1901のCPU2001は、
図25のS2503までの処理を終了すると、次に
図27に示すフローチャートの処理を開始する。本フローチャートを開始するまでに、学習用の画像データ群2106が学習装置1901に入力され、RAM2003に保持されているものとする。
【0192】
S2701において学習装置1901のCPU2001は、画像データ群2106から任意の1枚の画像データ(以下、元画像2801という。)を取得し、学習部2000に転送する。学習部2000のデータ分割部2111は、設定部2102に設定された分割位置1921及び分割サイズ1922に従って元画像2801を分割し、
図28に示す複数の画像ブロック2802を得る。複数の画像ブロック2802には、それぞれ元画像における位置情報が付加されるものとする。元画像における位置情報は、分割位置1921の情報である。
【0193】
S2702においてCPU2001は、画像ブロック2802を水増し処理により増加させてもよい。水増し処理により、複数の水増し画像からなる水増し画像群2803を得る。水増し画像群2803は、画像ブロック2802が加工されることにより生成された複数の水増し画像データの集合である。画像ブロック2802の加工は、例えば鏡像反転による複製、写真、文字、またはグラフィクスといった任意の画像要素の部分的な上書き処理等である。複数の水増し画像データには、それぞれ元画像2801における位置情報が付加されるものとする。水増し画像群2803は、学習部2000のRAM2130に保持されてもよいし、学習装置1901のRAM2003、記憶部2007、或いは外部ストレージ等、任意の記憶領域に保持されてもよい。なお、S2701及びS2702の処理は、学習部2000が実行してもよい。
【0194】
S2703において学習部2000の取得部2110は、水増し画像群2803から任意の1枚の水増し画像データを対象データ2121として順に取得し、CNNモデルで学習を実行する。本実施形態において、学習部2000の取得部2110は、1枚の水増し画像データを取得し、RAM2130に展開する。このとき取得部2110は、設定部2102に設定されている参照データ位置1923の情報に基づき、取得した水増し画像データの周囲の参照データ2122も取得し、RAM2130に展開する。
【0195】
例えば、
図26のUI画面2600において間引き位置2608が上及び下として設定されている場合は、取得部2110は、元画像2801における水増し画像データ(対象データ2121)の周囲の画素群から、マージンデータの右側及び左側のデータを取得する。このように取得された参照データ2122と水増し画像データ(対象データ2121)とが
図21に示す入力データ2120としてRAM2130の入力データ領域に展開される。また、取得部2110はROM106にあらかじめ保持されているフィルタ係数を取得する。フィルタで処理される段が複数ある場合は、取得部2110は複数のフィルタ係数を取得する。取得部2110は、受け取った1または複数のフィルタ係数をRAM2130のフィルタ係数領域に保持する。
【0196】
畳み込み演算部2150は、対象段のフィルタ係数を係数レジスタに設定し、RAM2130の入力データ領域に展開された入力データのうち演算範囲のデータを順次演算用レジスタに設定して畳み込み演算を実行する。なお、学習の初期において、フィルタ係数は任意のランダム値が設定されている。また、演算範囲のデータが不足する場合は、パディング部2140がパディングを行う。パディング部2140は、設定部1920に設定されているパディング方法及びパディング位置の情報に基づきパディングデータを演算用レジスタに付与する。畳み込み演算部2150は、演算範囲をスライドさせながら畳み込み演算を実行し、演算結果を出力データ領域の該当画素に書き込む。入力データ領域に展開された入力データについて畳み込み演算が終了すると、特徴量を示す出力画像が得られる。
【0197】
次の段がある場合は、畳み込み演算部2150は、対象段のフィルタ係数を係数レジスタに設定して、入力データ領域に展開された入力データについて順次畳み込み演算を実行し、演算結果を出力データ領域の該当画素に書き込む。以上の処理を、入力データの全画素について実行する。更に次の層がある場合は、次の層について前の層の出力を入力として、CNN処理を実行する。CNN処理の結果、出力部2160は入力された水増し画像データの特徴量ベクトルを得る。
【0198】
S2704において出力部2160は、S2603で得られた特徴量ベクトルをRAMに保持する。
S2705において出力部2160は、全ての水増し画像データについて処理を終えたかを判断する。処理を終えていなければ、S2603に戻る。全ての水増し画像について処理を終えた場合、S2706に進む。
【0199】
S2706において出力部2160は、ここまでの処理で得られた特徴量ベクトルを全て加算する。加算された特徴量を、以下では「合計特徴量」という。出力部2160は合計特徴量を比較部2170に転送する。
S2707において比較部2170は、出力部2160から取得した合計特徴量と教師画像2103とを比較(差分)し、誤差を算出する。教師画像2103は、水増し処理回数と同じ回数加算された正解ベクトルであり、設定部2102により設定される。
【0200】
S2708において更新部2180は、S2707で算出した誤差をCNNモデルに伝播させ、フィルタ係数を更新する。このように誤差伝播した結果、CNNモデルで用いられる全層でのフィルタ係数が決定される。
【0201】
S2709において学習部2000は、全画像ブロックについて水増しから誤差伝播までの処理(S2702~S2708)を終えたかを判断する。処理を終えていない場合には、S2702に戻り、次の画像ブロックについて水増しから始める。なお、次の学習では、直前の処理において実行された誤差伝播の結果が反映されたフィルタ係数が用いられる。以上の学習処理が繰り返し実行されることにより、フィルタ係数が逐次最適化されていく。
【0202】
全分割画像について水増しから誤差伝播までの処理(S2702~S2708)を設定部2102により設定された更新回数分終えた場合は、S2710に進む。
【0203】
S2710においてCPU2001は、入力された画像データ群2106の全てについて上述の学習を終えたかを判断する。終えていない場合にはS2701に戻り、S2701~S2709の処理を繰り返す。入力された画像データ群2106の全てについて学習を終えた場合は、本フローチャートの処理を終了する。なお本実施形態では、画像を分割した後に水増しを実施しているがその限りではない。先に元画像を水増しし、その後分割を行ってもよい。
【0204】
学習により得たフィルタ係数は、パラメータとして出力可能である。学習装置1901のCPU2001は、ユーザの指示に従って、学習により得たフィルタ係数を所定の出力先に出力する。出力先は、例えばデータ転送I/F2008に接続された記憶媒体、データ転送I/F2008または通信部2004を介して接続されたプリンタ100、外部装置等である。
【0205】
プリンタ100は、記憶媒体または通信接続された学習装置1901から、フィルタ係数を取得する。取得したフィルタ係数はプリンタ100のROM106に記憶される。これにより、プリンタ100の推論部104は、学習装置1901が生成したフィルタ係数を使用して推論を実施できる。そのフィルタ係数は、プリンタ100が実施する推論におけるCNN条件、分割条件、参照データ取得条件、及びパディング条件と同様の条件で実施された学習により決定される。そのため、推論の結果得られる属性確度が向上する。なぜなら、学習においてフィルタ係数を最適化する場合に、「マージンデータを削減しパディングした部分」の信頼性も含めてフィルタ係数が決定されるからである。
【0206】
具体的に述べる。プリンタ100における推論において、
図10に示すように、対象データの畳み込み演算に必要なマージンデータのうち上下領域を取得しないとする。その場合、学習部2000が学習するデータも、マージンデータのうち上下領域を取得せず、パディングにより付与する。このように学習すると、フィルタ係数は「上下領域」の特徴量の誤差が収束しづらいことに起因して、当該位置の影響を受けにくいフィルタ係数に収束する。このようにして生成されたフィルタ係数がプリンタ100のROM102に実装された場合、プリンタ100の推論部104も上下領域がパディングされた演算データを用いて得られる特徴量を出力する。よって、その信頼性を過小評価した特徴量を得ることができる。こうして推論結果としての特徴量の信頼性を高めることができる。
【0207】
なお、本実施形態では
図10に示すデータ取得方法に相当する例として、学習用の水増し画像データを取得する際に、そのマージンデータのうち上下領域のデータを間引き(取得せず)、パディングする例を説明した。しかし本実施形態はこの例に限定されず、プリンタの推論部104が
図14に示すように、左右のマージンデータを間引く場合は、学習用の水増し画像データを取得する際に、そのマージンデータのうち左右領域のデータを間引き(取得せず)、パディングしてもよい。また、プリンタの推論部104が
図16に示すように千鳥状にデータを間引く場合には、学習用の水増し画像データを取得する際に、そのマージンデータを千鳥状に間引き、不足する部分のデータをパディングしてもよい。またマージンデータの範囲は、1ラインに限定されず複数ラインでもよい。その場合も、プリンタの推論部104が
図18に示すように、千鳥状にマージンデータを間引く場合は、学習用の水増し画像データを取得する際に、そのマージンデータを千鳥状に間引き(削減し)、不足する部分のデータをパディングしてもよい。いずれにせよ、学習装置1901は、プリンタ100の推論部104と同じ分割条件、参照データ取得条件、パディング条件で演算データを取得して学習を実行する。これにより、最終的に得られる特徴量の確度を高めることができる。
【0208】
<第3の実施形態>
次に、第3の実施形態として、自動モードについて説明する。自動モードは、学習装置において
図26に示すUI画面2600のモード選択ボタン2603の操作によって選択される。
【0209】
図29は、第3の実施形態における学習処理の全体の流れを示すフローチャートである。なお、
図29のフローチャートのS2901、S2904~S2907は、それぞれ
図25のS2501、S2502~S2505に対応する処理である。即ち、
図29に示す処理は、
図25のS2501の後に、S2902、S2903の処理が追加されている点が第2の実施形態と異なる。以下の説明では、第2の実施形態と異なる点を中心に説明する。なお、第3の実施形態では、第2の実施形態と同様に、推論において使用されるフィルタ係数を得るための学習条件を、推論部104における推論条件と共通とする。これにより、推論の結果として最終的に得られる属性確率の確度を向上する。
【0210】
(システム構成及び機能構成)
第3の実施形態の情報処理システム3000のシステム構成及び機能構成について説明する。
図30は、第3の実施形態の情報処理システム3000のシステム構成及び機能構成を示す図である。
図30に示すように、第3の実施形態の情報処理システム3000は、推論装置3010と学習装置3001とを含み、推論装置3010と学習装置3001とは互いの装置のデータ転送部または通信部を介して通信接続される。学習装置3001のハードウェア構成は
図20に示す学習装置1901と同様であり、推論装置3010は、推論部を有する組込み機器であり、例えば、
図1に示すプリンタ100とし、ハードウェア構成は
図1に示すプリンタ100と同様とする。
【0211】
第3の実施形態において、学習装置3001は、学習部2000、装置条件取得部3002、モデル条件決定部3003、モデル構築部3004、モード選択部3005を有する。推論装置3010は、推論部104、ユースケース設定部3011、及び装置条件転送部3012を有する。推論装置3010のROM102またはDRAM103には、速度条件3013、SRAM容量3014、及びパディング条件3015が保持されている。これらの機能部は、各装置において、例えばCPUがROMに保持されたプログラムを実行することで実現される。
【0212】
学習装置3001の学習部2000は、
図21に示す第2の実施形態の学習部2000と同様である。
装置条件取得部3002は、モード選択部3005において自動モードが選択された場合に、推論装置3010に対し装置条件の取得を要求し、推論装置3010から転送される装置条件を受信する。装置条件は、速度条件3013、SRAM容量3014、パディング条件3015を含む。速度条件3013は推論装置3010がプリンタである場合、例えば印刷速度の上限値であり、ユースケース設定部3011により決定されRAM102に保持される。SRAM容量3014は、推論部104のフィルタに用いられるSRAMの容量(回路規模)であり、予めROM102に記憶されている。
【0213】
モデル条件決定部3003は、装置条件取得部3002が取得した推論装置3010の装置条件に基づき学習部2000のモデル条件を決定し、モデル構築部3004に設定する。具体的には、モデル条件決定部3003は、推論装置3010の速度条件3013及びSRAM容量3014の値を超えないようにモデル条件、特に参照データ取得条件を決定する。モデル条件の決定方法については後述する。
【0214】
モデル構築部3004は、推論装置3010から取得したCNNモデルを構築するための情報に基づきCNNモデルを構築する。第3の実施形態では、CNNモデルを構築するための情報として、装置条件取得部3002が推論装置3010から推論装置3010の装置条件を取得する。モデル条件決定部3003が装置条件に基づきモデル条件を決定し、モデル構築部3004は、決定されたモデル条件に基づきCNNモデルを構築する。
【0215】
モード選択部3005は、参照データの取得条件を自動で設定する自動モードとするか、手動で設定する手動モードとするかのユーザによる選択を受け付ける。例えば、
図26に示すUI画面2600のモード選択ボタン2603の操作により自動モードまたは手動モードのいずれかが選択される。第3の実施形態では自動モードが選択される。
【0216】
推論装置3010の推論部104は、
図4に示す第1の実施形態の推論部104と同様である。
ユースケース設定部3011は、推論装置3010で設定可能なユースケースの設定を受け付ける。
【0217】
図31は、ユースケースの一例として印刷設定のUI画面3100の例を示す図である。ユースケース設定部3011は、例えば、
図31に示すユースケースを設定するためのUI画面3100をプリンタの操作パネル106に表示し、ユーザによる複数のパラメータ値の入力を受け付ける。パラメータは、例えば紙サイズ、紙種、カラー/モノ選択、片面/両面選択、印刷品位等である。ユースケース設定部3011は、入力されたパラメータ値に基づき要求される紙搬送速度や印刷ヘッドの動作速度に対して律速しない速度条件を設定する。速度条件の情報は、予めユースケースごとにROM102に保持されていてもよいし、設定されたユースケースに応じて要求される紙搬送速度や印刷ヘッドの動作速度を取得し、CPU101が速度条件を決定してもよい。
【0218】
装置条件転送部3012は、学習装置3001から装置条件の取得要求を受信した場合に、ROM102またはDRAM103に保持されている速度条件3013、SRAM容量3014、パディング条件3015を含む装置条件を学習装置3001に転送する。なお、速度条件に関しては、学習装置3001は、プリンタドライバ等の学習装置3001に搭載されたPCソフトウェアを介して取得してもよい。
【0219】
(学習処理の全体の流れ)
図29を参照して、第3の実施形態の学習装置3001が実行する学習処理の流れを説明する。本フローチャートに示す処理を実行するためのプログラムは、学習装置3001の記憶部2007またはROM2002に記憶される。CPU2001は、このプログラムを呼び出してRAM2003をワークエリアとして用いながら本フローチャートの処理を実行する。例えば、入力部2005を介してユーザが学習処理の開始を指示すると、CPU2001は本フローチャートを開始する。
【0220】
S2901において、学習装置3001のCPU2001はユーザによる学習用のCNNモデルの構造の設計を受け付ける。CPU2001はモデル構造に関するパラメータの入力を受け付ける。モデル構造に関するパラメータは、畳み込み層(フィルタ)の層数、フィルタサイズ、縮小、拡大の回数等を含む。S2901において、ユーザは、プリンタ100の推論部104と同様のモデル構造(CNN条件)を学習装置1901に設定する。このとき、学習装置3001のCPU2001は、ユーザがモデル構造を設定するためのUI画面2600を表示してもよい。
【0221】
S2902において、CPU2001はユーザにより自動モードが選択されたか判定する。例えばUI画面2600のモード選択ボタン2603の操作によって自動または手動のいずれかのモードが設定される。手動モードが選択された場合は、S2904へ進む。S2904~S2907の処理は、第2の実施形態におけるS2502~S2505の処理と同様である。自動モードが選択された場合は、S2903に進む。
【0222】
S2903において、学習装置3001のCPU2001(装置条件取得部3002)は、推論装置3010に対し装置条件の取得を要求し、推論装置3010から転送される装置条件を受信する。上述したように、装置条件は、速度条件3013、SRAM容量3014、パディング条件3015を含む。速度条件3013は印刷速度の上限値であり、ユースケース設定部3011により決定されRAM102に保持される。SRAM容量3014は、推論部104のフィルタに用いられるSRAMの容量(回路規模)であり、予めROM102に記憶されている。
【0223】
S2904において、学習装置3001のCPU2001(モデル条件決定部3003)は、S2903において取得した推論装置3010の装置条件に基づきモデル条件を決定し、モデル構築部3004に設定する。S2901においてCNNモデルの設計が完了しているため、SRAM容量3014の値を超えないようにモデル条件を決定するためには、CPU2001は、画像の分割サイズ、及びマージンデータにおける参照データの量(以下、参照データ量と略す。)を調整すればよい。
【0224】
元画像を細かく分割すると、学習部2000のRAMへ転送され保持される画像データの容量は少なくなるが、分割した画像数の分だけマージンデータの処理数も増大し、処理速度は遅くなる。マージンデータをパディングに置き換える場合には、学習部2000のRAMへ転送され保持される画像データの容量は小さくなるが、パディング量が増えることにより学習の信頼性が低下し、その結果、推論における属性確率の判定精度も低下する。従って、学習装置3001のCPU2001(モデル条件決定部3003)は、速度条件3013を満たし、かつ、判定精度が所定の基準より高くなるような分割サイズ及び参照データ量を決定する。複数の候補が決定された場合は、学習装置3001のCPU2001は複数の候補についてそれぞれS2905~S2907を実行し、最も高性能な結果が得られた候補(分割サイズ及び参照データ量)を、モデル条件に設定してもよい。
【0225】
モデル条件のうち、パディング方法1924及びパディング位置については、S2903において取得した推論装置3010のパディング条件3015(パディング方法、パディング位置)を設定すればよい。分割位置1921は、S2904で決定された分割サイズ及び元画像のサイズに基づき決定される。参照データ位置1923は、S2901で設計されたCNNの条件に基づき決定されるマージンデータの範囲とパディング位置、及びS2904で決定された参照データ量に基づき決定される。
【0226】
以上のように、モデル設計及びモデル条件設定が完了し、ユーザによりUI画面2600の学習開始ボタン2602が操作されると、S2905へ進む。
【0227】
S2905においてCPU2001は、フィルタ係数を初期化する。CPU2001は、モデル設計により設定されたサイズのフィルタ係数に任意の値に設定する。例えば、ランダム値が設定される。
【0228】
S2906においてCPU2001は、モデル条件及びフィルタ係数を学習部2000に設定し、学習を開始する。学習については第2の実施形態と同様である。学習が完了するとS2907へ進む。
S2907おいて、CPU2001は学習結果である学習済みフィルタ係数を出力する。以上の処理により、本フローチャートを終了する。
【0229】
推論装置3010は、学習装置3001から、学習済みのフィルタ係数を取得する。取得した学習済みのフィルタ係数はプリンタ100のROM102に記憶される。これにより、プリンタ100の推論部104は、学習装置3001が生成した学習済みのフィルタ係数を使用して推論を実施できる。そのフィルタ係数は、推論におけるCNN条件が反映され、かつ、推論装置3010の装置条件に基づき決定されたモデル条件で実施された学習により決定される。モデル条件は、推論装置3010に要求される速度条件及びSRAM容量の制約に基づき、かつ所定の基準以上の判定精度が保たれるように決定される。よって、組込み機器のように、速度条件及びSRAM容量の制約がある推論装置3010においても、推論を実施でき、かつ推論結果の信頼性低下が抑制される。
【0230】
<第3の実施形態の変形例>
上述の第3の実施形態では、学習装置3001が推論装置3010の装置条件(速度条件、SRAM容量、及びパディング条件)を取得し、学習におけるモデル条件(分割サイズ及び参照データ量)を決定する例について説明した。しかし本実施形態はこの例に限定されず、推論装置3010が自身の装置条件及び推論部のモデル構造(CNN条件)に基づき、参照データ取得条件を決定し、学習装置に転送してもよい。
【0231】
(システム構成及び機能構成)
第3の実施形態の変形例に係る情報処理システム3200のシステム構成及び機能構成について説明する。
図32は、第3の実施形態の変形例に係る情報処理システム3200のシステム構成及び機能構成を示す図である。
図32に示すように、情報処理システム3200は、推論装置3210と学習装置3201とを含み、推論装置3210と学習装置3201とは互いの装置のデータ転送部または通信部を介して通信接続される。学習装置3201のハードウェア構成は
図20に示す学習装置1901と同様である。推論装置3210は、推論部104を有する組込み機器であり、例えば、
図1に示すプリンタ100とする場合、ハードウェア構成は
図1に示すプリンタ100と同様とする。
【0232】
第3の実施形態の変形例において、学習装置3201は、学習部2000、取得部3203、モデル構築部3004、及びモード選択部3005を有する。学習部2000、モデル構築部3004、及びモード選択部3005は
図30と同様である。
推論装置3210は、推論部104、ユースケース設定部3011、装置条件取得部3212、及び参照データ取得条件設定部3213を有する。また、推論装置3210のROM102またはDRAM103には、速度条件3013、SRAM容量3014、及びパディング条件3015が保持されている。推論部104、ユースケース設定部3011は
図30と同様である。
【0233】
学習装置3201の取得部3203は、自動モードが選択された場合に、推論装置3210に対し参照データ取得条件の取得を要求する。また、取得部3203は推論装置3210から送信される参照データ取得条件を受信し、モデル構築部3004に設定する。
【0234】
推論装置3210の参照データ取得条件設定部3213は、学習装置3001から参照データ取得条件の取得要求を受信した場合に、推論装置3210の参照データ取得条件を学習装置3201に送信する。参照データ取得条件設定部3213は、まず、装置条件取得部3212によってROM102またはDRAM103に保持されている速度条件3013、SRAM容量3014、パディング条件3015を含む装置条件を取得する。
【0235】
推論装置3210の参照データ取得条件設定部3213は、推論装置3210の装置条件(速度条件3013,SRAM容量3014)に基づき、推論部104における参照データ取得条件を決定し、学習装置3201に送信する。具体的には、参照データ取得条件設定部3213は、推論装置3210の速度条件3013及びSRAM容量3014の値を超えないようにモデル条件、特に参照データ取得条件を決定する。
【0236】
モデル条件の決定方法は、上述の第3の実施形態と同様である。参照データ取得条件設定部3213は、SRAM容量3014の値を超えず、速度条件3013を満たし、かつ、推論の判定精度が所定の基準より高くなるような参照データ取得条件を決定する。参照データ取得条件設定部3213は、決定した参照データ取得条件(分割サイズ及び参照データ量)を学習装置3201に送信する。
【0237】
学習装置3201の取得部3203は、推論装置3210から送信された参照データ取得条件を取得し、モデル構築部3004に設定する。
【0238】
学習装置3201に設定されるモデル条件のうち、パディング方法1924及びパディング位置1925については、第3の実施形態と同様に、推論装置3210から取得されることが好ましい。分割位置1921は、参照データ取得条件として取得した分割サイズ及び元画像のサイズに基づき決定される。参照データ位置1923は、CNNの条件から決定される畳み込み演算に必要なマージンデータの範囲とパディング位置、及びのりしろ条件として取得したのりしろ量に基づき決定される。
【0239】
以上のように、モデル設計及びモデル条件設定が完了すると、学習部2000は学習を実行し、フィルタ係数を最適化する。
【0240】
本変形例において生成されたフィルタ係数は、学習装置3001から、推論装置3210へ送信される。推論装置3210は取得したフィルタ係数はプリンタ100のROM102に記憶される。これにより、推論装置3210の推論部104は、学習装置3201が生成したフィルタ係数を使用して推論を実施できる。そのフィルタ係数は、推論におけるCNN条件が反映され、かつ、推論装置3210の装置条件に基づき決定されたモデル条件(特に、参照データ取得条件)で実施された学習により決定される。また、モデル条件は、推論装置3210に要求される速度条件及びSRAM容量の制約に基づき、かつ所定の精度が保たれるように決定される。よって、組込み機器のように、速度条件及びSRAM容量の制約がある推論装置3210においても、推論を実施でき、かつ推論結果の信頼性低下が抑制される。
【0241】
なお、第3の実施形態では、推論装置と学習装置がデータ転送I/Fまたは通信部を介して通信接続され、データの送受信を行う例を示したが、本開示はこれに限定されない。推論装置と学習装置とはオフラインの状態とし、可搬型の記憶媒体を使用して、データを受け渡してもよい。
【0242】
また、第1から第3の実施形態において示した推論は、2次元画像データのパターン認識等において活用される。即ち、2次元画像データについてCNNによって特徴量が抽出され、2次元画像データがどのような画像であるかの属性確率が決定され、パターン認識結果として出力される。また、第1から第3の実施形態において示した推論及び学習は、パターン認識以外の処理に利用されてもよい。
【0243】
また、第1から第3の実施形態において、処理対象とするデータは2次元画像データであり、フィルタ係数に2次元フィルタが用いられる場合について説明したが、本開示はこの例に限定されない。例えば音声データのように、1次元の時系列データに対して1次元フィルタを用いる場合にも本開示を適用できる。また、一般に特徴量の次元に合わせた好適な構成を組むことにより、同様に本開示を任意の次元のデータに適用可能である。
【0244】
また、実施形態に示したUI画面の画面構成、画面の表示内容、操作手順、操作方法等は一例であり、本開示はこれに限定されない。また、上述の実施形態の推論部及び学習部の機能は、CPUがプログラムに従って処理を実行することで実現される例を記載したが、これに限定されず、CPUとは異なる情報処理装置(GPU等のプロセッサ)を備えてもよい。
【0245】
以上、添付図面を参照しながら、本開示に係る好適な実施形態について説明したが、本開示はかかる例に限定されない。当業者であれば、本願で開示した技術的思想の範疇内において、各種の変更例又は修正例に想到し得ることは明らかであり、それらについても当然に本開示の技術的範囲に属するものと了解される。
【0246】
<その他の実施形態>
本開示は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
【0247】
なお、上述した実施形態の開示は、以下の構成を含む。
【0248】
(構成1)
畳み込みニューラルネットワークを用いた推論を実行する情報処理装置であって、
前記情報処理装置に入力された推論用データから対象データを取得する取得手段と、
前記取得手段が取得した前記対象データと、所定サイズの演算結果データを得るために必要な、前記対象データとは別のデータであるマージンデータとを含む演算データを用いて畳み込み演算を実行し、前記演算結果データを出力する演算手段と、を備え、
前記取得手段は、前記マージンデータのうちの一部のデータである第1データを、前記推論用データにおいて前記対象データの周囲に前記対象データとは別に存在するデータ群から取得し、前記マージンデータのうちの前記第1データを除く第2データを、前記データ群から取得しないことを特徴とする情報処理装置。
【0249】
(構成2)
【0250】
前記マージンデータのうち、前記第1データを除くデータである第2データをパディングするパディング手段を更に備えることを特徴とする構成1に記載の情報処理装置。
【0251】
(構成3)
前記第1データは前記対象データとともに記憶領域に保持され、前記第2データは前記記憶領域に保持されないことを特徴とする構成1または構成2に記載の情報処理装置。
【0252】
(構成4)
前記パディング手段は、前記第2データを前記演算手段が演算に使用するレジスタに直接書き込むことを特徴とする構成2に記載の情報処理装置。
【0253】
(構成5)
前記パディング手段は、前記第2データを任意の固定値でパディングすることを特徴とする構成2または構成4に記載の情報処理装置。
【0254】
(構成6)
前記パディング手段は、前記第2データを前記対象データに基づくデータでパディングすることを特徴とする構成2、4、5のいずれか1項に記載の情報処理装置。
【0255】
(構成7)
前記取得手段は、前記対象データに対し、前記畳み込み演算の演算範囲のスライド方向と同一方向に存在する前記データ群から前記第1データを取得することを特徴とする構成1から構成6のいずれか1項に記載の情報処理装置。
【0256】
(構成8)
前記取得手段は、前記対象データに対し、前記畳み込み演算の演算範囲のスライド方向と直交する方向に存在する前記データ群から前記第1データを取得することを特徴とする構成1から構成6のいずれか1項に記載の情報処理装置。
【0257】
(構成9)
前記取得手段は、前記第1データを前記データ群から離散的に取得することを特徴とする構成1から構成8のいずれか1項に記載の情報処理装置。
【0258】
(構成10)
前記取得手段は、前記第1データを前記データ群から所定のデータ間隔で取得することを特徴とする構成9に記載の情報処理装置。
【0259】
(構成11)
前記対象データが2次元データであり、前記マージンデータの範囲が複数のラインにわたる場合、前記取得手段は、前記第1データが前記複数のラインのすべてに分散するように、前記第1データを前記データ群から取得することを特徴とする構成1から構成10のいずれか1項に記載の情報処理装置。
【0260】
(構成12)
前記畳み込みニューラルネットワークを構成する少なくとも1つの層において、前記取得手段は、前記マージンデータの一部を、前記データ群から前記第1データとして取得することを特徴とする構成1から構成11のいずれか1項に記載の情報処理装置。
【0261】
(構成13)
前記取得手段が前記マージンデータの一部を、前記データ群から前記第1データとして取得する層は、前記畳み込みニューラルネットワークのエンコーダ部の最終層であることを特徴とする構成1から構成11のいずれか1項に記載の情報処理装置。
【0262】
(構成14)
前記対象データは、前記推論用データが所定単位サイズに分割された分割データであることを特徴とする構成1から構成13のいずれか1項に記載の情報処理装置。
【0263】
(構成15)
前記対象データが前記分割データである場合、
前記取得手段は、前記第1データを取得する前記データ群の位置を、前記対象データごとに変更することを特徴とする構成14に記載の情報処理装置。
【0264】
(構成16)
前記対象データは画像データであることを特徴とする構成1から構成15のいずれか1項に記載の情報処理装置。
【0265】
(構成17)
構成1に記載の情報処理装置を有する組込み機器。
【0266】
(構成18)
畳み込みニューラルネットワークを用いた推論方法であって、
入力された推論用データから対象データを取得する取得ステップと、
前記取得ステップにおいて取得された前記対象データと、所定サイズの演算結果データを得るために必要な、前記対象データとは別のデータであるマージンデータとを含む演算データを用いて畳み込み演算を実行し、前記演算結果データを出力する演算ステップと、を含み、
前記取得ステップにおいて、前記マージンデータのうちの一部のデータである第1データは、前記推論用データにおける前記対象データの周囲に前記対象データとは別に存在するデータ群から取得され、前記マージンデータのうちの前記第1データを除く第2データは、前記データ群から取得されない推論方法。
【0267】
(構成19)
畳み込みニューラルネットワークを用いた推論方法をコンピュータに実行させるためのプログラムであって、
入力された推論用データから対象データを取得する取得ステップと、
前記取得ステップにおいて取得された前記対象データと、所定サイズの演算結果データを得るために必要な、前記対象データとは別のデータであるマージンデータとを含む演算データを用いて畳み込み演算を実行し、前記演算結果データを出力する演算ステップと、を含み、
前記取得ステップにおいて、前記マージンデータのうちの一部のデータである第1データは、前記推論用データにおける前記対象データの周囲に前記対象データとは別に存在するデータ群から取得され、前記マージンデータのうちの前記第1データを除く第2データは、前記データ群から取得されないプログラム。