CNNで大きなサイズの画像を処理する方法は?


15

CNNで使用するには2400 x 2400のサイズの10Kイメージが必要であると仮定します。ここでの問題は、ダウンサンプリングの特権がない場合に、このような大きな画像サイズをどのように処理するかです。

システム要件は次のとおりです。

Ubuntu 16.04 64ビットRAM 16 GB GPU 8 GB HDD 500 GB

1)トレーニングされるこのような大きな画像を処理する技術はありますか?
2)どのバッチサイズを使用するのが合理的ですか?
3)実行する必要のある予防措置、またはハードウェアリソースの増減はありますか?

回答:


14

ここで問題は、ダウンサンプリングの権限がない場合に、このような大きな画像サイズをどのように処理するかです

ダウンサンプリングとは、入力をCNN 渡す前に縮小することを意味すると思います。畳み込み層では、大きなストライドを選択することにより、ネットワーク内の画像をダウンサンプリングできます。これにより、次の層のリソースを節約できます。実際、それがやらなければならないことです。そうしないと、モデルはGPUに適合しません。

1)トレーニングされるこのような大きな画像を処理する技術はありますか?

一般的に研究では、画像を適切なサイズに拡大します。ただし、それが選択肢にならない場合は、CNNを制限する必要があります。初期レイヤーでのダウンサンプリングに加えて、FCレイヤー(通常はほとんどのパラメーターを使用します)を削除して、畳み込みレイヤーを優先することをお勧めします。また、GPUに収まらないため、各エポックでデータをストリーミングする必要があります。

入力が非常に大きいため、これは初期レイヤーでの重い計算負荷を防ぐものではないことに注意してください。畳み込みは高価な操作であり、最初のレイヤーは各フォワードおよびバックワードパスでそれらの多くを実行ます。つまり、トレーニングは遅くなります。

2)どのバッチサイズを使用するのが合理的ですか?

別の問題があります。単一の画像の2400x2400x3x4取得(3チャネルとピクセルあたり4バイト)は〜70Mbなので、バッチサイズ10でさえ余裕はありません。より現実的には5になります。メモリの大部分はCNNパラメーターによって取得されます。この場合、32ビットではなく16ビットの値を使用してサイズを小さくするのが理にかなっていると思います。この方法でバッチを2倍にできるようになります。

3)実行する必要のある予防措置、またはハードウェアリソースの増減はありますか?

ボトルネックはGPUメモリです。別のGPUを購入できる場合は、それを入手して、ネットワークをそれらに分割します。他のすべては、GPUメモリと比較して重要ではありません。


1
ありがとうございました。この回答で提供されたいくつかの提案に既に従いました。いい答えです。
WaterRocket8236

5

通常、画像の場合、特徴セットはピクセル密度値であり、この場合、非常に大きな特徴セットになります。また、重要なデータが失われる可能性があるため(実際には失われるため)、画像のダウンサンプリングもお勧めしません。

[1]しかし、機能セットのサイズを小さくするのに役立つテクニックがいくつかあります。PCA(Principle Component Analysis)のようなアプローチは、重要な機能サブセットの選択に役立ちます。

詳細については、リンクhttp://spark.apache.org/docs/latest/ml-features.html#pcaを参照してください

[2]ニューラルネットワークのトレーニング中の計算コストを削減する以外に、各反復でトレーニングに必要なデータセットのサイズを削減する従来の勾配降下アプローチの代わりに、確率的勾配降下を使用できます。したがって、1回の反復で使用されるデータセットのサイズが小さくなるため、ネットワークのトレーニングに必要な時間が短縮されます。

使用する正確なバッチサイズは、トレーニングデータセットとテストデータセットの分布によって異なります。より一般的な使用法は70〜30です。上記の確率的アプローチを使用して必要な時間を削減できる場合。

確率的勾配降下の詳細http://scikit-learn.org/stable/modules/sgd.html

[3]ハードウェアはアップグレードが必要になりやすいようですが、必要に応じて、使用限度まで無料のアカウントサブスクリプションを取得できるAWSなどのクラウドソリューションをご覧ください。


答えてくれてありがとう。詳細情報が得られたら、答えを更新してください。
WaterRocket8236

Stochastic Gradient Descentのリンクに感謝し、AIにようこそ!
公爵

2

このような大きなデータはメモリにロードできません。できることを2つに分けましょう。

  1. すべての画像を小さなサイズに再スケーリングします。112x112ピクセルに再スケーリングできます。あなたの場合、正方形の画像を持っているので、トリミングする必要はありません。それでも、これらのすべてのイメージをゴールにRAMにロードすることはできません。

  2. 最適なオプションは、データをバッチで供給するジェネレーター関数を使用することです。Kerasで使用されているfit_generatorの使用を参照してください。モデルパラメーターが大きくなりすぎてGPUメモリに収まらない場合は、バッチ正規化を使用するか、残差モデルを使用してパラメーター数を減らすことを検討してください。


3
112x112ピクセルのサイズを選択する理由は何ですか?それは何の2の潜在能力ではなく2400の約数ではありません
アンディR

@AndiR。ここにあります。入力ディメンションに関しては、サイズを自由に選択できます。これは、ネットワーク内に次元の非互換性がある場合、ゼロパディングを使用して簡単に解決できるためです。したがって、入力のサイズに固定された方法論はありません。注意が必要なのは、ダウンサンプリングが多すぎると入力品質に影響しないことを確認することです。112x112の寸法を使用するこのペーパーをご覧ください。(cv-foundation.org/openaccess/content_iccv_2015/papers/...
rocksyne
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.