画像を分類するモデルをトレーニングしようとしています。私の問題は、サイズが異なることです。画像/モデルアーキテクチャをフォーマットするにはどうすればよいですか?
画像を分類するモデルをトレーニングしようとしています。私の問題は、サイズが異なることです。画像/モデルアーキテクチャをフォーマットするにはどうすればよいですか?
回答:
あなたはあなたが話しているアーキテクチャを言っていませんでした。画像を分類する必要があるとおっしゃっていたので、AlexNet、GoogLeNetなど、一部がたたみ込みで一部が完全に接続されたネットワークであると想定しています。一般に、質問に対する回答は、使用しているネットワークの種類によって異なります。
例えば、ネットワークが唯一の畳み込みユニットが含まれている場合-と言うことです、完全に接続された層を含んでいない-それができる入力画像のサイズに不変です。このようなネットワークは、入力画像を処理して、別の画像を返すことができます(「たたみ込み」)。もちろん、何らかの方法で損失を決定する必要があるため、出力が期待どおりであることを確認する必要があります。
ただし、完全に接続されたユニットを使用している場合、問題が発生します。ここでは、ネットワークで使用する必要がある学習された重みの数が固定されているため、さまざまな入力にさまざまな数の重みが必要になるため、それは不可能です。
それが問題である場合は、次のことを実行できます。
N
正しいサイズの異なる画像に分割されるようにします。ネットワークはこのようなパッドされた境界線を含む画像にバイアスされる可能性があるため(読み取り:可能性が高い)、パディングオプションはネットワークの予測に追加のエラーソースを導入する可能性があります。いくつかのアイデアが必要な場合は、TensorFlowのドキュメントの画像セクションをご覧くださいresize_image_with_crop_or_pad
。このような部分により、より大きな作業が不要になります。
スカッシュを気にしないでください。有名なInceptionネットワークの前処理パイプラインの一部を次に示します。
# This resizing operation may distort the images because the aspect
# ratio is not respected. We select a resize method in a round robin
# fashion based on the thread number.
# Note that ResizeMethod contains 4 enumerated resizing methods.
# We select only 1 case for fast_mode bilinear.
num_resize_cases = 1 if fast_mode else 4
distorted_image = apply_with_random_selector(
distorted_image,
lambda x, method: tf.image.resize_images(x, [height, width], method=method),
num_cases=num_resize_cases)
彼らはそれを完全に認識していて、とにかくそれをします。
行くためにどこまであなたが望むまたは必要に応じて、実際に紙があり、ここで呼ばれる視覚認識のためのディープコンボリューションネットワークにおける空間ピラミッドプーリング非常に特殊な方法でそれらを処理することにより、任意の大きさのハンドル入力という。
空間ピラミッドプーリングレイヤーを作成してみてください。次に、最後の畳み込み層の後に配置して、FC層が常に一定の次元ベクトルを入力として取得するようにします。トレーニング中に、1つのエポックの特定の画像サイズを使用して、データセット全体の画像をトレーニングします。次に、次のエポックのために、別の画像サイズに切り替えてトレーニングを続けます。