ランダムな画像トリミングに複数の Numpy スライスを効率的に使用する
概要:
機械学習とコンピューター ビジョンアプリケーションでは、画像のトリミングは、モデルのトレーニングまたは推論の前に画像を前処理するための重要なタスクです。トリミングは、関連する関心領域を抽出し、大きな画像を処理する際の計算の複雑さを軽減するのに役立ちます。
効率的なトリミング アプローチ:
質問に示されているように、ループベースのトリミング方法は、大規模なデータセットの場合、計算効率が低くなります。これに対処するために、numpy の高度なインデックス作成と strided ベースのメソッドを利用できます。
Strided ベースのメソッドの活用:
Numpy の np.lib.stride_tricks.as_strided 関数を使用すると、strided を抽出できます。データをコピーせずに配列を表示します。この手法を scikit-image の view_as_windows 関数と組み合わせると、入力画像配列上にスライディング ウィンドウを作成できます。
スライディング ウィンドウの説明:
view_as_windows は、入力にビューの配列を作成します。配列。各ビューはスライディング ウィンドウを表します。 window_shape 引数は、スライディング ウィンドウの形状を指定します。スライドさせたくない軸に 1 を渡すことで、シングルトン ディメンションを作成できます。これに後でインデックスを付けて、必要なトリミングされたウィンドウを取得できます。
コードの実装:
次のコードは、スライディング ウィンドウを使用した効率的なトリミング アプローチを示しています。
<code class="python">from skimage.util.shape import view_as_windows # Get sliding windows w = view_as_windows(X, (1, 16, 16, 1))[..., 0, :, :, 0] # Index and retrieve specific windows out = w[np.arange(X.shape[0]), x, y] # Rearrange format out = out.transpose(0, 2, 3, 1)</code>
このコードは、画像ごとにランダムな (x_offset, y_offset) ペアを効率的に生成し、対応する 16x16 のトリミングを形状の配列 (4, 16, 16, 3) 不必要なメモリ オーバーヘッドを発生させることなく。
以上がNumPy スライスを使用してランダムな画像パッチを効率的にトリミングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。