ディープラーニングで現在の画像平均ではなく、データセットの画像平均を減算して画像を正規化するのはなぜですか?


88

画像を正規化する方法にはいくつかのバリエーションがありますが、ほとんどは次の2つの方法を使用しているようです。

  1. すべての画像について計算されたチャネルごとの平均値を引きます(例: VGG_ILSVRC_16_layers
  2. すべての画像について計算されたピクセル/チャネルで減算します(例:CNN_SCaffeの参照ネットワークも参照)

私の考えでは、自然なアプローチで各画像を正規化します。昼光下で撮影された画像は、夜間の画像よりも多くのニューロンを発火させますが、通常、エッジなどに存在するより興味深い特徴に関心がある時間を通知する場合があります。

Pierre Sermanetは3.3.3で、画像ごとのローカルコントラスト正規化を参照していますが、これまでに見た例/チュートリアルではこれに遭遇していません。また、興味深いQuoraの質問Xiu-Shen Weiの投稿を見ましたが、上記の2つのアプローチをサポートしていないようです。

正確に何が欠けていますか?これは色の正規化の問題ですか、それとも多くの人がこのアプローチを使用する理由を実際に説明する論文がありますか?


答えはわかりませんが、それぞれの方法を試しましたか?パフォーマンスに違いはありますか?
user112758

@ user112758-それらの実装は少し苦痛です(特にピクセル単位)。私の経験では、画像ごとの正規化はうまくいきますが、私のデータはその代表ではありません。正規化を試してみますが、これらの奇妙な正規化手順の背後にある動機を聞いてみたいです。
マックスゴードン

OK、多分あなたはカフェGoogleグループカフェGitHubの問題でこれを尋ねることができます。このトピックに関してもっと専門家がいると思います。
user112758

回答:


58

データセットの平均値を差し引くと、データが「中央に配置」されます。さらに、各フィーチャ値をzスコアに正規化する場合は、そのフィーチャまたはピクセルのsttdevで除算することも理想的です。

両方のことを行う理由は、ネットワークをトレーニングする過程で、これらの初期入力を乗算(重み)して加算(バイアス)し、アクティベーションを発生させてから勾配で逆伝播するためです。モデルを訓練します。

このプロセスでは、各機能に対して同様の範囲を設定して、勾配が制御不能にならないようにします(グローバル学習レート乗数が1つだけ必要です)。

考えられるもう1つの方法は、ディープラーニングネットワークが伝統的に多くのパラメーターを共有していることです。同様の範囲の特徴値(つまり、データセット全体で平均を差し引く)で共有をスケーリングしない場合、入力はスケーリングされませんこれは非常に簡単に起こります。なぜなら、画像の重みの一部は非常にw大きく、別の部分は小さすぎるからです。

一部のCNNモデルでは、イメージごとのホワイトニングが使用されていることがわかりますが、これは思考の方向に沿ったものです。


4
答えてくれてありがとう。安定した勾配を得るために、データを中央に配置し、範囲が同じになるようにするという概念に精通しています。問題は、データセット全体でこれを行う必要がある理由と、これが画像ごとのホワイトニングとは対照的に役立つ理由の詳細です。答えを受け入れる前に、これにより学習が改善されることを何らかの形で示す簡単なリファレンスが欲しいです。バッチの正規化は非常に強力な手法であることは知っていますが、データセット全体の正規化とは関係ありません。
マックスゴードン

バッチの正規化が適切であれば、あなたはすでにそこにいます。バッチ正規化する唯一の理由は、メモリに完全なデータセットを収めることができない場合、またはトレーニングを配布している場合です(多くの場合、同じ問題)。それがバッチがある理由です。
-lollercoaster

バッチは確率的勾配降下の基礎でもあると思いました。すべてをメモリに収めることができたとしても、各エポックの後よりも頻繁にパラメーターを更新したいと思います。
マックスゴードン

3
彼らです。また、必要に応じて頻繁に更新することができます-分析の意味合いは同じであり、勾配降下についてはとても素晴らしく、スケーラブルです。確率的勾配降下法(入力順序のシャッフル+バッチ処理)を使用する理由は、勾配空間での山登りをスムーズにするためです。単一のポイントが与えられた場合、更新によってローカル最大値の方向にプッシュされるかどうかは実際にはわかりませんが、十分なポイントを選択すると、この可能性が高くなります(予想)。
-lollercoaster

2
これは、機能を同様の範囲に収めるのにどのように役立ちますか?2つの画像がある場合、1つは0から255の範囲で、もう1つはピクセル値で0から50の範囲で、たとえば平均50および標準偏差15です。 -3.3〜0。それらはまだ同じスケールではありません。
ダニエル

9

バッチ正規化の前に、チャネルごとの平均減算を使用して、各チャネル(R、G、B)のゼロ平均を中心にデータを集中させました。これは通常、勾配が各チャネルに対して均一に作用するため、ネットワークがより速く学習するのに役立ちます。バッチ正規化を使用する場合は、とにかくミニバッチごとに正規化するため、チャネルごとの平均減算前処理ステップは実際には必要ありません。


1
「バッチ正規化を使用する場合は、とにかくミニバッチごとに正規化するため、チャネルごとの平均減算前処理ステップは実際には必要ないと思われます。」ただし、バッチノルムとは、実際の入力画像ではなく、ネットワークのレイヤーの重みを正規化することです。これらは2つの異なるものです。
モニカヘドネック

4

イメージごとの正規化は一般的であり、現在Tensorflowに組み込まれている唯一の機能です(主に実装が非常に簡単なため)。あなたが述べた正確な理由(同じ画像の昼と夜)に使用されます。ただし、照明が制御されるより理想的なシナリオを想像すると、各画像間の相対的な差はアルゴリズムで非常に価値があり、画像ごとの正規化でそれを一掃することは望ましくありません(そして、トレーニングデータセット全体のコンテキストで正規化を行います)。


4

これは、データを使用する前のデータの前処理と呼ばれます。多くの方法で処理できますが、同じ関数X_preproc = f(X)で各データを処理する必要があるという1つの条件があり、このf(。)はデータ自体に依存しないため、現在の画像を使用する場合はこれを処理することを意味します現在の画像の場合、f(X)は実際にはf(X、image)になりますが、これは望ましくありません。

あなたが話していた画像のコントラストの正規化は、別の目的のためです。画像コントラストの正規化は機能に役立ちます。

ただし、上記のf(。)は、すべての機能を互いに数値的に等しく保つことにより、最適化に役立ちます(もちろん、ほぼ)

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