画像のサイズが異なる場合にトレーニング/予測用に画像データをフォーマットする方法


87

画像を分類するモデルをトレーニングしようとしています。私の問題は、サイズが異なることです。画像/モデルアーキテクチャをフォーマットするにはどうすればよいですか?


2
これまでに試したことと、うまくいかなかったことを示してください。
キースジョンハッチソン2017年

16
そして、そこにInception v4のコードがあります。その既製のコメントには同意しません。私たちが話しているネットの種類と同じように、もう少し多くの情報を入力するとよいでしょうが、反対票は正当化されません。それそこに本当の問題です。
サンサイド2017年

4
問題は、ImageNetがトレーニングに役立つように画像データをどのようにフォーマットするかです。
mskw 2017年

回答:


147

あなたはあなたが話しているアーキテクチャを言っていませんでした。画像を分類する必要があるとおっしゃっていたので、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)

彼らはそれを完全に認識していて、とにかくそれをします。

行くためにどこまであなたが望むまたは必要に応じて、実際に紙があり、ここで呼ばれる視覚認識のためのディープコンボリューションネットワークにおける空間ピラミッドプーリング非常に特殊な方法でそれらを処理することにより、任意の大きさのハンドル入力という。


11
オブジェクトの検出とインスタンスのセグメンテーションを処理している場合、このトピックははるかに複雑に見えます。画像サイズの変動が大きいデータセットがある場合、ハイパーパラメータでもあるアンカーボックスのサイズを調整する必要があるためです。
CMCDragonkai 2018年

アスペクト比は、円と楕円を区別するネットワークにとって非常に重要な役割を果たします。
HelloGoodbye 2018

1
別の一般的な観察は、バッチは必ずしも同じ寸法である必要はないということです。高密度のレイヤーが処理される限り、最初のバッチは4:3画像を処理し、2番目のバッチは16:9を処理します。
サンサイド

1
@Tobitor、常にネットワークの入力をできる限り実際の(テスト、または推論時間)データに近づけます。すべての画像が高さよりもはるかに広い場合は、このように画像を処理するようにネットワークをモデル化する必要もあります。とはいえ、「使用状況」データがどのように見えるかを明確に言えない場合は、トレーニング中にいくつかの犠牲を払わなければなりません。その場合、画像のサイズを1000x200から256x256に変更することは、通常は問題ありません(そのナンバープレートを60度の角度で見ているとしましょう。
日曜日の

2
@Tobitor画像が正方形である必要はまったくありません。推論中に実際の画像サイズがわからない場合、それはたまたま最も悪いトレードオフです。:^)サイズについては、小さいほど良いですが、画像は必要な最高の細部をキャプチャするのに十分な大きさである必要があります-一般的に言えば、人間の専門家として、あなたが画像、ネットワークもできなくなります。
日曜日の

11

空間ピラミッドプーリングレイヤーを作成してみてください。次に、最後の畳み込み層の後に配置して、FC層が常に一定の次元ベクトルを入力として取得するようにします。トレーニング中に、1つのエポックの特定の画像サイズを使用して、データセット全体の画像をトレーニングします。次に、次のエポックのために、別の画像サイズに切り替えてトレーニングを続けます。


通常のプーリングと比較して、「空間ピラミッドプーリング」とは何かについてもう少し詳しく説明していただけますか?
Matthieu

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