임의 이미지 자르기를 위해 여러 Numpy 슬라이스를 효율적으로 사용
소개:
머신 러닝 및 컴퓨터 비전 애플리케이션에서 이미지 자르기는 모델 훈련이나 추론 전에 이미지를 전처리하는 데 중요한 작업입니다. 자르기는 관련 관심 영역을 추출하고 대형 이미지 처리의 계산 복잡성을 줄이는 데 도움이 됩니다.
효율적인 자르기 접근 방식:
질문에 표시된 대로 루프 기반 자르기 방법은 다음과 같습니다. 대규모 데이터 세트에는 계산상 비효율적입니다. 이 문제를 해결하기 위해 numpy의 고급 인덱싱 및 스트라이드 기반 방법을 활용할 수 있습니다.
스트라이드 기반 방법 활용:
Numpy의 np.lib.stride_tricks.as_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 중국어 웹사이트의 기타 관련 기사를 참조하세요!