전체 문서는 여기에서도 제공됩니다.
이 패키지는 2D 이산 웨이블릿 및 2D 듀얼 트리 복합 웨이블릿 변환, 반전 및 Pytorch를 통해 전달 된 기울기를 컴퓨팅하는 것을 지원합니다.
이 구현은 멀티 채널 이미지의 배치와 함께 사용하도록 설계되었습니다. 우리는 'NCHW'데이터 형식을 갖는 표준 Pytorch 구현을 사용합니다.
또한 2 차원 DTCWT 기반 Scatternet을 수행하기 위해 레이어를 추가했습니다. 이것은 Kymatio의 Morlet 기반 Scatternet과 유사하지만 약 10 배 빠릅니다.
이 repo를 사용하는 경우 박사 학위 논문, 3 장 : https://doi.org/10.17863/cam.53748을 인용하십시오.
import torch
from pytorch_wavelets import DWT1DForward , DWT1DInverse # or simply DWT1D, IDWT1D
dwt = DWT1DForward ( wave = 'db6' , J = 3 )
X = torch . randn ( 10 , 5 , 100 )
yl , yh = dwt ( X )
print ( yl . shape )
> >> torch . Size ([ 10 , 5 , 22 ])
print ( yh [ 0 ]. shape )
> >> torch . Size ([ 10 , 5 , 55 ])
print ( yh [ 1 ]. shape )
> >> torch . Size ([ 10 , 5 , 33 ])
print ( yh [ 2 ]. shape )
> >> torch . Size ([ 10 , 5 , 22 ])
idwt = DWT1DInverse ( wave = 'db6' )
x = idwt (( yl , yh )) import torch
from pytorch_wavelets import ScatLayer
scat = ScatLayer ()
X = torch . randn ( 10 , 5 , 64 , 64 )
# A first order scatternet with 6 orientations and one lowpass channels
# gives 7 times the input channel dimension
Z = scat ( X )
print ( Z . shape )
> >> torch . Size ([ 10 , 35 , 32 , 32 ])
# A second order scatternet with 6 orientations and one lowpass channels
# gives 7^2 times the input channel dimension
scat2 = torch . nn . Sequential ( ScatLayer (), ScatLayer ())
Z = scat2 ( X )
print ( Z . shape )
> >> torch . Size ([ 10 , 245 , 16 , 16 ])
# We also have a slightly more specialized, but slower, second order scatternet
from pytorch_wavelets import ScatLayerj2
scat2a = ScatLayerj2 ()
Z = scat2a ( X )
print ( Z . shape )
> >> torch . Size ([ 10 , 245 , 16 , 16 ])
# These all of course work with cuda
scat2a . cuda ()
Z = scat2a ( X . cuda ())버전 1.0.0은 이제 분리 가능한 DWT 계산 및 대칭, 제로 및주기와 같은 더 많은 패딩 체계에 대한 지원을 추가했습니다.
또한 웨이블릿 변환 클래스를 만들 때 더 이상 채널 수를 지정할 필요가 없습니다.
DTCWT를 Python 패키지와 DTCWT를 비교하고 GTX1080을 사용하여 Pytorch_wavelets에서 두 가지를 모두 수행하는 Pywavelets와 DWT를 수행합니다. Numpy 방법은 Intel의 병렬 파이썬을 사용하여 14 코어 Xeon Phi 기계에서 실행되었습니다. DTWCWT의 경우 첫 번째 스케일에는 near_sym_a 필터를 사용하고 다음 스케일에는 Qshift_A 필터를 사용합니다. DWT의 경우 DB4 필터를 사용합니다.
고정 된 입력 크기의 경우, 스케일 수를 다양하게 (1에서 4까지) 다음 속도 (평균 5 개 이상의 실행) 를가집니다.

높이와 너비가 512 x 512 인 입력 크기의 경우 3 스케일 변환의 배치 크기도 변경됩니다. 결과 속도는 다음과 같습니다.

