web-dev-qa-db-ja.com

畳み込みニューラルネットワークでのランダムなトリミングと反転

畳み込みニューラルネットワーク(CNN)について読んだ多くの研究論文では、人々が画像から正方形の領域(224x224など)をランダムにトリミングしてから、ランダムに水平方向に反転していることがわかります。このランダムなトリミングと反転が行われるのはなぜですか?また、なぜ人々は常に正方形の領域をトリミングするのですか。 CNNは長方形の領域では機能しませんか?

17

これは、データ拡張と呼ばれます。トレーニングデータに変換を適用することで、合成データポイントを追加します。これにより、より多くのデータを収集して注釈を付けるコストをかけずに、モデルを追加のバリエーションにさらすことができます。これは、過剰適合を減らし、モデルの一般化能力を向上させる効果があります。

画像の背後にある反転の直感は、オブジェクトがその鏡像と同じように認識できる必要があるということです。水平フリッピングは、よく使用されるフリッピングのタイプであることに注意してください。垂直方向の反転は必ずしも意味があるとは限りませんが、これはデータによって異なります。

croppingの背後にある考え方は、CNNの決定における背景の寄与を減らすことです。これは、オブジェクトの場所を特定するためのラベルがある場合に役立ちます。これにより、周囲の領域を否定的な例として使用し、より優れた検出器を構築できます。ランダムなトリミングは、正則化として機能し、常に存在するとは限らない非常に明確な機能にすべてを集中させるのではなく、オブジェクトの一部の存在に基づいて分類を行うこともできます。

なぜ人々は常に正方形の領域をトリミングするのですか?

これはCNNの制限ではありません。これは、特定の実装の制限である可能性があります。または、正方形の入力を想定すると、実装の速度を最適化できるため、設計によるものです。私はこれをあまり読みません。

可変サイズの入力と固定入力のCNN:

これは正方形へのトリミングに固有のものではありませんが、より一般的には、CNNに入力する前に入力がサイズ変更/トリミング/ワープされることがある理由です。

覚えておくべきことは、CNNの設計には、可変サイズの入力をサポートするかどうかの決定が含まれるということです。畳み込み演算、プーリング、および非線形性は、どの入力次元でも機能します。ただし、画像分類を解決するためにCNNを使用すると、通常、ロジスティック回帰やMLPなどの完全に接続されたレイヤーが作成されます。完全に接続されたレイヤーは、CNNが固定サイズの出力ベクトルを生成する方法です。固定サイズの出力は、CNNを固定サイズの入力に制限できます。

可変サイズの入力を許可し、それでも固定サイズの出力を生成するための回避策は間違いなくあります。最も簡単なのは、畳み込みレイヤーを使用して、画像内の通常のパッチに対して分類を実行することです。このアイデアはしばらく前から出回っています。その背後にある意図は、画像内のオブジェクトの複数の出現を検出し、各出現を分​​類することでした。私が考えることができる最も初期の例は、1990年代のYann LeCunのグループによる 文字列内の数字の分類とローカライズを同時に行う の作業です。これは、完全に接続された層を持つCNNを完全な畳み込みネットワークに変えることと呼ばれます。 完全畳み込みネットワークの最新の例 は、セマンティックセグメンテーションを解決し、画像内の各ピクセルを分類するために適用されます。ここでは、入力の次元に一致する出力を生成する必要があります。別の解決策は、CNNの最後にグローバルプーリングを使用して、可変サイズの特徴マップを固定サイズの出力に変換することです。プーリングウィンドウのサイズは、最後のコンバージョンから計算されたフィーチャマップと同じに設定されます。層。

27
ypx

@ypxは、データ拡張が必要な​​理由についてすでに良い答えを示しています。人々が固定サイズの正方形の画像を入力として使用する理由について、より多くの情報を共有します。

なぜ固定サイズの入力画像なのですか?

畳み込みニューラルネットワークに関する基本的な知識がある場合は、畳み込み層、プーリング層、および非線形層の場合、入力画像のサイズが可変であることは問題ありません。ただし、ニューラルネットワークには通常、分類子として完全に接続された層があり、最後のconv層と最初の完全に接続された層の間の重みは固定されています。ネットワーク可変サイズの入力画像を指定すると、フィーチャマップのサイズと重みが一致しないため、問題が発生します。これが、固定サイズの入力画像が使用される理由の1つです。

もう1つの理由は、画像サイズを固定することにより、ニューラルネットワークのトレーニング時間を短縮できることです。これは、ほとんどの(すべてではないにしても)深層学習パッケージがテンソル形式(通常は形状(N、C、H、W))で画像のバッチを処理するように記述されているためです。Nはバッチサイズ、Cはチャネル番号、H、 Wは画像の幅と高さです)。入力画像のサイズが固定されていない場合、それらをバッチにパックすることはできません。ネットワークで可変サイズの入力画像を処理できる場合でも、一度に1つの画像を入力する必要があります。これは、バッチ処理に比べて遅くなります。

可変サイズの入力画像を使用できますか?

はい、完全に接続されたレイヤーに対して固定サイズの入力を生成できる限り、入力画像のサイズは重要ではありません。良い選択は、可変サイズの入力特徴マップから固定出力特徴マップを生成する適応プーリングです。現在、PyTorchは画像用に2つのアダプティブプーリングレイヤーを提供しています。つまり、 AdaptiveMaxPool2dAdaptiveAvgPool2d です。レイヤーを使用して、可変サイズの入力画像を受け入れることができるニューラルネットワークを構築できます。

2
jdhao