<PCのハードウェアの構成例>
図1は、本技術を適用したNN等として機能するPC(Personal Computer)のハードウェアの構成例を示すブロック図である。
図1において、PC10は、スタンドアロンのコンピュータであっても良いし、サーバクライアントシステムのサーバ、又は、クライアントであっても良い。
PC10は、CPU(Central Processing Unit)12を内蔵しており、CPU12には、バス11を介して、入出力インタフェース20が接続されている。
CPU12は、入出力インタフェース20を介して、ユーザ等によって、入力部17が操作等されることにより指令が入力されると、それに従って、ROM(Read Only Memory)13に格納されているプログラムを実行する。あるいは、CPU12は、ハードディスク15に格納されたプログラムを、RAM(Random Access Memory)14にロードして実行する。
これにより、CPU12は、各種の処理を行い、PC10を所定の機能を有する装置として機能させる。そして、CPU12は、各種の処理の処理結果を、必要に応じて、例えば、入出力インタフェース20を介して、出力部16から出力、あるいは、通信部18から送信、さらには、ハードディスク15に記録等させる。
なお、入力部17は、キーボードや、マウス、マイク等で構成される。また、出力部16は、LCD(Liquid Crystal Display)やスピーカ等で構成される。
また、CPU12が実行するプログラムは、PC10に内蔵されている記録媒体としてのハードディスク15やROM13に予め記録しておくことができる。
あるいはまた、プログラムは、リムーバブル記録媒体21に格納(記録)しておくことができる。このようなリムーバブル記録媒体21は、いわゆるパッケージソフトウエアとして提供することができる。ここで、リムーバブル記録媒体21としては、例えば、フレキシブルディスク、CD-ROM(Compact Disc Read Only Memory),MO(Magneto Optical)ディスク,DVD(Digital Versatile Disc)、磁気ディスク、半導体メモリ等がある。
また、プログラムは、上述したようなリムーバブル記録媒体21からPC10にインストールする他、通信網や放送網を介して、PC10にダウンロードし、内蔵するハードディスク15にインストールすることができる。すなわち、プログラムは、例えば、ダウンロードサイトから、ディジタル衛星放送用の人工衛星を介して、PC10に無線で転送したり、LAN(Local Area Network)、インターネットといったネットワークを介して、PC10に有線で転送することができる。
CPU12は、上述したように、プログラムを実行することにより、PC10を所定の機能を有する装置として機能させる。
例えば、CPU12は、PC10を、NN(を構成する各層)の処理や、NNの生成を行う情報処理装置として機能させる。この場合、PC10は、NNや、NNを生成するNN生成装置として機能する。なお、NNの各層は、CPU12やGPU等の汎用のハードウェアで構成する他、専用のハードウェアで構成することができる。この場合、NNの各層で行われる、例えば、後述する2値演算その他の演算は、層を構成する専用のハードウェアが行う。
ここで、以下では、説明を分かりやすくするため、PC10により実現されるNNについて、NNに対する入力データが、1チャネル以上の2次元のデータである画像(静止画)である場合を例に説明を行う。
NNに対する入力データが画像である場合には、その画像から、所定の対象物を高速に検出(認識)することや、ピクセルレベルのラベリング(セマンティックセグメンテーション)等を行うことができる。
なお、NNに対する入力データとしては、画像等の2次元のデータの他、1次元のデータや、2次元のデータ、その他、4次元以上の次元のデータを採用することができる。
<CNNの構成例>
図2は、PC10により実現されるNNの第1の構成例を示すブロック図である。
図2において、NN100は、CNNであり、入力層101、NN102、隠れ層103、畳み込み層104、隠れ層105、NN106、及び、出力層107を有する。
ここで、NNは、入力層及び出力層を含む複数の層(を構成する、ニューロンに相当するユニット)が、適宜結合されて構成される。NNにおいて、ある注目する層から見て、入力層側の層を、下位層ともいい、出力層側の層を、上位層ともいう。
また、NNにおいて、入力層側から出力層側に向かう情報(データ)の伝播を、順伝播ともいい、出力層側から入力層側に向かう情報の伝播を、逆伝播ともいう。
入力層101には、NN100に対する入力データとしての、例えば、R,G,Bの3チャネルの画像が供給される。入力層101は、NN100に対する入力データを記憶し、上位層のNN102に供給する。
NN102は、NN100のサブセットとしてのNNであり、1以上の層(図示せず)で構成される。サブセットとしてのNN102には、隠れ層103及び105や、畳み込み層104、その他、後述する層と同様の層を含めることができる。
NN102の各層(のユニット)では、例えば、その層の直前の下位層からのデータの重み付け加算値(必要に応じて、いわゆるバイアス項の加算を含む)が演算され、その重み付け加算値を引数として、例えば、正規化線形関数(Rectified Linear function)等の活性化関数が演算される。そして、各層では、活性化関数の演算結果が記憶され、直後の上位層に出力される。重み付け加算値の演算には、層どうし(のユニット間)を結合する結合重みが用いられる。
ここで、入力データが2次元の画像である場合、入力層101から出力層107までの間の層が出力する2次元の画像は、マップと呼ばれる。
隠れ層103は、NN102の最も上位層側の層からのデータとしてのマップを記憶し、畳み込み層104に出力する。又は、隠れ層103は、例えば、NN102の層と同様にして、NN102の最も上位層側の層からのデータの重み付け加算値を引数とする活性化関数の演算結果を求め、マップとして記憶し、畳み込み層104に出力する。
ここで、隠れ層103が記憶するマップを、特に、入力マップともいう。NNの層に入力されるデータを、層入力データということとすると、隠れ層103が記憶する入力マップは、畳み込み層103に対する層入力データである。また、NNの層から出力されるデータを、層出力データということとすると、隠れ層103が記憶する入力マップは、隠れ層103の層出力データでもある。
本実施の形態では、隠れ層103が記憶する入力マップは、例えば、縦×横が32×32(画素)で構成され、64チャネルを有することとする。以上のように、縦×横が32×32で、64チャネルの入力マップを、以下、(64,32,32)(=(チャネル,縦,横))の入力マップともいう。
畳み込み層104は、隠れ層103からの(64,32,32)の入力マップに対して、畳み込みカーネルを適用し、その(64,32,32)の入力マップを対象とする畳み込みを行う。
畳み込みカーネルは、畳み込みを行うフィルタであり、本実施の形態では、畳み込み層104の畳み込みカーネルは、例えば、縦×横×チャネルが3×3×64のサイズで構成される。畳み込みカーネルの縦×横のサイズは、入力マップの縦×横のサイズ以下のサイズが採用され、畳み込みカーネルのチャネル数(チャネル方向のサイズ)は、入力マップのチャネル数と同一の値が採用される。
ここで、縦×横×チャネルがa×b×cのサイズの畳み込みカーネルを、a×b×cの畳み込みカーネル、又は、チャネルを無視して、a×bの畳み込みカーネルともいう。さらに、a×b×cの畳み込みカーネルを適用して行われる畳み込みを、a×b×cの畳み込み、又は、a×bの畳み込みともいう。
畳み込み層104では、(64,32,32)の入力マップに対して、3×3×64の畳み込みカーネルをスライドしながら適用することにより、入力マップの3×3の畳み込みを行う。
すなわち、畳み込み層104では、例えば、(64,32,32)の入力マップの、全チャネルの(空間的に)同一位置の画素(群)が、順次、注目画素(群)に設定され、(64,32,32)の入力マップにおいて、注目画素を基準とする所定の位置、すなわち、例えば、注目画素の位置を中心とする、縦×横×チャネルが3×3×64の直方体状の範囲(畳み込みカーネルの縦×横×チャネルと同一の(大きさの)範囲)が、畳み込みの処理対象に設定される。
そして、(64,32,32)の入力マップのうちの、畳み込みの処理対象内の3×3×64の各データ(画素値)と、3×3×64の畳み込みカーネルとしてのフィルタのフィルタ係数との積和演算が行われ、その積和演算の結果が、注目画素についての畳み込みの結果として求められる。
畳み込み層104では、その後、まだ注目画素に設定されていない画素を、注目画素に新たに設定して、同様の処理が繰り返され、これにより、畳み込みカーネルが、注目画素の設定に応じてスライドされながら、入力マップに適用される。
ここで、畳み込み層104での畳み込みの結果を画素値とする画像としてのマップを、畳み込みマップともいう。
各チャネルの入力マップの全画素が、注目画素に設定される場合、畳み込みマップの縦×横のサイズは、入力マップの縦×横のサイズと同一の32×32(画素)となる。
また、各チャネルの入力マップの画素が、1画素以上おきに注目画素に設定される場合、すなわち、各チャネルの入力マップにおいて、注目画素に設定されない画素が存在する場合、畳み込みマップの縦×横のサイズは、入力マップの縦×横のサイズよりも小さくなる。この場合、プーリング(pooling)を行うことができる。
畳み込み層104は、畳み込みカーネルを、畳み込み層104の直後の上位層である隠れ層105が記憶する畳み込みマップのチャネル数と同一種類の畳み込みカーネルを有する。
図2において、隠れ層105は、(128,32,32)の畳み込みマップ(縦×横が32×32で、128チャネルの畳み込みマップ)を記憶する。
したがって、畳み込み層104は、128種類の3×3×64の畳み込みカーネルを有する。
畳み込み層104は、(64,32,32)の入力マップに対して、128種類の3×3×64の畳み込みカーネルそれぞれを適用することにより、(128,32,32)の畳み込みマップを求め、畳み込み層104の層出力データとして出力する。
なお、畳み込み層104では、入力マップに畳み込みカーネルを適用することにより得られる畳み込み結果を引数として演算した活性化関数の演算結果を、層出力データとして出力することができる。
隠れ層105は、畳み込み層104からの(128,32,32)の畳み込みマップを記憶し、NN106に出力する。又は、隠れ層105は、例えば、畳み込み層104からの(128,32,32)の畳み込みマップを構成するデータの重み付け加算値を引数とする活性化関数の演算結果を求め、その演算結果で構成されるマップを記憶し、NN106に出力する。
NN106は、NN102と同様に、NN100のサブセットとしてのNNであり、1以上の層で構成される。サブセットとしてのNN106には、NN102と同様に、隠れ層103及び105や、畳み込み層104、その他、後述する層と同様の層を含めることができる。
NN106の各層では、例えば、NN102と同様に、その層の直前の下位層からのデータの重み付け加算値が演算され、その重み付け加算値を引数として、活性化関数が演算される。そして、各層では、活性化関数の演算結果が記憶され、直後の上位層に出力される。
出力層107は、例えば、下位層からのデータの重み付け加算値を演算し、その重み付け加算値を引数として、活性化関数を演算する。そして、出力層107は、例えば、活性化関数の演算結果を、NN100の出力データとして出力する。
以上の入力層101ないし出力層107の処理は、対象物の検出等を行う順伝播時の処理であるが、学習を行う逆伝播時では、入力層101ないし出力層107において、直前の下位層に逆伝播する、出力データの誤差に関する誤差情報が、直後の上位層からの誤差情報を用いて求められ、直前の下位層に逆伝播される。また、入力層101ないし出力層107では、必要に応じて、結合重みや、畳み込みカーネルのフィルタ係数が、上位層からの誤差情報を用いて更新される。
<畳み込み層104の処理>
図3は、畳み込み層104の畳み込みの処理の例を説明する図である。
ここで、NNの層に対する層入力データ及び層出力データを、それぞれ、x及びyと表す。
畳み込み層104については、層入力データ及び層出力データは、それぞれ、入力マップ及び畳み込みマップである。
図3において、畳み込み層104に対する層入力データxとしてのマップ(入力マップ)xは、(c(in),M,N)のマップ、すなわち、縦×横がM×Nの、c(in)チャネルの画像になっている。
ここで、(c(in),M,N)のマップxのうちの、c+1番目(c=0,1,...,c(in)-1)のチャネル#cのマップxを、x(c)と表す。
また、マップx(c)において、所定の位置としての、例えば、マップx(c)の左上の位置を基準(原点等)とする縦方向及び横方向の位置を、それぞれi及びjで表し、マップx(c)の位置(i,j)のデータ(画素値)を、xij
(c)と表す。
畳み込み層104が出力する層出力データyとしてのマップ(畳み込みマップ)yは、(k(out),M,N)のマップ、すなわち、縦×横がM×Nの、k(out)チャネルの画像になっている。
ここで、(k(out),M,N)のマップyのうちの、k+1番目(k=0,1,...,k(out)-1)のチャネル#kのマップyを、y(k)と表す。
また、マップy(k)において、所定の位置としての、例えば、マップy(k)の左上の位置を基準とする縦方向及び横方向の位置を、それぞれi及びjで表し、マップy(k)の位置(i,j)のデータ(画素値)を、yij
(k)と表す。
畳み込み層104は、縦×横×チャネルがm×n×c(in)の畳み込みカーネルFを、k(out)個だけ有する。なお、1<=m<=M、及び、1<=n<=Nである。
ここで、k(out)個の畳み込みカーネルFのうちの、k+1番目の畳み込みカーネルF、すなわち、チャネル#kのマップy(k)の生成に用いられる畳み込みカーネルFを、F(k)と表す。
畳み込みカーネルF(k)は、c(in)チャネルのマップx(0),x(1),...,x(c(in)-1)にそれぞれ適用されるc(in)チャネルの畳み込みカーネルF(k,0),F(k,1),...,F(k,c(in)-1)から構成される。
畳み込み層104では、(c(in),M,N)のマップxに対して、m×n×c(in)の畳み込みカーネルF(k)をスライドしながら適用することにより、マップxのm×nの畳み込みが行われ、その畳み込み結果としてのチャネル#kのマップy(k)が生成される。
マップy(k)の位置(i,j)のデータyij
(k)は、m×n×c(in)の畳み込みカーネルF(k)が、例えば、マップx(c)の注目画素の位置(i,j)を中心とする縦×横×チャネル方向がm×n×c(in)の範囲に適用されたときの畳み込み結果である。
ここで、m×nの畳み込みカーネルF(k)、及び、そのm×nの畳み込みカーネルF(k)が適用されるマップxの空間方向(i及びjの方向)の縦×横がm×nの範囲については、所定の位置としての、例えば、そのm×nの範囲の左上の位置を基準とする縦方向及び横方向の位置を、それぞれs及びtで表す。例えば、0<=s<=m-1、及び、0<=t<=n-1である。
また、m×n×c(in)の畳み込みカーネルF(k)が、マップx(c)の注目画素の位置(i,j)を中心とする縦×横×チャネル方向がm×n×c(in)の範囲に適用される場合、注目画素が、マップxの左上の画素等の周辺部の画素である場合には、畳み込みカーネルF(k)が、マップxの外側にはみ出し、畳み込みカーネルF(k)を適用するマップxのデータが存在しないことが生じる。
そこで、畳み込みカーネルF(k)の適用にあたっては、畳み込みカーネルF(k)を適用するマップxのデータが存在しないことが生じることを防止するために、マップxの周囲に、ゼロ等の所定のデータをパディングすることができる。マップxの境界から縦方向にパディングされるデータの数をpと表すとともに、横方向にパディングされるデータの数をqと表すこととする。
図4は、3チャネルのマップy=y(0),y(1),y(2)の生成に用いられるm×n×c(in)=3×3×3の畳み込みカーネルFを示す図である。
畳み込みカーネルFは、y(0),y(1),y(2)の生成に用いられる畳み込みカーネルF(0),F(1),F(2)を有する。
畳み込みカーネルF(k)は、チャネル#0,1,2のマップx(0),x(1),x(2)に適用される畳み込みカーネルF(k,0),F(k,1),F(k,2)を有する。
チャネル#cのマップx(c)に適用される畳み込みカーネルF(k,c)は、m×n=3×3の畳み込みカーネルであり、3×3のフィルタ係数で構成される。
ここで、畳み込みカーネルF(k,c)の位置(s,t)のフィルタ係数を、wst
(k,c)と表す。
以上のような畳み込み層104において、マップxに畳み込みカーネルFを適用して、マップyを求める順伝播は、式(1)で表される。
また、逆伝播は、式(2)及び式(3)で表される。
ここで、Eは、NN(ここでは、例えば、NN100)の出力データの誤差(を表す誤差関数)を表す。
式(2)の∂E/∂wst
(k,c)は、勾配降下法により、畳み込みカーネルF(k,c)のフィルタ係数wst
(k,c)を更新するための誤差(E)の勾配であり、NN100の学習時においては、畳み込みカーネルF(k,c)のフィルタ係数wst
(k,c)が、式(2)の誤差の勾配∂E/∂wst
(k,c)を用いて更新される。
また、式(3)の∂E/∂xij
(c)は、NN100の学習時に、畳み込み層104の直前の下位層に逆伝播する誤差情報である。
ここで、畳み込み層104の層出力データyij
(k)は、畳み込み層104の直後の上位層である隠れ層105の層入力データxij
(c)となる。
したがって、式(2)右辺の∂E/∂yij
(k)は、誤差Eの、畳み込み層104の層出力データyij
(k)での偏微分を表すが、隠れ層105で得られる∂E/∂xij
(c)に等しく、隠れ層105から畳み込み層104に逆伝播されてくる誤差情報である。
畳み込み層104において、式(2)の∂E/∂wst
(k,c)は、上位層である隠れ層105からの誤差情報∂E/∂yij
(k)(隠れ層105で得られる∂E/∂xij
(c))を用いて求められる。
同様に、式(3)右辺の∂E/∂y(i+p-s)(j+q-t)
(k)も、隠れ層105から畳み込み層104に逆伝播されてくる誤差情報であり、畳み込み層104において、式(3)の誤差情報∂E/∂xij
(c)は、上位層である隠れ層105からの誤差情報∂E/∂y(i+p-s)(j+q-t)
(k)を用いて求められる。
ところで、NNについては、NN100のようなCNNのネットワーク設計が、NNの進化の観点から注目されている。
近年では、1×1の畳み込みや、3×3の畳み込みを行う畳み込み層を、多層に重ねたCNNが多数提案されている。例えば、ImageNetのデータセットを用いて学習を行ったCNNとして、AlexNetや、GoogleNet,VGG,ResNet等が知られている。
CNNの学習では、畳み込み層については、m×n×c(in)の畳み込みカーネルF(k)、すなわち、マップxのチャネル数c(in)だけの厚みを有する畳み込みカーネルF(k)のフィルタ係数wst
(k,c)が学習される。
畳み込み層では、マップy(k)とマップxとの結合は、マップy(k)の1個のデータyij
(k)に対して、マップxのm×n×c(in)個のデータxij
(c)すべてが、畳み込みカーネルF(k)のm×n×c(in)個のフィルタ係数wst
(k,c)を結合重みとして結合される、いわば高密度な(dense)結合になっている。
ところで、フィルタ係数wst
(k,c)が小さくなるような項を、誤差関数Eに含めて、畳み込みカーネルF(k)(のフィルタ係数wst
(k,c))の学習を行うと、マップy(k)とxとの結合が、いわば薄くなる。
すなわち、畳み込みカーネルF(k)によって抽出したい情報が(ほぼ)ないデータxij
(c)と、データyij
(k)との結合重みとしてのフィルタ係数wst
(k,c)は、ゼロに近い小さい値になり、実質的に、1個のデータyij
(k)と結合するデータxij
(c)は疎になる。
このことは、畳み込みカーネルF(k)のm×n×c(in)個のフィルタ係数wst
(k,c)が冗長性を有すること、さらには、畳み込みカーネルF(k)よりもフィルタ係数を(実際に、又は、実質的に)少なくした、いわば、畳み込みカーネルF(k)を近似する近似カーネルを用いて、畳み込みカーネルF(k)を用いる場合と同様の認識(検出)等を行うことができること、すなわち、認識等の性能を(ほぼ)維持したまま、NNの計算量及びパラメータ数としてのフィルタ係数(結合重み)の数を削減することができることを意味する。
本明細書では、以上のような知見に基づき、新しい数学的な特性を有するNNの層としての2値演算層を提案する。
2値演算層は、その2値演算層に入力される層入力データのうちの2値を用いた2値演算を行い、その2値演算の結果を、2値演算層から出力される層出力データとして出力する。2値演算層では、畳み込み演算と同様の処理対象をもち、学習対象のパラメータ数が少ないカーネルを利用することで正則化の効果もあり、必要以上に大きいパラメータ数を抑えることで過学習を回避し、性能向上も期待できる。
なお、NNについては、新しい数学的な特性を有する層を定義し、その層を含むネットワーク構成のNNで学習を行うことによって、認識等の性能が向上する例が、多数報告されている。例えば、Google社のBatch Normalizationと呼ばれる層では、入力の平均と分散を正規化して後段(上位層)に伝播することで、深いNN(層の数が多いNN)を安定して学習させることを可能にしている。
以下、2値演算層について説明する。
例えば、3×3の畳み込み等の、任意のA×B(>1)の畳み込みは、2値演算層を利用して近似することができる。
すなわち、A×B(>1)の畳み込みは、例えば、1×1の畳み込みと2値演算とで近似することができる。
<2値演算層を利用したA×Bの畳み込みの近似>
図5及び図6を参照して、2値演算層を利用したA×B(>1)の畳み込みの近似、すなわち、1×1の畳み込みと2値演算とによるA×B(>1)の畳み込みの近似について説明する。
図5は、A×B(>1)の畳み込みを説明する図である。
すなわち、図5は、A×B=3×3の畳み込みを行う3チャネルの畳み込みカーネルF(k,0),F(k,1),F(k,2)と、その畳み込みカーネルF(k,c)が適用される3チャネルのマップx(0),x(1),x(2)との例を示している。
なお、図5では、説明を簡単にするため、マップx(c)は、3×3のマップであることとする。
畳み込みカーネルF(k,c)の3×3のフィルタ係数については、学習により、左上のフィルタ係数が+1になり、右下のフィルタ係数が-1になっている。また、他のフィルタ係数は、(ほぼ)ゼロになっている。
例えば、斜め方向のエッジの検出が必要な畳み込みでは、以上のようなフィルタ係数を有する畳み込みカーネルF(k,c)が、学習により求められる。
図5では、畳み込みカーネルF(k,c)が適用されるマップx(c)の範囲の左上のデータがA#cになっており、右下のデータがB#cになっている。
図5の畳み込みカーネルF(k,c)が、図5のマップx(c)の範囲に適用され、畳み込みが行われた場合、その畳み込みの結果得られるデータyij
(k)は、yij
(k)=A0+A1+A2-(B0+B1+B2)となる。
図6は、1×1の畳み込みを説明する図である。
すなわち、図6は、1×1の畳み込みを行う3チャネルの畳み込みカーネルF(k,0),F(k,1),F(k,2)、その畳み込みカーネルF(k,c)が適用される3チャネルのマップx(0),x(1),x(2)、及び、畳み込みカーネルF(k,c)をマップx(c)に適用して得られる畳み込み結果としてのマップy(k)の例を示している。
図6において、マップx(c)は、図5の場合と同様に構成される。また、マップy(k)は、マップx(c)と同様に、3×3のマップになっている。
また、1×1の畳み込みを行う畳み込みカーネルF(k,c)は、1個のフィルタ係数w00
(k,c)を有する。
図6の1×1の畳み込みカーネルF(k,c)が、マップx(c)の左上の画素に適用され、畳み込みが行われた場合、その畳み込みの結果得られる、マップy(k)の左上のデータy00
(k)は、y00
(k)=w00
(k,0)×A0+w00
(k,1)×A1+w00
(k,2)×A2となる。
したがって、フィルタ係数w00
(k,c)が1であるとすると、1×1の畳み込みカーネルF(k,c)が、マップx(c)の左上の画素に適用されることにより得られるデータ(畳み込みの結果)y00
(k)は、y00
(k)=A0+A1+A2になる。
同様に、1×1の畳み込みカーネルF(k,c)が、マップx(c)の右下の画素に適用されることにより得られる、マップy(k)の右下のデータy22
(k)は、y22
(k)=B0+B1+B2になる。
したがって、1×1の畳み込みの結果得られるマップy(k)を対象に、そのマップy(k)の左上のデータy00
(k)と、右下のデータy22
(k)との差分を求める2値演算y00
(k)-y22
(k)=(A0+A1+A2)-(B0+B1+B2)を行うことにより、図5の3×3の畳み込みカーネルF(k,c)を適用した場合と同様のデータyij
(k)=A0+A1+A2-(B0+B1+B2)を得ることができる。
以上から、A×B(>1)の畳み込みは、1×1の畳み込みと2値演算とで近似することができる。
いま、説明を簡単にするため、チャネル方向を無視することとすると、A×B(>1)の畳み込みでは、A×B個のフィルタ係数を用いた積和演算が行われる。
一方、1×1の畳み込みでは、1個のフィルタ係数をパラメータとして、積が演算される。また、2値の差分を求める2値演算では、+1及び-1をフィルタ係数とする積和演算、すなわち、2個のフィルタ係数を用いた積和演算が行われる。
したがって、1×1の畳み込みと2値演算との組み合わせによれば、A×B(>1)の畳み込みよりも、パラメータ数としてのフィルタ係数の数、及び、計算量を削減することができる。
<2値演算層を含むNNの構成例>
図7は、PC10により実現されるNNの第2の構成例を示すブロック図である。
なお、図中、図2と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。
図7において、NN110は、2値演算層112を含むNNで、入力層101、NN102、隠れ層103、隠れ層105、NN106、出力層107、畳み込み層111、及び、2値演算層112を有する。
したがって、NN110は、入力層101、NN102、隠れ層103、隠れ層105、NN106、及び、出力層107を有する点で、図2のNN100と共通する。
但し、NN110は、畳み込み層104に代えて、畳み込み層111、及び、2値演算層112を有する点で、図2のNN100と相違する。
畳み込み層111、及び、2値演算層112では、結果として、図2の畳み込み層104で行われる3×3の畳み込みを近似する処理を行うことができる。
畳み込み層111には、層入力データとして、隠れ層103からの(64,32,32)のマップが供給される。
畳み込み層111は、図2の畳み込み層104と同様に、隠れ層103からの層入力データとしての(64,32,32)のマップに対して、畳み込みカーネルを適用し、その(64,32,32)のマップを対象とする畳み込みを行う。
但し、図2の畳み込み層104は、3×3の畳み込みカーネルを用いて、3×3の畳み込みを行うが、畳み込み層111は、畳み込み層104の3×3の畳み込みカーネルよりもフィルタ係数の数が少ない、例えば、1×1の畳み込みカーネルを用いて、1×1の畳み込みを行う。
すなわち、畳み込み層111では、層入力データとしての(64,32,32)のマップに対して、1×1×64の畳み込みカーネルをスライドしながら適用することにより、(64,32,32)のマップの1×1の畳み込みを行う。
具体的には、畳み込み層111では、例えば、層入力データとしての(64,32,32)のマップの、全チャネルの同一位置の画素が、順次、注目画素に設定され、(64,32,32)のマップにおいて、注目画素を基準とする所定の位置、すなわち、例えば、注目画素の位置を中心とする、縦×横×チャネルが1×1×64の直方体状の範囲(畳み込みカーネルの縦×横×チャネルと同一の範囲)が、畳み込みの処理対象に設定される。
そして、(64,32,32)のマップのうちの、畳み込みの処理対象内の1×1×64の各データ(画素値)と、1×1×64の畳み込みカーネルとしてのフィルタのフィルタ係数との積和演算が行われ、その積和演算の結果が、注目画素の畳み込みの結果として求められる。
畳み込み層111では、その後、まだ注目画素に設定されていない画素を、注目画素に新たに設定して、同様の処理が繰り返され、これにより、畳み込みカーネルが、注目画素の設定に応じてスライドされながら、層入力データとしてのマップに適用される。
なお、畳み込み層111は、1×1×64の畳み込みカーネルを、例えば、図2の畳み込み層104と同様に、128種類だけ有し、(64,32,32)のマップに対して、128種類の1×1×64の畳み込みカーネルそれぞれを適用することにより、(128,32,32)のマップ(畳み込みマップ)を求め、畳み込み層104の層出力データとして出力する。
また、畳み込み層111では、畳み込み層104と同様に、畳み込みカーネルを適用することにより得られる畳み込み結果を引数として演算した活性化関数の演算結果を、層出力データとして出力することができる。
2値演算層112は、例えば、畳み込み層111が出力する(128,32,32)のマップの、全チャネルの同一位置の画素を、順次、注目画素に設定し、(128,32,32)のマップにおいて、注目画素を基準とする所定の位置、すなわち、例えば、注目画素の位置を中心とする、縦×横×チャネルがA×B×Cの直方体状の範囲を、2値演算の処理対象に設定する。
ここで、2値演算の処理対象としての直方体状の範囲の縦×横のサイズとしては、例えば、2値演算層112を利用して近似する畳み込み層104の畳み込みカーネルの縦×横(畳み込みの処理対象の縦×横)と同一のサイズ、すなわち、ここでは、3×3を採用することができる。
2値演算の処理対象としての直方体状の範囲のチャネル方向のサイズとしては、2値演算層112に対する層入力データのチャネルの数、すなわち、ここでは、畳み込み層111が出力する(128,32,32)のマップのチャネルの数である128が採用される。
したがって、注目画素に対する2値演算の処理対象は、(128,32,32)のマップの、例えば、注目画素の位置を中心とする、縦×横×チャネルが3×3×128の直方体状の範囲である。
2値演算層112は、畳み込み層111からの(128,32,32)のマップ(畳み込みマップ)のうちの、注目画素に対して設定した処理対象の中の2個のデータを用いて2値演算を行い、その2値演算の結果を、層出力データとして、上位層の隠れ層105に出力する。
ここで、2値演算層112での2個のデータd1及びd2を用いた2値演算としては、2個のデータd1及びd2の和、差、積、商、その他、例えば、f(d1,d2)=sin(d1)×cos(d2)等の所定の関数の演算を採用することができる。さらに、2個のデータd1及びd2を用いた2値演算としては、2個のデータd1及びd2のANDや、OR,XOR等の論理演算を採用することができる。
以下では、説明を簡単にするため、2値演算層112での2個のデータd1及びd2を用いた2値演算としては、例えば、2個のデータd1及びd2の差分d1-d2を求める演算を採用することとする。
2値演算としての2個のデータd1及びd2の差分を求める差分演算は、2値演算の処理対象と同一サイズの、縦×横×チャネルが3×3×128のカーネルであって、データd1に適用されるフィルタ係数が+1で、データd2に適用されるフィルタ係数が-1の、2個だけのフィルタ係数を有するカーネルを、2値演算の処理対象に適用して、積和演算(+1×d1+(-1)×d2)を行う処理であると捉えることができる。
ここで、2値演算層112が2値演算を行うのに用いるカーネル(フィルタ)を、2値演算カーネルともいう。
2値演算カーネルは、以上のように、データd1に適用されるフィルタ係数が+1で、データd2に適用されるフィルタ係数が-1の、2個のフィルタ係数を有するカーネルであると捉える他、例えば、2値演算の処理対象と同一サイズの、縦×横×チャネルが3×3×128のカーネルであって、データd1及びd2に適用されるフィルタ係数がそれぞれ+1及び-1で、他のデータに適用されるフィルタ係数が0の、2値演算の処理対象と同一サイズのフィルタ係数を有するカーネルであると捉えることもできる。
以上のように、2値演算を、2値演算カーネルの適用と捉える場合には、2値演算層112では、畳み込み層111からの層入力データとしての(128,32,32)のマップに対して、3×3×128の2値演算カーネルがスライドしながら適用される。
すなわち、2値演算層112は、例えば、畳み込み層111が出力する(128,32,32)のマップの、全チャネルの同一位置の画素を、順次、注目画素に設定し、(128,32,32)のマップにおいて、注目画素を基準とする所定の位置、すなわち、例えば、注目画素の位置を中心とする、縦×横×チャネルが3×3×128の直方体状の範囲(2値演算カーネルの縦×横×チャネルと同一の範囲)を、2値演算の処理対象に設定する。
そして、(128,32,32)のマップのうちの、2値演算の処理対象内の3×3×128の各データ(画素値)と、3×3×128の2値演算カーネルとしてのフィルタのフィルタ係数との積和演算が行われ、その積和演算の結果が、注目画素についての2値演算の結果として求められる。
2値演算層112では、その後、まだ注目画素に設定されていない画素を、注目画素に新たに設定して、同様の処理が繰り返され、これにより、2値演算カーネルが、注目画素の設定に応じてスライドされながら、層入力データとしてのマップに適用される。
なお、図7では、2値演算層112は、2値演算カーネルを、例えば、128種類だけ有し、畳み込み層111からの(128,32,32)のマップ(畳み込みマップ)に対して、128種類の2値演算カーネルそれぞれを適用することにより、(128,32,32)のマップを求め、2値演算層112の層出力データとして、隠れ層105に出力する。
ここでは、2値演算の対象となるマップのチャネル数と、2値演算の結果得られるマップのチャネル数とが、同一の128チャネルとしたが、2値演算の対象となるマップのチャネル数と、2値演算の結果得られるマップのチャネル数とは、同一である必要はない。
例えば、2値演算層112の2値演算カーネルとして、例えば、256種類の2値演算カーネルを用意することにより、2値演算層112において、2値演算カーネルを、畳み込み層111からの(128,32,32)のマップに対して適用することにより得られる2値演算結果としてのマップのチャネル数は、2値演算カーネルの種類数に等しい256チャネルになる。
また、本実施の形態では、2値演算として、差分を採用することとしたが、異なる種類の2値演算カーネルでは、異なる種類の2値演算を採用することができる。
また、2値演算カーネルにおいて、ある画素を注目画素として設定される処理対象と、他の画素を注目画素として設定される処理対象とでは、処理対象において、同一の位置の2値(データ)を、2値演算の対象とすることもできるし、異なる位置の2値を、2値演算の対象とすることができる。
すなわち、ある画素を注目画素として設定される処理対象については、その処理対象における位置P1及びP2の2値を、2値演算の対象とし、他の画素を注目画素として設定される処理対象についても、その処理対象における位置P1及びP2の2値を、2値演算の対象とすることができる。
また、ある画素を注目画素として設定される処理対象については、その処理対象における位置P1及びP2の2値を、2値演算の対象とし、他の画素を注目画素として設定される処理対象については、その処理対象における、位置P1及びP2のペアと異なるペアの位置P1'及びP2'の2値を、2値演算の対象とすることができる。
この場合、スライドしながら適用される2値演算カーネルの2値演算の対象となる2値の位置が、処理対象において変化する。
なお、2値演算層112において、2値演算の対象の各チャネルのマップ、すなわち、畳み込み層111からの各チャネルのマップの全画素が、注目画素に設定される場合、2値演算の結果としてのマップの縦×横のサイズは、2値演算の対象のマップの縦×横のサイズと同一の32×32(画素)となる。
また、2値演算の対象の各チャネルのマップの画素が、1画素以上おきに注目画素に設定される場合、すなわち、2値演算の対象の各チャネルのマップにおいて、注目画素に設定されない画素が存在する場合、2値演算の結果としてのマップの縦×横のサイズは、2値演算の対象のマップの縦×横のサイズよりも小さくなる(プーリングが行われる)。
さらに、上述の場合には、2値演算カーネル(2値演算の処理対象)の縦×横のサイズとして、2値演算層112を利用して近似する畳み込み層104(図2)の畳み込みカーネルの縦×横(畳み込みの処理対象の縦×横)と同一のサイズ、すなわち、3×3を採用することとしたが、2値演算カーネル(2値演算の処理対象)の縦×横のサイズとしては、1×1より大のサイズ、又は、畳み込み層111の畳み込みカーネルより大のサイズであって、2値演算の対象のマップと同一のサイズ、すなわち、32×32以下のサイズを採用することができる。
なお、2値演算カーネルの縦×横のサイズとして、2値演算の対象のマップと同一のサイズ、すなわち、ここでは、32×32のサイズを採用する場合には、2値演算カーネルをスライドさせずに、2値演算の対象のマップ全体に適用することができる。この場合、1種類の2値演算カーネルを適用することにより得られるマップは、2値演算の結果得られる1つの値で構成される。
以上の畳み込み層111及び2値演算層112の処理は、対象物の検出等を行う順伝播時の処理であるが、学習を行う逆伝播時では、畳み込み層111及び2値演算層112において、直前の下位層に逆伝播する、出力データの誤差に関する誤差情報が、直後の上位層からの誤差情報を用いて求められ、直前の下位層に逆伝播される。また、畳み込み層111では、畳み込みカーネルのフィルタ係数が、上位層(ここでは、2値演算層112)からの誤差情報を用いて更新される。
<2値演算層112の処理>
図8は、2値演算層112の2値演算の処理の例を説明する図である。
図8において、マップxは、2値演算層112に対する層入力データxである。マップxは、図3の場合と同様に、(c(in),M,N)のマップ、すなわち、縦×横がM×Nの、c(in)チャネルの画像になっており、c(in)チャネルのマップx(0),x(1),...,x(c(in)-1)から構成される。
また、図8において、マップyは、2値演算層112が出力する層出力データyである。マップyは、図3の場合と同様に、(k(out),M,N)のマップ、すなわち、縦×横がM×Nの、k(out)チャネルの画像になっており、k(out)チャネルのマップy(0),y(1),...,y(k(out)-1)から構成される。
2値演算層112は、縦×横×チャネルがm×n×c(in)の2値演算カーネルGを、k(out)個だけ有する。ここで、1<=m<=M、及び、1<=n<=N、並びに、1<m×n<=M×Nである。
2値演算層112は、k(out)個の2値演算カーネルGのうちの、k+1番目の2値演算カーネルG(k)を、マップxに適用し、チャネル#kのマップy(k)を求める。
すなわち、2値演算層112は、マップxの、全チャネルの同一位置の画素を、順次、注目画素に設定し、マップxにおいて、例えば、注目画素の位置を中心とする、縦×横×チャネルがm×n×c(in)の直方体状の範囲を、2値演算の処理対象に設定する。
そして、2値演算層112は、マップxのうちの、注目画素に対して設定した処理対象に対して、k+1番目の2値演算カーネルG(k)を適用し、処理対象の中の2個のデータ(2値)を用いた2値演算としての差分演算を行い、その2個のデータの差分を求める。
2値演算カーネルG(k)を適用した処理対象が、縦方向にi番目で、横方向にj番目の処理対象である場合、2値演算カーネルG(k)を適用して求められた差分は、チャネル#kのマップy(k)の位置(i,j)のデータ(画素値)yij
(k)となる。
図9は、2値演算カーネルG(k)が処理対象に適用される様子を示す図である。
図8で説明したように、2値演算層112は、縦×横×チャネルがm×n×c(in)の2値演算カーネルGを、k(out)個だけ有する。
ここで、k(out)個の2値演算カーネルGを、G(0),G(1),...,G(k(out)-1)と表す。
2値演算カーネルG(k)は、c(in)チャネルのマップx(0),x(1),...,x(c(in)-1)にそれぞれ適用されるc(in)チャネルの2値演算カーネルG(k,0),G(k,1),...,G(k,c(in)-1)から構成される。
2値演算層112では、(c(in),M,N)のマップxに対して、m×n×c(in)の2値演算カーネルG(k)をスライドしながら適用することにより、マップxにおいて、2値演算カーネルG(k)が適用される、縦×横×チャネルがm×n×c(in)の処理対象の中の2値の差分演算が行われ、その差分演算により得られる2値の差分からなるチャネル#kのマップy(k)が生成される。
なお、図3の場合と同様に、m×n×c(in)の2値演算カーネルG(k)、及び、その2値演算カーネルG(k)が適用されるマップxの空間方向(i及びjの方向)の縦×横がm×nの範囲については、所定の位置としての、例えば、そのm×nの範囲の左上の位置を基準とする縦方向及び横方向の位置を、それぞれs及びtで表す。
また、2値演算カーネルG(k)を、マップxに適用するにあたっては、マップxにパディングを行うこととし、図3で説明したように、マップxの境界から縦方向にパディングされるデータの数をpと表すとともに、横方向にパディングされるデータの数をqと表すこととする。p=q=0とすることで、パディングは、なしにすることができる。
ここで、図7で説明したように、2値演算としての2個のデータd1及びd2の差分を求める差分演算は、例えば、データd1に適用されるフィルタ係数が+1で、データd2に適用されるフィルタ係数が-1の、2個だけのフィルタ係数を有する2値演算カーネルを、2値演算の処理対象に適用して、積和演算(+1×d1+(-1)×d2)を行う処理であると捉えることができる。
いま、2値演算カーネルG(k)のフィルタ係数の+1が積算されるデータd1の、処理対象内のチャネル方向、縦、横の位置を(c,s,t)を、(c0(k),s0(k),t0(k))と表すとともに、2値演算カーネルG(k)のフィルタ係数の-1が積算されるデータd2の、処理対象内のチャネル方向、縦、横の位置を(c,s,t)を、(c1(k),s1(k),t1(k))と表すこととする。
2値演算層112において、マップxに2値演算カーネルGを適用して、2値演算としての差分演算を行い、マップyを求める順伝播は、式(4)で表される。
また、逆伝播は、式(5)で表される。
式(5)の∂E/∂xij
(c)は、NN110の学習時に、2値演算層112の直前の下位層、すなわち、図7では、畳み込み層111に逆伝播する誤差情報である。
ここで、2値演算層112の層出力データyij
(k)は、2値演算層112の直後の上位層である隠れ層105の層入力データxij
(c)となる。
したがって、式(5)右辺の∂E/∂y(i+p-s0(k))(j+q-t0(k))
(k)は、誤差Eの、2値演算層112の層出力データy(i+p-s0(k))(j+q-t0(k))
(k)での偏微分を表すが、隠れ層105で得られる∂E/∂xij
(c)と等価であり、隠れ層105から2値演算層112に逆伝播されてくる誤差情報である。
2値演算層112において、式(5)の誤差情報∂E/∂xij
(c)は、上位層である隠れ層105からの誤差情報∂E/∂xij
(c)を、誤差情報∂E/∂y(i+p-s0(k))(j+q-t0(k))
(k)として用いて求められる。
また、式(5)において、サメーション(Σ)の範囲を規定するk0(c)は、マップxの処理対象における位置(c0(k), s0(k), t0(k))のデータxs0(k)t0(k)
(c0(k))を用いて求められたマップy(k)のデータyij
(k)のkの集合を表す。
式(5)のサメーションは、k0(c)に属するkについてとられる。
K1(c)についても、同様である。
なお、NNを構成する層には、その層のユニットそれぞれが、下位層のすべてのユニットと結合している全結合層(アフィン層)や、層入力データに対して、カーネルが適用される位置によって結合重みが変化し得るLCL(Locally Connected Layer)がある。
LCLは、全結合層の部分集合であり、畳み込み層は、LCLの部分集合である。また、2値演算としての差分演算を行う2値演算層112は、畳み込み層の部分集合であるとみなすことができる。
以上のように、2値演算層112は、畳み込み層の部分集合であるとみなすことができる場合には、2値演算層112の順伝播及び逆伝播は、式(4)及び式(5)で表すことができる他、畳み込み層の順伝播及び逆伝播を表す式(1)及び式(3)で表すこともできる。
すなわち、2値演算層112の2値演算カーネルは、図7で説明したように、2個のデータd1及びd2に適用されるフィルタ係数がそれぞれ+1及び-1で、他のデータに適用されるフィルタ係数が0の、2値演算の処理対象と同一サイズのフィルタ係数を有するカーネルであると捉えることができる。
したがって、式(1)及び式(3)は、2個のデータd1及びd2に適用されるフィルタ係数wst
(k,c)をそれぞれ+1及び-1とし、他のデータに適用されるフィルタ係数wst
(k,c)を0とすることにより、2値演算層112の順伝播及び逆伝播を表す。
2値演算層112の順伝播及び逆伝播を、式(1)及び式(3)、又は、式(4)及び式(5)のいずれで実現するかは、2値演算層112を実現するハードウェアやソフトウェアの仕様等により決定することができる。
なお、上述したことから、2値演算層112は、畳み込み層の部分集合である他、LCLの部分集合でもあり、全結合層の部分集合でもある。したがって、2値演算層112の順伝播及び逆伝播は、畳み込み層の順伝播及び逆伝播を表す式(1)及び式(3)の他、LCLの順伝播及び逆伝播を表す式や、全結合層の順伝播及び逆伝播を表す式を用いて表すこともできる。
また、式(1)ないし式(5)は、バイアス項が含まれていないが、2値演算層112の順伝播及び逆伝播は、バイアス項を含む式で表すことができる。
図7のNN110では、畳み込み層111において、1×1の畳み込みが行われ、その畳み込みの結果得られるマップに対し、2値演算層112において、縦×横がm×nの2値演算カーネルが適用される。
以上のような、1×1の畳み込みを行う畳み込み層111と、縦×横がm×nの2値演算カーネルを適用する2値演算層112との組み合わせによれば、1×1の畳み込みによって、畳み込み層111に対する層入力データのチャネルどうしの間のインタラクションが維持され、その後の2値演算によって、畳み込み層111に対する層入力データの空間方向(i及びjの方向)の情報が、2値の差分等の形で、上位層(図7では、隠れ層105)に伝達される。
そして、畳み込み層111と2値演算層112との組み合わせでは、学習が行われる結合重みは、1×1の畳み込みに用いられる畳み込みカーネルFのフィルタ係数w00
(k,c)だけであるが、畳み込み層111の層入力データと、2値演算層112の層出力データとの結合は、2値演算カーネルの縦×横のサイズと同様のm×nの拡がりのある畳み込みを行う畳み込み層の層入力データと層出力データとの結合を近似する構成となる。
その結果、畳み込み層111と2値演算層112との組み合わせによれば、2値演算層112の上位層側から見て、縦×横がm×nの範囲をカバーする畳み込み、すなわち、m×nの畳み込みと同様の性能の畳み込みを、パラメータ数としての畳み込みカーネルFのフィルタ係数w00
(k,c)の数、及び、計算量を1/(m×n)に削減して行うことができる。
なお、畳み込み層111では、1×1の畳み込みの他、2値演算カーネルの空間方向のサイズ、すなわち、縦×横がm×nより小さいm'×n'の畳み込みカーネルによって、m'×n'の畳み込みを行うことができる。ここで、m'<=m、n'<=n、及び、m'×n'<m×nである。
畳み込み層111において、m'×n'の畳み込みが行われる場合、パラメータ数としての畳み込みカーネルFのフィルタ係数w00
(k,c)の数、及び、計算量は、m×nの畳み込みの(m'×n')/(m×n)になる。
また、畳み込み層111で行う畳み込みは、複数の層に分けて行うことができる。畳み込み層111で行う畳み込みを、複数の層に分けて行うことにより、畳み込みカーネルFのフィルタ係数w00
(k,c)の数、及び、計算量を削減することができる。
すなわち、例えば、畳み込み層111において、64チャネルのマップを対象として、1×1の畳み込みを行い、128チャネルのマップを生成する場合には、畳み込み層111の1×1の畳み込みは、例えば、64チャネルのマップを対象として、1×1の畳み込みを行い、16チャネルのマップを生成する第1の畳み込み層と、その16チャネルのマップを対象として、1×1の畳み込みを行い、128チャネルのマップを生成する第2の畳み込み層とに分けて行うことができる。
畳み込み層111において、64チャネルのマップを対象として、1×1の畳み込みを行い、128チャネルのマップを生成する場合、畳み込みカーネルのフィルタ係数の数は、64×128になる。
一方、64チャネルのマップを対象として、1×1の畳み込みを行い、16チャネルのマップを生成する第1の畳み込み層の畳み込みカーネルのフィルタ係数の数は、64×16になり、16チャネルのマップを対象として、1×1の畳み込みを行い、128チャネルのマップを生成する第2の畳み込み層の畳み込みカーネルのフィルタ係数の数は、16×128になる。
したがって、畳み込み層111に代えて、第1及び第2の畳み込み層を採用することにより、フィルタ係数の数を、64×128から、64×16+16×128に削減することができる。計算量についても、同様である。
<2値演算層112の2値演算の対象とする2値の選択方法>
図10は、2値演算層112の2値演算の対象とする2値を選択する選択方法の例を示す図である。
2値演算の処理対象である、マップxの、注目画素の位置を中心とする、縦×横×チャネルがm×n×c(in)の直方体状の範囲からは、2値演算の対象とする2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))(図9)を、例えば、ランダムに選択することができる。
すなわち、2値演算の対象とする2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))は、ランダムプロジェクション(Random Projection)その他の任意の方法によりランダムに選択することができる。
さらに、2値演算の対象とする2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択するにあたっては、所定の制約を課すことができる。
2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を、ランダムに選択する場合には、2値演算層112の層入力データとしてのマップxの中で、2値演算層112の層出力データとしてのマップyと結合されないチャネル#cのマップx(c)、すなわち、2値演算に用いられないマップx(c)が生じ得る。
そこで、2値演算の対象とする2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択するにあたっては、2値演算に用いられないマップx(c)が生じないように、2値演算層112において、各チャネル#cのマップx(c)を、1チャネル以上のマップy(k)と結合させる制約、すなわち、各チャネル#cのマップx(c)から、位置(c0(k),s0(k),t0(k))又は(c1(k),s1(k),t1(k))となる位置(c,s,t)が1以上選択される制約を課すことができる。
なお、2値演算層112において、各チャネル#cのマップx(c)を、1チャネル以上のマップy(k)と結合させる制約を課すことに代えて、2値演算に用いられないマップx(c)が生じた場合には、例えば、2値演算層112の直前の下位層において、2値演算に用いられないマップx(c)を削除する後処理を行うことができる。
図9で説明したことから、m'×n'(<m×n)の畳み込みを行う畳み込み層111と、マップxの縦×横×チャネル方向がm×n×c(in)の範囲を処理対象として2値演算を行う2値演算層112との組み合わせでは、m×nの畳み込みを近似することができる。したがって、2値演算の処理対象の縦×横がm×nの空間方向の拡がりは、m×nの畳み込みを行う畳み込みカーネルの空間方向の拡がり、ひいては、m×nの畳み込みの対象となるマップxの空間方向の拡がりに対応する。
マップxの、空間方向の広い範囲を対象として、畳み込みを行う場合には、マップxの低周波数成分を抽出することができ、マップxの、空間方向の狭い範囲を対象として、畳み込みを行う場合には、マップxの高周波数成分を抽出することができる。
そこで、2値演算の対象とする2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択するにあたっては、マップxから様々な周波数成分を抽出することができるように、m×n×c(in)の処理対象から、2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択するときの空間方向の範囲を、m×nを最大の範囲として、層出力データとしてのマップy(k)のチャネル#kによって変化させることができる。
例えば、m×nが9×9である場合には、マップy(k)の1/3のチャネルについては、9×9×c(in)の処理対象の全体を対象として、2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択することができる。
さらに、例えば、マップy(k)の、他の1/3のチャネルについては、9×9×c(in)の処理対象のうちの、注目画素を中心とする、空間方向が5×5の狭い範囲を対象として、2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択することができる。
そして、例えば、マップy(k)の、残りの1/3のチャネルについては、9×9×c(in)の処理対象のうちの、注目画素を中心とする、空間方向が3×3のより狭い範囲を対象として、2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択することができる。
以上のように、マップxのm×n×c(in)の処理対象から、2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択するときの空間方向の範囲を、マップy(k)のチャネル#kによって変化させることで、マップxから様々な周波数成分を抽出することができる。
なお、以上のように、マップxのm×n×c(in)の処理対象から、2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択するときの空間方向の範囲を、マップy(k)のチャネル#kによって変化させることは、1のチャネル#kの層出力データとしてのマップy(k)を得る場合と、他の1のチャネル#k'の層出力データとしてのマップy(k')を得る場合とで、空間方向のサイズが異なる2値演算カーネルを適用することと等価である。
また、2値演算層112では、マップx(c)のチャネル#Cによって、空間方向のサイズが異なる2値演算カーネルG(k,c)を採用することが可能である。
マップxのm×n×c(in)の処理対象から、2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択するにあたっては、マップxのオリエンテーションに応じて、処理対象から選択される2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))のパターンを調整することができる。
例えば、人の顔が映る画像は、横方向のエッジが多く、そのような横方向のエッジに対応するオリエンテーションが頻繁に出現する。そこで、入力データとしての画像に、人の顔が映るかどうかを検出する場合には、横方向のエッジに対応するオリエンテーションに応じて、横方向のエッジに対する感度が高くなるような2値演算が行われるように、処理対象から選択される2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))のパターンを調整することができる。
例えば、マップxにおいて、縦方向の位置が異なる位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の2値を用いて2値演算としての差分演算が行われる場合には、位置(c0(k),s0(k),t0(k))又は位置(c1(k),s1(k),t1(k))上に、横方向のエッジがあると、差分演算により求められる差分の大きさが大になり、横方向のエッジに対する感度が高くなる。この場合、横方向のエッジが多い人の顔が映るかどうかを検出するときの検出性能を向上させることができる。
マップxのm×n×c(in)の処理対象から、2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択するにあたっては、処理対象から選択される2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))のパターンが均一化するような制約、すなわち、2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))のパターンとして、様々なパターンが万遍なく出現する制約を課すことができる。
また、処理対象から選択される2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))のパターンについては、処理対象から選択される2値から得られる周波数成分やオリエンテーションが万遍なくばらつくような制約を課すことができる。
さらに、処理対象のチャネル方向を無視して、空間方向に注目すると、例えば、処理対象の空間方向のサイズが、例えば、m×n=9×9である場合、処理対象からの2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の選択は、処理対象の中心の、例えば、縦×横が3×3の領域よりも、処理対象の周囲の領域(処理対象の中心の3×3の領域以外の領域)から行われる頻度が高くなる。処理対象の中心の3×3の領域よりも、処理対象の周囲の領域の方が、面積が広いからである。
2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))は、処理対象の中心の3×3の領域から選択された方が良い場合もあるし、処理対象の周囲の領域から選択された方が良い場合もある。
そこで、処理対象からの2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の選択については、注目画素から位置(c0(k),s0(k),t0(k))までの空間方向の距離や、位置(c1(k),s1(k),t1(k))までの空間方向の距離が、万遍なくばらつくような制約を課すことができる。
また、処理対象からの2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の選択については、例えば、必要に応じて、注目画素から位置(c0(k),s0(k),t0(k))までの空間方向の距離や、位置(c1(k),s1(k),t1(k))までの空間方向の距離が、近い距離(閾値以下の距離)になるような制約(バイアス)を課すことができる。
さらに、処理対象からの2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の選択については、処理対象の空間方向が円形の範囲から、2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))が選択される制約を課すことができる。この場合、円形フィルタ(フィルタ係数が円形の範囲に適用されるフィルタ)が行う処理に相当する処理を行うことが可能になる。
なお、2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の組を、ランダムに選択する場合に、あるチャネル#kの2値演算カーネルG(k)と、他のチャネル#k'の2値演算カーネルG(k')とで、同一の組が選択されることとなったときには、2値演算カーネルG(k)及びG(k')のうちの一方については、2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の組を選択し直すことができる。
また、2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の組の選択は、ランダムに行う他、学習ベースの方法を利用して行うことができる。
図10は、学習ベースの方法を利用して行う、2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の組の選択の例を示している。
図10のAは、特許文献1に記載の、画像の2画素それぞれの画素値の差分を求める複数の弱識別器の学習結果を利用して、2値演算カーネルで2値演算を行う2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択する方法を示している。
特許文献1に記載の弱識別器については、弱識別器において差分を求める2画素の位置が学習される。
2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))としては、例えば、弱識別器において差分を求める2画素の被減数となる画素の位置及び減数となる画素の位置をそれぞれ採用することができる。
また、2値演算層112を複数層設ける場合には、特許文献1に記載の弱識別器において差分を求める2画素の位置の学習を逐次的に繰り返し行い、その結果得られる弱識別器において差分を求める2画素の位置の複数の組を、複数層の2値演算層112それぞれについての2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の組として採用することができる。
図10のBは、CNNの学習結果を利用して、2値演算カーネルで2値演算を行う2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択する方法を示している。
図10のBでは、縦×横が1×1よりも大のサイズの畳み込みを行う畳み込み層を有するCNNの学習の結果得られる畳み込み層の畳み込みカーネルFのフィルタ係数に基づいて、2値演算カーネルで2値演算を行う2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))が選択されている。
例えば、畳み込みカーネルFのフィルタ係数の最大値及び最小値の位置を、2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))に、それぞれ選択することができる。
また、例えば、畳み込みカーネルFのフィルタ係数の分布を確率分布とみなして、その確率分布において、確率が大きい順の2つの位置を、2値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))に選択することができる。
<畳み込み層111及び2値演算層112の処理>
図11は、図7のNN110の畳み込み層111及び2値演算層112の順伝播時及び逆伝播時の処理の例を説明するフローチャートである。
順伝播では、ステップS11において、畳み込み層111は、下位層の隠れ層103から、畳み込み層111に対する層入力データとしてのマップxを取得し、処理は、ステップS12に進む。
ステップS12では、畳み込み層111は、マップxに対して、畳み込みカーネルFを適用し、1×1の畳み込みを行い、畳み込み層111の層出力データとしてのマップyを求め、処理は、ステップS13に進む。
ここで、ステップS12の畳み込みの処理は、式(1)で表される。
ステップS13では、2値演算層112は、畳み込み層111の層出力データを、2値演算層112に対する層入力データとしてのマップxとして取得し、処理は、ステップS14に進む。
ステップS14では、2値演算層112は、畳み込み層111からのマップxに、2値演算カーネルGを適用して、2値演算を行い、2値演算層112の層出力データとしてのマップyを求め、畳み込み層111及び2値演算層112の順伝播の処理は、終了する。
ここで、ステップS14の2値演算は、例えば、式(4)で表される。
逆伝播では、ステップS21において、2値演算層112は、上位層である隠れ層105からの誤差情報としての式(5)右辺の∂E/∂y(i+p-s0(k))(j+q-t0(k))
(k)を取得し、処理は、ステップS22に進む。
ステップS22では、2値演算層112は、上位層である隠れ層105からの誤差情報としての式(5)右辺の∂E/∂y(i+p-s0(k))(j+q-t0(k))
(k)を用いて、下位層である畳み込み層111に逆伝播する誤差情報としての式(5)の∂E/∂xij
(c)を求める。そして、2値演算層112は、誤差情報としての式(5)の∂E/∂xij
(c)を、下位層である畳み込み層111に逆伝播し、処理は、ステップS22からステップS23に進む。
ステップS23では、畳み込み層111は、上位層である2値演算層112からの誤差情報としての式(5)の∂E/∂xij
(c)を取得し、処理は、ステップS24に進む。
ステップS24では、畳み込み層111は、2値演算層112からの誤差情報としての式(5)の∂E/∂xij
(c)を、式(2)右辺の誤差情報∂E/∂yij
(k)として用いて、式(2)の誤差の勾配∂E/∂wst
(k,c)を求め、処理は、ステップS25に進む。
ステップS25では、畳み込み層111は、誤差の勾配∂E/∂wst
(k,c)を用いて、1×1の畳み込みを行う畳み込みカーネルF(k,c)のフィルタ係数w00
(k,c)を更新し、処理は、ステップS26に進む。
ステップS26では、畳み込み層111は、2値演算層112からの誤差情報としての式(5)の∂E/∂xij
(c)を、式(3)右辺の誤差情報∂E/∂yij
(k)(∂E/∂y(i+p-s)(j+q-t)
(k))として用いて、下位層である隠れ層103に逆伝播する誤差情報としての式(3)の∂E/∂xij
(c)を求める。
そして、畳み込み層111は、誤差情報としての式(3)の∂E/∂xij
(c)を、下位層である隠れ層103に逆伝播し、畳み込み層111及び2値演算層112の逆伝播の処理は、終了する。
なお、畳み込み層111や、2値演算層112、さらには、それらの畳み込み層111及び2値演算層112を含むNN110(図7)等は、ライブラリ等を含むソフトウェアの形で、又は、専用のハードウェアの形で提供することができる。
また、畳み込み層111や2値演算層112は、例えば、ライブラリに含まれる関数の形で提供し、任意のプログラムにおいて、畳み込み層111や2値演算層112としての関数を呼び出すことで利用することができる。
さらに、畳み込み層111や2値演算層112等での演算は、1ビットや、2ビット、その他3ビット以上の任意の精度で行うことができる。
また、畳み込み層111や2値演算層112等での演算で用いる値の型としては、浮動小数点型、固定小数点型、整数型、その他の数値についての任意の型を採用することができる。
<シミュレーション結果>
図12は、2値演算層について行ったシミュレーションのシミュレーション結果を示す図である。
シミュレーションでは、2つのNNを用意し、その2つのNNの学習を、オープンな画像のデータセットを用いて行った。
2つのNNのうちの一方のNNは、5×5×32(縦×横×チャネル)の畳み込みを行う畳み込み層、5×5×32の畳み込みを行う他の畳み込み層、5×5×64の畳み込みを行う畳み込み層、5×5×64の畳み込みを行う他の畳み込み層、及び、3×3×128の畳み込みを行う畳み込み層の、合計で5層の畳み込み層を有するCNNである。各畳み込み層の活性化関数としては、正規化線形関数を採用した。
また、他方のNNは、一方のNNであるCNNの5層の畳み込み層のそれぞれを、1×1の畳み込みを行う畳み込み層111、及び、2値の差分を求める2値演算層112に置換したNN(以下、置換NNともいう)である。
シミュレーションでは、学習後のCNN及び置換NNに対して、画像を与えて、その画像の認識を行い、誤り率を算出した。
図12は、シミュレーション結果としてのCNNの誤り率er1と、置換NNの誤り率er2とを示している。
シミュレーション結果によれば、置換NNによって、誤り率が改善することが確認された。
したがって、置換NNにおいて、CNNよりも少ないパラメータで、CNNの畳み込み層と同等以上のニューロン(に対応するユニット)の結合が実現されていることを推認することができる。
<2値演算層を含むNNの他の構成例>
図13は、PC10により実現されるNNの第3の構成例を示すブロック図である。
なお、図中、図7と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。
図13において、NN120は、2値演算層112と値維持層121とを含むNNで、入力層101、NN102、隠れ層103、隠れ層105、NN106、出力層107、畳み込み層111、2値演算層112、及び、値維持層121を有する。
したがって、NN120は、入力層101、NN102、隠れ層103、隠れ層105、NN106、出力層107、畳み込み層111、及び、2値演算層112を有する点で、図7のNN110と共通する。
但し、NN120は、値維持層121が新たに設けられている点で、図7のNN110と相違する。
図13において、値維持層121は、畳み込み層111の直後の上位層として、2値演算層112と並列に配置されている。
値維持層121は、直前の下位層である畳み込み層111が層出力データとして出力する、例えば、(128,32,32)のマップを構成するデータの一部の絶対的な値を維持して、直後の上位層である隠れ層105に出力する。
すなわち、値維持層121は、例えば、畳み込み層111が、128種類(個)の1×1×64の畳み込みカーネルを適用して出力する(128,32,32)のマップの、全チャネルの同一位置の画素を、順次、注目画素に設定し、(128,32,32)のマップにおいて、注目画素を基準とする所定の位置、すなわち、例えば、注目画素の位置を中心とする、縦×横×チャネルがA×B×Cの直方体状の範囲を、絶対的な値を維持する値維持の処理対象に設定する。
ここで、値維持の処理対象としての直方体状の範囲の縦×横のサイズとしては、例えば、2値演算層112の2値演算カーネルGの縦×横と同一のサイズ、すなわち、3×3を採用することができる。なお、値維持の処理対象としての直方体状の範囲の縦×横のサイズとしては、2値演算カーネルGの縦×横と異なるサイズを採用することもできる。
値維持の処理対象としての直方体状の範囲のチャネル方向のサイズとしては、値維持層121に対する層入力データのチャネルの数、すなわち、ここでは、畳み込み層111が出力する(128,32,32)のマップのチャネルの数である128が採用される。
したがって、注目画素に対する値維持の処理対象は、(128,32,32)のマップの、例えば、注目画素の位置を中心とする、縦×横×チャネルが3×3×128の直方体状の範囲である。
値維持層121は、畳み込み層111からの(128,32,32)のマップのうちの、注目画素に対して設定した処理対象の中の1個のデータを、例えば、ランダムプロジェクション等により選択し、そのデータの絶対的な値を維持して、層出力データとして、上位層の隠れ層105に出力する。
ここで、データの絶対的な値を維持するとは、データの値をそのまま維持する場合の他、データの値に対して、固定値の減算や、加算、積算、除算等の演算を施す場合、その他、データの絶対的な値の情報が反映される演算を行う場合を含む。
2値演算層112では、例えば、2値演算の処理対象の中の2個のデータの値の差分演算が行われるため、後段の層には、2個のデータの値の差分の情報は伝播されるが、データの絶対的な値の情報は伝播されない。
これに対して、値維持層121では、値維持の処理対象の中の1個のデータの絶対的な値が維持されて出力されるので、データの絶対的な値の情報が、後段の層に伝播される。
本件発明者が行ったシミュレーションによれば、後段の層に、2個のデータの値の差分の情報の他に、データの絶対的な値の情報が伝播されることで、NNの性能(対象物を検出する検出性能等)が向上することが確認された。
値維持層121が、値維持の処理対象の中の1個のデータの絶対的な値を維持して出力する値維持の処理は、例えば、値維持の処理対象と同一サイズの、縦×横×チャネルが3×3×128のカーネルであって、1個のデータd1に適用されるフィルタ係数が+1の、1個だけのフィルタ係数を有するカーネルを、値維持の処理対象に適用して、積(+1×d1)をとる処理であると捉えることができる。
ここで、値維持層121が値維持を行うのに用いるカーネル(フィルタ)を、値維持カーネルともいう。
値維持カーネルは、以上のように、データd1に適用されるフィルタ係数が+1の、1個のフィルタ係数を有するカーネルであると捉える他、例えば、値維持の処理対象と同一サイズの、縦×横×チャネルが3×3×128のカーネルであって、データd1に適用されるフィルタ係数が+1で、他のデータに適用されるフィルタ係数が0の、値維持の処理対象と同一サイズのフィルタ係数を有するカーネルであると捉えることもできる。
以上のように、値維持の処理を、値維持カーネルの適用と捉える場合には、値維持層121では、畳み込み層111からの層入力データとしての(128,32,32)のマップに対して、3×3×128の値維持カーネルがスライドしながら適用される。
すなわち、値維持層121は、例えば、畳み込み層111が出力する(128,32,32)のマップの、全チャネルの同一位置の画素を、順次、注目画素に設定し、(128,32,32)のマップにおいて、注目画素を基準とする所定の位置、すなわち、例えば、注目画素の位置を中心とする、縦×横×チャネルが3×3×128の直方体状の範囲(値維持カーネルの縦×横×チャネルと同一の範囲)を、値維持の処理対象に設定する。
そして、(128,32,32)のマップのうちの、値維持の処理対象内の3×3×128の各データ(画素値)と、3×3×128の値維持カーネルとしてのフィルタのフィルタ係数との積の演算、又は、積和演算が行われ、その積の演算、又は、積和演算の結果が、注目画素についての値維持の結果として求められる。
値維持層121では、その後、まだ注目画素に設定されていない画素を、注目画素に新たに設定して、同様の処理が繰り返され、これにより、値維持カーネルが、注目画素の設定に応じてスライドされながら、層入力データとしてのマップに適用される。
なお、図13に示すように、2値算残層112と値維持増121とが並列に配置される場合、2値演算層112が有する2値演算カーネルGの数(種類数)、及び、値維持層121が有する値維持カーネルの数としては、その2値算カーネルGの数と、値維持カーネルの数との加算値が、直後の上位層である隠れ層105が層入力データとして受け付けるマップのチャネルの数に等しくなる数が採用される。
例えば、隠れ層105が(128,32,32)のマップを層入力データとして受け付け、2値演算層112が有する2値演算カーネルGの数が、1以上128未満のL種類である場合、値維持層121は、128-L種類の値維持カーネルを有する。
この場合、値維持層121の128-L種類の値維持カーネルの適用により得られる128-Lチャネルのマップは、隠れ層105が受け付ける(128,32,32)のマップの一部のチャネルのマップ(隠れ層105への層入力データ)として、隠れ層105に出力される。また、2値演算層112のL種類の2値演算カーネルGの適用により得られるLチャネルのマップは、隠れ層105が受け付ける(128,32,32)のマップの残りのチャネルのマップとして、隠れ層105に出力される。
ここで、2値算残層112、及び、値維持層121は、縦×横が同一のサイズのマップを出力することができる。
また、値維持カーネルにおいて、ある画素を注目画素として設定される処理対象と、他の画素を注目画素として設定される処理対象とでは、処理対象において、同一の位置の値(データ)を、値維持の対象とすることもできるし、異なる位置の値を、値維持の対象とすることができる。
すなわち、ある画素を注目画素として設定される処理対象については、その処理対象における位置P1の値を、値維持の対象とし、他の画素を注目画素として設定される処理対象についても、その処理対象における位置P1の値を、値維持の対象とすることができる。
また、ある画素を注目画素として設定される処理対象については、その処理対象における位置P1の値を、値維持の対象とし、他の画素を注目画素として設定される処理対象については、その処理対象における、位置P1とは異なる位置P2の値を、値維持の対象とすることができる。
この場合、スライドしながら適用される値維持カーネルで値維持の対象となる値の位置が、処理対象において変化することになる。
なお、2値演算層112では、畳み込み層111が出力するマップにおいて、2値演算カーネルGが適用される範囲が、2値演算の処理対象となり、値維持層121では、畳み込み層111が出力するマップにおいて、値維持カーネルが適用される範囲が、値維持の処理対象となる。
上述したように、値維持の処理対象としての直方体状の範囲の縦×横のサイズとしては、2値演算層112の2値演算カーネルGの縦×横と同一のサイズや、異なるサイズを採用することができるが、このことは、値維持カーネルの縦×横のサイズとして、2値演算カーネルGの縦×横と同一のサイズや、異なるサイズを採用することができることを意味する。
<値維持層121の処理>
図14は、値維持層121の値維持の処理の例を説明する図である。
図14において、マップxは、値維持層121に対する層入力データxである。マップxは、図8の場合と同様に、(c(in),M,N)のマップ、すなわち、縦×横がM×Nの、c(in)チャネルの画像になっており、c(in)チャネルのマップx(0),x(1),...,x(c(in)-1)から構成される。
また、図14において、マップyは、値維持層121が出力する層出力データyである。マップyは、図8の場合と同様に、(k(out),M,N)のマップ、すなわち、縦×横がM×Nの、k(out)チャネルの画像になっており、k(out)チャネルのマップy(0),y(1),...,y(k(out)-1)から構成される。
値維持層121は、縦×横×チャネルがm×n×c(in)の値維持カーネルHを、k(out)個だけ有する。ここで、1<=m<=M、及び、1<=n<=N、並びに、1<m×n<=M×Nである。
値維持層121は、k(out)個の値維持カーネルHのうちの、k+1番目の値維持カーネルH(k)を、マップxに適用し、チャネル#kのマップy(k)を求める。
すなわち、値維持層121は、マップxの、全チャネルの同一位置の画素を、順次、注目画素に設定し、マップxにおいて、例えば、注目画素の位置を中心とする、縦×横×チャネルがm×n×c(in)の直方体状の範囲を、値維持の処理対象に設定する。
そして、値維持層121は、マップxのうちの、注目画素に対して設定した処理対象に対して、k+1番目の値維持カーネルH(k)を適用し、処理対象の中の1個のデータの値を取得する。
値維持カーネルH(k)を適用した処理対象が、縦方向にi番目で、横方向にj番目の処理対象である場合、値維持カーネルH(k)を適用して取得された値は、チャネル#kのマップy(k)の位置(i,j)のデータ(画素値)yij
(k)となる。
図15は、値維持カーネルH(k)が処理対象に適用される様子を示す図である。
図14で説明したように、値維持層121は、縦×横×チャネルがm×n×c(in)の値維持カーネルHを、k(out)個だけ有する。
ここで、k(out)個の値維持カーネルHを、H(0),H(1),...,H(k(out)-1)と表す。
値維持カーネルH(k)は、c(in)チャネルのマップx(0),x(1),...,x(c(in)-1)にそれぞれ適用されるc(in)チャネルの値維持カーネルH(k,0),H(k,1),...,H(k,c(in)-1)から構成される。
値維持層121では、(c(in),M,N)のマップxに対して、m×n×c(in)の値維持カーネルH(k)をスライドしながら適用することにより、マップxにおいて、値維持カーネルH(k)が適用される、縦×横×チャネルがm×n×c(in)の処理対象の中の1個のデータの値が取得され、その取得された値からなるチャネル#kのマップy(k)が生成される。
なお、図3の場合と同様に、m×n×c(in)の値維持カーネルH(k)、及び、その値維持カーネルH(k)が適用されるマップxの空間方向(i及びjの方向)の縦×横がm×nの範囲については、所定の位置としての、例えば、そのm×nの範囲の左上の位置を基準とする縦方向及び横方向の位置を、それぞれs及びtで表す。
また、値維持カーネルH(k)を、マップxに適用するにあたっては、マップxにパディングを行うこととし、図3で説明したように、マップxの境界から縦方向にパディングされるデータの数をpと表すとともに、横方向にパディングされるデータの数をqと表すこととする。p=q=0とすることで、パディングは、なしにすることができる。
ここで、図13で説明したように、値維持の処理は、例えば、1つのデータd1に適用されるフィルタ係数が+1の、1個だけのフィルタ係数を有する値維持カーネルを、値維持の処理対象に適用して、積(+1×d1)をとる処理であると捉えることができる。
いま、値維持カーネルH(k)のフィルタ係数の+1が積算されるデータd1の、処理対象内のチャネル方向、縦、横の位置を(c,s,t)を、(c0(k),s0(k),t0(k))と表すこととする。
値維持層121において、マップxに値維持カーネルHを適用して、値維持の処理を行い、マップyを求める順伝播は、式(6)で表される。
また、逆伝播は、式(7)で表される。
式(7)の∂E/∂xij
(c)は、NN120の学習時に、値維持層121の直前の下位層、すなわち、図13では、畳み込み層111に逆伝播する誤差情報である。
ここで、値維持層121の層出力データyij
(k)は、値維持層121の直後の上位層である隠れ層105の層入力データxij
(c)となる。
したがって、式(7)右辺の∂E/∂y(i+p-s0(k))(j+q-t0(k))
(k)は、誤差Eの、値維持層121の層出力データy(i+p-s0(k))(j+q-t0(k))
(k)での偏微分を表すが、隠れ層105で得られる∂E/∂xij
(c)と等価であり、隠れ層105から値維持層121に逆伝播されてくる誤差情報である。
値維持層121において、式(7)の誤差情報∂E/∂xij
(c)は、上位層である隠れ層105からの誤差情報∂E/∂xij
(c)を誤差情報∂E/∂y(i+p-s0(k))(j+q-t0(k))
(k)として用いて求められる。
また、式(7)において、サメーション(Σ)の範囲を規定するk0(c)は、マップxの処理対象における位置(c0(k), s0(k), t0(k))のデータxs0(k)t0(k)
(c0(k))を用いて求められたマップy(k)のデータyij
(k)のkの集合を表す。
式(7)のサメーションは、k0(c)に属するkについてとられる。
なお、値維持の処理を行う値維持層121は、畳み込み層の部分集合であるため、値維持層121の順伝播及び逆伝播は、式(6)及び式(7)で表すことができる他、畳み込み層の順伝播及び逆伝播を表す式(1)及び式(3)で表すこともできる。
すなわち、値維持層121の値維持カーネルは、図13で説明したように、1個のデータd1に適用されるフィルタ係数が+1で、他のデータに適用されるフィルタ係数が0の、値維持の処理対象と同一サイズのフィルタ係数を有するカーネルであると捉えることができる。
したがって、式(1)及び式(3)は、1個のデータd1に適用されるフィルタ係数wst
(k,c)を+1とし、他のデータに適用されるフィルタ係数wst
(k,c)を0とすることにより、値維持層121の順伝播及び逆伝播を表す。
値維持層121の順伝播及び逆伝播を、式(1)及び式(3)、又は、式(6)及び式(7)のいずれで実現するかは、値維持層121を実現するハードウェアやソフトウェアの仕様等により決定することができる。
なお、値維持層121は、畳み込み層の部分集合である他、LCLの部分集合でもあり、全結合層の部分集合でもある。したがって、値維持層121の順伝播及び逆伝播は、畳み込み層の順伝播及び逆伝播を表す式(1)及び式(3)の他、LCLの順伝播及び逆伝播を表す式や、全結合層の順伝播及び逆伝播を表す式を用いて表すこともできる。
また、式(6)及び式(7)は、バイアス項が含まれていないが、値維持層121の順伝播及び逆伝播は、バイアス項を含む式で表すことができる。
図13のNN120では、畳み込み層111において、1×1の畳み込みが行われ、その畳み込みの結果得られるマップに対し、2値演算層112において、縦×横がm×nの2値演算カーネルが適用されるとともに、値維持層121において、縦×横がm×nの値維持カーネルが適用される。
以上のようなNN120によれば、図7のNN110の場合と同様に、m×nの畳み込みと同様の性能の畳み込みを、パラメータ数としての畳み込みカーネルFのフィルタ係数w00
(k,c)の数、及び、計算量を1/(m×n)に削減して行うことができる。さらに、NN120によれば、2値演算層112及び値維持層121の後段の層に、2個のデータの値の差分の情報と、データの絶対的な値の情報とが伝播され、その結果、値維持層121が設けられていない場合に比較して、対象物を検出する検出性能等が向上させることができる。
なお、図13では、2値演算層112と値維持層121とを並列に設けることとしたが、その他、例えば、畳み込み層と2値演算層112とを並列に設けることや、畳み込み層と2値演算層112と値維持層121とを並列に設けることができる。
<NN生成装置の構成例>
図16は、本技術を適用したNNを生成するNN生成装置の構成例を示すブロック図である。
図16のNN生成装置は、例えば、図1のPC10がNN生成装置としてのプログラムを実行することにより、機能的に実現することができる。
図16において、NN生成装置は、ライブラリ取得部201、生成部202、及び、ユーザI/F(Interface)203を有する。
ライブラリ取得部201は、例えば、インターネットその他のストレージから、NNの様々な層として機能する関数の関数ライブラリを取得する。
生成部202は、ユーザI/F203の操作、すなわち、ユーザI/F203から供給される、ユーザの操作に対応する操作信号に応じて、ライブラリ取得部201が取得した関数ライブラリから、NNの層としての関数を取得し、その層から構成されるNNを生成する。
ユーザI/F203は、タッチパネル等で構成され、生成部202が生成したNNを、グラフ構造で表示する。また、ユーザの操作を受け付け、対応する操作信号を、生成部202に供給する。
以上のように構成されるNN生成装置では、生成部202が、ユーザI/F203の操作に応じ、ライブラリ取得部201が取得したNNの層としての関数ライブラリを用いて、例えば、2値演算層112等を含むNNを生成する。
生成部202が生成したNNは、グラフ構造の形で、ユーザI/F203で表示される。
図17は、ユーザI/F203の表示例を示す図である。
ユーザI/F203の表示領域には、例えば、層選択部211、及び、グラフ構造表示部212が表示される。
層選択部211には、NNを構成する層として選択可能な層を表すアイコンである層アイコンが表示される。図17では、入力層、出力層、畳み込み層、2値演算層、値維持層等の層アイコンが表示されている。
グラフ構造表示部212には、生成部202が生成したNNがグラフ構造で表示される。
例えば、ユーザが、層選択部211から、2値演算層等の所望の層の層アイコンを選択し、その層アイコンと、グラフ構造表示部212に既に表示されている他の層アイコンとを結合するように、ユーザI/F203を操作すると、生成部202は、ユーザが選択した層アイコンが表す層と、他の層アイコンが表す層とを結合したNNを生成し、グラフ構造表示部212に表示させる。
その他、ユーザI/F203が、例えば、グラフ構造表示部212に表示された層アイコンの削除や移動、層アイコンどうしの結合、結合の解除等を行うように操作されると、生成部202は、ユーザI/F203の操作に応じて、層アイコンの削除や移動、層アイコンどうしの結合、結合の解除等を行った後のNNを生成し直し、グラフ構造表示部212に表示し直す。
したがって、ユーザは、容易に、様々なネットワーク構成のNNを構成することができる。
また、図17では、層選択部211に、畳み込み層、2値演算層、値維持層の層アイコンが表示されるので、そのような畳み込み層や、2値演算層、値維持層を含むNN100や、NN110、NN120のようなNNを、容易に構成することができる。
生成部202が生成するNNの実体は、例えば、図1のPC10が実行可能なプログラムであり、そのプログラムを、PC10に実行させることで、PC10を、NN100や、NN110、NN120のようなNNとして機能させることができる。
なお、ユーザI/F203には、層アイコンの他、活性化関数を指定するアイコンや、2値演算カーネルその他のカーネルの縦×横のサイズを指定するアイコン、2値演算の対象となる2値の位置を選択する方法を選択するアイコン、値維持の処理の対象となる値の位置を選択する方法を選択するアイコン、その他、ユーザによるNNの構成を補助するアイコン等を表示することができる。
図18は、生成部202が生成するNNの実体としてのプログラムの例を示す図である。
図18において、1行目のxは、入力層が出力する層出力データを表す。
PF.Convolution(x, outmaps=128, kernel=(1,1))は、xを対象として畳み込みを行う畳み込み層としての関数を表す。PF.Convolution(x, outmaps=128, kernel=(1,1))において、kernel=(1,1)は、畳み込みカーネルの縦×横が1×1であることを表し、outmaps=128は、畳み込み層から出力されるマップ(層出力データ)のチャネル数が128チャネルであることを表す。
図18において、畳み込み層としてのPF.Convolution(x, outmaps=128, kernel=(1,1))で得られる128チャネルのマップは、xにセットされる。
PF.PixDiff(x, outmaps=128, rp_ratio=0.1)は、xを対象として2値演算としての差分演算を行う2値演算層、及び、値維持の処理を行う値維持層としての関数を表す。PF.PixDiff(x, outmaps=128, rp_ratio=0.1)において、outmaps=128は、2値演算層及び値維持層から出力されるマップ(層出力データ)のチャネル数の合計が128チャネルであることを表し、rp_ratio=0.1は、その128チャネルの10%を、値維持層の出力とし、残りを、2値演算層の出力とすることを表す。
なお、本実施の形態では、NN110及び120を、畳み込み層111及び2値演算層112の両方を含む形で構成することとしたが、NN110及び120は、畳み込み層111を含めずに構成することができる。すなわち、2値演算層112は、NNの層としては、新しい数学的な特性を有する層であり、畳み込み層111と組み合わせずに、単独で、NNの層として用いることができる。
ここで、本明細書において、コンピュータ(PC10)がプログラムに従って行う処理は、必ずしもフローチャートとして記載された順序に沿って時系列に行われる必要はない。すなわち、コンピュータがプログラムに従って行う処理は、並列的あるいは個別に実行される処理(例えば、並列処理あるいはオブジェクトによる処理)も含む。
また、プログラムは、1のコンピュータ(プロセッサ)により処理されるものであっても良いし、複数のコンピュータによって分散処理されるものであっても良い。さらに、プログラムは、遠方のコンピュータに転送されて実行されるものであっても良い。
さらに、本明細書において、システムとは、複数の構成要素(装置、モジュール(部品)等)の集合を意味し、すべての構成要素が同一筐体中にあるか否かは問わない。したがって、別個の筐体に収納され、ネットワークを介して接続されている複数の装置、及び、1つの筐体の中に複数のモジュールが収納されている1つの装置は、いずれも、システムである。
なお、本技術の実施の形態は、上述した実施の形態に限定されるものではなく、本技術の要旨を逸脱しない範囲において種々の変更が可能である。
例えば、本技術は、1つの機能をネットワークを介して複数の装置で分担、共同して処理するクラウドコンピューティングの構成をとることができる。
また、上述のフローチャートで説明した各ステップは、1つの装置で実行する他、複数の装置で分担して実行することができる。
さらに、1つのステップに複数の処理が含まれる場合には、その1つのステップに含まれる複数の処理は、1つの装置で実行する他、複数の装置で分担して実行することができる。
また、本明細書に記載された効果はあくまで例示であって限定されるものではなく、他の効果があってもよい。
なお、本技術は、以下のように構成することができる。
<1>
ニューラルネットワークの層を構成し、前記層に入力される層入力データのうちの2値を用いた2値演算を行い、前記2値演算の結果を、前記層から出力される層出力データとして出力する
情報処理装置。
<2>
前記層入力データに対して、前記2値演算を行う2値演算カーネルを適用することにより、前記2値演算を行う
<1>に記載の情報処理装置。
<3>
前記層入力データに対して、前記2値演算カーネルをスライドしながら適用することにより、前記2値演算を行う
<2>に記載の情報処理装置。
<4>
1のチャネルの層出力データを得る場合と、他の1のチャネルの層出力データを得る場合とで、空間方向のサイズが異なる前記2値演算カーネルを適用する
<2>又は<3>に記載の情報処理装置。
<5>
上位層から逆伝播される、前記ニューラルネットワークの出力層から出力される出力データの誤差に関する誤差情報を取得し、
前記上位層からの前記誤差情報を用いて、下位層に逆伝播する誤差情報を求めて、前記下位層に逆伝播する
<1>ないし<4>のいずれかに記載の情報処理装置。
<6>
前記2値演算は、2値の差分である
<1>ないし<5>のいずれかに記載の情報処理装置。
<7>
前記2値演算を行う2値演算カーネルよりも空間方向のサイズが小さい畳み込みカーネルで畳み込みを行う畳み込み層の直後の上位層に配置される
<1>ないし<6>のいずれかに記載の情報処理装置。
<8>
前記畳み込み層は、縦×横が1×1の前記畳み込みカーネルを適用する1×1の畳み込みを行い、
前記畳み込み層の出力に対して、2値の差分を求める前記2値演算を行う前記2値演算カーネルを適用する
<7>に記載の情報処理装置。
<9>
下位層の出力の絶対的な値を維持して出力する値維持層と並列に配置され、
前記値維持層の出力は、上位層への複数チャネルの層入力データのうちの、一部のチャネルの層入力データとして、前記上位層に出力され、
前記2値演算の結果を、残りのチャネルの層入力データとして、前記上位層に出力する
<1>ないし<8>のいずれかに記載の情報処理装置。
<10>
前記2値演算を行うハードウェアを備える
<1>ないし<9>のいずれかに記載の情報処理装置。
<11>
層に入力される層入力データのうちの2値を用いた2値演算を行い、前記2値演算の結果を、前記層から出力される層出力データとして出力する前記層である2値演算層を含むニューラルネットワークを生成する生成部を備える
情報処理装置。
<12>
前記生成部は、ユーザが選択する層で構成される前記ニューラルネットワークを生成する
<11>に記載の情報処理装置。
<13>
前記ニューラルネットワークを、グラフ構造で表示するユーザI/Fをさらに備える
<11>又は<12>に記載の情報処理装置。