NumPy 슬라이싱을 사용하여 무작위 이미지 패치를 효율적으로 자르려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2024-11-03 05:12:30
원래의
978명이 탐색했습니다.

How can I efficiently crop random image patches using NumPy slicing?

임의 이미지 자르기를 위해 여러 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