深層学習 (3D CNN) を使用して脳疾患の分類を実行しようとしています。現在、入力サイズは 96*96*96 に設定されています。これは、元のスキャンのサイズが 256*256*256 であるためです。最初に 192*192*192 にサイズ変更して背景を削除し、次に 2 分の 1 にダウンサンプリングしました。
ただし、私のデータセットには 825 人の被験者しか含まれていません。データセットを十分なサイズに拡張したいのですが、それは私を大いに悩ませました。
まず、96^3 は入力用の 884k ボクセルになります。私の過去の経験から、トレーニング サンプルの数は、入力ユニットの数よりもはるかに多くする必要があります。私の最初の質問は次のとおりです:トレーニング データが入力単位よりも多くなければならない(この場合は 884k よりも多い)ことについて、私は正しいですか?
第二に、データ拡張を実行するために推奨される手法は何ですか? ここまで10度間隔で3軸回転させてみました。しかし、それはデータ サイズを 100 倍にするだけです。
第 3 に、モデルをトレーニングするときに、入力データをリストに追加し、sklearn の train-test-split 関数を使用してそれらを分割していました。別の方法は、keras の ImageDataGenerator.flow_from_directory を使用することです。しかし、今私は 3D データを扱っており、何千もの 3D 配列をまとめてロードする余裕のあるメモリはありません。また、ImageDataGenerator は nifti ファイル形式をサポートしていません。記憶を使い果たすことなく、すべての 3 次元配列をトレーニング用に準備する方法はありますか? (ImageDataGenerator のようなものを想像します。もちろん、これは、データ ジェネレーターが一度に 1 つのバッチでモデルにデータを送信するという私の理解の下にあります。間違っている場合は修正してください)
1 に答える
0
私は MRI の dataug でまったく同じ問題に直面しているので、それについては助けられず、むしろ答えを見つけたいと思っています。ただし、ジェネレーターについては、トレーニングの前にデータセットを準備し、別のスクリプトですべての変換 (サイズ変更、3D 配列の準備、トレーニング/テストの分割など) を行い、すべてを 3 つの大きな配列 (トレーニング) に入れます。 、検証およびテスト)。Numpy save functionを使用してこの配列を保存します。各配列を小さな配列に分割することもできます。それでも RAM に収まらない場合は、 Keras Sequenceのサブクラスを作成できます。
于 2020-04-07T08:55:56.000 に答える