الوثائق الكاملة متاحة أيضا هنا.
توفر هذه الحزمة دعمًا لحساب المويجات المنفصلة ثنائية الأبعاد وتحويلات المويجات المزدوجة ثنائية الشجرة ثنائية الأبعاد ، وانعكاساتها ، وتمرير التدرجات من خلال كلاهما باستخدام Pytorch.
تم تصميم التنفيذ لاستخدامه مع دفعات من الصور متعددة القنوات. نستخدم تنفيذ Pytorch القياسي لتنسيق بيانات "NCHW".
لقد أضفنا أيضًا طبقات للقيام بالخلبة المستندة إلى DTCWT ثنائية الأبعاد. هذا مشابه لخطوطة Morlet القائمة على Kymatio ، ولكنها أسرع حوالي 10 مرات.
إذا كنت تستخدم هذا الريبو ، فيرجى الاستشهاد بأطروحة الدكتوراه ، الفصل 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 على جهاز Core Xeon Phi باستخدام Python المتوازي من Intel. بالنسبة إلى DTWCWT ، نستخدم مرشحات Lear_SYM_A للمقياس الأول ومرشحات QSHIFT_A للمقاييس اللاحقة. بالنسبة إلى DWT ، نستخدم مرشحات DB4.
بالنسبة لحجم إدخال ثابت ، ولكن يتغير عدد المقاييس (من 1 إلى 4) لدينا السرعات التالية (متوسط أكثر من 5 أشواط):

بالنسبة لحجم الإدخال مع الارتفاع والعرض 512 في 512 ، فإننا نختلف أيضًا حجم الدُفعة لتحويل مقياس 3. كانت السرعات الناتجة:

أسهل طريقة لتثبيت pytorch_wavelets هي استنساخ الريبو وتثبيته. سيتم إصدار الإصدارات اللاحقة على PYPI ولكن تحتاج المستندات إلى تحديثها أولاً:
$ git clone https://github.com/fbcotter/pytorch_wavelets $ cd pytorch_wavelets تثبيت $ pip.
(على الرغم من أن أمر التطوير قد يكون أكثر فائدة إذا كنت تنوي إجراء أي تعديل مهم للمكتبة.) يتم توفير مجموعة اختبار بحيث يمكنك التحقق من عمل الرمز على نظامك:
$ pip install -r اختبارات/متطلبات اختبارات $ 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 ، ولكن تحقق من تشغيل وحدة المعالجة المركزية. لاختبار ما إذا كان الريبو يعمل على وحدة معالجة الرسومات الخاصة بك ، يمكنك تنزيل الريبو ، والتأكد من أن لديك pytorch مع تمكين torch.cuda.is_available() (سيتم التحقق من الاختبارات لمعرفة ما إذا
PIP تثبيت -اختبارات/متطلبات اختبارات Pytest/
من قاعدة الريبو.
من الممكن تمرير التدرجات من خلال التحولات إلى الأمام والخلف. كل ما عليك فعله هو التأكد من أن المدخلات لكل منها تحتوي على سمة مطلوبة على True.
استنادًا إلى حزمة تحويل المويجات المزدوجة المجمع لـ Matlab بواسطة Nick Kingsbury ، جامعة كامبريدج. يمكن العثور على ReadMe الأصلي في Original_Readme.txt. يوضح هذا الملف شروط استخدام صندوق أدوات MATLAB الأصلي.
يمكن الحصول على مزيد من المعلومات حول DT CWT من الأوراق القابلة للتنزيل من موقع الويب الخاص بي (الوارد أدناه). أفضل تعليمي هو في ورقة المجتمع الملكي 1999. على وجه الخصوص ، هذا ما يفسر التحويل بين الأوساط الرباعية "الحقيقية" وأزواج من الأجزاء الفرعية المعقدة. تم شرح مرشحات Q-THIFT في ورقة ICIP 2000 وبموافقة مزيد من التفاصيل في ورقة مايو 2001 للمجلة على التحليل التوافقي التطبيقي والحساب.
هذا الرمز هو حقوق الطبع والنشر ويتم توفيره مجانًا لأغراض البحث فقط. في مقابل توفير الكود ، كل ما أطلبه هو أنه إذا كنت تستخدم الخوارزميات ، فسترجع إلى هذا العمل في أي أوراق تكتبها وتخبرني إذا وجدت أي تطبيقات جيدة لـ DT CWT. إذا كانت الطلبات جيدة ، فسأكون مهتمًا جدًا بالتعاون. لا أقبل أي مسؤولية تنشأ عن استخدام هذه الخوارزميات.
نيك كينجسبري ، جامعة كامبريدج ، يونيو 2003.
الدكتور نغ كينجسبري ، قسم الهندسة ، جامعة كامبريدج ، شارع ترامبنجتون ، كامبريدج CB2 1PZ ، المملكة المتحدة ، أو كلية ترينيتي ، كامبريدج CB2 1TQ ، المملكة المتحدة. الهاتف: (0 أو +44) 1223 338514 /332647 ؛ الصفحة الرئيسية: 1954 211152 ؛ الفاكس: 1223 338564 /332662 ؛ البريد الإلكتروني: [email protected] الصفحة الرئيسية الصفحة: http://www.eng.cam.ac.uk/~ngk/