Krizhevskyの'12 CNNは、最初のレイヤーで253,440個のニューロンをどのように取得しますか?


24

アレックスKrizhevskyら。深い畳み込みニューラルネットワークを使用したImagenet分類では、各層のニューロン数が列挙されます(下図を参照)。

ネットワークの入力は150,528次元で、ネットワークの残りの層のニューロンの数は253,440–186,624–64,896–64,896–43,264– 4096–4096–1000で与えられます。

CNN

3Dビュー

最初のレイヤー以降のすべてのレイヤーのニューロンの数は明らかです。ニューロンを計算する1つの簡単な方法は、そのレイヤーの3つの次元を単純に乗算することです(planes X width X height):

  • レイヤー2: 27x27x128 * 2 = 186,624
  • レイヤー3: 13x13x192 * 2 = 64,896

ただし、最初のレイヤーを見ると:

  • レイヤー1: 55x55x48 * 2 = 290400

これは論文で指定されているものではない ことに注意してください253,440

出力サイズの計算

畳み込みの出力テンソルを計算する他の方法は次のとおりです。

入力画像が3DテンソルのnInputPlane x height x width場合、出力画像のサイズは次のようnOutputPlane x owidth x oheightになります

owidth = (width - kW) / dW + 1

oheight = (height - kH) / dH + 1

Torch SpatialConvolution Documentationから)

入力画像は次のとおりです。

  • nInputPlane = 3
  • height = 224
  • width = 224

そして、畳み込み層は次のとおりです。

  • nOutputPlane = 96
  • kW = 11
  • kH = 11
  • dW = 4
  • dW = 4

(例:カーネルサイズ11、ストライド4

これらの番号を入力すると、次のようになります:

owidth = (224 - 11) / 4 + 1 = 54 oheight = (224 - 11) / 4 + 1 = 54

ですから、私たちは55x55紙に合わせるのに必要な寸法の不足です。それらはパディングである可能性があります(ただし、cuda-convnet2モデルはパディングを明示的に0に設定します)

54-sizeの次元を取ると、96x54x54 = 279,936ニューロンが得られます-まだ多すぎます。

だから私の質問はこれです:

最初の畳み込み層で253,440個のニューロンをどのように取得しますか?私は何が欠けていますか?


これを解決したことがありますか?計算に専念するために:owidthとoheightは実際には54.25です。私はこれを理解しようとしましたが、最初のステップとして、想定される253440ニューロンを96個のフィルターに分割しました。これにより、フィルターあたり2640個のニューロンが得られました。これは平方数ではありません。そこで、私たち二人ともここで誤解を持っているか、著者による間違いがあるかもしれません...あなたは彼らに連絡しましたか?
アンデラ

私と同じ、これは非常に混乱しています。ところで、入力は224x224x3ですか?227x227x3でなければなりません。サイズが11x11のカーネル畳み込みの中心にならない227x227があるかどうかを見てみましょう。したがって、カーネルの最初の中心はセル(6,6)であり、最初の行の中心カーネルの最後はcell(6x222)です。ストライド4を使用すると、行6のカーネルの中心が取得されます。列のセル:6,10,14、...、222、カーネルkの中心の簡単な定式化は列= 6+(k -1)* 4列222がk番目の中心=(222-6)/ 4 +1 = 55になるように

4
48 * 48 * 55 * 2 = 253440であるため、最初の層のニューロンの数を計算するときにタイプミスがあった可能性があることに注意してください(55の代わりに48を掛けます)。
tsiki


@Firebugこれは[references]タグの興味深い使い方です。参照を求める質問にのみ使用すると思いました。しかし、おそらく私は間違っていた。別の使い方をしていますか?
アメーバは

回答:


8

NNに関するスタンフォードのメモから:

実世界の例。クリジェフスキー等。2012年にImageNetチャレンジで優勝したアーキテクチャは、サイズ[227x227x3]の画像を受け入れました。最初の畳み込み層では、受容野サイズF = 11、ストライドS = 4、ゼロパディングなしP = 0のニューロンを使用しました。(227-11)/ 4 + 1 = 55であり、Convレイヤーの深さはK = 96であるため、Convレイヤーの出力ボリュームのサイズは[55x55x96]でした。このボリュームの55 * 55 * 96ニューロンのそれぞれは、入力ボリュームのサイズ[11x11x3]の領域に接続されていました。さらに、各深度列の96個のニューロンはすべて、入力の同じ[11x11x3]領域に接続されますが、もちろん重みは異なります。おもしろいことに、実際の論文を読むと、入力画像は224x224であると主張します。(224-11)/ 4 + 1は明らかに整数ではないため、間違いです。これはConvNetsの歴史の中で多くの人々を混乱させており、何が起こったのかほとんど知られていません。私自身の最良の推測は、アレックスは、彼が論文で言及していない3つの余分なピクセルのゼロパディングを使用したことです。

参照:http : //cs231n.github.io/convolutional-networks/

これらの注記は、スタンフォードCSクラスCS231n:視覚認識のための畳み込みニューラルネットワークに付属しています。課題に関するジャスティンジョンソンへの連絡に関する質問/懸念/バグレポート、またはコースノートに関するAndrej Karpathyへの連絡


それらのメモの作者に名前を付けることで信用を与えることは可能ですか?
シルバーフィッシュ

著者は、はっきりと自己ノートで参照されている参照cs231n.github.io
ベーコン

2
リンクをたどると明確に参照されますが、引用もここに表示されるため、ここにもクレジットが表示されます。それは部分的には礼儀ですが、リンクが機能しなくなる可能性があるためです(たとえば、素材が削除されたり、ペイウォールされたり、新しいアドレスに移動されたりした場合)。残念ながら、このサイトの「リンクの腐敗」には深刻な問題があります。統計的な質問に対する質の高い回答の長期的なリポジトリとして機能するつもりですが、古い回答の多くは機能しなくなったリンクによって廃止されました。そのため、可能な限り自己完結型の回答を作成する方が一般的に安全です。
シルバーフィッシュ

0

この論文は本当に紛らわしい。まず、画像の入力サイズが正しくありません。224x224では55の出力は得られません。これらのニューロンは1つにグループ化されたピクセルとまったく同じであるため、出力はランダム値(ニューロン値)の2D画像です。したがって、基本的にニューロンの数= widthxheightxdepthで、これを解明する秘密はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.