pytorch_wavelets 설치하는 가장 쉬운 방법은 Repo를 복제하고 PIP 설치하는 것입니다. 이후 버전은 PYPI에서 릴리스되지만 문서는 먼저 업데이트해야합니다.
$ git 클론 https://github.com/fbcotter/pytorch_wavelets $ cd pytorch_wavelets $ pip 설치.
(도서관에 대한 상당한 수정을 수행하려는 경우 개발 명령이 더 유용 할 수 있지만, 테스트 스위트가 제공되어 시스템에서 코드가 작동하는지 확인할 수 있습니다.
$ PIP 설치 -R 테스트/요구 사항 .txt $ pytest 테스트/
DWT의 경우 - 하이 패스 출력에는 추가 치수가 있으며 (LH, HL, HH) 계수를 쌓습니다. 또한 YH 출력은 가장 좋은 세부 계수를 먼저 가지고 있으며 가장 거친 (파이와 벨트와 반대).
import torch
from pytorch_wavelets import DWTForward , DWTInverse
xfm = DWTForward ( J = 3 , wave = 'db3' , mode = 'zero' )
X = torch . randn ( 10 , 5 , 64 , 64 )
Yl , Yh = xfm ( X )
print ( Yl . shape )
> >> torch . Size ([ 10 , 5 , 12 , 12 ])
print ( Yh [ 0 ]. shape )
> >> torch . Size ([ 10 , 5 , 3 , 34 , 34 ])
print ( Yh [ 1 ]. shape )
> >> torch . Size ([ 10 , 5 , 3 , 19 , 19 ])
print ( Yh [ 2 ]. shape )
> >> torch . Size ([ 10 , 5 , 3 , 12 , 12 ])
ifm = DWTInverse ( wave = 'db3' , mode = 'zero' )
Y = ifm (( Yl , Yh ))DTCWT의 경우 :
import torch
from pytorch_wavelets import DTCWTForward , DTCWTInverse
xfm = DTCWTForward ( J = 3 , biort = 'near_sym_b' , qshift = 'qshift_b' )
X = torch . randn ( 10 , 5 , 64 , 64 )
Yl , Yh = xfm ( X )
print ( Yl . shape )
> >> torch . Size ([ 10 , 5 , 16 , 16 ])
print ( Yh [ 0 ]. shape )
> >> torch . Size ([ 10 , 5 , 6 , 32 , 32 , 2 ])
print ( Yh [ 1 ]. shape )
> >> torch . Size ([ 10 , 5 , 6 , 16 , 16 , 2 ])
print ( Yh [ 2 ]. shape )
> >> torch . Size ([ 10 , 5 , 6 , 8 , 8 , 2 ])
ifm = DTCWTInverse ( biort = 'near_sym_b' , qshift = 'qshift_b' )
Y = ifm (( Yl , Yh ))일부 초기 노트 :
Pytorch 사용자에게는 놀라운 일이 아닙니다. DWT 및 DTCWT 변환 지원 지원 CUDA 통화 :
import torch
from pytorch_wavelets import DTCWTForward , DTCWTInverse
xfm = DTCWTForward ( J = 3 , biort = 'near_sym_b' , qshift = 'qshift_b' ). cuda ()
X = torch . randn ( 10 , 5 , 64 , 64 ). cuda ()
Yl , Yh = xfm ( X )
ifm = DTCWTInverse ( biort = 'near_sym_b' , qshift = 'qshift_b' ). cuda ()
Y = ifm (( Yl , Yh )) 자동화 된 테스트는 GPU 기능을 테스트 할 수 없지만 CPU 실행을 확인합니다. Repo가 GPU에서 작동하는지 여부를 테스트하려면 Repo를 다운로드하고 Cuda가 활성화 된 Pytorch가 있는지 확인할 수 있습니다 (테스트에서 torch.cuda.is_available() 이 trues trues를 반환하는지 확인하고 실행하십시오.
PIP 설치 -R 테스트/요구 사항 .txt Pytest 테스트/
레포의 기초에서.
전방 및 후진 변환을 통해 그라디언트를 전달할 수 있습니다. 각각의 입력에 required_grad 속성이 true로 설정되도록하기 만하면됩니다.
케임브리지 대학교 Nick Kingsbury의 Matlab의 듀얼 트리 복합 웨이블릿 변환 팩을 기반으로합니다. 원본 readme는 ordink_readme.txt에서 찾을 수 있습니다. 이 파일은 원래 MATLAB Toolbox의 사용 조건을 간략하게 설명합니다.
DT CWT에 대한 자세한 내용은 내 웹 사이트에서 다운로드 할 수있는 논문에서 얻을 수 있습니다 (아래 주어진). 최고의 튜토리얼은 1999 Royal Society Paper에 있습니다. 특히 이것은 '실제'쿼드 덤프 하위 이미지와 복잡한 하위 이미지 쌍 사이의 전환을 설명합니다. Q-Shift 필터는 ICIP 2000 논문에 설명되어 있으며 2001 년 5 월 논문에서 Applied and Computational Harmonic Analysis에 대한 저널에 대해 자세히 설명합니다.
이 코드는 저작권이며 연구 목적으로 만 무료로 제공됩니다. 코드를 공급하는 대가로, 내가 묻는 것은 알고리즘을 사용하는 경우, 귀하가 작성하는 모든 논문 에서이 작업에 대한 참조를 제공하고 DT CWT에 대한 좋은 응용 프로그램을 찾으면 알려주는 것입니다. 응용 프로그램이 좋으면 협업에 매우 관심이 있습니다. 나는 이러한 알고리즘을 사용하여 발생하는 책임을지지 않습니다.
2003 년 6 월 케임브리지 대학교 Nick Kingsbury.
NG Kingsbury 박사, 영국 케임브리지 대학교 공학부 전화 : (0 또는 +44) 1223 338514 / 332647; 홈 : 1954 211152; 팩스 : 1223 338564 / 332662; 이메일 : [email protected] 웹 홈 페이지 : http://www.eng.cam.ac.uk/~ngk/