เอกสารฉบับเต็มมีอยู่ที่นี่
แพ็คเกจนี้ให้การสนับสนุนสำหรับการคำนวณเวฟเล็ตแบบแยก 2D และการแปลงเวฟเล็ตแบบสองมิติแบบสองมิติการผกผันการผกผันและการไล่ระดับสีผ่านทั้งสองโดยใช้ pytorch
การใช้งานได้รับการออกแบบมาเพื่อใช้กับแบทช์ของภาพหลายช่องทาง เราใช้การใช้งาน Pytorch มาตรฐานของการมีรูปแบบข้อมูล 'NCHW'
นอกจากนี้เรายังได้เพิ่มเลเยอร์เพื่อทำ scatternet แบบ 2-D DTCWT สิ่งนี้คล้ายกับ scatternet ที่ใช้ Morlet ใน Kymatio แต่เร็วกว่าประมาณ 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 และทำ dwt กับ pywavelets เพื่อทำทั้งสองอย่างใน pytorch_wavelets โดยใช้ GTX1080 วิธี NumPy ทำงานบนเครื่อง 14 Core Xeon PHI โดยใช้ Python คู่ขนานของ Intel สำหรับ DTWCWT เราใช้ตัวกรอง Near_sym_a สำหรับสเกลแรกและตัวกรอง QSHIFT_A สำหรับเครื่องชั่งที่ตามมา สำหรับ DWT เราใช้ตัวกรอง DB4
สำหรับขนาดอินพุตคงที่ แต่เปลี่ยนจำนวนเครื่องชั่ง (จาก 1 ถึง 4) เรามีความเร็วต่อไปนี้ (เฉลี่ยมากกว่า 5 วิ่ง):

สำหรับขนาดอินพุตที่มีความสูงและความกว้าง 512 โดย 512 เรายังเปลี่ยนขนาดแบทช์สำหรับการแปลง 3 สเกล ความเร็วที่ได้คือ:

วิธีที่ง่ายที่สุดในการติดตั้ง pytorch_wavelets คือการโคลน repo และ pip ติดตั้ง รุ่นต่อมาจะเปิดตัวใน PYPI แต่เอกสารจำเป็นต้องอัปเดตก่อน:
$ git clone https://github.com/fbcotter/pytorch_wavelets $ cd pytorch_wavelets การติดตั้ง $ pip
(แม้ว่าคำสั่งการพัฒนาอาจมีประโยชน์มากขึ้นหากคุณตั้งใจจะทำการปรับเปลี่ยนที่สำคัญใด ๆ กับไลบรารี) มีการจัดเตรียมชุดทดสอบเพื่อให้คุณสามารถตรวจสอบรหัสทำงานบนระบบของคุณ:
$ pip install -r tests/rechents.txt การทดสอบ $ pytest/
สำหรับ DWT - โปรดทราบว่าเอาท์พุท HighPass มีมิติพิเศษซึ่งเราสแต็กค่าสัมประสิทธิ์ (LH, HL, HH) นอกจากนี้โปรดทราบว่าเอาต์พุต YH มีค่าสัมประสิทธิ์รายละเอียดที่ดีที่สุดก่อนและหยาบที่สุด (ตรงข้ามกับ pywavelets)
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 ได้ตรวจสอบให้แน่ใจว่าคุณได้เปิดใช้งาน pytorch กับ Cuda (การทดสอบจะตรวจสอบเพื่อดูว่า torch.cuda.is_available() ส่งคืนจริง)
PIP Install -r Tests/required.txt การทดสอบ pytest/
จากฐานของ repo
เป็นไปได้ที่จะผ่านการไล่ระดับสีผ่านการแปลงไปข้างหน้าและย้อนกลับ สิ่งที่คุณต้องทำคือตรวจสอบให้แน่ใจว่าอินพุตของแต่ละรายการมีแอตทริบิวต์ _grad ที่ต้องการตั้งค่าเป็นจริง
ขึ้นอยู่กับแพ็คการแปลงเวฟเล็ตที่ซับซ้อนแบบสองต้นสำหรับ Matlab โดย Nick Kingsbury, Cambridge University readme ดั้งเดิมสามารถพบได้ใน original_readme.txt ไฟล์นี้สรุปเงื่อนไขการใช้งานกล่องเครื่องมือ MATLAB ดั้งเดิม
ข้อมูลเพิ่มเติมเกี่ยวกับ DT CWT สามารถรับได้จากเอกสารที่ดาวน์โหลดได้จากเว็บไซต์ของฉัน (แสดงด้านล่าง) บทช่วยสอนที่ดีที่สุดคือในปี 1999 Royal Society Paper โดยเฉพาะอย่างยิ่งสิ่งนี้จะอธิบายการแปลงระหว่าง 'sub-number subimages' จริง 'และคู่ของ subimages ที่ซับซ้อน ตัวกรอง Q-shift มีการอธิบายในกระดาษ ICIP 2000 และในรายละเอียดเพิ่มเติมในบทความพฤษภาคม 2001 สำหรับวารสารเกี่ยวกับการวิเคราะห์ฮาร์มอนิกที่ใช้และการคำนวณ
รหัสนี้เป็นลิขสิทธิ์และให้บริการฟรีเพื่อวัตถุประสงค์ในการวิจัยเท่านั้น ในทางกลับกันสำหรับการจัดหารหัสสิ่งที่ฉันถามคือถ้าคุณใช้อัลกอริทึมคุณให้การอ้างอิงถึงงานนี้ในเอกสารใด ๆ ที่คุณเขียนและคุณแจ้งให้เราทราบหากคุณพบแอปพลิเคชันที่ดีสำหรับ DT CWT หากแอปพลิเคชันดีฉันจะสนใจในการทำงานร่วมกันมาก ฉันไม่ยอมรับความรับผิดที่เกิดขึ้นจากการใช้อัลกอริทึมเหล่านี้
Nick Kingsbury, Cambridge University, มิถุนายน 2003
Dr Ng Kingsbury, แผนกวิศวกรรม, มหาวิทยาลัยเคมบริดจ์, Trumpington St. , Cambridge CB2 1PZ, สหราชอาณาจักรหรือวิทยาลัย Trinity, Cambridge CB2 1TQ, สหราชอาณาจักร โทรศัพท์: (0 หรือ +44) 1223 338514 /332647; หน้าแรก: 1954 211152; แฟกซ์: 1223 338564 /332662; อีเมล: [email protected] หน้าแรกของเว็บ: http://www.eng.cam.ac.uk/~ngk/