

سامانه جامع پلاکخوان خودرو (کنترل تردد بهسان) سامانهای کاملا خودکار است که می تواند به تنهایی در امر ورود و خروج خودروها در جاده ها، در پارکینگ ها، تعمیرگاه ها و غیره نظارت و مدیریت نماید.
سامانه مدیریت باسکول
سامانه جامع مدیریت باسکول (بهسان توزین)، با بهرهگیری از تکنیکهای روز برنامهنویسی، قادر به انجام کلیهی امور باسکولها و همچنین تشخیص خودکار پلاک خودروهای توزین شده میباشد.
لحظه به لحظه کارشناسان ما پشتیبان شما هستند!
به خاطر دارید که Delegate نوع های داده ای بودند که اطلاعات مربوط به یک متد را در خود نگهداری می کردند؟ زمانی که یک delegate جدید تعریف می کنید، در حقیقت کلاس جدیدی ایجاد می شود که این کلاس، از کلاس MultiCastDelegate مشتق شده است. این موضوع باعث می شود که delegate تعریف شده شامل یکسری متدها باشد. قبلاً با delegate ها و شیوه فراخوانی آن ها آشنا شدیم. در این مطلب می خواهیم با شیوه فراخوانی متدها به صورت Asynchronous آشنا شویم. زمانی که از روی یک delegate شئ ای برای یک متد ایجاد می کنیم، این شئ شامل دو متد به نام های زیر است:
از این دو متد می توان برای فراخوانی delegate ها به صورت Asynchronous استفاده کرد. اگر به خاطر داشته باشید، delegate ها یک متد دیگر نیز داشتند به نام Invoke که به وسیله این متد می توانستیم delegate را به صورت عادی فراخوانی کنیم. تفاوت Invoke و BeginInvoke در این است که متد Invoke عملیات فراخوانی را در Thread جاری انجام می دهد، اما متد BeginInvoke یک Thread جدید ایجاد کرده و delegate را در آن Thread فراخوانی می کند. برای آشنایی بیشتر با یک مثال جلو می رویم، Delegate ای به صورت زیر تعریف می کنیم:
public delegate int MathOperation(int n1, int n2);
در ادامه کد زیر را نیز اضافه می کنیم:
static void Main(string[] args) { MathOperation operation = new MathOperation(Add); Console.WriteLine("Main thread ID:"+Thread.CurrentThread.ManagedThreadId); operation(2, 6); } public static int Add(int n1, int n2) { Console.WriteLine("Add thread ID: " + Thread.CurrentThread.ManagedThreadId); return n1 + n2; }
به خطوط ۴ و ۱۰ دقت کنید، در این خطوط از کلاس Thread استفاده کردیم، کلاس Thread یک Property دارد به نام CurrentThread که اطلاعات Thread جاری که متد در آن اجرا شده است را بر میگرداند، خاصیت CurrentThread از نوع کلاس Thread است که بوسیله خاصیت ManagedThreadId می توان شناسه Thread در حال اجرا را بدست آورد. بعد اجرای کد بالا با خروجی زیر مواجه می شویم:
Main thread ID:1 Add thread ID: 1
همانطور که مشاهده می کنید شناسه Thread بر هر دو متد Main و Add یکسان است، اما همانطور که گفتیم می خواهیم متد Add را در یک Thread جداگانه اجرا کنیم. در اینجا از متد BeginInvoke که برای Delegate تعریف شده استفاده می کنیم. برای MathOperation متد BeginInvoke به صورت زیر تعریف شده :
IAsyncResult BeginInvoke(int n1, int n2, AsyncCallBack callback, object state);
همانطور که مشاهده می کنید پارامترهای اول و دوم تعریف شده برای BeginInvoke مبتنی بر پارامترهایی است که برای Delegate تعریف کردیم. پارامترهای callback و state را هم بعداً بررسی می کنیم، در حال حاضر برای فراخوانی متد BeginInvoke برای این دو پارامتر مقدار null ارسال می کنیم.
همچنین متد EndInvoke نیز برای MathOperation به صورت زیر تعریف شده است:
int EndInvoke(IAsyncResult result);
همانطور که مشاهده می کنید مقدار بازگشتی EndInvoke از نوع int است که بر اساس نوع بازگشتی delegate تعریف شده مشخص می شود. همچنین پارامتر ورودی EndInvoke از نوع IAsyncResult است که در ادامه به بررسی این interface خواهیم پرداخت.
همانطور که مشاهده کردید، مقدار بازگشتی متد BeginInvoke از نوع IAsyncResult است. این interface در متدهای BeginInvoke و EndInvoke استفاده می شود، در متد BeginInvoke مقدار بازگشتی شئ ای از نوع IAsyncResult است و در متد EndInvoke پارامتر ورودی این متد از نوع IAsyncResult می باشد. تعریف IAsyncResult به صورت زیر است:
public interfae IAsyncResult { object AsyncState { get; set; } WaitHandle AsyncWaitHandle { get; set; } bool CompletedSynchronously { get; set; } bool IsCompleted { get; set; } }
در ساده ترین حالت ممکن شما نیازی به کار با اعضاء این اینترفیس ندارید، تنها کاری که باید بکنید نگهداری مقدار بازگردانده شده از متد BeginInvoke و ارسال آن به متد EndInvoke در زمان مناسب برای گرفتن خروجی است. برای آشنایی بیشتر با متدهای BeginInvoke و EndInvoke و همچنین استفاده از IAsyncResult با یک مثال ساده جلو می رویم. کدی که برای MathOperation در ابتدای این مطلب نوشتیم را به صورت زیر تغییر می دهیم:
MathOperation operation = new MathOperation(Add); Console.WriteLine("Main thread ID:"+Thread.CurrentThread.ManagedThreadId); var result = operation.BeginInvoke(2, 6, null, null); Console.WriteLine("Task in Main method."); var answer = operation.EndInvoke(result); Console.WriteLine("2 + 6 = {0}", answer);
بعد از اجرای کد بالا، خروجی به صورت زیر خواهد بود:
Main thread ID:1 Task in Main method. Add thread ID: 3 ۲ + ۶ = ۸
همانطور که مشاهده می کنید، شناسه Thread برای متد Add مقدار ۳ می باشد، به این معنی که متد Add در حال اجرا در یک Thread جداگانه از Thread اصلی برنامه یا Main Thread است. اما یک موضوع هنوز باقی مانده، Synchronization. به متد Main دقت کنید، زمانی که delegate با متد BeginInvoke فراخوانی می شود و بعد از آن پیغام Task in Main method را در خروجی چاپ می کنیم، در حقیقت Thread جاری برای لحظاتی متوقف شده و بعد بوسیله متد EndInvoke خروجی را دریافت می کنیم. اما کاری که ما می خواهیم انجام دهیم همزمانی اجرای متد WriteLine و متد Add است، برای اینکار باید از اعضاء IAsyncResult استفاده کنیم. در این اینترفیس خصوصیتی تعریف شده با نام IsCompleted که در صورت اتمام اجرای متد مقدار true را بر میگرداند. کدی که نوشتیم را به صورت زیر تغییر می دهیم:
static void Main(string[] args) { MathOperation operation = new MathOperation(Add); Console.WriteLine("Main thread ID:"+Thread.CurrentThread.ManagedThreadId); var result = operation.BeginInvoke(2, 6, null, null); while (!result.IsCompleted) { Console.WriteLine("Task in Main method..."); Thread.Sleep(1000); } Console.WriteLine("Task in Main method."); var answer = operation.EndInvoke(result); Console.WriteLine("2 + 6 = {0}", answer); } public static int Add(int n1, int n2) { Console.WriteLine("Add thread ID: " + Thread.CurrentThread.ManagedThreadId); Thread.Sleep(5000); return n1 + n2; }
به متد Thread.Sleep دقت کنید، این متد روند اجرای Thread را برای مدت زمان مشخص شده متوقف می کند. عدد وارد شده به میلی ثانیه است. در کد بالا متد Add به میزان ۵ ثانیه و متد با هر بار تکرار حلقه while متد متد Main به اندازه ۱ ثانیه متوقف می شوند. اجرای کد بالا خروجی زیر را تولید می کند:
Main thread ID:1 Task in Main method... Add thread ID: 3 Task in Main method... Task in Main method... Task in Main method... Task in Main method... ۲ + ۶ = ۸
با اینکه متد Add فراخوانی شده و Thread مرتبط با آن به مدت ۵ ثانیه در حالت Sleep قرار گرفته، اما متد Main در حال انجام کار خودش است و تا زمانی که متد Add کامل نشده و IsCompleted در IAsyncResult مقدار true بر نگرداند دستور WriteLine فراخوانی شده و پیام Task in Main method بر روی صفحه نمایش داده می شود. در این کد ما از خاصیت IsCompleted استفاده کردیم، یکی دیگر از راه ها برای پیاده سازی حالت گفته شده استفاده از متد WaitOn است که در کلاس WaitHandle پیاده سازی شده است. خاصیت AsyncWaitHandle در IAsyncResult شئ ای از نوع WaitHandle بر می گرداند. یکی از مزیت های استفاده از این متد قابلیت مشخص کردن time out برای block کردن thread جاری است، یعنی دیگر نیازی به استفاده از Thread.Sleep نخواهیم داشت:
MathOperation operation = new MathOperation(Add); Console.WriteLine("Main thread ID:"+Thread.CurrentThread.ManagedThreadId); var result = operation.BeginInvoke(2, 6, null, null); while (!result.AsyncWaitHandle.WaitOne(1000,true)) { Console.WriteLine("Task in Main method..."); } var answer = operation.EndInvoke(result); Console.WriteLine("2 + 6 = {0}", answer);
همانطور که مشاهده می کنید، برای متد WaitOn در حلقه while مقدار ۱۰۰۰ میلی ثانیه یا ۱ ثانیه را مشخص کردیم. هر زمان که روند اجرای کد به این دستور می رسد، thread جاری به اندازه ۱ ثانیه منتظر تکمیل اجرای متد Add شده و سپس وارد حلقه while می شود. در صورتی که کار متد Add به اتمام برسد، متد WaitOn مقدار true بر میگرداند. در مورد پارامتر دوم WaitOn که مقدار true به آن پاس داده شده در بخش های مرتبط با Synchronization Context صحبت خواهیم کرد.
تا اینجا گفتیم که چگونه می توان اجرای همزمان دو Thread را بوسیله Delegate ها پیاده سازی کرد، همچنین با نحوه کنترل دریافت خروجی از Thread های اجرا شده آشنا شدیم و گفتیم که بوسیله IAsyncResult می توان خروجی را دریافت کرد. اگر به خاطر داشته باشید زمان فراخوانی متد BeginInvoke برای دو پارامتر callback و state مقدار null ارسال کردیم. در این قسمت می خواهیم در مورد پارامتر callback صحبت کنیم، این پارامتر که یک Delegate از نوع AsyncCallBack قبول می کند، به ما این امکان را می دهد تا متدی را به متد BeginInvoke پاس دهیم. این delegate زمانی اجرا می شود که روند اجرای متدی که با BeginInvoke فراخوانی شده است به اتمام برسد. متدی که برای callback باید ارسال شود باید به مبتنی بر signature زیر باشد:
void CallBackMethod(IAsyncResult result) { // code for callback }
مثالی که تا این لحظه بر اساس آن جلو آمدیم را به صورت زیر تغییر می دهیم تا از قابلیت AsynCallBack استفاده کند:
private static bool isDone = false; static void Main(string[] args) { MathOperation operation = new MathOperation(Add); Console.WriteLine("Main thread ID:"+Thread.CurrentThread.ManagedThreadId); var result = operation.BeginInvoke(2, 6, new AsyncCallback(CallBack), null); while (!isDone) { Console.WriteLine("Task in Main method..."); Thread.Sleep(1000); } var answer = operation.EndInvoke(result); Console.WriteLine("2 + 6 = {0}", answer); } public static void CallBack(IAsyncResult result) { isDone = true; }
همانطور که در کد بالا مشاهده می کنید در ابتدا یک فیلد با نام isDone تعریف شده که از آن برای مشخص کردن وضعیت اجرای Thread استفاده می کنیم. زمانی که متد BeginInvoke را فراخوانی می کنیم به عنوان پارامتر سوم شئ ای از نوع AsyncCallback که متد CallBack برای آن مشخص شده ارسال می شود، این متد زمانی فراخوانی می شود که روند اجرای Thread مرتبط با متد Add به اتمام برسد، متد CallBack پس از اجرا مقدار isDone را برابر true قرار می دهد و به همین دلیل از حلقه while تعریف شده در متد Main خارج می شویم.
همانطور که در کد بالا مشاهده می کنید پارامتر ورودی CallBack از نوع IAsyncResult است، یعنی می توان عملیات گرفتن خروجی را در داخل CallBack نیز انجام داد. برای اینکار کد بالا را به صورت زیر تغییر می دهیم:
private static bool isDone = false; static void Main(string[] args) { MathOperation operation = new MathOperation(Add); Console.WriteLine("Main thread ID:"+Thread.CurrentThread.ManagedThreadId); operation.BeginInvoke(2, 6, new AsyncCallback(CallBack), null); while (!isDone) { Console.WriteLine("Task in Main method..."); Thread.Sleep(1000); } } public static void CallBack(IAsyncResult result) { AsyncResult asyncRes = (AsyncResult) result; var opDelegate = (MathOperation) asyncRes.AsyncDelegate; var answer = opDelegate.EndInvoke(result); Console.WriteLine("2 + 6 = {0}", answer); isDone = true; }
تغییراتی که در کد بالا دادیم به ترتیب:
در خاتمه این قسمت آموزشی با پارامتر چهارم متد BeginInvoke، یعنی state آشنا می شویم. بوسیله این پارامتر می توان یک مقدار یا شئ دلخواه را به Delegate ارسال و از آن بوسیله IAsyncResult استفاده کرد. برای مثال، می خواهیم زمانی که Delegate را فراخوانی می کنیم یک رشته را به delegate پاس داده و در متد CallBack آن را نمایش دهیم. کد نوشته شده را به صورت زیر تغییر می دهیم:
private static bool isDone = false; static void Main(string[] args) { MathOperation operation = new MathOperation(Add); Console.WriteLine("Main thread ID:"+Thread.CurrentThread.ManagedThreadId); operation.BeginInvoke(2, 6, new AsyncCallback(CallBack), "This is state passed to thread from Main Method!!"); while (!isDone) { Console.WriteLine("Task in Main method..."); Thread.Sleep(1000); } } public static void CallBack(IAsyncResult result) { Console.WriteLine("State: " + result.AsyncState); AsyncResult asyncRes = (AsyncResult) result; var opDelegate = (MathOperation) asyncRes.AsyncDelegate; var answer = opDelegate.EndInvoke(result); Console.WriteLine("2 + 6 = {0}", answer); isDone = true; }
در متد و زمان فراخوانی delegate بوسیله BeginInvoke به عنوان پارامتر چهارم یک رشته را به عنوان state ارسال کرده و در CallBack بوسیله خاصیت AsyncState توانستیم state ارسال شده را گرفته و در خروجی نمایش دهیم.
تا این قسمت شما یاد گرفتید که چگونه در زبان دات نت می توان با کمک Delegate ها اقدام به اجرای کدها در یک Thread جداگانه کرد. در قسمت های بعدی آموزش با نحوه استفاده از کلاس Thread که در فضای نام System.Threading قرار دارد بیشتر آشنا خواهیم شد.
داده ها در اعماق زندگی روزانه ما ریشه دوانده اند، از خرید روزانه تا انتخاب مدرسه و پزشک و مسافرت های ما امروزه داده محور شده اند. این امر نیاز به الگوریتم ها وروشهای هوشمند پردازش داده و یادگیری ماشین را صد چندان کرده است .در این آموزش، بیشتر بر مفاهیم اصلی و الگوریتم ها تاکید شده است و مفاهیم ریاضی و آماری را باید از سایر منابع فرابگیرید .
سه نوع اصلی الگوریتم های یادگیری ماشین از قرار زیرند :
نمونه ای از دسته بندی کلاسیک الگوریتم های یادگیری ماشین که بر اساس وجود یا عدم وجود عامل کنترل کننده (ناظر) و گسسته و پیوسته بودن متغیرها انجام شده است را می توانید در این شکل ببینید :
در این سری از مقالات به آموزش الگوریتم های زیر با نمونه کدهای لازم و مثالهای تشریحی، خواهیم پرداخت :
الگوریتمهای مختلفی در حوزه یادگیری ماشین و هوش مصنوعی در سالهای اخیر ایجاد یا بهبود یافته اند که برای هر فردی که قصد کار حرفه ای در این حوزه را دارد، آشنایی و تسلط بر آنها و مفاهیم پایه هر کدام و نیز استفاده از آنها در کاربردهای عملی، جزء ضروریات است.
در سال ۲۰۰۷ یک مقاله با عنوان ده الگوریتم برتر حوزه داده کاوی در دنیا توسط دانشگاه ورمونت مطرح شد که نسخه فارسی شده و حتی آماده انتشار به صورت کتاب آنرا هم در ایران داریم . مقاله فارسی را می توانید از این لینک دانلود نمایید.
۱۰ الگریتم برترین های داده کاوی
رمز : behsanandish.com
این ده الگوریتم عبارتند از :
در سال ۲۰۱۱، در سایت پرسش و پاسخ معروف Qura در پاسخ به سوالی که ده الگوریتم برتر داده کاوی را پرسیده بود، موارد زیر توسط کاربران برشمرده شده اند :
و در سال ۲۰۱۵ این لیست به صورت زیر در آمده است :
سایت DataFloq اخیراً یک طبقه بندی گرافیکی از الگوریتم های ضروری یادگیری ماشین ارائه کرده است که به صورت طبقه بندی شده ، این الگوریتم ها را فهرست کرده است :
این طبقه بندی را به صورت نقشه ذهن یا Mind Map هم می توانیم مشاهده کنیم :
میدانیم اگر دو وزیر در یک ستون قرار گیرند قطعاً به جواب نخواهیم رسید. بنابراین قرار دادن دو وزیر در یک ستون باعث غیرامیدبخش شدن جواب مسئله میشود.
برای نمایش مسئله در کروموزومها از این ویژگی استفاده کرده و به صورت زیر عمل میکنیم:
یک آرایه تک بعدی ایجاد میکنیم که به تعداد ستونهای صفحه شطرنج عنصر دارد. هر عنصر از این آرایه نشان میدهد که وزیر در کدام سطر از آن ستون قرار دارد. به عنوان مثال اگر مسئله ۸ وزیر را در نظر بگیریم، آرایه تک بعدی باید دارای ۸ عنصر باشد. فرض کنید آرایه دارای مقادیر زیر باشد:
۸ , ۷ , ۶ , ۵ , ۴ , ۳ , ۲ , ۱
مقدار ۸ در اولین عنصر آرایه گویای این مطلب است که در ستون اول صفحه شطرنج وزیری در سطر هشتم قرار دادهایم.
الگوریتمهای ژنتیک ابتدا جمعیت اولیهای تولید کرده و سپس سعی در بهبود بخشیدن این جمعیت دارند. برای مسئله n وزیر تولید جمعیت به صورت تصادفی خواهد بود. بدین صورت که وزیرها بهطور تصادفی روی صفحه شطرنج قرار میدهیم.
برای محاسبه میزان بهینگی جواب تعداد جفت وزیرهایی را که به هم گارد میدهند، محاسبه میکنیم. برای مسئله ۸ وزیر در بدترین حالت هر وزیر با همه وزیرهای دیگر گارد میدهد (فرض کنید همه وزیرها در یک سطر قرار گیرند). در این حالت حداکثر تعداد جفت وزیرهایی که به همگدیکر کارد میدهند ۲۸ جفت است:
۷ + ۶ + ۵ + ۴ +۳ + ۲ + ۱
در حالت کلی برای مسئله n وزیر حداکثر تعداد جفت وزیرهایی که به همدیگر گارد میدهند به صورت زیر محاسبه میشود:
۱+ ۲ +.. +(n-۱) = (n * (n-۱)) /۲
Fitness[i] =1 – (Guard(chromosome[i])) / MaxGuards
MaxGuards
Guard(chromosome[i])
راهکاری که برای حل یک مسئله با الگوریتم ژنتیک استفاده می شود تکامل می یابد. الگوریتم ژنتیک مثل هر الگوریتم بهینه سازی دیگر با تعریف متغیرهای بهینه سازی آغاز می شود و مانند الگوریتم های بهنیه سازی دیگر نیز خاتمه می یابد یعنی با تست همگرایی.
یک الگوریتم GA دارای پارامترهای زیر است:
الگوریتم GA به صورت زیر کار می کند:
در crossover یکنواخت بیتها بصورت یکنواخت از والدین انتخاب می شوند.
تابع fitness معیاری برای رتبه بندی فرضیه هاست که کمک میکند تا فرضیه های برتر برای نسل بعدی جمعیت انتخاب شوند. نحوه انتخاب این تابع بسته به کاربر مورد نظر دارد
در روش معرفی شده در الگوریتم ساده GA احتمال انتخاب یک فرضیه برای استفاده در جمعیت بعدی بستگی به نسبت fitness آن به fitness بقیه اعضا دارد. این روش Roulette Wheel selectionنامیده میشود.
روش جستجوی GA با روشهای دیگر مثل شبکه های عصبی تفاوت دارد:
در شبکه عصبی روش Gradient descent بصورت هموار از فرضیه ای به فرضیه مشابه دیگری حرکت میکند در حالیکه GA ممکن است بصورت ناگهانی فرضیه والد را با فرزندی جایگزین نماید که تفاوت اساسی با والد آن داشته باشد.از اینرو احتمال گیر افتادن GA در مینیمم محلی کاهش می یابد. با این وجود GA با مشکل دیگری روبروست که crowding نامیده میشود crowding پدیده ای است که در آن عضوی که سازگاری بسیاربیشتری از بقیه افراد جمعیت دارد بطور مرتب تولید نسل کرده و با تولید اعضای مشابه درصد عمده ای از جمعیت را اشغال میکند. راه حل رفع مشکل Crowdingاستفاده از ranking برای انتخاب نمونه ها است، با اختصاص رتبه به فرضیه ای که بسیار بهتر از بقیه عمل میکند.
بدین ترتیب دیدیم که مسیر میان اجزای الگوریتم ژنتیک به ترتیب زیر است:
ژن عددی از ۰ تا n-1 است در ۸ وزیر n برابر با ۸ است بنابراین ژن عددی از ۰ تا ۷ می شود و کروموزوم آرایه ای از ژن هاست. که می تواند پاسخ مسئله باشد.
جمعیت هر نسل می تواند تعداد کروموزوم ها را تعیین کند.
جمعیت اولیه از انتخاب رندومی از کروموزوم ها ایجاد می شود. تعداد نسل هایی که برای همگرایی مورد نیاز است به جمعیت تصادفی اولیه بستگی دارد.
برای پیدا کردن هزینه مربوط به هر کروموزوم یک تابع هزینه تعریف می شود. نتیجه تابع هزینه یک cost value است که در نهایت میانگین cost valueهای هر نسل به نتیجه مطلوب نزدیک می شود.
کروموزوم هایی که فیتنس بالاتری (هزینه پایین تر) دارند برای تولید نسل بعدی استفاده می شوند.
در فرایند cross over فرزندان توسط والدین تولید می شوند که ترکیب آنها شامل ترکیب ژن های آنهاست. اگر نسل جدید حاوی کروموزومی باشد که نزدیک یا برابر با نتایج مطلوب باشد آنگاه مسئله حل شده است. در غیر اینصورت فرایند قبلی در نسل جدید هم پیاده سازی می شود مانند فرایندی که برای والدین آنها اتفاق افتاد. تا زمانی که به راه حل مناسب برسیم این روال ادامه دارد.
در شطرنج وزیر می تواند هر طور که مایل بود حرکت کند افقی عمودی یا در قطر. صفحه شطرنج ۸ در ۸ است یعنی ۸ سطر و ۸ ستون دارد . در مسئله ۸ وریز استاندارد به دنبال این هستیم که چگونه ۸ وزیر در خانه های جدول به گونه ای قرار بگیرند که هیچ یک دیگری را تهدید نکنند. در اینجا با الگوریتم ژنتیک این کار را انجام می دهیم.
برای تولید فرزندان از والیدن نیاز به crossover داریم که تصمیم می گیرد از دو والدین کدام ژن باید انتخاب شود.
مسئله چند وزیر قسمت ۱
مسئله چند وزیر قسمت ۲
مسئله چند وزیر قسمت ۳
مسئله چند وزیر قسمت ۴
فایل PDF – در ۱۴ صفحه- نویسنده : Omar Sultan Al-Kadi
A GABOR FILTER TEXTURE ANALYSIS APPROACH FOR HISTOPATHOLOGICAL BRAIN TUMOUR SUBTYPE DISCRIMINATION
پسورد فایل : behsanandish.com
فایل PDF – در ۵ صفحه- نویسنده : Neelu Arora , Mrs. G. Sarvani
A Review Paper on Gabor Filter Algorithm & Its Applications
پسورد فایل : behsanandish.com
Abstract -The performance of a number of texture feature operators is evaluated. The features are all based on the local spectrum which is obtained by a bank of Gabor filters. The comparison is made using a quantitative method which is based on Fisher’s criterion. It is shown that, in general, the discrimination effectiveness of the features increases with the amount of post-Gabor processing.
فایل PDF – در ۶ صفحه- نویسنده : P. Kruizinga, N. Petkov and S.E. Grigorescu
Comparison of texture features based on Gabor filters
پسورد فایل : behsanandish.com
Abstract—Despite the considerable amount of research work on the application of Gabor filters in pattern classification, their design and selection have been mostly done on a trial and error basis. Existing techniques are either only suitable for a small number of filters or less problem-oriented. A systematic and general evolutionary Gabor filter optimization (EGFO) approach that yields a more optimal, problem-specific, set of filters is proposed in this study. The EGFO approach unifies filter design with filter selection by integrating Genetic Algorithms (GAs) with an incremental clustering approach. Specifically, filter design is performed using GAs, a global optimization approach that encodes the parameters of the Gabor filters in a chromosome and uses genetic operators to optimize them. Filter selection is performed by grouping together filters having similar characteristics (i.e., similar parameters) using incremental clustering in the parameter space. Each group of filters is represented by a single filter whose parameters correspond to the average parameters of the filters in the group. This step eliminates redundant filters, leading to a compact, optimized set of filters. The average filters are evaluated using an application-oriented fitness criterion based on Support Vector Machines (SVMs). To demonstrate the effectiveness of the proposed framework, we have considered the challenging problem of vehicle detection from gray-scale images. Our experimental results illustrate that the set of Gabor filters, specifically optimized for the problem of vehicle detection, yield better performance than using traditional filter banks.
فایل PDF – در ۸ صفحه- نویسنده : Zehang Sun, George Bebis and Ronald Miller
Evolutionary Gabor Filter Optimization with Application to Vehicle Detection
پسورد فایل : behsanandish.com
Abstract— In this paper, a novel method for expression- insensitive face recognition is proposed from only a 2D single image in a gallery including any facial expressions. A 3D Generic Elastic Model (3D GEM) is used to reconstruct a 3D model of each human face in the present database using only a single 2D frontal image with/without facial expressions. Then, the rigid parts of the face are extracted from both the texture and reconstructed depth based on 2D facial land-marks. Afterwards, the Gabor filter bank was applied to the extracted rigid-part of the face to extract the feature vectors from both texture and reconstructed depth images. Finally, by combining 2D and 3D feature vectors, the final feature vectors are generated and classified by the Support Vector Machine (SVM). Favorable outcomes were acquired to handle expression changes on the available image database based on the proposed method compared to several state-of-the-arts in expression-insensitive face recognition.
Keywords—Face recognition; 3D shape recovery; Gesture and Behavior Analysis.
فایل PDF – در ۶ صفحه- نویسنده : Ali Moeini, Hossein Moeini, Karim Faez
پسورد فایل : behsanandish.com
Content Based Image Retrieval (CBIR) is now a widely investigated issue that aims at allowing users of multimedia information systems to automatically retrieve images coherent with a sample image. A way to achieve this goal is the computation of image features such as the color, texture, shape, and position of objects within images, and the use of those features as query terms. We propose to use Gabor filtration properties in order to find such appropriate features. The article presents multichannel Gabor filtering and a hierarchical image representation. Then a salient (characteristic) point detection algorithm is presented so that texture parameters are computed only in a neighborhood of salient points. We use Gabor texture features as image content descriptors and efficiently emply them to retrieve images.
Keywords: Gabor filters, image retrieval, texture feature extraction, hierarchical representation
فایل PDF – در ۱۰ صفحه- نویسنده : TOMASZ ANDRYSIAK, MICHAŁ CHORA´ S
IMAGE RETRIEVAL BASED ON HIERARCHICAL GABOR FILTERS
پسورد فایل : behsanandish.com
Abstract. Aiming at the problem of multi-category iris recognition, there proposes a method of iris recognition algorithm based on adaptive Gabor filter. Use DE-PSO to adaptive optimize the Gabor filter parameters. DE-PSO is composed of particle swarm optimization and differential evolution algorithm. Use 16 groups of 2D-Gabor filters with different frequencies and directions to process iris images. According to the direction and frequency of maximum response amplitude, transform iris features into 512-bit binary feature encoding. Calculate the Hamming distance of feature code and compare with the classification threshold, determine iris the type of iris. Experiment on a variety of iris databases with multiple Gabor filter algorithms, the results showed that this algorithm has higher recognition rate, the ROC curve is closer to the coordinate axis and the robustness is better, compare with other Gabor filter algorithm.
Keywords: Iris recognition Gabor filter Particle swarm optimization Differential evolutionFeature encodingHamming distance
فایل PDF – در ۸ صفحه- نویسنده : Shuai Liu, Yuanning Liu, Xiaodong Zhu, Guang Huo, Jingwei Cui, and Yihao Chen
Iris Recognition Based On Adaptive Gabor Filter
پسورد فایل : behsanandish.com
فایل PDF – در ۱۲ صفحه- نویسنده : Urszula Marmol
USE OF GABOR FILTERS FOR TEXTURE CLASSIFICATION OF AIRBORNE IMAGES AND LIDAR DATA
پسورد فایل : behsanandish.com
سید مجتبی بنائی ۱۳۹۴/۰۵/۱۶ مفاهیم پایه نظرات ۳۱,۲۲۰ مشاهده
یکی از الگوریتم ها و روشهای بسیار رایج در حوزه دسته بندی داده ها، الگوریتم SVM یا ماشین بردار پشتیبان است که در این مقاله سعی شده است به زبان ساده و به دور از پیچیدگیهای فنی توضیح داده شود.
فرض کنید مجموعه داده ای داریم که ۵۰٪ افراد آن مرد و ۵۰٪ افراد آن زن هستند. این مجموعه داده می تواند مشتریان یک فروشگاه آنلاین باشد. با داشتن یک زیرمجموعه از این داده ها که جنسیت افراد در آن مشخص شده است، می خواهیم قوانینی ایجاد کنیم که به کمک آنها جنسیت بقیه افراد مجموعه را بتوانیم با دقت بالایی تعیین کنیم. تشخیص جنسیت بازدیدکنندگان فروشگاه، باعث می شود بتوانیم تبلیغات جداگانه ای را برای زنان و مردان نمایش دهیم و سودآوری فروشگاه را بالا ببریم . این فرآیند را در علم تحلیل داده، دسته بندی می نامیم .
برای توضیح کامل مسأله، فرض کنید دو پارامتری که قرار است جنسیت را از روی آنها تعیین کنیم، قد و طول موی افراد است . نمودار پراکنش قد و طول افراد در زیر نمایش داده شده است که در آن جنسیت افراد با دو نماد مربع (مرد) و دایره (زن) به طور جداگانه نمایش داده شده است .
با نگاه به نمودار فوق، حقایق زیر به سادگی قابل مشاهده است :
اگر یک داده جدید با قد ۱۸۰cm و طول موی ۴cm به ما داده شود، بهترین حدس ما برای ماشینی این شخص، دسته مردان خواهد بود .
بردارهای پشتیبان به زبان ساده، مجموعه ای از نقاط در فضای n بعدی داده ها هستند که مرز دسته ها را مشخص می کنند و مرزبندی و دسته بندی داده ها براساس آنها انجام می شود و با جابجایی یکی از آنها، خروجی دسته بندی ممکن است تغییر کند . به عنوان مثال در شکل فوق ، بردار (۴۵,۱۵۰) عضوی از بردار پشتیبان و متعلق به یک زن است . در فضای دوبعدی ،بردارهای پشتیبان، یک خط، در فضای سه بعدی یک صفحه و در فضای n بعدی یک ابر صفحه را شکل خواهند داد.
در SVM فقط داده های قرار گرفته در بردارهای پشتیبان مبنای یادگیری ماشین و ساخت مدل قرار می گیرند و این الگوریتم به سایر نقاط داده حساس نیست و هدف آن هم یافتن بهترین مرز در بین داده هاست به گونه ای که بیشترین فاصله ممکن را از تمام دسته ها (بردارهای پشتیبان آنها) داشته باشد .
به ازای داده های موجود در مثال فوق، تعداد زیادی مرزبندی می توانیم داشته باشیم که سه تا از این مرزبندی ها در زیر نمایش داده شده است.
سوال اینجاست که بهترین مرزبندی در این مسأله کدام خط است ؟
یک راه ساده برای انجام اینکار و ساخت یک دسته بند بهینه ، محاسبه فاصله ی مرزهای به دست آمده با بردارهای پشتیبان هر دسته (مرزی ترین نقاط هر دسته یا کلاس) و در نهایت انتخاب مرزیست که از دسته های موجود، مجموعاً بیشترین فاصله را داشته باشد که در شکل فوق خط میانی ، تقریب خوبی از این مرز است که از هر دو دسته فاصله ی زیادی دارد. این عمل تعیین مرز و انتخاب خط بهینه (در حالت کلی ، ابر صفحه مرزی) به راحتی با انجام محاسبات ریاضی نه چندان پیچیده قابل پیاده سازی است .
اگر داده ها به صورت خطی قابل تفکیک باشند، الگوریتم فوق می تواند بهترین ماشین را برای تفکیک داده ها و تعیین دسته یک رکورد داده، ایجاد کند اما اگر داده ها به صورت خطی توزیع شده باشند (مانند شکل زیر )، SVM را چگونه تعیین کنیم ؟
در این حالت، ما نیاز داریم داده ها را به کمک یک تابع ریاضی (Kernel functions) به یک فضای دیگر ببریم (نگاشت کنیم ) که در آن فضا، داده ها تفکیک پذیر باشند و بتوان SVM آنها را به راحتی تعیین کرد. تعیین درست این تابع نگاشت در عملکرد ماشین بردار پشتیبان موثر است که در ادامه به صورت مختصر به آن اشاره شده است.
با فرض یافتن تابع تبدیل برای مثال فوق، فضای داده ما به این حالت تبدیل خواهد شد :
در این فضای تبدیل شده، یافتن یک SVM به راحتی امکان پذیر است .
همانطور که اشاره شد،ماشین بردار پشتیبان یا SVM داده ها را با توجه به دسته های از پیش تعیین شده آنها به یک فضای جدید می برد به گونه ای که داده ها به صورت خطی (یا ابر صفحه ) قابل تفکیک و دسته بندی باشند و سپس با یافتن خطوط پشتیبان (صفحات پشتیبان در فضای چند بعدی) ، سعی در یافتن معادله خطی دارد که بیشترین فاصله را بین دو دسته ایجاد می کند.
در شکل زیر داده ها در دو دوسته آبی و قرمز نمایش داده شده اند و خطوط نقطه چین ، بردار های پشتیبان متناظر با هر دسته را نمایش می دهند که با دایره های دوخط مشخص شده اند و خط سیاه ممتد نیز همان SVM است . بردار های پشتیبان هم هر کدام یک فرمول مشخصه دارند که خط مرزی هر دسته را توصیف می کند.
برای استفاده از ماشین بردار پشتیبان در پایتون، توصیه بنده استفاده از کتابخانه یادگیری ماشین پایتون به نام scikit–learn است که تمام کرنل ها و توابع نگاشت را به صورت آماده شده دارد. سه تا تابعSVC , NuSVC , LinearSVC وظیفه اصلی دسته بندی را برعهده دارند . (SVC = Support Vector Classifier) . نمونه ای از دسته بندی با این توابع را در زیر می توانید مشاهده کنید :
برای استفاده از SVM در مورد داده های واقعی ، چندین نکته را باید رعایت کنید تا نتایج قابل قبولی را بگیرید
با این وجود، SVM ها دارای یک شالوده نظری منسجم بوده و جواب های تولید شده توسط آنها ، سراسری و یکتا می باشد. امروزه ماشینهای بردار پشتیبان، به متداول ترین تکنیک های پیش بینی در داده کاوی تبدیل شده اند.
ماشینهای بردار پشتیبان، الگوریتم های بسیار قدرتمندی در دسته بندی و تفکیک داده ها هستند بخصوص زمانی که با سایر روشهای یادگیری ماشین مانند روش جنگل تصادفی تلفیق شوند. این روش برای جاهایی که با دقت بسیار بالا نیاز به ماشینی داده ها داریم، به شرط اینکه توابع نگاشت را به درستی انتخاب کنیم، بسیار خوب عمل می کند .
ساختار اصلی این نوشتار از روی یک مقاله سایت آنالیتیکزویدیا برداشته شده است و برای دو بخش پایانی مقاله هم از کتاب «داده کاوی پیشرفته : مفاهیم و الگوریتم ها» دکتر شهرابی استفاده شده است .
SVM یک مدل یادگیری نظارت شده است.
پس قبل از این که به سراغ آن برویم باید یک مجموعه داده(Dataset) که از قبل برچسبگذاری شده(Labeled) را داشته باشیم.
مثال: فرض کنیم من صاحب یک کسبوکار هستم و هر روز تعداد زیادی ایمیل از مشتریها دریافت میکنم. بعضی از این ایمیلها شکایتها و نارضایتیهایی هستند که من هرچه سریعتر باید به آنها پاسخ بدهم و به آنها رسیدگی کنم. در غیر این صورت کسبوکار من با ضرر روبرو خواهد شد.
من به دنبال راهی هستم که این ایمیلها را هرچه سریعتر تشخیص بدهم(پیدا کنم) و پاسخ آنها را زودتر از بقیه ارسال کنم.
رویکرد اول: من میتوانم برچسبهایی با عنوانهای: اورژانسی، شکایت و راهنمایی در جیمیل(GMail) خود ایجاد کنم.
اشکال این روش این است که من باید مدتی فکر کنم و همه کلمههای کلیدی(Keyword) بالغوه که مشتریهای عصبانی ممکن است در ایمیلهای خود استفاده کنند را پیدا کنم. طبیعی است که بعضی از آنها را هم از قلم انداخته شوند. با گذشت زمان هم لیست این کلمهها به احتمال زیاد شلوغ و مدیریت کردن آنها به کار مشکلی تبدیل میشود.
رویکرد دوم: من میتوانم از یک الگوریتم یادگیری ماشین نظارت شده استفاده کنم.
قدم اول: به تعدادی ایمیل نیاز دارم.(هرچه بیشتر بهتر)
قدم دوم: عنوان ایمیلهای قدم اول رو میخوانم و آنها را در یکی از دو گروه «شکایت است» و یا «شکایت نیست» طبقهبندی میکنم. اینجوری میتوانم ایمیلها را برچسب گذاری کنم.
قدم سوم: روی این مجموعه داده، مدلی را آموزش میدهم.
قدم چهارم: کیفیت یا صحت پیشبینی های مدل آموزش دادهشده را ارزیابی میکنم.(با استفاده از روش Cross Validation)
قدم پنجم: از این مدل برای پیشبینی این که ایمیلهای جدیدی که رسیدهاند، شکایت هستند یا نه، استفاده میکنم.
در این رویکرد اگر مدل را با تعداد ایمیلهای زیادی آموزش داده باشیم، مدل عملکرد خوبی را نشون میدهد. SVM فقط یکی از روشهایی هست که ما میتوانیم برای یادگرفتن از دادههای موجود و پیشبینی کردن، استفاده کنیم.
همچنین باید به این نکته هم توجه داشته باشیم که قدم دوم اهمیت زیادی دارد و دلیلش این است که اگر در شروع کار، ایمیلهای برچسبگذاری نشده را به SVM بدهیم، کار خاصی را نمیتواند انجام دهد.
در مثال قبل دیدیم که در قدم سوم یک الگوریتم یادگیری نظارت شده مثل SVM به کمک دادههایی که از قبل برچسبگذاری شدهاند آموزشداده شد. اما برای چه چیزی آموزش داده شد؟ برای این که چیزی را یاد بگیرد.
چه چیزی را یاد بگیرد؟
در مورد SVM، یک مدل خطیرا یاد میگیرد.
مدل خطی چیست؟ اگر بخواهیم به زبان ساده بیان کنیم یک خط است.(و در حالت پیچیدهتر یک ابر صفحه).
اگر دادههای شما خیلی ساده و دو بعدی باشند، در این صورت SVM خطی را یاد میگیرد که آن خط میتواند دادهها را به دو بخش تقسیم کند.
SVM قادر است که خطی را پیدا کند که دادهها را جدا میکند.
خب پس اگر SVM فقط یک خط است، پس چرا ما داریم راجع به مدل خطی صحبت میکنیم؟
برای این که ما همینطوری نمیتوانیم به یک خط چیزی را آموزش بدهیم.
در عوض:
SVM یکی از این الگوریتمها هست که میتواند این کار را انجام دهد.
در شروع این پست من نوشتم که SVM یک مدل یادگیری نظارت شده است، و الآن مینویسم که آن یک الگوریتم است. چه شده؟ از واژه الگوریتم معمولا آزادانه استفاده میشود. برای نمونه، ممکن است که شما جایی بخوانید یا بشنوید که SVM یک الگوریتم یادگیری نظارت شده است. اگر این نکته را در نظر بگیریم که الگوریتم مجموعهای از فعالیتها است که انجام میشوند تا به نتیجه مشخصی دست یابیم، میبینیم که استفاده از این واژه در اینجا صحیح نیست(منظور از واژه الگوریتم اینجا الگوریتمی است که برای آموزش از آن استفاده میکنیم). بهینهسازی متوالی کمینه(Sequential minimal optimization) پر استفاده ترین الگوریتم برای آموزش SVM است. با این حال میتوان از الگوریتمهای دیگری مثل کاهش مختصات(Coordinate descent) هم استفاده کرد. در کل بیشتر به جزییاتی مثل این علاقمند نیستند، در نتیجه ما هم برای سادهتر شدن فقط از واژه الگوریتم SVM استفاده میکنیم(بدون ذکر جزییات الگوریتم آموزشی که استفاده میکنیم).
بعضی وقتها میبینیم که مردم راجع به SVM و بعضی وقتها هم راجع به SVMها صحبت میکنند.
طبق معمول ویکیپدیا در روشن و شفاف کردن چیزها به ما کمک میکند:
در یادگیری ماشینی، ماشینهای بردار پشتیبان (SVMs) مدلهای یادگیری نظارت شده به همراه الگوریتمهای آموزش مربوطههستندکه در تحلیل دادههای استفاده شده در رگرسیون و طبقهبندی از آنها استفاده میشود.(ویکیپدیا)
پس حالا ما این را میدانیم که چندین مدل متعلق به خانواده SVM وجود دارند.
بر اساس ویکیپدیا SVMها همچنین میتوانند برای دو چیز استفاده شوند، طبقهبندی و رگرسیون.
پس گفتن ماشینهای بردار پشتیبان هم دیگه الآن منطقی به نظر میاد. با این وجود این پایان داستان نیست!
در سال ۱۹۵۷ یک مدل خطی ساده به نام پرسپترون توسط فردی به نام فرانک روزنبلت برای طبقهبندی اختراع شد(که در واقع اساس شبکههای عصبی سادهای به نام پرسپترون چند لایه است).
چند سال بعد، واپنیک و چروننکیس مدل دیگری به نام «طبقهبندی کننده حداکث حاشیه» پیشنهاد دادند و همانجا بود که SVM متولد شد.
در سال ۱۹۹۲ واپنیک و همکارانش ایدهای داشتند که یک چیزی به نام کلک کرنل(Kernel Trick) را به روش قبلی اضافه کنند تا به آنها اجازه دهد که حتی دادههایی که به صورت خطی تفکیکپذیر نیستند را هم طبقهبندی کنند.
سرانجام در سال ۱۹۹۵، کورتز و واپنیک، طبقهبندی کننده حاشیه نرم را معرفی کردند که به SVM اجازه میدهد تا بعضی از اشتباهات در طبقهبندی را هم بپذیرد.
پس وقتی که ما از طبقهبندی صحبت میکنیم، چهار ماشین بردار پشتیبان مختلف وجود دارد.
و البته آخرین روش معمولا بیشترین کاربرد را دارد. دلیل اصلی این که قهمیدن SVMها در نگاه اول کمی گیج کننده به نظر میرسد هم همین موضو ع است که آنها از چندین قطعه تسکیل شده اند که در طول زمان به آنها چیزهایی اضافه شده است.
به همین دلیل است که وقتی از یک زبان برنامهنویسی استفاده میکنید میپرسید از کدام کرنل باید استفاده کنیم(بخاطر کرنلهای مختلفی که وجود دارند) و یا کدام مقدار ابرپارامتر C را باید استفاده کنید(برای کنترل تاثیر حاشیه نرم).
در سال ۱۹۹۶، واپنیک و همکارانش، نسخهای از SVM را پیشنهاد دادند که به جای طبقهبندی، عمل رگرسیون را انجام میدهد. این مورد به Support Vector Regression یا SVR معروف است. همانند SVM در این مدل نیز از کلک کرنل و ابرپارامتر C استفاده میشود.
در آینده مقاله سادهای در مورد توضیح چگونگی استفاده از SVR در زبان R خواهم نوشت و آدرس آن را همینجا قرار خواهم داد.
اگر علاقمند هستید که راجع به SVR بیشتر بدانیند، میتوانید به این آموزش خوب که نوشته Smola and Schölkopft است، مراجعه کنید.
در صورتی که مایلید بیشتر راجع به تاریخچه بدانید، میتوانید به مقاله مرور همراه با جزییات از تاریخچه مراجعه کنید.
به دلیل این که SVMها در طبقهبندی خیلی موفق بودند، مردم شروع به فکر کردن راجع به این موضوع کردند که چطور میتوانند از همین منطق در انواع دیگر مسائل استفاده کنند یا این که چطور مشتقات آن را ایجاد کنند. در نتیجه چندین روش مختلف و جالب در خانواده SVM به وجود آمد.
دیدیم که سختی در درک کردن این که SVMها دقیقا چه چیزی هستند، امری طبیعی است. علتش هم این است که چندین SVM برای چندین منظور وجود دارند. مثل همیشه تاریخ به ما اجازه میدهد که دید بهتری راجع به چگونگی به وجود آمدن SVMهایی که امروزه وجود دارند، داشته باشیم.
امیدوارم این مقاله دید وسیعتری از چشمانداز SVM به شما داده باشد و کمک کرده باشد که بهتر این ماشینها را بشناسید و درک کنید.
اگه مایلید که بیشتر راجع به نحوه کار SVM در طبقهبندی بدانید، میتوانید به آموزشهای ریاضی مربوط به آن مراجعه کنید.
مشکل deepfake ما در مورد بدتر شدن است: مهندسان سامسونگ در حال حاضر سرهای سخنگوی واقع گرایانه ای را توسعه داده اند که می تواند از یک تصویر تولید شود، بنابراین AI حتی می تواند کلمات را در دهان مونا لیزا قرار دهد.
الگوریتم های جدید که توسط یک تیم از مرکز AI سامسونگ و موسسه علوم و فناوری Skolkovo توسعه یافته است، هر دو در مسکو به بهترین وجه با انواع تصاویر نمونه گرفته شده در زوایای مختلف کار می کنند، اما آنها می توانند تنها با یک تصویر برای کار کردن، حتی یک نقاشی، کاملا موثر باشند.
مدل جدید نه تنها می تواند از یک پایگاه داده اولیه کوچکتر از تصاویر استفاده کند، هم چنین می تواند طبق نظر محققان پشت آن، فیلم های کامپیوتری را در مدت کوتاه تری تولید کند.
و در حالی که همه انواع برنامه های جالب وجود دارد که از تکنولوژی می توان برای آن استفاده کرد – مانند قرار دادن یک نسخه فوق واقع گرایانه از خودتان در واقعیت مجازی – این نگرانی وجود دارد که فیلم های ویدئویی کاملاً تقلبی را می توان از یک تصویر کوچک تولید کرد.
محققان در مقاله خود نوشتند: “چنین توانایی دارای کاربردهای عملی برای تلوزیون است،، از جمله ویدئو کنفرانس و بازی های چند نفره، و همچنین صنعت جلوه های ویژه.”
سیستم با آموزش خود در مجموعه ای از ویژگی های چهره برجسته کار می کند که پس از آن می تواند دستکاری شود. بسیاری از آموزش ها بر روی یک پایگاه داده قابل دسترس عمومی از بیش از ۷۰۰۰ تصویر از افراد مشهور، به نام VoxCeleb، و همچنین تعداد زیادی از فیلم ها از صحبت کردن مردم با دوربین انجام شده است.
از آنجا که این رویکرد جدید کار گذشته را با آموزش دادن به شبکه عصبی در مورد چگونگی تبدیل ویژگی های چهره برجسته به فیلم های متحرک با نگاه واقع گرایانه، بیش از چندین بار، بهبود می دهد. سپس این دانش می تواند بر روی چند عکس (یا فقط یک عکس) از کسی که AI قبل از آن هرگز ندیده است، مستقر شود.
این سیستم از یک شبکه عصبی کانولوشن، یک نوع شبکه عصبی بر اساس فرآیندهای بیولوژیکی در قشر بینایی حیوان استفاده می کند. این منحصراً در پردازش پشته های تصاویر و شناخت آنچه در آنها متخصص است – “convolution” اساساً بخش هایی از تصاویر را شناسایی و استخراج می کند (آن همچنین برای نمونه، در جستجوهای تصویری در وب و تکنولوژی خودرو خود راننده استفاده می شود).
همانند سایر ابزارهای تولید چهره هوش مصنوعی گرا که ما شاهد آن هستیم، آخرین مرحله در این فرآیند برای “واقع گرایی کامل” مورد بررسی قرار می گیرد – از لحاظ فنی یک مدل مولد رقابتی. هر فریمهایی که بیش از حد عجیب و غریب و غیر طبیعی هستند، دوباره برش داده و ارائه میشوند، ویدئو نهایی با کیفیت بهتر را به نمایش میگذارند.
این تکنیک موفق به غلبه بر دو مشکل بزرگ در سرهای سخنگوی تولید شده مصنوعی شده است: پیچیدگی سرها (با دهان ها، مو، چشم ها و غیره) و توانایی ما در به راحتی کشف کردن یک سر جعلی (به عنوان مثال، چهره های شخصیتی در میان سخت ترین عناصر برای طراحان بازی ویدیویی برای درست کردن هستند).
سیستم و دیگران مانند آن، برای بهتر شدن محدود می شوند به طوریکه الگوریتم ها بهبود یابند و مدل های آموزشی موثرتر شوند – و این بدان معنی است که مجموعه ای کامل از سوالات در مورد اینکه آیا می توانید به آنچه که می بینید یا می شنوید اعتماد کنید، اگر در فرم دیجیتال باشد.
از طرف دیگر، ستاره های تلویزیون و فیلم مورد علاقه شما هرگز نباید رشد کنند و بمیرند – AI شبیه به این است که به زودی به اندازه کافی هوشمند خواهد بود تا نمایش های کاملا واقعی را فقط از چند عکس تولید کند و همچنین در زمان ذخیره.
سامانه جامع پلاکخوان خودرو (کنترل تردد بهسان) سامانهای کاملا خودکار است که می تواند به تنهایی در امر ورود و خروج خودروها در جاده ها، در پارکینگ ها، تعمیرگاه ها و غیره نظارت و مدیریت نماید.
سامانه جامع مدیریت باسکول (بهسان توزین)، با بهرهگیری از تکنیکهای روز برنامهنویسی، قادر به انجام کلیهی امور باسکولها و همچنین تشخیص خودکار پلاک خودروهای توزین شده میباشد.
شرکت بهسان اندیش موفق به تولید محصولات زیر با بهره گیری از قابلیت پلاک خوان گردیده است.
سامانه جامع پلاکخوان خودرو (کنترل تردد بهسان) سامانهای کاملا خودکار است که می تواند به تنهایی در امر ورود و خروج خودروها در جاده ها، در پارکینگ ها، تعمیرگاه ها و غیره نظارت و مدیریت نماید.
سامانه مدیریت باسکول
سامانه جامع مدیریت باسکول (بهسان توزین)، با بهرهگیری از تکنیکهای روز برنامهنویسی، قادر به انجام کلیهی امور باسکولها و همچنین تشخیص خودکار پلاک خودروهای توزین شده میباشد.
لحظه به لحظه کارشناسان ما پشتیبان شما هستند!
به خاطر دارید که Delegate نوع های داده ای بودند که اطلاعات مربوط به یک متد را در خود نگهداری می کردند؟ زمانی که یک delegate جدید تعریف می کنید، در حقیقت کلاس جدیدی ایجاد می شود که این کلاس، از کلاس MultiCastDelegate مشتق شده است. این موضوع باعث می شود که delegate تعریف شده شامل یکسری متدها باشد. قبلاً با delegate ها و شیوه فراخوانی آن ها آشنا شدیم. در این مطلب می خواهیم با شیوه فراخوانی متدها به صورت Asynchronous آشنا شویم. زمانی که از روی یک delegate شئ ای برای یک متد ایجاد می کنیم، این شئ شامل دو متد به نام های زیر است:
از این دو متد می توان برای فراخوانی delegate ها به صورت Asynchronous استفاده کرد. اگر به خاطر داشته باشید، delegate ها یک متد دیگر نیز داشتند به نام Invoke که به وسیله این متد می توانستیم delegate را به صورت عادی فراخوانی کنیم. تفاوت Invoke و BeginInvoke در این است که متد Invoke عملیات فراخوانی را در Thread جاری انجام می دهد، اما متد BeginInvoke یک Thread جدید ایجاد کرده و delegate را در آن Thread فراخوانی می کند. برای آشنایی بیشتر با یک مثال جلو می رویم، Delegate ای به صورت زیر تعریف می کنیم:
public delegate int MathOperation(int n1, int n2);
در ادامه کد زیر را نیز اضافه می کنیم:
static void Main(string[] args) { MathOperation operation = new MathOperation(Add); Console.WriteLine("Main thread ID:"+Thread.CurrentThread.ManagedThreadId); operation(2, 6); } public static int Add(int n1, int n2) { Console.WriteLine("Add thread ID: " + Thread.CurrentThread.ManagedThreadId); return n1 + n2; }
به خطوط ۴ و ۱۰ دقت کنید، در این خطوط از کلاس Thread استفاده کردیم، کلاس Thread یک Property دارد به نام CurrentThread که اطلاعات Thread جاری که متد در آن اجرا شده است را بر میگرداند، خاصیت CurrentThread از نوع کلاس Thread است که بوسیله خاصیت ManagedThreadId می توان شناسه Thread در حال اجرا را بدست آورد. بعد اجرای کد بالا با خروجی زیر مواجه می شویم:
Main thread ID:1 Add thread ID: 1
همانطور که مشاهده می کنید شناسه Thread بر هر دو متد Main و Add یکسان است، اما همانطور که گفتیم می خواهیم متد Add را در یک Thread جداگانه اجرا کنیم. در اینجا از متد BeginInvoke که برای Delegate تعریف شده استفاده می کنیم. برای MathOperation متد BeginInvoke به صورت زیر تعریف شده :
IAsyncResult BeginInvoke(int n1, int n2, AsyncCallBack callback, object state);
همانطور که مشاهده می کنید پارامترهای اول و دوم تعریف شده برای BeginInvoke مبتنی بر پارامترهایی است که برای Delegate تعریف کردیم. پارامترهای callback و state را هم بعداً بررسی می کنیم، در حال حاضر برای فراخوانی متد BeginInvoke برای این دو پارامتر مقدار null ارسال می کنیم.
همچنین متد EndInvoke نیز برای MathOperation به صورت زیر تعریف شده است:
int EndInvoke(IAsyncResult result);
همانطور که مشاهده می کنید مقدار بازگشتی EndInvoke از نوع int است که بر اساس نوع بازگشتی delegate تعریف شده مشخص می شود. همچنین پارامتر ورودی EndInvoke از نوع IAsyncResult است که در ادامه به بررسی این interface خواهیم پرداخت.
همانطور که مشاهده کردید، مقدار بازگشتی متد BeginInvoke از نوع IAsyncResult است. این interface در متدهای BeginInvoke و EndInvoke استفاده می شود، در متد BeginInvoke مقدار بازگشتی شئ ای از نوع IAsyncResult است و در متد EndInvoke پارامتر ورودی این متد از نوع IAsyncResult می باشد. تعریف IAsyncResult به صورت زیر است:
public interfae IAsyncResult { object AsyncState { get; set; } WaitHandle AsyncWaitHandle { get; set; } bool CompletedSynchronously { get; set; } bool IsCompleted { get; set; } }
در ساده ترین حالت ممکن شما نیازی به کار با اعضاء این اینترفیس ندارید، تنها کاری که باید بکنید نگهداری مقدار بازگردانده شده از متد BeginInvoke و ارسال آن به متد EndInvoke در زمان مناسب برای گرفتن خروجی است. برای آشنایی بیشتر با متدهای BeginInvoke و EndInvoke و همچنین استفاده از IAsyncResult با یک مثال ساده جلو می رویم. کدی که برای MathOperation در ابتدای این مطلب نوشتیم را به صورت زیر تغییر می دهیم:
MathOperation operation = new MathOperation(Add); Console.WriteLine("Main thread ID:"+Thread.CurrentThread.ManagedThreadId); var result = operation.BeginInvoke(2, 6, null, null); Console.WriteLine("Task in Main method."); var answer = operation.EndInvoke(result); Console.WriteLine("2 + 6 = {0}", answer);
بعد از اجرای کد بالا، خروجی به صورت زیر خواهد بود:
Main thread ID:1 Task in Main method. Add thread ID: 3 ۲ + ۶ = ۸
همانطور که مشاهده می کنید، شناسه Thread برای متد Add مقدار ۳ می باشد، به این معنی که متد Add در حال اجرا در یک Thread جداگانه از Thread اصلی برنامه یا Main Thread است. اما یک موضوع هنوز باقی مانده، Synchronization. به متد Main دقت کنید، زمانی که delegate با متد BeginInvoke فراخوانی می شود و بعد از آن پیغام Task in Main method را در خروجی چاپ می کنیم، در حقیقت Thread جاری برای لحظاتی متوقف شده و بعد بوسیله متد EndInvoke خروجی را دریافت می کنیم. اما کاری که ما می خواهیم انجام دهیم همزمانی اجرای متد WriteLine و متد Add است، برای اینکار باید از اعضاء IAsyncResult استفاده کنیم. در این اینترفیس خصوصیتی تعریف شده با نام IsCompleted که در صورت اتمام اجرای متد مقدار true را بر میگرداند. کدی که نوشتیم را به صورت زیر تغییر می دهیم:
static void Main(string[] args) { MathOperation operation = new MathOperation(Add); Console.WriteLine("Main thread ID:"+Thread.CurrentThread.ManagedThreadId); var result = operation.BeginInvoke(2, 6, null, null); while (!result.IsCompleted) { Console.WriteLine("Task in Main method..."); Thread.Sleep(1000); } Console.WriteLine("Task in Main method."); var answer = operation.EndInvoke(result); Console.WriteLine("2 + 6 = {0}", answer); } public static int Add(int n1, int n2) { Console.WriteLine("Add thread ID: " + Thread.CurrentThread.ManagedThreadId); Thread.Sleep(5000); return n1 + n2; }
به متد Thread.Sleep دقت کنید، این متد روند اجرای Thread را برای مدت زمان مشخص شده متوقف می کند. عدد وارد شده به میلی ثانیه است. در کد بالا متد Add به میزان ۵ ثانیه و متد با هر بار تکرار حلقه while متد متد Main به اندازه ۱ ثانیه متوقف می شوند. اجرای کد بالا خروجی زیر را تولید می کند:
Main thread ID:1 Task in Main method... Add thread ID: 3 Task in Main method... Task in Main method... Task in Main method... Task in Main method... ۲ + ۶ = ۸
با اینکه متد Add فراخوانی شده و Thread مرتبط با آن به مدت ۵ ثانیه در حالت Sleep قرار گرفته، اما متد Main در حال انجام کار خودش است و تا زمانی که متد Add کامل نشده و IsCompleted در IAsyncResult مقدار true بر نگرداند دستور WriteLine فراخوانی شده و پیام Task in Main method بر روی صفحه نمایش داده می شود. در این کد ما از خاصیت IsCompleted استفاده کردیم، یکی دیگر از راه ها برای پیاده سازی حالت گفته شده استفاده از متد WaitOn است که در کلاس WaitHandle پیاده سازی شده است. خاصیت AsyncWaitHandle در IAsyncResult شئ ای از نوع WaitHandle بر می گرداند. یکی از مزیت های استفاده از این متد قابلیت مشخص کردن time out برای block کردن thread جاری است، یعنی دیگر نیازی به استفاده از Thread.Sleep نخواهیم داشت:
MathOperation operation = new MathOperation(Add); Console.WriteLine("Main thread ID:"+Thread.CurrentThread.ManagedThreadId); var result = operation.BeginInvoke(2, 6, null, null); while (!result.AsyncWaitHandle.WaitOne(1000,true)) { Console.WriteLine("Task in Main method..."); } var answer = operation.EndInvoke(result); Console.WriteLine("2 + 6 = {0}", answer);
همانطور که مشاهده می کنید، برای متد WaitOn در حلقه while مقدار ۱۰۰۰ میلی ثانیه یا ۱ ثانیه را مشخص کردیم. هر زمان که روند اجرای کد به این دستور می رسد، thread جاری به اندازه ۱ ثانیه منتظر تکمیل اجرای متد Add شده و سپس وارد حلقه while می شود. در صورتی که کار متد Add به اتمام برسد، متد WaitOn مقدار true بر میگرداند. در مورد پارامتر دوم WaitOn که مقدار true به آن پاس داده شده در بخش های مرتبط با Synchronization Context صحبت خواهیم کرد.
تا اینجا گفتیم که چگونه می توان اجرای همزمان دو Thread را بوسیله Delegate ها پیاده سازی کرد، همچنین با نحوه کنترل دریافت خروجی از Thread های اجرا شده آشنا شدیم و گفتیم که بوسیله IAsyncResult می توان خروجی را دریافت کرد. اگر به خاطر داشته باشید زمان فراخوانی متد BeginInvoke برای دو پارامتر callback و state مقدار null ارسال کردیم. در این قسمت می خواهیم در مورد پارامتر callback صحبت کنیم، این پارامتر که یک Delegate از نوع AsyncCallBack قبول می کند، به ما این امکان را می دهد تا متدی را به متد BeginInvoke پاس دهیم. این delegate زمانی اجرا می شود که روند اجرای متدی که با BeginInvoke فراخوانی شده است به اتمام برسد. متدی که برای callback باید ارسال شود باید به مبتنی بر signature زیر باشد:
void CallBackMethod(IAsyncResult result) { // code for callback }
مثالی که تا این لحظه بر اساس آن جلو آمدیم را به صورت زیر تغییر می دهیم تا از قابلیت AsynCallBack استفاده کند:
private static bool isDone = false; static void Main(string[] args) { MathOperation operation = new MathOperation(Add); Console.WriteLine("Main thread ID:"+Thread.CurrentThread.ManagedThreadId); var result = operation.BeginInvoke(2, 6, new AsyncCallback(CallBack), null); while (!isDone) { Console.WriteLine("Task in Main method..."); Thread.Sleep(1000); } var answer = operation.EndInvoke(result); Console.WriteLine("2 + 6 = {0}", answer); } public static void CallBack(IAsyncResult result) { isDone = true; }
همانطور که در کد بالا مشاهده می کنید در ابتدا یک فیلد با نام isDone تعریف شده که از آن برای مشخص کردن وضعیت اجرای Thread استفاده می کنیم. زمانی که متد BeginInvoke را فراخوانی می کنیم به عنوان پارامتر سوم شئ ای از نوع AsyncCallback که متد CallBack برای آن مشخص شده ارسال می شود، این متد زمانی فراخوانی می شود که روند اجرای Thread مرتبط با متد Add به اتمام برسد، متد CallBack پس از اجرا مقدار isDone را برابر true قرار می دهد و به همین دلیل از حلقه while تعریف شده در متد Main خارج می شویم.
همانطور که در کد بالا مشاهده می کنید پارامتر ورودی CallBack از نوع IAsyncResult است، یعنی می توان عملیات گرفتن خروجی را در داخل CallBack نیز انجام داد. برای اینکار کد بالا را به صورت زیر تغییر می دهیم:
private static bool isDone = false; static void Main(string[] args) { MathOperation operation = new MathOperation(Add); Console.WriteLine("Main thread ID:"+Thread.CurrentThread.ManagedThreadId); operation.BeginInvoke(2, 6, new AsyncCallback(CallBack), null); while (!isDone) { Console.WriteLine("Task in Main method..."); Thread.Sleep(1000); } } public static void CallBack(IAsyncResult result) { AsyncResult asyncRes = (AsyncResult) result; var opDelegate = (MathOperation) asyncRes.AsyncDelegate; var answer = opDelegate.EndInvoke(result); Console.WriteLine("2 + 6 = {0}", answer); isDone = true; }
تغییراتی که در کد بالا دادیم به ترتیب:
در خاتمه این قسمت آموزشی با پارامتر چهارم متد BeginInvoke، یعنی state آشنا می شویم. بوسیله این پارامتر می توان یک مقدار یا شئ دلخواه را به Delegate ارسال و از آن بوسیله IAsyncResult استفاده کرد. برای مثال، می خواهیم زمانی که Delegate را فراخوانی می کنیم یک رشته را به delegate پاس داده و در متد CallBack آن را نمایش دهیم. کد نوشته شده را به صورت زیر تغییر می دهیم:
private static bool isDone = false; static void Main(string[] args) { MathOperation operation = new MathOperation(Add); Console.WriteLine("Main thread ID:"+Thread.CurrentThread.ManagedThreadId); operation.BeginInvoke(2, 6, new AsyncCallback(CallBack), "This is state passed to thread from Main Method!!"); while (!isDone) { Console.WriteLine("Task in Main method..."); Thread.Sleep(1000); } } public static void CallBack(IAsyncResult result) { Console.WriteLine("State: " + result.AsyncState); AsyncResult asyncRes = (AsyncResult) result; var opDelegate = (MathOperation) asyncRes.AsyncDelegate; var answer = opDelegate.EndInvoke(result); Console.WriteLine("2 + 6 = {0}", answer); isDone = true; }
در متد و زمان فراخوانی delegate بوسیله BeginInvoke به عنوان پارامتر چهارم یک رشته را به عنوان state ارسال کرده و در CallBack بوسیله خاصیت AsyncState توانستیم state ارسال شده را گرفته و در خروجی نمایش دهیم.
تا این قسمت شما یاد گرفتید که چگونه در زبان دات نت می توان با کمک Delegate ها اقدام به اجرای کدها در یک Thread جداگانه کرد. در قسمت های بعدی آموزش با نحوه استفاده از کلاس Thread که در فضای نام System.Threading قرار دارد بیشتر آشنا خواهیم شد.
داده ها در اعماق زندگی روزانه ما ریشه دوانده اند، از خرید روزانه تا انتخاب مدرسه و پزشک و مسافرت های ما امروزه داده محور شده اند. این امر نیاز به الگوریتم ها وروشهای هوشمند پردازش داده و یادگیری ماشین را صد چندان کرده است .در این آموزش، بیشتر بر مفاهیم اصلی و الگوریتم ها تاکید شده است و مفاهیم ریاضی و آماری را باید از سایر منابع فرابگیرید .
سه نوع اصلی الگوریتم های یادگیری ماشین از قرار زیرند :
نمونه ای از دسته بندی کلاسیک الگوریتم های یادگیری ماشین که بر اساس وجود یا عدم وجود عامل کنترل کننده (ناظر) و گسسته و پیوسته بودن متغیرها انجام شده است را می توانید در این شکل ببینید :
در این سری از مقالات به آموزش الگوریتم های زیر با نمونه کدهای لازم و مثالهای تشریحی، خواهیم پرداخت :
الگوریتمهای مختلفی در حوزه یادگیری ماشین و هوش مصنوعی در سالهای اخیر ایجاد یا بهبود یافته اند که برای هر فردی که قصد کار حرفه ای در این حوزه را دارد، آشنایی و تسلط بر آنها و مفاهیم پایه هر کدام و نیز استفاده از آنها در کاربردهای عملی، جزء ضروریات است.
در سال ۲۰۰۷ یک مقاله با عنوان ده الگوریتم برتر حوزه داده کاوی در دنیا توسط دانشگاه ورمونت مطرح شد که نسخه فارسی شده و حتی آماده انتشار به صورت کتاب آنرا هم در ایران داریم . مقاله فارسی را می توانید از این لینک دانلود نمایید.
۱۰ الگریتم برترین های داده کاوی
رمز : behsanandish.com
این ده الگوریتم عبارتند از :
در سال ۲۰۱۱، در سایت پرسش و پاسخ معروف Qura در پاسخ به سوالی که ده الگوریتم برتر داده کاوی را پرسیده بود، موارد زیر توسط کاربران برشمرده شده اند :
و در سال ۲۰۱۵ این لیست به صورت زیر در آمده است :
سایت DataFloq اخیراً یک طبقه بندی گرافیکی از الگوریتم های ضروری یادگیری ماشین ارائه کرده است که به صورت طبقه بندی شده ، این الگوریتم ها را فهرست کرده است :
این طبقه بندی را به صورت نقشه ذهن یا Mind Map هم می توانیم مشاهده کنیم :
میدانیم اگر دو وزیر در یک ستون قرار گیرند قطعاً به جواب نخواهیم رسید. بنابراین قرار دادن دو وزیر در یک ستون باعث غیرامیدبخش شدن جواب مسئله میشود.
برای نمایش مسئله در کروموزومها از این ویژگی استفاده کرده و به صورت زیر عمل میکنیم:
یک آرایه تک بعدی ایجاد میکنیم که به تعداد ستونهای صفحه شطرنج عنصر دارد. هر عنصر از این آرایه نشان میدهد که وزیر در کدام سطر از آن ستون قرار دارد. به عنوان مثال اگر مسئله ۸ وزیر را در نظر بگیریم، آرایه تک بعدی باید دارای ۸ عنصر باشد. فرض کنید آرایه دارای مقادیر زیر باشد:
۸ , ۷ , ۶ , ۵ , ۴ , ۳ , ۲ , ۱
مقدار ۸ در اولین عنصر آرایه گویای این مطلب است که در ستون اول صفحه شطرنج وزیری در سطر هشتم قرار دادهایم.
الگوریتمهای ژنتیک ابتدا جمعیت اولیهای تولید کرده و سپس سعی در بهبود بخشیدن این جمعیت دارند. برای مسئله n وزیر تولید جمعیت به صورت تصادفی خواهد بود. بدین صورت که وزیرها بهطور تصادفی روی صفحه شطرنج قرار میدهیم.
برای محاسبه میزان بهینگی جواب تعداد جفت وزیرهایی را که به هم گارد میدهند، محاسبه میکنیم. برای مسئله ۸ وزیر در بدترین حالت هر وزیر با همه وزیرهای دیگر گارد میدهد (فرض کنید همه وزیرها در یک سطر قرار گیرند). در این حالت حداکثر تعداد جفت وزیرهایی که به همگدیکر کارد میدهند ۲۸ جفت است:
۷ + ۶ + ۵ + ۴ +۳ + ۲ + ۱
در حالت کلی برای مسئله n وزیر حداکثر تعداد جفت وزیرهایی که به همدیگر گارد میدهند به صورت زیر محاسبه میشود:
۱+ ۲ +.. +(n-۱) = (n * (n-۱)) /۲
Fitness[i] =1 – (Guard(chromosome[i])) / MaxGuards
MaxGuards
Guard(chromosome[i])
راهکاری که برای حل یک مسئله با الگوریتم ژنتیک استفاده می شود تکامل می یابد. الگوریتم ژنتیک مثل هر الگوریتم بهینه سازی دیگر با تعریف متغیرهای بهینه سازی آغاز می شود و مانند الگوریتم های بهنیه سازی دیگر نیز خاتمه می یابد یعنی با تست همگرایی.
یک الگوریتم GA دارای پارامترهای زیر است:
الگوریتم GA به صورت زیر کار می کند:
در crossover یکنواخت بیتها بصورت یکنواخت از والدین انتخاب می شوند.
تابع fitness معیاری برای رتبه بندی فرضیه هاست که کمک میکند تا فرضیه های برتر برای نسل بعدی جمعیت انتخاب شوند. نحوه انتخاب این تابع بسته به کاربر مورد نظر دارد
در روش معرفی شده در الگوریتم ساده GA احتمال انتخاب یک فرضیه برای استفاده در جمعیت بعدی بستگی به نسبت fitness آن به fitness بقیه اعضا دارد. این روش Roulette Wheel selectionنامیده میشود.
روش جستجوی GA با روشهای دیگر مثل شبکه های عصبی تفاوت دارد:
در شبکه عصبی روش Gradient descent بصورت هموار از فرضیه ای به فرضیه مشابه دیگری حرکت میکند در حالیکه GA ممکن است بصورت ناگهانی فرضیه والد را با فرزندی جایگزین نماید که تفاوت اساسی با والد آن داشته باشد.از اینرو احتمال گیر افتادن GA در مینیمم محلی کاهش می یابد. با این وجود GA با مشکل دیگری روبروست که crowding نامیده میشود crowding پدیده ای است که در آن عضوی که سازگاری بسیاربیشتری از بقیه افراد جمعیت دارد بطور مرتب تولید نسل کرده و با تولید اعضای مشابه درصد عمده ای از جمعیت را اشغال میکند. راه حل رفع مشکل Crowdingاستفاده از ranking برای انتخاب نمونه ها است، با اختصاص رتبه به فرضیه ای که بسیار بهتر از بقیه عمل میکند.
بدین ترتیب دیدیم که مسیر میان اجزای الگوریتم ژنتیک به ترتیب زیر است:
ژن عددی از ۰ تا n-1 است در ۸ وزیر n برابر با ۸ است بنابراین ژن عددی از ۰ تا ۷ می شود و کروموزوم آرایه ای از ژن هاست. که می تواند پاسخ مسئله باشد.
جمعیت هر نسل می تواند تعداد کروموزوم ها را تعیین کند.
جمعیت اولیه از انتخاب رندومی از کروموزوم ها ایجاد می شود. تعداد نسل هایی که برای همگرایی مورد نیاز است به جمعیت تصادفی اولیه بستگی دارد.
برای پیدا کردن هزینه مربوط به هر کروموزوم یک تابع هزینه تعریف می شود. نتیجه تابع هزینه یک cost value است که در نهایت میانگین cost valueهای هر نسل به نتیجه مطلوب نزدیک می شود.
کروموزوم هایی که فیتنس بالاتری (هزینه پایین تر) دارند برای تولید نسل بعدی استفاده می شوند.
در فرایند cross over فرزندان توسط والدین تولید می شوند که ترکیب آنها شامل ترکیب ژن های آنهاست. اگر نسل جدید حاوی کروموزومی باشد که نزدیک یا برابر با نتایج مطلوب باشد آنگاه مسئله حل شده است. در غیر اینصورت فرایند قبلی در نسل جدید هم پیاده سازی می شود مانند فرایندی که برای والدین آنها اتفاق افتاد. تا زمانی که به راه حل مناسب برسیم این روال ادامه دارد.
در شطرنج وزیر می تواند هر طور که مایل بود حرکت کند افقی عمودی یا در قطر. صفحه شطرنج ۸ در ۸ است یعنی ۸ سطر و ۸ ستون دارد . در مسئله ۸ وریز استاندارد به دنبال این هستیم که چگونه ۸ وزیر در خانه های جدول به گونه ای قرار بگیرند که هیچ یک دیگری را تهدید نکنند. در اینجا با الگوریتم ژنتیک این کار را انجام می دهیم.
برای تولید فرزندان از والیدن نیاز به crossover داریم که تصمیم می گیرد از دو والدین کدام ژن باید انتخاب شود.
مسئله چند وزیر قسمت ۱
مسئله چند وزیر قسمت ۲
مسئله چند وزیر قسمت ۳
مسئله چند وزیر قسمت ۴
فایل PDF – در ۱۴ صفحه- نویسنده : Omar Sultan Al-Kadi
A GABOR FILTER TEXTURE ANALYSIS APPROACH FOR HISTOPATHOLOGICAL BRAIN TUMOUR SUBTYPE DISCRIMINATION
پسورد فایل : behsanandish.com
فایل PDF – در ۵ صفحه- نویسنده : Neelu Arora , Mrs. G. Sarvani
A Review Paper on Gabor Filter Algorithm & Its Applications
پسورد فایل : behsanandish.com
Abstract -The performance of a number of texture feature operators is evaluated. The features are all based on the local spectrum which is obtained by a bank of Gabor filters. The comparison is made using a quantitative method which is based on Fisher’s criterion. It is shown that, in general, the discrimination effectiveness of the features increases with the amount of post-Gabor processing.
فایل PDF – در ۶ صفحه- نویسنده : P. Kruizinga, N. Petkov and S.E. Grigorescu
Comparison of texture features based on Gabor filters
پسورد فایل : behsanandish.com
Abstract—Despite the considerable amount of research work on the application of Gabor filters in pattern classification, their design and selection have been mostly done on a trial and error basis. Existing techniques are either only suitable for a small number of filters or less problem-oriented. A systematic and general evolutionary Gabor filter optimization (EGFO) approach that yields a more optimal, problem-specific, set of filters is proposed in this study. The EGFO approach unifies filter design with filter selection by integrating Genetic Algorithms (GAs) with an incremental clustering approach. Specifically, filter design is performed using GAs, a global optimization approach that encodes the parameters of the Gabor filters in a chromosome and uses genetic operators to optimize them. Filter selection is performed by grouping together filters having similar characteristics (i.e., similar parameters) using incremental clustering in the parameter space. Each group of filters is represented by a single filter whose parameters correspond to the average parameters of the filters in the group. This step eliminates redundant filters, leading to a compact, optimized set of filters. The average filters are evaluated using an application-oriented fitness criterion based on Support Vector Machines (SVMs). To demonstrate the effectiveness of the proposed framework, we have considered the challenging problem of vehicle detection from gray-scale images. Our experimental results illustrate that the set of Gabor filters, specifically optimized for the problem of vehicle detection, yield better performance than using traditional filter banks.
فایل PDF – در ۸ صفحه- نویسنده : Zehang Sun, George Bebis and Ronald Miller
Evolutionary Gabor Filter Optimization with Application to Vehicle Detection
پسورد فایل : behsanandish.com
Abstract— In this paper, a novel method for expression- insensitive face recognition is proposed from only a 2D single image in a gallery including any facial expressions. A 3D Generic Elastic Model (3D GEM) is used to reconstruct a 3D model of each human face in the present database using only a single 2D frontal image with/without facial expressions. Then, the rigid parts of the face are extracted from both the texture and reconstructed depth based on 2D facial land-marks. Afterwards, the Gabor filter bank was applied to the extracted rigid-part of the face to extract the feature vectors from both texture and reconstructed depth images. Finally, by combining 2D and 3D feature vectors, the final feature vectors are generated and classified by the Support Vector Machine (SVM). Favorable outcomes were acquired to handle expression changes on the available image database based on the proposed method compared to several state-of-the-arts in expression-insensitive face recognition.
Keywords—Face recognition; 3D shape recovery; Gesture and Behavior Analysis.
فایل PDF – در ۶ صفحه- نویسنده : Ali Moeini, Hossein Moeini, Karim Faez
پسورد فایل : behsanandish.com
Content Based Image Retrieval (CBIR) is now a widely investigated issue that aims at allowing users of multimedia information systems to automatically retrieve images coherent with a sample image. A way to achieve this goal is the computation of image features such as the color, texture, shape, and position of objects within images, and the use of those features as query terms. We propose to use Gabor filtration properties in order to find such appropriate features. The article presents multichannel Gabor filtering and a hierarchical image representation. Then a salient (characteristic) point detection algorithm is presented so that texture parameters are computed only in a neighborhood of salient points. We use Gabor texture features as image content descriptors and efficiently emply them to retrieve images.
Keywords: Gabor filters, image retrieval, texture feature extraction, hierarchical representation
فایل PDF – در ۱۰ صفحه- نویسنده : TOMASZ ANDRYSIAK, MICHAŁ CHORA´ S
IMAGE RETRIEVAL BASED ON HIERARCHICAL GABOR FILTERS
پسورد فایل : behsanandish.com
Abstract. Aiming at the problem of multi-category iris recognition, there proposes a method of iris recognition algorithm based on adaptive Gabor filter. Use DE-PSO to adaptive optimize the Gabor filter parameters. DE-PSO is composed of particle swarm optimization and differential evolution algorithm. Use 16 groups of 2D-Gabor filters with different frequencies and directions to process iris images. According to the direction and frequency of maximum response amplitude, transform iris features into 512-bit binary feature encoding. Calculate the Hamming distance of feature code and compare with the classification threshold, determine iris the type of iris. Experiment on a variety of iris databases with multiple Gabor filter algorithms, the results showed that this algorithm has higher recognition rate, the ROC curve is closer to the coordinate axis and the robustness is better, compare with other Gabor filter algorithm.
Keywords: Iris recognition Gabor filter Particle swarm optimization Differential evolutionFeature encodingHamming distance
فایل PDF – در ۸ صفحه- نویسنده : Shuai Liu, Yuanning Liu, Xiaodong Zhu, Guang Huo, Jingwei Cui, and Yihao Chen
Iris Recognition Based On Adaptive Gabor Filter
پسورد فایل : behsanandish.com
فایل PDF – در ۱۲ صفحه- نویسنده : Urszula Marmol
USE OF GABOR FILTERS FOR TEXTURE CLASSIFICATION OF AIRBORNE IMAGES AND LIDAR DATA
پسورد فایل : behsanandish.com
سید مجتبی بنائی ۱۳۹۴/۰۵/۱۶ مفاهیم پایه نظرات ۳۱,۲۲۰ مشاهده
یکی از الگوریتم ها و روشهای بسیار رایج در حوزه دسته بندی داده ها، الگوریتم SVM یا ماشین بردار پشتیبان است که در این مقاله سعی شده است به زبان ساده و به دور از پیچیدگیهای فنی توضیح داده شود.
فرض کنید مجموعه داده ای داریم که ۵۰٪ افراد آن مرد و ۵۰٪ افراد آن زن هستند. این مجموعه داده می تواند مشتریان یک فروشگاه آنلاین باشد. با داشتن یک زیرمجموعه از این داده ها که جنسیت افراد در آن مشخص شده است، می خواهیم قوانینی ایجاد کنیم که به کمک آنها جنسیت بقیه افراد مجموعه را بتوانیم با دقت بالایی تعیین کنیم. تشخیص جنسیت بازدیدکنندگان فروشگاه، باعث می شود بتوانیم تبلیغات جداگانه ای را برای زنان و مردان نمایش دهیم و سودآوری فروشگاه را بالا ببریم . این فرآیند را در علم تحلیل داده، دسته بندی می نامیم .
برای توضیح کامل مسأله، فرض کنید دو پارامتری که قرار است جنسیت را از روی آنها تعیین کنیم، قد و طول موی افراد است . نمودار پراکنش قد و طول افراد در زیر نمایش داده شده است که در آن جنسیت افراد با دو نماد مربع (مرد) و دایره (زن) به طور جداگانه نمایش داده شده است .
با نگاه به نمودار فوق، حقایق زیر به سادگی قابل مشاهده است :
اگر یک داده جدید با قد ۱۸۰cm و طول موی ۴cm به ما داده شود، بهترین حدس ما برای ماشینی این شخص، دسته مردان خواهد بود .
بردارهای پشتیبان به زبان ساده، مجموعه ای از نقاط در فضای n بعدی داده ها هستند که مرز دسته ها را مشخص می کنند و مرزبندی و دسته بندی داده ها براساس آنها انجام می شود و با جابجایی یکی از آنها، خروجی دسته بندی ممکن است تغییر کند . به عنوان مثال در شکل فوق ، بردار (۴۵,۱۵۰) عضوی از بردار پشتیبان و متعلق به یک زن است . در فضای دوبعدی ،بردارهای پشتیبان، یک خط، در فضای سه بعدی یک صفحه و در فضای n بعدی یک ابر صفحه را شکل خواهند داد.
در SVM فقط داده های قرار گرفته در بردارهای پشتیبان مبنای یادگیری ماشین و ساخت مدل قرار می گیرند و این الگوریتم به سایر نقاط داده حساس نیست و هدف آن هم یافتن بهترین مرز در بین داده هاست به گونه ای که بیشترین فاصله ممکن را از تمام دسته ها (بردارهای پشتیبان آنها) داشته باشد .
به ازای داده های موجود در مثال فوق، تعداد زیادی مرزبندی می توانیم داشته باشیم که سه تا از این مرزبندی ها در زیر نمایش داده شده است.
سوال اینجاست که بهترین مرزبندی در این مسأله کدام خط است ؟
یک راه ساده برای انجام اینکار و ساخت یک دسته بند بهینه ، محاسبه فاصله ی مرزهای به دست آمده با بردارهای پشتیبان هر دسته (مرزی ترین نقاط هر دسته یا کلاس) و در نهایت انتخاب مرزیست که از دسته های موجود، مجموعاً بیشترین فاصله را داشته باشد که در شکل فوق خط میانی ، تقریب خوبی از این مرز است که از هر دو دسته فاصله ی زیادی دارد. این عمل تعیین مرز و انتخاب خط بهینه (در حالت کلی ، ابر صفحه مرزی) به راحتی با انجام محاسبات ریاضی نه چندان پیچیده قابل پیاده سازی است .
اگر داده ها به صورت خطی قابل تفکیک باشند، الگوریتم فوق می تواند بهترین ماشین را برای تفکیک داده ها و تعیین دسته یک رکورد داده، ایجاد کند اما اگر داده ها به صورت خطی توزیع شده باشند (مانند شکل زیر )، SVM را چگونه تعیین کنیم ؟
در این حالت، ما نیاز داریم داده ها را به کمک یک تابع ریاضی (Kernel functions) به یک فضای دیگر ببریم (نگاشت کنیم ) که در آن فضا، داده ها تفکیک پذیر باشند و بتوان SVM آنها را به راحتی تعیین کرد. تعیین درست این تابع نگاشت در عملکرد ماشین بردار پشتیبان موثر است که در ادامه به صورت مختصر به آن اشاره شده است.
با فرض یافتن تابع تبدیل برای مثال فوق، فضای داده ما به این حالت تبدیل خواهد شد :
در این فضای تبدیل شده، یافتن یک SVM به راحتی امکان پذیر است .
همانطور که اشاره شد،ماشین بردار پشتیبان یا SVM داده ها را با توجه به دسته های از پیش تعیین شده آنها به یک فضای جدید می برد به گونه ای که داده ها به صورت خطی (یا ابر صفحه ) قابل تفکیک و دسته بندی باشند و سپس با یافتن خطوط پشتیبان (صفحات پشتیبان در فضای چند بعدی) ، سعی در یافتن معادله خطی دارد که بیشترین فاصله را بین دو دسته ایجاد می کند.
در شکل زیر داده ها در دو دوسته آبی و قرمز نمایش داده شده اند و خطوط نقطه چین ، بردار های پشتیبان متناظر با هر دسته را نمایش می دهند که با دایره های دوخط مشخص شده اند و خط سیاه ممتد نیز همان SVM است . بردار های پشتیبان هم هر کدام یک فرمول مشخصه دارند که خط مرزی هر دسته را توصیف می کند.
برای استفاده از ماشین بردار پشتیبان در پایتون، توصیه بنده استفاده از کتابخانه یادگیری ماشین پایتون به نام scikit–learn است که تمام کرنل ها و توابع نگاشت را به صورت آماده شده دارد. سه تا تابعSVC , NuSVC , LinearSVC وظیفه اصلی دسته بندی را برعهده دارند . (SVC = Support Vector Classifier) . نمونه ای از دسته بندی با این توابع را در زیر می توانید مشاهده کنید :
برای استفاده از SVM در مورد داده های واقعی ، چندین نکته را باید رعایت کنید تا نتایج قابل قبولی را بگیرید
با این وجود، SVM ها دارای یک شالوده نظری منسجم بوده و جواب های تولید شده توسط آنها ، سراسری و یکتا می باشد. امروزه ماشینهای بردار پشتیبان، به متداول ترین تکنیک های پیش بینی در داده کاوی تبدیل شده اند.
ماشینهای بردار پشتیبان، الگوریتم های بسیار قدرتمندی در دسته بندی و تفکیک داده ها هستند بخصوص زمانی که با سایر روشهای یادگیری ماشین مانند روش جنگل تصادفی تلفیق شوند. این روش برای جاهایی که با دقت بسیار بالا نیاز به ماشینی داده ها داریم، به شرط اینکه توابع نگاشت را به درستی انتخاب کنیم، بسیار خوب عمل می کند .
ساختار اصلی این نوشتار از روی یک مقاله سایت آنالیتیکزویدیا برداشته شده است و برای دو بخش پایانی مقاله هم از کتاب «داده کاوی پیشرفته : مفاهیم و الگوریتم ها» دکتر شهرابی استفاده شده است .
SVM یک مدل یادگیری نظارت شده است.
پس قبل از این که به سراغ آن برویم باید یک مجموعه داده(Dataset) که از قبل برچسبگذاری شده(Labeled) را داشته باشیم.
مثال: فرض کنیم من صاحب یک کسبوکار هستم و هر روز تعداد زیادی ایمیل از مشتریها دریافت میکنم. بعضی از این ایمیلها شکایتها و نارضایتیهایی هستند که من هرچه سریعتر باید به آنها پاسخ بدهم و به آنها رسیدگی کنم. در غیر این صورت کسبوکار من با ضرر روبرو خواهد شد.
من به دنبال راهی هستم که این ایمیلها را هرچه سریعتر تشخیص بدهم(پیدا کنم) و پاسخ آنها را زودتر از بقیه ارسال کنم.
رویکرد اول: من میتوانم برچسبهایی با عنوانهای: اورژانسی، شکایت و راهنمایی در جیمیل(GMail) خود ایجاد کنم.
اشکال این روش این است که من باید مدتی فکر کنم و همه کلمههای کلیدی(Keyword) بالغوه که مشتریهای عصبانی ممکن است در ایمیلهای خود استفاده کنند را پیدا کنم. طبیعی است که بعضی از آنها را هم از قلم انداخته شوند. با گذشت زمان هم لیست این کلمهها به احتمال زیاد شلوغ و مدیریت کردن آنها به کار مشکلی تبدیل میشود.
رویکرد دوم: من میتوانم از یک الگوریتم یادگیری ماشین نظارت شده استفاده کنم.
قدم اول: به تعدادی ایمیل نیاز دارم.(هرچه بیشتر بهتر)
قدم دوم: عنوان ایمیلهای قدم اول رو میخوانم و آنها را در یکی از دو گروه «شکایت است» و یا «شکایت نیست» طبقهبندی میکنم. اینجوری میتوانم ایمیلها را برچسب گذاری کنم.
قدم سوم: روی این مجموعه داده، مدلی را آموزش میدهم.
قدم چهارم: کیفیت یا صحت پیشبینی های مدل آموزش دادهشده را ارزیابی میکنم.(با استفاده از روش Cross Validation)
قدم پنجم: از این مدل برای پیشبینی این که ایمیلهای جدیدی که رسیدهاند، شکایت هستند یا نه، استفاده میکنم.
در این رویکرد اگر مدل را با تعداد ایمیلهای زیادی آموزش داده باشیم، مدل عملکرد خوبی را نشون میدهد. SVM فقط یکی از روشهایی هست که ما میتوانیم برای یادگرفتن از دادههای موجود و پیشبینی کردن، استفاده کنیم.
همچنین باید به این نکته هم توجه داشته باشیم که قدم دوم اهمیت زیادی دارد و دلیلش این است که اگر در شروع کار، ایمیلهای برچسبگذاری نشده را به SVM بدهیم، کار خاصی را نمیتواند انجام دهد.
در مثال قبل دیدیم که در قدم سوم یک الگوریتم یادگیری نظارت شده مثل SVM به کمک دادههایی که از قبل برچسبگذاری شدهاند آموزشداده شد. اما برای چه چیزی آموزش داده شد؟ برای این که چیزی را یاد بگیرد.
چه چیزی را یاد بگیرد؟
در مورد SVM، یک مدل خطیرا یاد میگیرد.
مدل خطی چیست؟ اگر بخواهیم به زبان ساده بیان کنیم یک خط است.(و در حالت پیچیدهتر یک ابر صفحه).
اگر دادههای شما خیلی ساده و دو بعدی باشند، در این صورت SVM خطی را یاد میگیرد که آن خط میتواند دادهها را به دو بخش تقسیم کند.
SVM قادر است که خطی را پیدا کند که دادهها را جدا میکند.
خب پس اگر SVM فقط یک خط است، پس چرا ما داریم راجع به مدل خطی صحبت میکنیم؟
برای این که ما همینطوری نمیتوانیم به یک خط چیزی را آموزش بدهیم.
در عوض:
SVM یکی از این الگوریتمها هست که میتواند این کار را انجام دهد.
در شروع این پست من نوشتم که SVM یک مدل یادگیری نظارت شده است، و الآن مینویسم که آن یک الگوریتم است. چه شده؟ از واژه الگوریتم معمولا آزادانه استفاده میشود. برای نمونه، ممکن است که شما جایی بخوانید یا بشنوید که SVM یک الگوریتم یادگیری نظارت شده است. اگر این نکته را در نظر بگیریم که الگوریتم مجموعهای از فعالیتها است که انجام میشوند تا به نتیجه مشخصی دست یابیم، میبینیم که استفاده از این واژه در اینجا صحیح نیست(منظور از واژه الگوریتم اینجا الگوریتمی است که برای آموزش از آن استفاده میکنیم). بهینهسازی متوالی کمینه(Sequential minimal optimization) پر استفاده ترین الگوریتم برای آموزش SVM است. با این حال میتوان از الگوریتمهای دیگری مثل کاهش مختصات(Coordinate descent) هم استفاده کرد. در کل بیشتر به جزییاتی مثل این علاقمند نیستند، در نتیجه ما هم برای سادهتر شدن فقط از واژه الگوریتم SVM استفاده میکنیم(بدون ذکر جزییات الگوریتم آموزشی که استفاده میکنیم).
بعضی وقتها میبینیم که مردم راجع به SVM و بعضی وقتها هم راجع به SVMها صحبت میکنند.
طبق معمول ویکیپدیا در روشن و شفاف کردن چیزها به ما کمک میکند:
در یادگیری ماشینی، ماشینهای بردار پشتیبان (SVMs) مدلهای یادگیری نظارت شده به همراه الگوریتمهای آموزش مربوطههستندکه در تحلیل دادههای استفاده شده در رگرسیون و طبقهبندی از آنها استفاده میشود.(ویکیپدیا)
پس حالا ما این را میدانیم که چندین مدل متعلق به خانواده SVM وجود دارند.
بر اساس ویکیپدیا SVMها همچنین میتوانند برای دو چیز استفاده شوند، طبقهبندی و رگرسیون.
پس گفتن ماشینهای بردار پشتیبان هم دیگه الآن منطقی به نظر میاد. با این وجود این پایان داستان نیست!
در سال ۱۹۵۷ یک مدل خطی ساده به نام پرسپترون توسط فردی به نام فرانک روزنبلت برای طبقهبندی اختراع شد(که در واقع اساس شبکههای عصبی سادهای به نام پرسپترون چند لایه است).
چند سال بعد، واپنیک و چروننکیس مدل دیگری به نام «طبقهبندی کننده حداکث حاشیه» پیشنهاد دادند و همانجا بود که SVM متولد شد.
در سال ۱۹۹۲ واپنیک و همکارانش ایدهای داشتند که یک چیزی به نام کلک کرنل(Kernel Trick) را به روش قبلی اضافه کنند تا به آنها اجازه دهد که حتی دادههایی که به صورت خطی تفکیکپذیر نیستند را هم طبقهبندی کنند.
سرانجام در سال ۱۹۹۵، کورتز و واپنیک، طبقهبندی کننده حاشیه نرم را معرفی کردند که به SVM اجازه میدهد تا بعضی از اشتباهات در طبقهبندی را هم بپذیرد.
پس وقتی که ما از طبقهبندی صحبت میکنیم، چهار ماشین بردار پشتیبان مختلف وجود دارد.
و البته آخرین روش معمولا بیشترین کاربرد را دارد. دلیل اصلی این که قهمیدن SVMها در نگاه اول کمی گیج کننده به نظر میرسد هم همین موضو ع است که آنها از چندین قطعه تسکیل شده اند که در طول زمان به آنها چیزهایی اضافه شده است.
به همین دلیل است که وقتی از یک زبان برنامهنویسی استفاده میکنید میپرسید از کدام کرنل باید استفاده کنیم(بخاطر کرنلهای مختلفی که وجود دارند) و یا کدام مقدار ابرپارامتر C را باید استفاده کنید(برای کنترل تاثیر حاشیه نرم).
در سال ۱۹۹۶، واپنیک و همکارانش، نسخهای از SVM را پیشنهاد دادند که به جای طبقهبندی، عمل رگرسیون را انجام میدهد. این مورد به Support Vector Regression یا SVR معروف است. همانند SVM در این مدل نیز از کلک کرنل و ابرپارامتر C استفاده میشود.
در آینده مقاله سادهای در مورد توضیح چگونگی استفاده از SVR در زبان R خواهم نوشت و آدرس آن را همینجا قرار خواهم داد.
اگر علاقمند هستید که راجع به SVR بیشتر بدانیند، میتوانید به این آموزش خوب که نوشته Smola and Schölkopft است، مراجعه کنید.
در صورتی که مایلید بیشتر راجع به تاریخچه بدانید، میتوانید به مقاله مرور همراه با جزییات از تاریخچه مراجعه کنید.
به دلیل این که SVMها در طبقهبندی خیلی موفق بودند، مردم شروع به فکر کردن راجع به این موضوع کردند که چطور میتوانند از همین منطق در انواع دیگر مسائل استفاده کنند یا این که چطور مشتقات آن را ایجاد کنند. در نتیجه چندین روش مختلف و جالب در خانواده SVM به وجود آمد.
دیدیم که سختی در درک کردن این که SVMها دقیقا چه چیزی هستند، امری طبیعی است. علتش هم این است که چندین SVM برای چندین منظور وجود دارند. مثل همیشه تاریخ به ما اجازه میدهد که دید بهتری راجع به چگونگی به وجود آمدن SVMهایی که امروزه وجود دارند، داشته باشیم.
امیدوارم این مقاله دید وسیعتری از چشمانداز SVM به شما داده باشد و کمک کرده باشد که بهتر این ماشینها را بشناسید و درک کنید.
اگه مایلید که بیشتر راجع به نحوه کار SVM در طبقهبندی بدانید، میتوانید به آموزشهای ریاضی مربوط به آن مراجعه کنید.
مشکل deepfake ما در مورد بدتر شدن است: مهندسان سامسونگ در حال حاضر سرهای سخنگوی واقع گرایانه ای را توسعه داده اند که می تواند از یک تصویر تولید شود، بنابراین AI حتی می تواند کلمات را در دهان مونا لیزا قرار دهد.
الگوریتم های جدید که توسط یک تیم از مرکز AI سامسونگ و موسسه علوم و فناوری Skolkovo توسعه یافته است، هر دو در مسکو به بهترین وجه با انواع تصاویر نمونه گرفته شده در زوایای مختلف کار می کنند، اما آنها می توانند تنها با یک تصویر برای کار کردن، حتی یک نقاشی، کاملا موثر باشند.
مدل جدید نه تنها می تواند از یک پایگاه داده اولیه کوچکتر از تصاویر استفاده کند، هم چنین می تواند طبق نظر محققان پشت آن، فیلم های کامپیوتری را در مدت کوتاه تری تولید کند.
و در حالی که همه انواع برنامه های جالب وجود دارد که از تکنولوژی می توان برای آن استفاده کرد – مانند قرار دادن یک نسخه فوق واقع گرایانه از خودتان در واقعیت مجازی – این نگرانی وجود دارد که فیلم های ویدئویی کاملاً تقلبی را می توان از یک تصویر کوچک تولید کرد.
محققان در مقاله خود نوشتند: “چنین توانایی دارای کاربردهای عملی برای تلوزیون است،، از جمله ویدئو کنفرانس و بازی های چند نفره، و همچنین صنعت جلوه های ویژه.”
سیستم با آموزش خود در مجموعه ای از ویژگی های چهره برجسته کار می کند که پس از آن می تواند دستکاری شود. بسیاری از آموزش ها بر روی یک پایگاه داده قابل دسترس عمومی از بیش از ۷۰۰۰ تصویر از افراد مشهور، به نام VoxCeleb، و همچنین تعداد زیادی از فیلم ها از صحبت کردن مردم با دوربین انجام شده است.
از آنجا که این رویکرد جدید کار گذشته را با آموزش دادن به شبکه عصبی در مورد چگونگی تبدیل ویژگی های چهره برجسته به فیلم های متحرک با نگاه واقع گرایانه، بیش از چندین بار، بهبود می دهد. سپس این دانش می تواند بر روی چند عکس (یا فقط یک عکس) از کسی که AI قبل از آن هرگز ندیده است، مستقر شود.
این سیستم از یک شبکه عصبی کانولوشن، یک نوع شبکه عصبی بر اساس فرآیندهای بیولوژیکی در قشر بینایی حیوان استفاده می کند. این منحصراً در پردازش پشته های تصاویر و شناخت آنچه در آنها متخصص است – “convolution” اساساً بخش هایی از تصاویر را شناسایی و استخراج می کند (آن همچنین برای نمونه، در جستجوهای تصویری در وب و تکنولوژی خودرو خود راننده استفاده می شود).
همانند سایر ابزارهای تولید چهره هوش مصنوعی گرا که ما شاهد آن هستیم، آخرین مرحله در این فرآیند برای “واقع گرایی کامل” مورد بررسی قرار می گیرد – از لحاظ فنی یک مدل مولد رقابتی. هر فریمهایی که بیش از حد عجیب و غریب و غیر طبیعی هستند، دوباره برش داده و ارائه میشوند، ویدئو نهایی با کیفیت بهتر را به نمایش میگذارند.
این تکنیک موفق به غلبه بر دو مشکل بزرگ در سرهای سخنگوی تولید شده مصنوعی شده است: پیچیدگی سرها (با دهان ها، مو، چشم ها و غیره) و توانایی ما در به راحتی کشف کردن یک سر جعلی (به عنوان مثال، چهره های شخصیتی در میان سخت ترین عناصر برای طراحان بازی ویدیویی برای درست کردن هستند).
سیستم و دیگران مانند آن، برای بهتر شدن محدود می شوند به طوریکه الگوریتم ها بهبود یابند و مدل های آموزشی موثرتر شوند – و این بدان معنی است که مجموعه ای کامل از سوالات در مورد اینکه آیا می توانید به آنچه که می بینید یا می شنوید اعتماد کنید، اگر در فرم دیجیتال باشد.
از طرف دیگر، ستاره های تلویزیون و فیلم مورد علاقه شما هرگز نباید رشد کنند و بمیرند – AI شبیه به این است که به زودی به اندازه کافی هوشمند خواهد بود تا نمایش های کاملا واقعی را فقط از چند عکس تولید کند و همچنین در زمان ذخیره.
سامانه جامع پلاکخوان خودرو (کنترل تردد بهسان) سامانهای کاملا خودکار است که می تواند به تنهایی در امر ورود و خروج خودروها در جاده ها، در پارکینگ ها، تعمیرگاه ها و غیره نظارت و مدیریت نماید.
سامانه جامع مدیریت باسکول (بهسان توزین)، با بهرهگیری از تکنیکهای روز برنامهنویسی، قادر به انجام کلیهی امور باسکولها و همچنین تشخیص خودکار پلاک خودروهای توزین شده میباشد.
شرکت بهسان اندیش موفق به تولید محصولات زیر با بهره گیری از قابلیت پلاک خوان گردیده است.
تلفن: ۹۱۰۰۱۸۸۱(۰۳۱)
بازرگانی و فروش:۰۹۳۶۷۳۷۸۴۶۹
پشتیبانی: ۰۹۱۱۷۶۱۰۲۷۵
از شنبه تا چهارشنبه : ۰۹:۰۰ تا ۱۷:۰۰
پنچ شنبه ها : از ۰۹:۰۰ تا ۱۳:۳۰