> 백엔드 개발 > 파이썬 튜토리얼 > Numpy 슬라이스를 사용하여 여러 이미지에서 무작위 16x16 패치를 효율적으로 자르는 방법은 무엇입니까?

Numpy 슬라이스를 사용하여 여러 이미지에서 무작위 16x16 패치를 효율적으로 자르는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-03 00:39:29
원래의
797명이 탐색했습니다.

How to Efficiently Crop Random 16x16 Patches from Multiple Images Using Numpy Slices?

여러 Numpy 슬라이스를 사용한 효율적인 무작위 이미지 자르기

컬러 이미지를 나타내는 4D Numpy 배열이 주어지면 목표는 무작위를 효율적으로 선택하는 것입니다. 각 이미지에 대해 고유한 자르기 위치를 사용하여 각 이미지를 16x16으로 자릅니다.

for 루프를 사용하는 순진한 접근 방식은 불필요한 메모리 오버헤드와 계산을 발생시킵니다. 이 프로세스를 최적화하기 위해 np.lib.stride_tricks.as_strided 메서드 또는 scikit-image의 view_as_windows 함수를 활용합니다.

view_as_windows 사용

view_as_windows 함수는 겹치는 창을 만듭니다. 입력 배열 내에서 추가 메모리 할당 없이 원본 데이터에 대한 뷰를 효과적으로 생성합니다. (1, 16, 16, 1)의 창 모양을 지정하여 단계 크기가 1인 두 번째 및 세 번째 축(너비 및 높이)을 따라 슬라이딩 창을 만듭니다.

특정 창을 인덱싱하려면 다음을 기준으로 합니다. 무작위 오프셋 쌍(x, y)에 대해 다음 단계를 사용합니다.

  1. 창 배열 생성: w = view_as_windows(X, (1,16,16,1))[... ,0,:,:,0]
  2. 임의의 오프셋을 기준으로 창 색인을 생성합니다. out = w[np.arange(X.shape[0]), x, y]
  3. 원하는 출력 형식과 일치하도록 결과를 전치합니다. out = out.transpose(0,2,3,1)

이 방법은 다양한 오프셋으로 여러 이미지를 자르는 효율적인 접근 방식을 제공하여 메모리 오버헤드를 줄입니다. 및 반복 접근 방식과 비교한 계산 시간.

위 내용은 Numpy 슬라이스를 사용하여 여러 이미지에서 무작위 16x16 패치를 효율적으로 자르는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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