CUDA Programming Applications

کاربردهای برنامه نویسی کودا

CUDA Programming Applications

کاربردهای برنامه نویسی کودا

زبان برنامه نویسی پایتون



پایتون یک زبان برنامه نویسی تفسیر شده سطح بالا و عمومی است که توسط Guido Van Rossum اولین بار در سال 1991 منتشر شد، نام پایتون از روی نام بک فیلم کمدی برداشته شده است و این زبان ترکیبی است  از زبانهای سطح بالای جاوا و سی و سی پلاس پلاس و همچنین زبانهای تفسیریPerl ,Tel , Scheme از ویژگیهای پایتون می توان به

1- فراگیر بودن در هر پلتفرمی (linux, windows , ios)

2-syntax ساده

3-سبک و کم حجم بودن و مدیریت حافظه بصورت خودکار

4-سطح بالا بودن بدین معنی که کاربر نیازی به کار با رجیسترها و پشته همانند زبان سطح پایین اسمبلی ندارد.

5-برخورداری از کتابخانه های وسیع و قدرتمند

6- شی گرایی که مهمترین ویژگی محسوب می شود

7- متن باز بودن و در دسترس بودن

8- سرعت بالا در مقایسه با سایر برنامه های اسکریپتی

اشاره نمود.  ادامه مطلب ...

دستورات cudaThreadSynchronize و cudaDeviceSynchronize

تفاوت بین دستورات cudaThreadSynchronize وcudaDeviceSynchronize در چیست؟
بنظر می رسد بسیاری از برنامه های کاربردی از تابع cudaThreadSynchronize بسیار استفاده نموده انداما اسناد اخیر شرکت NVIDIA در این رابطه بیان نموده است که تابع cudaThreadSynchronize بعلت منعکس نکردن رفتار واقعی خود منسوخ شده است و بعلت تشابه زیاد کارآیی آن با کارآیی تابع cudaDeviceSynchronize از این تابع بجای آن استفاده می شودو وظیفه اصلی آن همگام سازی تردهای داخل GPU بوده و ربطی به CPU ندارد مکان قرار گیری این دستور ،بعد از فراخوانی آخرین کرنل می باشد. مانند شکل زیر


با استفاده از این دستور به استفاده بهینه تری از حافظه و همچنین کاهش مصرف زمان پردازش دست می یابیم،نتیجه 6 آزمونی که برای جمع دوبردار با 8192 عنصر اجرا شد با استفاده از این دستور و همچنین بدون استفاده از آن در جدول زیر آمده است.


شماره آزمونبا استفاده از دستورcudaDeviceSynchronizeبدون استفاده از دستور cudaDeviceSynchronize
1
2479028microsecond
2486615microsecond
2
2503691microsecond
2573641microsecond
3
2576774microsecond
2570786microsecond
4
2470012microsecond
2629837microsecond
5
2571920microsecond
2710080microsecond
6
2495909microsecond
2618598microsecond


SIFT

 SIFT

الگوریتم SIFT خلاصه عبارت Scale Invariant Feature Transform است که برای بیان ویژگی های محلی در تصویر کاربرد دارد که در سال 1999 توسط David Lowe پیشنهاد و در سال 2002 توسعه داده شد. بطور کلی ویژگی هایی که از تصویر استخراج می شود به دو دسته محلی و سراسری تقسیم می شود. ویژگیهای Global شامل ویژگیهای کلی هستند که با هم مقایسه می شوند که اگرتفاوتی مشاهده شد ، به سراغ ویژگی های Local که همان ویژگیهای جزئی هستند رفته می شود و باهم مقایسه می شوند که برای استخراج این ویژگیها بایستی یک سری نقاط کلیدی تعیین شود که برای هر نقطه یک شناسنامه و یا یک توصیف براساس پیکسلهای همجوار تشکیل می شود تا این نقاط از سایر نقاط دیگر مجزا شود که به آن اثر انگشت هم گفته می شود و منحصر بفرد است خاصیت این کار این است که اگر تصویراز زوایای مختلف و یا از ZOOM های مختلف گرفته شود آن نقطه تغییری نمی کند ولی بایستی این نکته را نیز مد نظر داشت که الگوریتم SIFT تطابق نقاط را شامل نمی شود و این عمل با یک الگوریتم دیگر انجام می شود




همانطور که در تصویر بالا مشاهده می کنید دو رادیو طوسی در ویژگی کلیشان تفاوتی دیده نمی شود سپس به مقایسه ویژگی های محلی پرداخته می شود که در قسمت وسط تفاوت مشاهده می شود






در دو عکس فوق به بررسی ویژگیهای شکل پرداخته می شود و نقاطی که تطابق بیشتری دارند بعنوان شی مورد نظر مشخص می شود


یکی از راههای استخراج ویژگی تفاضل گرادیان در مراتب مختلف است که در شکل زیر اورده شده است




و اما چالشها:

1-الگوریتم استخراج ویژگی قوی بایستی نسبت به چرخش یا Rotation مقاوم باشد 2- الگوریتم استخراج ویژگی قوی بایستی نسبت به تغییرات روشنایی مقاوم باشد 3- الگوریتم استخراج ویژگی قوی بایستی نسبت به تغییر مقیاس مقاوم باشد 4- مقاومت در برابر زاویه عکسبرداری نیز یکی دیگر از ویژگی های این الگوریتم است 5- الگوریتم تشخیص ویژگی باید نسبت به نویز هم مقاوم باشد

 

چون الگوریتم SIFT در برابر تمامی این چالشها مقاوم است از آن به عنوان یک الگوریتم قوی در استخراج ویژگی یاد می شود ، البته باید متذکر این مسئله نیز شد که این الگوریتم در برابر تغییرات روشنایی هنوز بصورت کامل مقاوم نیست.

 

کاربردها:

1-      تطبیق یک مجموعه تصویر (مانند تصاویر پانوراما)

2-      شناسایی اشیا (جستجوی یک شی در میان تصویری از اشیا مختلف و یافتن مکان آن شی)

3-      ساخت مدل سه بعدی از روی مجموع تصویر (جمع نمودن تصاویر از زوایای مختلف با استفاده از SIFT)

4-      ردیابی اشیاء در ویدئو(فریم به فریم)






توصیفگر HOG

روند کار Histogram Oriented Gradient بدین صورت‌ است که ابتدا در جهت محور xها وyها از تصویر مشتق گرفته می‌شود (که همان تفاضل دو پیکسل مجاور می باشد) و دو ماتریس از تصویر بدست می آید (شکل1)



همانطور که در شکل1 مشاهده می شود بافتهایی از تصویر در جهات محور x و y بدست می‌آید،سپس برای تمامی عکسهای پوشه این کار انجام می‌شود، بعد از آن ماتریس اندازه از رابطه


 بدست می‌آید(شکل2)




و همچنین ماتریس زوایای موجود در تصویر با فرمول angle=arctan(gy/gx) قابل محاسبه می باشد (شکل 3)



برای کم کردن حجم هیستوگرام زوایا، باقیمانده زوایای بیشتر از 180 درجه را بر 180 محاسبه و جایگزین زاویه اصلی می‌شود، بدین ترتیب برای تمامی تصاویر این کار انجام می شود، سپس با استفاده از رابطه فاصله اقلیدسی فاصله بین هیستوگرام‌های تصاویر محاسبه شده و آن فاصله ای که تا هیستوگرام زاویه تصویر اصلی صفر شد تصویر منطبق می‌باشد.(شکل 4)